diff options
Diffstat (limited to 'openbsc/src/gprs/gb_proxy.c')
-rw-r--r-- | openbsc/src/gprs/gb_proxy.c | 108 |
1 files changed, 54 insertions, 54 deletions
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; } |