aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/src/gprs/gb_proxy_tlli.c
diff options
context:
space:
mode:
Diffstat (limited to 'openbsc/src/gprs/gb_proxy_tlli.c')
-rw-r--r--openbsc/src/gprs/gb_proxy_tlli.c398
1 files changed, 199 insertions, 199 deletions
diff --git a/openbsc/src/gprs/gb_proxy_tlli.c b/openbsc/src/gprs/gb_proxy_tlli.c
index 70f2bfb62..14ce7d86b 100644
--- a/openbsc/src/gprs/gb_proxy_tlli.c
+++ b/openbsc/src/gprs/gb_proxy_tlli.c
@@ -32,140 +32,140 @@
#include <osmocom/core/rate_ctr.h>
#include <osmocom/core/talloc.h>
-struct gbproxy_tlli_info *gbproxy_tlli_info_by_tlli(struct gbproxy_peer *peer,
+struct gbproxy_link_info *gbproxy_link_info_by_tlli(struct gbproxy_peer *peer,
uint32_t tlli)
{
- struct gbproxy_tlli_info *tlli_info;
+ struct gbproxy_link_info *link_info;
struct gbproxy_patch_state *state = &peer->patch_state;
- llist_for_each_entry(tlli_info, &state->enabled_tllis, list)
- if (tlli_info->tlli.current == tlli ||
- tlli_info->tlli.assigned == tlli)
- return tlli_info;
+ llist_for_each_entry(link_info, &state->enabled_tllis, list)
+ if (link_info->tlli.current == tlli ||
+ link_info->tlli.assigned == tlli)
+ return link_info;
return NULL;
}
-struct gbproxy_tlli_info *gbproxy_tlli_info_by_ptmsi(
+struct gbproxy_link_info *gbproxy_link_info_by_ptmsi(
struct gbproxy_peer *peer,
uint32_t ptmsi)
{
- struct gbproxy_tlli_info *tlli_info;
+ struct gbproxy_link_info *link_info;
struct gbproxy_patch_state *state = &peer->patch_state;
- llist_for_each_entry(tlli_info, &state->enabled_tllis, list)
- if (tlli_info->tlli.ptmsi == ptmsi)
- return tlli_info;
+ llist_for_each_entry(link_info, &state->enabled_tllis, list)
+ if (link_info->tlli.ptmsi == ptmsi)
+ return link_info;
return NULL;
}
-struct gbproxy_tlli_info *gbproxy_tlli_info_by_any_sgsn_tlli(
+struct gbproxy_link_info *gbproxy_link_info_by_any_sgsn_tlli(
struct gbproxy_peer *peer,
uint32_t tlli)
{
- struct gbproxy_tlli_info *tlli_info;
+ struct gbproxy_link_info *link_info;
struct gbproxy_patch_state *state = &peer->patch_state;
/* Don't care about the NSEI */
- llist_for_each_entry(tlli_info, &state->enabled_tllis, list)
- if (tlli_info->sgsn_tlli.current == tlli ||
- tlli_info->sgsn_tlli.assigned == tlli)
- return tlli_info;
+ llist_for_each_entry(link_info, &state->enabled_tllis, list)
+ if (link_info->sgsn_tlli.current == tlli ||
+ link_info->sgsn_tlli.assigned == tlli)
+ return link_info;
return NULL;
}
-struct gbproxy_tlli_info *gbproxy_tlli_info_by_sgsn_tlli(
+struct gbproxy_link_info *gbproxy_link_info_by_sgsn_tlli(
struct gbproxy_peer *peer,
uint32_t tlli, uint32_t sgsn_nsei)
{
- struct gbproxy_tlli_info *tlli_info;
+ struct gbproxy_link_info *link_info;
struct gbproxy_patch_state *state = &peer->patch_state;
- llist_for_each_entry(tlli_info, &state->enabled_tllis, list)
- if ((tlli_info->sgsn_tlli.current == tlli ||
- tlli_info->sgsn_tlli.assigned == tlli) &&
- tlli_info->sgsn_nsei == sgsn_nsei)
- return tlli_info;
+ llist_for_each_entry(link_info, &state->enabled_tllis, list)
+ if ((link_info->sgsn_tlli.current == tlli ||
+ link_info->sgsn_tlli.assigned == tlli) &&
+ link_info->sgsn_nsei == sgsn_nsei)
+ return link_info;
return NULL;
}
-struct gbproxy_tlli_info *gbproxy_tlli_info_by_imsi(
+struct gbproxy_link_info *gbproxy_link_info_by_imsi(
struct gbproxy_peer *peer,
const uint8_t *imsi,
size_t imsi_len)
{
- struct gbproxy_tlli_info *tlli_info;
+ struct gbproxy_link_info *link_info;
struct gbproxy_patch_state *state = &peer->patch_state;
if (!gprs_is_mi_imsi(imsi, imsi_len))
return NULL;
- llist_for_each_entry(tlli_info, &state->enabled_tllis, list) {
- if (tlli_info->imsi_len != imsi_len)
+ llist_for_each_entry(link_info, &state->enabled_tllis, list) {
+ if (link_info->imsi_len != imsi_len)
continue;
- if (memcmp(tlli_info->imsi, imsi, imsi_len) != 0)
+ if (memcmp(link_info->imsi, imsi, imsi_len) != 0)
continue;
- return tlli_info;
+ return link_info;
}
return NULL;
}
-void gbproxy_tlli_info_discard_messages(struct gbproxy_tlli_info *tlli_info)
+void gbproxy_link_info_discard_messages(struct gbproxy_link_info *link_info)
{
struct msgb *msg, *nxt;
- llist_for_each_entry_safe(msg, nxt, &tlli_info->stored_msgs, list) {
+ llist_for_each_entry_safe(msg, nxt, &link_info->stored_msgs, list) {
llist_del(&msg->list);
msgb_free(msg);
}
}
-void gbproxy_delete_tlli_info(struct gbproxy_peer *peer,
- struct gbproxy_tlli_info *tlli_info)
+void gbproxy_delete_link_info(struct gbproxy_peer *peer,
+ struct gbproxy_link_info *link_info)
{
struct gbproxy_patch_state *state = &peer->patch_state;
- gbproxy_tlli_info_discard_messages(tlli_info);
+ gbproxy_link_info_discard_messages(link_info);
- llist_del(&tlli_info->list);
- talloc_free(tlli_info);
+ llist_del(&link_info->list);
+ talloc_free(link_info);
state->enabled_tllis_count -= 1;
peer->ctrg->ctr[GBPROX_PEER_CTR_TLLI_CACHE_SIZE].current =
state->enabled_tllis_count;
}
-void gbproxy_delete_tlli_infos(struct gbproxy_peer *peer)
+void gbproxy_delete_link_infos(struct gbproxy_peer *peer)
{
- struct gbproxy_tlli_info *tlli_info, *nxt;
+ struct gbproxy_link_info *link_info, *nxt;
struct gbproxy_patch_state *state = &peer->patch_state;
- llist_for_each_entry_safe(tlli_info, nxt, &state->enabled_tllis, list)
- gbproxy_delete_tlli_info(peer, tlli_info);
+ llist_for_each_entry_safe(link_info, nxt, &state->enabled_tllis, list)
+ gbproxy_delete_link_info(peer, link_info);
OSMO_ASSERT(state->enabled_tllis_count == 0);
OSMO_ASSERT(llist_empty(&state->enabled_tllis));
}
-void gbproxy_attach_tlli_info(struct gbproxy_peer *peer, time_t now,
- struct gbproxy_tlli_info *tlli_info)
+void gbproxy_attach_link_info(struct gbproxy_peer *peer, time_t now,
+ struct gbproxy_link_info *link_info)
{
struct gbproxy_patch_state *state = &peer->patch_state;
- tlli_info->timestamp = now;
- llist_add(&tlli_info->list, &state->enabled_tllis);
+ link_info->timestamp = now;
+ llist_add(&link_info->list, &state->enabled_tllis);
state->enabled_tllis_count += 1;
peer->ctrg->ctr[GBPROX_PEER_CTR_TLLI_CACHE_SIZE].current =
state->enabled_tllis_count;
}
-int gbproxy_remove_stale_tlli_infos(struct gbproxy_peer *peer, time_t now)
+int gbproxy_remove_stale_link_infos(struct gbproxy_peer *peer, time_t now)
{
struct gbproxy_patch_state *state = &peer->patch_state;
int exceeded_max_len = 0;
@@ -179,27 +179,27 @@ int gbproxy_remove_stale_tlli_infos(struct gbproxy_peer *peer, time_t now)
check_for_age = peer->cfg->tlli_max_age > 0;
for (; exceeded_max_len > 0; exceeded_max_len--) {
- struct gbproxy_tlli_info *tlli_info;
+ struct gbproxy_link_info *link_info;
OSMO_ASSERT(!llist_empty(&state->enabled_tllis));
- tlli_info = llist_entry(state->enabled_tllis.prev,
- struct gbproxy_tlli_info,
+ link_info = llist_entry(state->enabled_tllis.prev,
+ struct gbproxy_link_info,
list);
LOGP(DGPRS, LOGL_INFO,
"Removing TLLI %08x from list "
"(stale, length %d, max_len exceeded)\n",
- tlli_info->tlli.current, state->enabled_tllis_count);
+ link_info->tlli.current, state->enabled_tllis_count);
- gbproxy_delete_tlli_info(peer, tlli_info);
+ gbproxy_delete_link_info(peer, link_info);
deleted_count += 1;
}
while (check_for_age && !llist_empty(&state->enabled_tllis)) {
time_t age;
- struct gbproxy_tlli_info *tlli_info;
- tlli_info = llist_entry(state->enabled_tllis.prev,
- struct gbproxy_tlli_info,
+ struct gbproxy_link_info *link_info;
+ link_info = llist_entry(state->enabled_tllis.prev,
+ struct gbproxy_link_info,
list);
- age = now - tlli_info->timestamp;
+ age = now - link_info->timestamp;
/* age < 0 only happens after system time jumps, discard entry */
if (age <= peer->cfg->tlli_max_age && age >= 0) {
check_for_age = 0;
@@ -209,35 +209,35 @@ int gbproxy_remove_stale_tlli_infos(struct gbproxy_peer *peer, time_t now)
LOGP(DGPRS, LOGL_INFO,
"Removing TLLI %08x from list "
"(stale, age %d, max_age exceeded)\n",
- tlli_info->tlli.current, (int)age);
+ link_info->tlli.current, (int)age);
- gbproxy_delete_tlli_info(peer, tlli_info);
+ gbproxy_delete_link_info(peer, link_info);
deleted_count += 1;
}
return deleted_count;
}
-struct gbproxy_tlli_info *gbproxy_tlli_info_alloc( struct gbproxy_peer *peer)
+struct gbproxy_link_info *gbproxy_link_info_alloc( struct gbproxy_peer *peer)
{
- struct gbproxy_tlli_info *tlli_info;
+ struct gbproxy_link_info *link_info;
- tlli_info = talloc_zero(peer, struct gbproxy_tlli_info);
- tlli_info->tlli.ptmsi = GSM_RESERVED_TMSI;
- tlli_info->sgsn_tlli.ptmsi = GSM_RESERVED_TMSI;
+ link_info = talloc_zero(peer, struct gbproxy_link_info);
+ link_info->tlli.ptmsi = GSM_RESERVED_TMSI;
+ link_info->sgsn_tlli.ptmsi = GSM_RESERVED_TMSI;
- INIT_LLIST_HEAD(&tlli_info->stored_msgs);
+ INIT_LLIST_HEAD(&link_info->stored_msgs);
- return tlli_info;
+ return link_info;
}
-void gbproxy_detach_tlli_info(
+void gbproxy_detach_link_info(
struct gbproxy_peer *peer,
- struct gbproxy_tlli_info *tlli_info)
+ struct gbproxy_link_info *link_info)
{
struct gbproxy_patch_state *state = &peer->patch_state;
- llist_del(&tlli_info->list);
+ llist_del(&link_info->list);
OSMO_ASSERT(state->enabled_tllis_count > 0);
state->enabled_tllis_count -= 1;
@@ -245,17 +245,17 @@ void gbproxy_detach_tlli_info(
state->enabled_tllis_count;
}
-void gbproxy_update_tlli_info(struct gbproxy_tlli_info *tlli_info,
+void gbproxy_update_link_info(struct gbproxy_link_info *link_info,
const uint8_t *imsi, size_t imsi_len)
{
if (!gprs_is_mi_imsi(imsi, imsi_len))
return;
- tlli_info->imsi_len = imsi_len;
- tlli_info->imsi =
- talloc_realloc_size(tlli_info, tlli_info->imsi, imsi_len);
- OSMO_ASSERT(tlli_info->imsi != NULL);
- memcpy(tlli_info->imsi, imsi, imsi_len);
+ link_info->imsi_len = imsi_len;
+ link_info->imsi =
+ talloc_realloc_size(link_info, link_info->imsi, imsi_len);
+ OSMO_ASSERT(link_info->imsi != NULL);
+ memcpy(link_info->imsi, imsi, imsi_len);
}
void gbproxy_reassign_tlli(struct gbproxy_tlli_state *tlli_state,
@@ -275,16 +275,16 @@ void gbproxy_reassign_tlli(struct gbproxy_tlli_state *tlli_state,
}
uint32_t gbproxy_map_tlli(uint32_t other_tlli,
- struct gbproxy_tlli_info *tlli_info, int to_bss)
+ struct gbproxy_link_info *link_info, int to_bss)
{
uint32_t tlli = 0;
struct gbproxy_tlli_state *src, *dst;
if (to_bss) {
- src = &tlli_info->sgsn_tlli;
- dst = &tlli_info->tlli;
+ src = &link_info->sgsn_tlli;
+ dst = &link_info->tlli;
} else {
- src = &tlli_info->tlli;
- dst = &tlli_info->sgsn_tlli;
+ src = &link_info->tlli;
+ dst = &link_info->sgsn_tlli;
}
if (src->current == other_tlli)
tlli = dst->current;
@@ -326,78 +326,78 @@ static void gbproxy_validate_tlli(struct gbproxy_tlli_state *tlli_state,
tlli_state->assigned = 0;
}
-static void gbproxy_touch_tlli_info(struct gbproxy_peer *peer,
- struct gbproxy_tlli_info *tlli_info,
+static void gbproxy_touch_link_info(struct gbproxy_peer *peer,
+ struct gbproxy_link_info *link_info,
time_t now)
{
- gbproxy_detach_tlli_info(peer, tlli_info);
- gbproxy_attach_tlli_info(peer, now, tlli_info);
+ gbproxy_detach_link_info(peer, link_info);
+ gbproxy_attach_link_info(peer, now, link_info);
}
-static void gbproxy_unregister_tlli_info(struct gbproxy_peer *peer,
- struct gbproxy_tlli_info *tlli_info)
+static void gbproxy_unregister_link_info(struct gbproxy_peer *peer,
+ struct gbproxy_link_info *link_info)
{
- if (!tlli_info)
+ if (!link_info)
return;
- if (tlli_info->tlli.ptmsi == GSM_RESERVED_TMSI && !tlli_info->imsi_len) {
+ if (link_info->tlli.ptmsi == GSM_RESERVED_TMSI && !link_info->imsi_len) {
LOGP(DGPRS, LOGL_INFO,
"Removing TLLI %08x from list (P-TMSI or IMSI are not set)\n",
- tlli_info->tlli.current);
- gbproxy_delete_tlli_info(peer, tlli_info);
+ link_info->tlli.current);
+ gbproxy_delete_link_info(peer, link_info);
return;
}
- tlli_info->tlli.current = 0;
- tlli_info->tlli.assigned = 0;
- tlli_info->sgsn_tlli.current = 0;
- tlli_info->sgsn_tlli.assigned = 0;
+ link_info->tlli.current = 0;
+ link_info->tlli.assigned = 0;
+ link_info->sgsn_tlli.current = 0;
+ link_info->sgsn_tlli.assigned = 0;
- tlli_info->is_deregistered = 1;
+ link_info->is_deregistered = 1;
return;
}
int gbproxy_imsi_matches(struct gbproxy_peer *peer,
- struct gbproxy_tlli_info *tlli_info)
+ struct gbproxy_link_info *link_info)
{
if (!peer->cfg->check_imsi)
return 1;
- return tlli_info != NULL && tlli_info->imsi_matches;
+ return link_info != NULL && link_info->imsi_matches;
}
void gbproxy_assign_imsi(struct gbproxy_peer *peer,
- struct gbproxy_tlli_info *tlli_info,
+ struct gbproxy_link_info *link_info,
struct gprs_gb_parse_context *parse_ctx)
{
int imsi_matches;
- struct gbproxy_tlli_info *other_tlli_info;
+ struct gbproxy_link_info *other_link_info;
/* Make sure that there is a second entry with the same IMSI */
- other_tlli_info = gbproxy_tlli_info_by_imsi(
+ other_link_info = gbproxy_link_info_by_imsi(
peer, parse_ctx->imsi, parse_ctx->imsi_len);
- if (other_tlli_info && other_tlli_info != tlli_info) {
+ if (other_link_info && other_link_info != link_info) {
char mi_buf[200];
mi_buf[0] = '\0';
gsm48_mi_to_string(mi_buf, sizeof(mi_buf),
parse_ctx->imsi, parse_ctx->imsi_len);
LOGP(DGPRS, LOGL_INFO,
"Removing TLLI %08x from list (IMSI %s re-used)\n",
- other_tlli_info->tlli.current, mi_buf);
- gbproxy_delete_tlli_info(peer, other_tlli_info);
+ other_link_info->tlli.current, mi_buf);
+ gbproxy_delete_link_info(peer, other_link_info);
}
/* Update the IMSI field */
- gbproxy_update_tlli_info(tlli_info,
+ gbproxy_update_link_info(link_info,
parse_ctx->imsi, parse_ctx->imsi_len);
/* Check, whether the IMSI matches */
imsi_matches = gbproxy_check_imsi(peer, parse_ctx->imsi,
parse_ctx->imsi_len);
if (imsi_matches >= 0)
- tlli_info->imsi_matches = imsi_matches;
+ link_info->imsi_matches = imsi_matches;
}
static int gbproxy_tlli_match(const struct gbproxy_tlli_state *a,
@@ -415,43 +415,43 @@ static int gbproxy_tlli_match(const struct gbproxy_tlli_state *a,
return 0;
}
-static void gbproxy_remove_matching_tlli_infos(
- struct gbproxy_peer *peer, struct gbproxy_tlli_info *tlli_info)
+static void gbproxy_remove_matching_link_infos(
+ struct gbproxy_peer *peer, struct gbproxy_link_info *link_info)
{
- struct gbproxy_tlli_info *info, *nxt;
+ struct gbproxy_link_info *info, *nxt;
struct gbproxy_patch_state *state = &peer->patch_state;
/* Make sure that there is no second entry with the same P-TMSI or TLLI */
llist_for_each_entry_safe(info, nxt, &state->enabled_tllis, list) {
- if (info == tlli_info)
+ if (info == link_info)
continue;
- if (!gbproxy_tlli_match(&tlli_info->tlli, &info->tlli) &&
- (tlli_info->sgsn_nsei != info->sgsn_nsei ||
- !gbproxy_tlli_match(&tlli_info->sgsn_tlli, &info->sgsn_tlli)))
+ if (!gbproxy_tlli_match(&link_info->tlli, &info->tlli) &&
+ (link_info->sgsn_nsei != info->sgsn_nsei ||
+ !gbproxy_tlli_match(&link_info->sgsn_tlli, &info->sgsn_tlli)))
continue;
LOGP(DGPRS, LOGL_INFO,
"Removing TLLI %08x from list (P-TMSI/TLLI re-used)\n",
info->tlli.current);
- gbproxy_delete_tlli_info(peer, info);
+ gbproxy_delete_link_info(peer, info);
}
}
-struct gbproxy_tlli_info *gbproxy_get_tlli_info_ul(
+struct gbproxy_link_info *gbproxy_get_link_info_ul(
struct gbproxy_peer *peer,
struct gprs_gb_parse_context *parse_ctx)
{
- struct gbproxy_tlli_info *tlli_info = NULL;
+ struct gbproxy_link_info *link_info = NULL;
if (parse_ctx->tlli_enc)
- tlli_info = gbproxy_tlli_info_by_tlli(peer, parse_ctx->tlli);
+ link_info = gbproxy_link_info_by_tlli(peer, parse_ctx->tlli);
- if (!tlli_info && parse_ctx->imsi)
- tlli_info = gbproxy_tlli_info_by_imsi(
+ if (!link_info && parse_ctx->imsi)
+ link_info = gbproxy_link_info_by_imsi(
peer, parse_ctx->imsi, parse_ctx->imsi_len);
- if (!tlli_info && parse_ctx->ptmsi_enc && !parse_ctx->old_raid_is_foreign) {
+ if (!link_info && parse_ctx->ptmsi_enc && !parse_ctx->old_raid_is_foreign) {
uint32_t bss_ptmsi;
if (!gprs_parse_mi_tmsi(parse_ctx->ptmsi_enc, GSM48_TMSI_LEN,
&bss_ptmsi))
@@ -459,78 +459,78 @@ struct gbproxy_tlli_info *gbproxy_get_tlli_info_ul(
"Failed to parse P-TMSI (TLLI is %08x)\n",
parse_ctx->tlli);
else
- tlli_info = gbproxy_tlli_info_by_ptmsi(peer, bss_ptmsi);
+ link_info = gbproxy_link_info_by_ptmsi(peer, bss_ptmsi);
}
- if (tlli_info)
- tlli_info->is_deregistered = 0;
+ if (link_info)
+ link_info->is_deregistered = 0;
- return tlli_info;
+ return link_info;
}
-struct gbproxy_tlli_info *gbproxy_update_tlli_state_ul(
+struct gbproxy_link_info *gbproxy_update_link_state_ul(
struct gbproxy_peer *peer,
time_t now,
struct gprs_gb_parse_context *parse_ctx)
{
- struct gbproxy_tlli_info *tlli_info;
+ struct gbproxy_link_info *link_info;
- tlli_info = gbproxy_get_tlli_info_ul(peer, parse_ctx);
+ link_info = gbproxy_get_link_info_ul(peer, parse_ctx);
if (parse_ctx->tlli_enc && parse_ctx->llc) {
uint32_t sgsn_tlli;
- if (!tlli_info) {
+ if (!link_info) {
LOGP(DGPRS, LOGL_INFO, "Adding TLLI %08x to list\n",
parse_ctx->tlli);
- tlli_info = gbproxy_tlli_info_alloc(peer);
- gbproxy_attach_tlli_info(peer, now, tlli_info);
+ link_info = gbproxy_link_info_alloc(peer);
+ gbproxy_attach_link_info(peer, now, link_info);
/* Setup TLLIs */
- sgsn_tlli = gbproxy_make_sgsn_tlli(peer, tlli_info,
+ sgsn_tlli = gbproxy_make_sgsn_tlli(peer, link_info,
parse_ctx->tlli);
- tlli_info->sgsn_tlli.current = sgsn_tlli;
- tlli_info->tlli.current = parse_ctx->tlli;;
- } else if (!tlli_info->tlli.current) {
+ link_info->sgsn_tlli.current = sgsn_tlli;
+ link_info->tlli.current = parse_ctx->tlli;;
+ } else if (!link_info->tlli.current) {
/* New TLLI (info found by IMSI or P-TMSI) */
- tlli_info->tlli.current = parse_ctx->tlli;
- tlli_info->sgsn_tlli.current =
- gbproxy_make_sgsn_tlli(peer, tlli_info,
+ link_info->tlli.current = parse_ctx->tlli;
+ link_info->sgsn_tlli.current =
+ gbproxy_make_sgsn_tlli(peer, link_info,
parse_ctx->tlli);
- gbproxy_touch_tlli_info(peer, tlli_info, now);
+ gbproxy_touch_link_info(peer, link_info, now);
} else {
- sgsn_tlli = gbproxy_map_tlli(parse_ctx->tlli, tlli_info, 0);
+ sgsn_tlli = gbproxy_map_tlli(parse_ctx->tlli, link_info, 0);
if (!sgsn_tlli)
- sgsn_tlli = gbproxy_make_sgsn_tlli(peer, tlli_info,
+ sgsn_tlli = gbproxy_make_sgsn_tlli(peer, link_info,
parse_ctx->tlli);
- gbproxy_validate_tlli(&tlli_info->tlli,
+ gbproxy_validate_tlli(&link_info->tlli,
parse_ctx->tlli, 0);
- gbproxy_validate_tlli(&tlli_info->sgsn_tlli,
+ gbproxy_validate_tlli(&link_info->sgsn_tlli,
sgsn_tlli, 0);
- gbproxy_touch_tlli_info(peer, tlli_info, now);
+ gbproxy_touch_link_info(peer, link_info, now);
}
- } else if (tlli_info) {
- gbproxy_touch_tlli_info(peer, tlli_info, now);
+ } else if (link_info) {
+ gbproxy_touch_link_info(peer, link_info, now);
}
- if (parse_ctx->imsi && tlli_info && tlli_info->imsi_len == 0)
- gbproxy_assign_imsi(peer, tlli_info, parse_ctx);
+ if (parse_ctx->imsi && link_info && link_info->imsi_len == 0)
+ gbproxy_assign_imsi(peer, link_info, parse_ctx);
- return tlli_info;
+ return link_info;
}
-struct gbproxy_tlli_info *gbproxy_update_tlli_state_dl(
+struct gbproxy_link_info *gbproxy_update_link_state_dl(
struct gbproxy_peer *peer,
time_t now,
struct gprs_gb_parse_context *parse_ctx)
{
- struct gbproxy_tlli_info *tlli_info = NULL;
+ struct gbproxy_link_info *link_info = NULL;
if (parse_ctx->tlli_enc)
- tlli_info = gbproxy_tlli_info_by_sgsn_tlli(
+ link_info = gbproxy_link_info_by_sgsn_tlli(
peer, parse_ctx->tlli, parse_ctx->peer_nsei);
- if (parse_ctx->tlli_enc && parse_ctx->new_ptmsi_enc && tlli_info) {
+ if (parse_ctx->tlli_enc && parse_ctx->new_ptmsi_enc && link_info) {
/* A new P-TMSI has been signalled in the message,
* register new TLLI */
uint32_t new_sgsn_ptmsi;
@@ -540,7 +540,7 @@ struct gbproxy_tlli_info *gbproxy_update_tlli_state_dl(
LOGP(DGPRS, LOGL_ERROR,
"Failed to parse new TLLI/PTMSI (current is %08x)\n",
parse_ctx->tlli);
- return tlli_info;
+ return link_info;
}
new_bss_ptmsi = gbproxy_make_bss_ptmsi(peer, new_sgsn_ptmsi);
@@ -548,12 +548,12 @@ struct gbproxy_tlli_info *gbproxy_update_tlli_state_dl(
"Got new PTMSI %08x from SGSN, using %08x for BSS\n",
new_sgsn_ptmsi, new_bss_ptmsi);
/* Setup PTMSIs */
- tlli_info->sgsn_tlli.ptmsi = new_sgsn_ptmsi;
- tlli_info->tlli.ptmsi = new_bss_ptmsi;
- } else if (parse_ctx->tlli_enc && parse_ctx->new_ptmsi_enc && !tlli_info &&
+ link_info->sgsn_tlli.ptmsi = new_sgsn_ptmsi;
+ link_info->tlli.ptmsi = new_bss_ptmsi;
+ } else if (parse_ctx->tlli_enc && parse_ctx->new_ptmsi_enc && !link_info &&
!peer->cfg->patch_ptmsi) {
/* A new P-TMSI has been signalled in the message with an unknown
- * TLLI, create a new tlli_info */
+ * TLLI, create a new link_info */
/* TODO: Add a test case for this branch */
uint32_t new_ptmsi;
if (!gprs_parse_mi_tmsi(parse_ctx->new_ptmsi_enc, GSM48_TMSI_LEN,
@@ -561,35 +561,35 @@ struct gbproxy_tlli_info *gbproxy_update_tlli_state_dl(
LOGP(DGPRS, LOGL_ERROR,
"Failed to parse new PTMSI (TLLI is %08x)\n",
parse_ctx->tlli);
- return tlli_info;
+ return link_info;
}
LOGP(DGPRS, LOGL_INFO,
"Adding TLLI %08x to list (SGSN, new P-TMSI is %08x)\n",
parse_ctx->tlli, new_ptmsi);
- tlli_info = gbproxy_tlli_info_alloc(peer);
- tlli_info->sgsn_tlli.current = parse_ctx->tlli;;
- tlli_info->tlli.current = parse_ctx->tlli;;
- tlli_info->sgsn_tlli.ptmsi = new_ptmsi;
- tlli_info->tlli.ptmsi = new_ptmsi;
- gbproxy_attach_tlli_info(peer, now, tlli_info);
- } else if (parse_ctx->tlli_enc && parse_ctx->llc && !tlli_info &&
+ link_info = gbproxy_link_info_alloc(peer);
+ link_info->sgsn_tlli.current = parse_ctx->tlli;;
+ link_info->tlli.current = parse_ctx->tlli;;
+ link_info->sgsn_tlli.ptmsi = new_ptmsi;
+ link_info->tlli.ptmsi = new_ptmsi;
+ gbproxy_attach_link_info(peer, now, link_info);
+ } else if (parse_ctx->tlli_enc && parse_ctx->llc && !link_info &&
!peer->cfg->patch_ptmsi) {
- /* Unknown SGSN TLLI, create a new tlli_info */
+ /* Unknown SGSN TLLI, create a new link_info */
uint32_t new_ptmsi;
- tlli_info = gbproxy_tlli_info_alloc(peer);
+ link_info = gbproxy_link_info_alloc(peer);
LOGP(DGPRS, LOGL_INFO, "Adding TLLI %08x to list (SGSN)\n",
parse_ctx->tlli);
- gbproxy_attach_tlli_info(peer, now, tlli_info);
+ gbproxy_attach_link_info(peer, now, link_info);
/* Setup TLLIs */
- tlli_info->sgsn_tlli.current = parse_ctx->tlli;
- tlli_info->tlli.current = parse_ctx->tlli;
+ link_info->sgsn_tlli.current = parse_ctx->tlli;
+ link_info->tlli.current = parse_ctx->tlli;
if (!parse_ctx->new_ptmsi_enc)
- return tlli_info;
+ return link_info;
/* A new P-TMSI has been signalled in the message */
if (!gprs_parse_mi_tmsi(parse_ctx->new_ptmsi_enc,
@@ -597,57 +597,57 @@ struct gbproxy_tlli_info *gbproxy_update_tlli_state_dl(
LOGP(DGPRS, LOGL_ERROR,
"Failed to parse new PTMSI (TLLI is %08x)\n",
parse_ctx->tlli);
- return tlli_info;
+ return link_info;
}
LOGP(DGPRS, LOGL_INFO,
"Assigning new P-TMSI %08x\n", new_ptmsi);
/* Setup P-TMSIs */
- tlli_info->sgsn_tlli.ptmsi = new_ptmsi;
- tlli_info->tlli.ptmsi = new_ptmsi;
- } else if (parse_ctx->tlli_enc && parse_ctx->llc && tlli_info) {
+ link_info->sgsn_tlli.ptmsi = new_ptmsi;
+ link_info->tlli.ptmsi = new_ptmsi;
+ } else if (parse_ctx->tlli_enc && parse_ctx->llc && link_info) {
uint32_t bss_tlli = gbproxy_map_tlli(parse_ctx->tlli,
- tlli_info, 1);
- gbproxy_validate_tlli(&tlli_info->sgsn_tlli, parse_ctx->tlli, 1);
- gbproxy_validate_tlli(&tlli_info->tlli, bss_tlli, 1);
- gbproxy_touch_tlli_info(peer, tlli_info, now);
- } else if (tlli_info) {
- gbproxy_touch_tlli_info(peer, tlli_info, now);
+ link_info, 1);
+ gbproxy_validate_tlli(&link_info->sgsn_tlli, parse_ctx->tlli, 1);
+ gbproxy_validate_tlli(&link_info->tlli, bss_tlli, 1);
+ gbproxy_touch_link_info(peer, link_info, now);
+ } else if (link_info) {
+ gbproxy_touch_link_info(peer, link_info, now);
}
- if (parse_ctx->imsi && tlli_info && tlli_info->imsi_len == 0)
- gbproxy_assign_imsi(peer, tlli_info, parse_ctx);
+ if (parse_ctx->imsi && link_info && link_info->imsi_len == 0)
+ gbproxy_assign_imsi(peer, link_info, parse_ctx);
- return tlli_info;
+ return link_info;
}
-void gbproxy_update_tlli_state_after(
+void gbproxy_update_link_state_after(
struct gbproxy_peer *peer,
- struct gbproxy_tlli_info *tlli_info,
+ struct gbproxy_link_info *link_info,
time_t now,
struct gprs_gb_parse_context *parse_ctx)
{
- if (parse_ctx->invalidate_tlli && tlli_info) {
+ if (parse_ctx->invalidate_tlli && link_info) {
int keep_info =
- peer->cfg->keep_tlli_infos == GBPROX_KEEP_ALWAYS ||
- (peer->cfg->keep_tlli_infos == GBPROX_KEEP_REATTACH &&
+ peer->cfg->keep_link_infos == GBPROX_KEEP_ALWAYS ||
+ (peer->cfg->keep_link_infos == GBPROX_KEEP_REATTACH &&
parse_ctx->await_reattach) ||
- (peer->cfg->keep_tlli_infos == GBPROX_KEEP_IDENTIFIED &&
- tlli_info->imsi_len > 0);
+ (peer->cfg->keep_link_infos == GBPROX_KEEP_IDENTIFIED &&
+ link_info->imsi_len > 0);
if (keep_info) {
LOGP(DGPRS, LOGL_INFO, "Unregistering TLLI %08x\n",
- tlli_info->tlli.current);
- gbproxy_unregister_tlli_info(peer, tlli_info);
+ link_info->tlli.current);
+ gbproxy_unregister_link_info(peer, link_info);
} else {
LOGP(DGPRS, LOGL_INFO, "Removing TLLI %08x from list\n",
- tlli_info->tlli.current);
- gbproxy_delete_tlli_info(peer, tlli_info);
+ link_info->tlli.current);
+ gbproxy_delete_link_info(peer, link_info);
}
} else if (parse_ctx->to_bss && parse_ctx->tlli_enc &&
- parse_ctx->new_ptmsi_enc && tlli_info) {
+ parse_ctx->new_ptmsi_enc && link_info) {
/* A new PTMSI has been signaled in the message,
* register new TLLI */
- uint32_t new_sgsn_ptmsi = tlli_info->sgsn_tlli.ptmsi;
- uint32_t new_bss_ptmsi = tlli_info->tlli.ptmsi;
+ uint32_t new_sgsn_ptmsi = link_info->sgsn_tlli.ptmsi;
+ uint32_t new_bss_ptmsi = link_info->tlli.ptmsi;
uint32_t new_sgsn_tlli;
uint32_t new_bss_tlli = 0;
@@ -658,14 +658,14 @@ void gbproxy_update_tlli_state_after(
"Assigning new TLLI %08x to SGSN, %08x to BSS\n",
new_sgsn_tlli, new_bss_tlli);
- gbproxy_reassign_tlli(&tlli_info->sgsn_tlli,
+ gbproxy_reassign_tlli(&link_info->sgsn_tlli,
peer, new_sgsn_tlli);
- gbproxy_reassign_tlli(&tlli_info->tlli,
+ gbproxy_reassign_tlli(&link_info->tlli,
peer, new_bss_tlli);
- gbproxy_remove_matching_tlli_infos(peer, tlli_info);
+ gbproxy_remove_matching_link_infos(peer, link_info);
}
- gbproxy_remove_stale_tlli_infos(peer, now);
+ gbproxy_remove_stale_link_infos(peer, now);
}