From 91d2f8a7048bfed3519026bb2f821bbe417c0eec Mon Sep 17 00:00:00 2001 From: Jacob Erlbeck Date: Fri, 19 Sep 2014 15:07:27 +0200 Subject: gbproxy: Use the term 'link' instead of 'tlli' Currently in many places where 'tlli' (Temporary Logical Link Identifier) within identifiers is used, the logical link itself is meant instead. For instance, the tlli_info contain information about an LLC logical link including up to four individual TLLI. To avoid confusion between these concepts, this patch replaces all 'tlli_info' by 'link_info' and a few 'tlli' by 'link'. Sponsored-by: On-Waves ehf --- openbsc/src/gprs/gb_proxy.c | 108 +++++------ openbsc/src/gprs/gb_proxy_patch.c | 26 +-- openbsc/src/gprs/gb_proxy_peer.c | 2 +- openbsc/src/gprs/gb_proxy_tlli.c | 398 +++++++++++++++++++------------------- openbsc/src/gprs/gb_proxy_vty.c | 50 ++--- 5 files changed, 292 insertions(+), 292 deletions(-) (limited to 'openbsc/src/gprs') diff --git a/openbsc/src/gprs/gb_proxy.c b/openbsc/src/gprs/gb_proxy.c index b5566e3d2..130ab4ee1 100644 --- a/openbsc/src/gprs/gb_proxy.c +++ b/openbsc/src/gprs/gb_proxy.c @@ -234,7 +234,7 @@ uint32_t gbproxy_make_bss_ptmsi(struct gbproxy_peer *peer, bss_ptmsi = rand_r(&peer->cfg->bss_ptmsi_state); bss_ptmsi = bss_ptmsi | 0xC0000000; - if (gbproxy_tlli_info_by_ptmsi(peer, bss_ptmsi)) + if (gbproxy_link_info_by_ptmsi(peer, bss_ptmsi)) bss_ptmsi = GSM_RESERVED_TMSI; } while (bss_ptmsi == GSM_RESERVED_TMSI && max_retries--); } @@ -246,15 +246,15 @@ uint32_t gbproxy_make_bss_ptmsi(struct gbproxy_peer *peer, } uint32_t gbproxy_make_sgsn_tlli(struct gbproxy_peer *peer, - struct gbproxy_tlli_info *tlli_info, + struct gbproxy_link_info *link_info, uint32_t bss_tlli) { uint32_t sgsn_tlli; int max_retries = 23; if (!peer->cfg->patch_ptmsi) { sgsn_tlli = bss_tlli; - } else if (tlli_info->sgsn_tlli.ptmsi != GSM_RESERVED_TMSI) { - sgsn_tlli = gprs_tmsi2tlli(tlli_info->sgsn_tlli.ptmsi, + } else if (link_info->sgsn_tlli.ptmsi != GSM_RESERVED_TMSI) { + sgsn_tlli = gprs_tmsi2tlli(link_info->sgsn_tlli.ptmsi, TLLI_FOREIGN); } else { do { @@ -262,7 +262,7 @@ uint32_t gbproxy_make_sgsn_tlli(struct gbproxy_peer *peer, sgsn_tlli = rand_r(&peer->cfg->sgsn_tlli_state); sgsn_tlli = (sgsn_tlli & 0x7fffffff) | 0x78000000; - if (gbproxy_tlli_info_by_any_sgsn_tlli(peer, sgsn_tlli)) + if (gbproxy_link_info_by_any_sgsn_tlli(peer, sgsn_tlli)) sgsn_tlli = 0; } while (!sgsn_tlli && max_retries--); } @@ -274,33 +274,33 @@ uint32_t gbproxy_make_sgsn_tlli(struct gbproxy_peer *peer, } /* Returns != 0 iff IMSI acquisition was in progress */ -static int gbproxy_restart_imsi_acquisition(struct gbproxy_tlli_info* tlli_info) +static int gbproxy_restart_imsi_acquisition(struct gbproxy_link_info* link_info) { int in_progress = 0; - if (!tlli_info) + if (!link_info) return 0; - if (tlli_info->imsi_acq_pending) { + if (link_info->imsi_acq_pending) { in_progress = 1; - tlli_info->imsi_acq_retries += 1; + link_info->imsi_acq_retries += 1; } - gbproxy_tlli_info_discard_messages(tlli_info); - tlli_info->imsi_acq_pending = 0; + gbproxy_link_info_discard_messages(link_info); + link_info->imsi_acq_pending = 0; return in_progress; } -static void gbproxy_reset_imsi_acquisition(struct gbproxy_tlli_info* tlli_info) +static void gbproxy_reset_imsi_acquisition(struct gbproxy_link_info* link_info) { - gbproxy_restart_imsi_acquisition(tlli_info); - tlli_info->imsi_acq_retries = 0; + gbproxy_restart_imsi_acquisition(link_info); + link_info->imsi_acq_retries = 0; } static void gbproxy_flush_stored_messages(struct gbproxy_peer *peer, struct msgb *msg, time_t now, - struct gbproxy_tlli_info* tlli_info, + struct gbproxy_link_info* link_info, struct gprs_gb_parse_context *parse_ctx) { int rc; @@ -314,7 +314,7 @@ static void gbproxy_flush_stored_messages(struct gbproxy_peer *peer, msgb_nsei(msg)); /* Patch and flush stored messages towards the SGSN */ - while ((stored_msg = msgb_dequeue(&tlli_info->stored_msgs))) { + while ((stored_msg = msgb_dequeue(&link_info->stored_msgs))) { struct gprs_gb_parse_context tmp_parse_ctx = {0}; tmp_parse_ctx.to_bss = 0; tmp_parse_ctx.peer_nsei = msgb_nsei(stored_msg); @@ -325,14 +325,14 @@ static void gbproxy_flush_stored_messages(struct gbproxy_peer *peer, &tmp_parse_ctx); gbproxy_patch_bssgp(msg, msgb_bssgph(stored_msg), msgb_bssgp_len(stored_msg), - peer, tlli_info, &len_change, + peer, link_info, &len_change, &tmp_parse_ctx); - gbproxy_update_tlli_state_after(peer, tlli_info, now, + gbproxy_update_link_state_after(peer, link_info, now, &tmp_parse_ctx); rc = gbprox_relay2sgsn(peer->cfg, stored_msg, - msgb_bvci(msg), tlli_info->sgsn_nsei); + msgb_bvci(msg), link_info->sgsn_nsei); if (rc < 0) LOGP(DLLC, LOGL_ERROR, @@ -346,7 +346,7 @@ static void gbproxy_flush_stored_messages(struct gbproxy_peer *peer, } static void gbproxy_acquire_imsi(struct gbproxy_peer *peer, - struct gbproxy_tlli_info* tlli_info, + struct gbproxy_link_info* link_info, uint16_t bvci) { struct msgb *idreq_msg; @@ -362,14 +362,14 @@ static void gbproxy_acquire_imsi(struct gbproxy_peer *peer, * be an issue when P-TMSI patching is _not_ enabled and the SGSN * doesn't reset V(UT) after a detach. */ gprs_push_llc_ui(idreq_msg, 0, GPRS_SAPI_GMM, - (tlli_info->imsi_acq_retries + 256) % 512); - gprs_push_bssgp_dl_unitdata(idreq_msg, tlli_info->tlli.current); + (link_info->imsi_acq_retries + 256) % 512); + gprs_push_bssgp_dl_unitdata(idreq_msg, link_info->tlli.current); gbprox_relay2peer(idreq_msg, peer, bvci); msgb_free(idreq_msg); } static void gbproxy_tx_detach_acc(struct gbproxy_peer *peer, - struct gbproxy_tlli_info* tlli_info, + struct gbproxy_link_info* link_info, uint16_t bvci) { struct msgb *detacc_msg; @@ -378,8 +378,8 @@ static void gbproxy_tx_detach_acc(struct gbproxy_peer *peer, detacc_msg = gsm48_msgb_alloc(); gprs_put_mo_detach_acc(detacc_msg); gprs_push_llc_ui(detacc_msg, 0, GPRS_SAPI_GMM, - (tlli_info->imsi_acq_retries + 256) % 512); - gprs_push_bssgp_dl_unitdata(detacc_msg, tlli_info->tlli.current); + (link_info->imsi_acq_retries + 256) % 512); + gprs_push_bssgp_dl_unitdata(detacc_msg, link_info->tlli.current); gbprox_relay2peer(detacc_msg, peer, bvci); msgb_free(detacc_msg); } @@ -388,15 +388,15 @@ static void gbproxy_tx_detach_acc(struct gbproxy_peer *peer, static int gbproxy_imsi_acquisition(struct gbproxy_peer *peer, struct msgb *msg, time_t now, - struct gbproxy_tlli_info* tlli_info, + struct gbproxy_link_info* link_info, struct gprs_gb_parse_context *parse_ctx) { struct msgb *stored_msg; - if (!tlli_info) + if (!link_info) return 1; - if (!tlli_info->imsi_acq_pending && tlli_info->imsi_len > 0) + if (!link_info->imsi_acq_pending && link_info->imsi_len > 0) return 1; if (parse_ctx->g48_hdr) @@ -404,7 +404,7 @@ static int gbproxy_imsi_acquisition(struct gbproxy_peer *peer, { case GSM48_MT_GMM_RA_UPD_REQ: case GSM48_MT_GMM_ATTACH_REQ: - if (gbproxy_restart_imsi_acquisition(tlli_info)) { + if (gbproxy_restart_imsi_acquisition(link_info)) { LOGP(DLLC, LOGL_INFO, "NSEI=%d(BSS) IMSI acquisition was in progress " "when receiving an %s.\n", @@ -413,7 +413,7 @@ static int gbproxy_imsi_acquisition(struct gbproxy_peer *peer, break; case GSM48_MT_GMM_DETACH_REQ: /* Nothing has been sent to the SGSN yet */ - if (tlli_info->imsi_acq_pending) { + if (link_info->imsi_acq_pending) { LOGP(DLLC, LOGL_INFO, "NSEI=%d(BSS) IMSI acquisition was in progress " "when receiving a DETACH_REQ.\n", @@ -424,26 +424,26 @@ static int gbproxy_imsi_acquisition(struct gbproxy_peer *peer, "NSEI=%d(BSS) IMSI not yet acquired, " "faking a DETACH_ACC.\n", msgb_nsei(msg)); - gbproxy_tx_detach_acc(peer, tlli_info, msgb_bvci(msg)); + gbproxy_tx_detach_acc(peer, link_info, msgb_bvci(msg)); parse_ctx->invalidate_tlli = 1; } - gbproxy_reset_imsi_acquisition(tlli_info); - gbproxy_update_tlli_state_after(peer, tlli_info, now, + gbproxy_reset_imsi_acquisition(link_info); + gbproxy_update_link_state_after(peer, link_info, now, parse_ctx); return 0; } - if (tlli_info->imsi_acq_pending && tlli_info->imsi_len > 0) { + if (link_info->imsi_acq_pending && link_info->imsi_len > 0) { int is_ident_resp = parse_ctx->g48_hdr && parse_ctx->g48_hdr->proto_discr == GSM48_PDISC_MM_GPRS && parse_ctx->g48_hdr->msg_type == GSM48_MT_GMM_ID_RESP; /* The IMSI is now available */ - gbproxy_flush_stored_messages(peer, msg, now, tlli_info, + gbproxy_flush_stored_messages(peer, msg, now, link_info, parse_ctx); - gbproxy_reset_imsi_acquisition(tlli_info); + gbproxy_reset_imsi_acquisition(link_info); /* This message is most probably the response to the ident * request sent by gbproxy_acquire_imsi(). Don't forward it to @@ -461,22 +461,22 @@ static int gbproxy_imsi_acquisition(struct gbproxy_peer *peer, parse_ctx->llc_msg_name ? parse_ctx->llc_msg_name : "BSSGP"); stored_msg = gprs_msgb_copy(msg, "process_bssgp_ul"); - msgb_enqueue(&tlli_info->stored_msgs, stored_msg); + msgb_enqueue(&link_info->stored_msgs, stored_msg); - if (!tlli_info->imsi_acq_pending) { + if (!link_info->imsi_acq_pending) { LOGP(DLLC, LOGL_INFO, "NSEI=%d(BSS) IMSI is required but not available, " "initiating identification procedure (%s)\n", msgb_nsei(msg), parse_ctx->llc_msg_name ? parse_ctx->llc_msg_name : "BSSGP"); - gbproxy_acquire_imsi(peer, tlli_info, msgb_bvci(msg)); + gbproxy_acquire_imsi(peer, link_info, msgb_bvci(msg)); /* There is no explicit retransmission handling, the * implementation relies on the MS doing proper retransmissions * of the triggering message instead */ - tlli_info->imsi_acq_pending = 1; + link_info->imsi_acq_pending = 1; } return 0; @@ -518,7 +518,7 @@ static int gbprox_process_bssgp_ul(struct gbproxy_config *cfg, int rc; int len_change = 0; time_t now; - struct gbproxy_tlli_info *tlli_info = NULL; + struct gbproxy_link_info *link_info = NULL; uint32_t sgsn_nsei = cfg->nsip_sgsn_nsei; if (!cfg->core_mcc && !cfg->core_mnc && !cfg->core_apn && @@ -556,7 +556,7 @@ static int gbprox_process_bssgp_ul(struct gbproxy_config *cfg, gprs_gb_log_parse_context(&parse_ctx, "BSSGP"); - tlli_info = gbproxy_update_tlli_state_ul(peer, now, &parse_ctx); + link_info = gbproxy_update_link_state_ul(peer, now, &parse_ctx); if (parse_ctx.g48_hdr) { switch (parse_ctx.g48_hdr->msg_type) { @@ -569,28 +569,28 @@ static int gbprox_process_bssgp_ul(struct gbproxy_config *cfg, } } - if (tlli_info && cfg->route_to_sgsn2) { - if (cfg->acquire_imsi && tlli_info->imsi_len == 0) + if (link_info && cfg->route_to_sgsn2) { + if (cfg->acquire_imsi && link_info->imsi_len == 0) sgsn_nsei = 0xffff; - else if (gbproxy_imsi_matches(peer, tlli_info)) + else if (gbproxy_imsi_matches(peer, link_info)) sgsn_nsei = cfg->nsip_sgsn2_nsei; } - if (tlli_info) - tlli_info->sgsn_nsei = sgsn_nsei; + if (link_info) + link_info->sgsn_nsei = sgsn_nsei; /* Handle IMSI acquisition */ if (cfg->acquire_imsi) { - rc = gbproxy_imsi_acquisition(peer, msg, now, tlli_info, + rc = gbproxy_imsi_acquisition(peer, msg, now, link_info, &parse_ctx); if (rc <= 0) return rc; } gbproxy_patch_bssgp(msg, msgb_bssgph(msg), msgb_bssgp_len(msg), - peer, tlli_info, &len_change, &parse_ctx); + peer, link_info, &len_change, &parse_ctx); - gbproxy_update_tlli_state_after(peer, tlli_info, now, &parse_ctx); + gbproxy_update_link_state_after(peer, link_info, now, &parse_ctx); if (sgsn_nsei != cfg->nsip_sgsn_nsei) { /* Send message directly to the selected SGSN */ @@ -611,7 +611,7 @@ static void gbprox_process_bssgp_dl(struct gbproxy_config *cfg, int rc; int len_change = 0; time_t now; - struct gbproxy_tlli_info *tlli_info = NULL; + struct gbproxy_link_info *link_info = NULL; if (!cfg->core_mcc && !cfg->core_mnc && !cfg->core_apn && !cfg->acquire_imsi && !cfg->patch_ptmsi && !cfg->route_to_sgsn2) @@ -655,12 +655,12 @@ static void gbprox_process_bssgp_dl(struct gbproxy_config *cfg, gprs_gb_log_parse_context(&parse_ctx, "BSSGP"); - tlli_info = gbproxy_update_tlli_state_dl(peer, now, &parse_ctx); + link_info = gbproxy_update_link_state_dl(peer, now, &parse_ctx); gbproxy_patch_bssgp(msg, msgb_bssgph(msg), msgb_bssgp_len(msg), - peer, tlli_info, &len_change, &parse_ctx); + peer, link_info, &len_change, &parse_ctx); - gbproxy_update_tlli_state_after(peer, tlli_info, now, &parse_ctx); + gbproxy_update_link_state_after(peer, link_info, now, &parse_ctx); return; } diff --git a/openbsc/src/gprs/gb_proxy_patch.c b/openbsc/src/gprs/gb_proxy_patch.c index 93b85880c..cf6eb8887 100644 --- a/openbsc/src/gprs/gb_proxy_patch.c +++ b/openbsc/src/gprs/gb_proxy_patch.c @@ -192,20 +192,20 @@ static int gbproxy_patch_ptmsi(uint8_t *ptmsi_enc, int gbproxy_patch_llc(struct msgb *msg, uint8_t *llc, size_t llc_len, struct gbproxy_peer *peer, - struct gbproxy_tlli_info *tlli_info, int *len_change, + struct gbproxy_link_info *link_info, int *len_change, struct gprs_gb_parse_context *parse_ctx) { struct gprs_llc_hdr_parsed *ghp = &parse_ctx->llc_hdr_parsed; int have_patched = 0; int fcs; - if (parse_ctx->ptmsi_enc && tlli_info && + if (parse_ctx->ptmsi_enc && link_info && !parse_ctx->old_raid_is_foreign && peer->cfg->patch_ptmsi) { uint32_t ptmsi; if (parse_ctx->to_bss) - ptmsi = tlli_info->tlli.ptmsi; + ptmsi = link_info->tlli.ptmsi; else - ptmsi = tlli_info->sgsn_tlli.ptmsi; + ptmsi = link_info->sgsn_tlli.ptmsi; if (ptmsi != GSM_RESERVED_TMSI) { if (gbproxy_patch_ptmsi(parse_ctx->ptmsi_enc, peer, @@ -216,12 +216,12 @@ int gbproxy_patch_llc(struct msgb *msg, uint8_t *llc, size_t llc_len, } } - if (parse_ctx->new_ptmsi_enc && tlli_info && peer->cfg->patch_ptmsi) { + if (parse_ctx->new_ptmsi_enc && link_info && peer->cfg->patch_ptmsi) { uint32_t ptmsi; if (parse_ctx->to_bss) - ptmsi = tlli_info->tlli.ptmsi; + ptmsi = link_info->tlli.ptmsi; else - ptmsi = tlli_info->sgsn_tlli.ptmsi; + ptmsi = link_info->sgsn_tlli.ptmsi; OSMO_ASSERT(ptmsi); if (gbproxy_patch_ptmsi(parse_ctx->new_ptmsi_enc, peer, @@ -245,7 +245,7 @@ int gbproxy_patch_llc(struct msgb *msg, uint8_t *llc, size_t llc_len, if (parse_ctx->apn_ie && peer->cfg->core_apn && !parse_ctx->to_bss && - gbproxy_imsi_matches(peer, tlli_info) && peer->cfg->core_apn) { + gbproxy_imsi_matches(peer, link_info) && peer->cfg->core_apn) { size_t new_len; gbproxy_patch_apn_ie(msg, parse_ctx->apn_ie, parse_ctx->apn_ie_len, @@ -275,7 +275,7 @@ int gbproxy_patch_llc(struct msgb *msg, uint8_t *llc, size_t llc_len, /* patch BSSGP message to use core_mcc/mnc on the SGSN side */ void gbproxy_patch_bssgp(struct msgb *msg, uint8_t *bssgp, size_t bssgp_len, struct gbproxy_peer *peer, - struct gbproxy_tlli_info *tlli_info, int *len_change, + struct gbproxy_link_info *link_info, int *len_change, struct gprs_gb_parse_context *parse_ctx) { const char *err_info = NULL; @@ -296,7 +296,7 @@ void gbproxy_patch_bssgp(struct msgb *msg, uint8_t *bssgp, size_t bssgp_len, goto patch_error; } - if (!tlli_info && parse_ctx->tlli_enc && parse_ctx->to_bss) { + if (!link_info && parse_ctx->tlli_enc && parse_ctx->to_bss) { /* Happens with unknown (not cached) TLLI coming from * the SGSN */ /* TODO: What shall be done with the message in this case? */ @@ -305,12 +305,12 @@ void gbproxy_patch_bssgp(struct msgb *msg, uint8_t *bssgp, size_t bssgp_len, goto patch_error; } - if (!tlli_info) + if (!link_info) return; if (parse_ctx->tlli_enc && peer->cfg->patch_ptmsi) { uint32_t tlli = gbproxy_map_tlli(parse_ctx->tlli, - tlli_info, parse_ctx->to_bss); + link_info, parse_ctx->to_bss); if (tlli) { gbproxy_patch_tlli(parse_ctx->tlli_enc, peer, tlli, @@ -329,7 +329,7 @@ void gbproxy_patch_bssgp(struct msgb *msg, uint8_t *bssgp, size_t bssgp_len, size_t llc_len = parse_ctx->llc_len; int llc_len_change = 0; - gbproxy_patch_llc(msg, llc, llc_len, peer, tlli_info, + gbproxy_patch_llc(msg, llc, llc_len, peer, link_info, &llc_len_change, parse_ctx); /* Note that the APN might have been resized here, but no * pointer int the parse_ctx will refer to an adress after the diff --git a/openbsc/src/gprs/gb_proxy_peer.c b/openbsc/src/gprs/gb_proxy_peer.c index 335b46f16..8f9066567 100644 --- a/openbsc/src/gprs/gb_proxy_peer.c +++ b/openbsc/src/gprs/gb_proxy_peer.c @@ -172,7 +172,7 @@ void gbproxy_peer_free(struct gbproxy_peer *peer) { llist_del(&peer->list); - gbproxy_delete_tlli_infos(peer); + gbproxy_delete_link_infos(peer); rate_ctr_group_free(peer->ctrg); peer->ctrg = NULL; 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 #include -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); } diff --git a/openbsc/src/gprs/gb_proxy_vty.c b/openbsc/src/gprs/gb_proxy_vty.c index 72469da21..313cd9b3d 100644 --- a/openbsc/src/gprs/gb_proxy_vty.c +++ b/openbsc/src/gprs/gb_proxy_vty.c @@ -115,7 +115,7 @@ static int config_write_gbproxy(struct vty *vty) vty_out(vty, " tlli-list max-length %d%s", g_cfg->tlli_max_len, VTY_NEWLINE); vty_out(vty, " tlli-list keep-mode %s%s", - get_value_string(keep_modes, g_cfg->keep_tlli_infos), + get_value_string(keep_modes, g_cfg->keep_link_infos), VTY_NEWLINE); @@ -421,7 +421,7 @@ DEFUN(cfg_gbproxy_tlli_list_keep_mode, { int val = get_string_value(keep_modes, argv[0]); OSMO_ASSERT(val >= GBPROX_KEEP_NEVER && val <= GBPROX_KEEP_ALWAYS); - g_cfg->keep_tlli_infos = val; + g_cfg->keep_link_infos = val; return CMD_SUCCESS; } @@ -453,37 +453,37 @@ DEFUN(show_gbproxy_tllis, show_gbproxy_tllis_cmd, "show gbproxy tllis", time_t now = time(NULL); llist_for_each_entry(peer, &g_cfg->bts_peers, list) { - struct gbproxy_tlli_info *tlli_info; + struct gbproxy_link_info *link_info; struct gbproxy_patch_state *state = &peer->patch_state; gbprox_vty_print_peer(vty, peer); - llist_for_each_entry(tlli_info, &state->enabled_tllis, list) { - time_t age = now - tlli_info->timestamp; + llist_for_each_entry(link_info, &state->enabled_tllis, list) { + time_t age = now - link_info->timestamp; int stored_msgs = 0; struct llist_head *iter; - llist_for_each(iter, &tlli_info->stored_msgs) + llist_for_each(iter, &link_info->stored_msgs) stored_msgs++; - if (tlli_info->imsi > 0) { + if (link_info->imsi > 0) { snprintf(mi_buf, sizeof(mi_buf), "(invalid)"); gsm48_mi_to_string(mi_buf, sizeof(mi_buf), - tlli_info->imsi, - tlli_info->imsi_len); + link_info->imsi, + link_info->imsi_len); } else { snprintf(mi_buf, sizeof(mi_buf), "(none)"); } vty_out(vty, " TLLI %08x, IMSI %s, AGE %d", - tlli_info->tlli.current, mi_buf, (int)age); + link_info->tlli.current, mi_buf, (int)age); if (stored_msgs) vty_out(vty, ", STORED %d", stored_msgs); if (g_cfg->route_to_sgsn2) vty_out(vty, ", SGSN NSEI %d", - tlli_info->sgsn_nsei); + link_info->sgsn_nsei); - if (tlli_info->is_deregistered) + if (link_info->is_deregistered) vty_out(vty, ", DE-REGISTERED"); vty_out(vty, "%s", VTY_NEWLINE); @@ -598,7 +598,7 @@ DEFUN(delete_gb_tlli_by_id, delete_gb_tlli_by_id_cmd, uint32_t ident = 0; const char *imsi = NULL; struct gbproxy_peer *peer = 0; - struct gbproxy_tlli_info *tlli_info, *nxt; + struct gbproxy_link_info *link_info, *nxt; struct gbproxy_patch_state *state; char mi_buf[200]; int found = 0; @@ -620,30 +620,30 @@ DEFUN(delete_gb_tlli_by_id, delete_gb_tlli_by_id_cmd, state = &peer->patch_state; - llist_for_each_entry_safe(tlli_info, nxt, &state->enabled_tllis, list) { + llist_for_each_entry_safe(link_info, nxt, &state->enabled_tllis, list) { switch (match) { case MATCH_TLLI: - if (tlli_info->tlli.current != ident) + if (link_info->tlli.current != ident) continue; break; case MATCH_SGSN: - if (tlli_info->sgsn_nsei != ident) + if (link_info->sgsn_nsei != ident) continue; break; case MATCH_IMSI: mi_buf[0] = '\0'; gsm48_mi_to_string(mi_buf, sizeof(mi_buf), - tlli_info->imsi, - tlli_info->imsi_len); + link_info->imsi, + link_info->imsi_len); if (strcmp(mi_buf, imsi) != 0) continue; break; } - vty_out(vty, "Deleting TLLI %08x%s", tlli_info->tlli.current, + vty_out(vty, "Deleting TLLI %08x%s", link_info->tlli.current, VTY_NEWLINE); - gbproxy_delete_tlli_info(peer, tlli_info); + gbproxy_delete_link_info(peer, link_info); found += 1; } @@ -664,7 +664,7 @@ DEFUN(delete_gb_tlli, delete_gb_tlli_cmd, const uint16_t nsei = atoi(argv[0]); enum {MATCH_STALE = 's', MATCH_DEREGISTERED = 'd'} match; struct gbproxy_peer *peer = 0; - struct gbproxy_tlli_info *tlli_info, *nxt; + struct gbproxy_link_info *link_info, *nxt; struct gbproxy_patch_state *state; int found = 0; @@ -680,17 +680,17 @@ DEFUN(delete_gb_tlli, delete_gb_tlli_cmd, state = &peer->patch_state; if (match == MATCH_STALE) { - found = gbproxy_remove_stale_tlli_infos(peer, time(NULL)); + found = gbproxy_remove_stale_link_infos(peer, time(NULL)); if (found) vty_out(vty, "Deleted %d stale TLLI%s%s", found, found == 1 ? "" : "s", VTY_NEWLINE); } else { - llist_for_each_entry_safe(tlli_info, nxt, + llist_for_each_entry_safe(link_info, nxt, &state->enabled_tllis, list) { - if (!tlli_info->is_deregistered) + if (!link_info->is_deregistered) continue; - gbproxy_delete_tlli_info(peer, tlli_info); + gbproxy_delete_link_info(peer, link_info); found += 1; } } -- cgit v1.2.3