From d20e7483d0872270a38d83efe1b7a14e87fe37de Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Fri, 3 Feb 2017 02:42:47 +0100 Subject: Use libvlr in libmsc (large refactoring) Original libvlr code is by Harald Welte , polished and tweaked by Neels Hofmeyr . This is a long series of development collapsed in one patch. The original history may still be available as branch neels/vlr_orig. TODO: This commit may be split in several smaller changes before merging to master. Related: OS#1592 Change-Id: I702ba504ce2de93507312c28eca8d11f09f4ee8b --- openbsc/src/libbsc/abis_rsl.c | 2 +- openbsc/src/libbsc/bsc_api.c | 10 ++++++---- openbsc/src/libbsc/bsc_init.c | 7 +++++++ openbsc/src/libbsc/bsc_vty.c | 37 +++++++++++++++++++++++-------------- openbsc/src/libbsc/handover_logic.c | 3 ++- openbsc/src/libbsc/paging.c | 1 + 6 files changed, 40 insertions(+), 20 deletions(-) (limited to 'openbsc/src/libbsc') diff --git a/openbsc/src/libbsc/abis_rsl.c b/openbsc/src/libbsc/abis_rsl.c index 5939e75bf..f2977e83c 100644 --- a/openbsc/src/libbsc/abis_rsl.c +++ b/openbsc/src/libbsc/abis_rsl.c @@ -159,7 +159,7 @@ static struct gsm_lchan *lchan_lookup(struct gsm_bts_trx *trx, uint8_t chan_nr, gsm_ts_and_pchan_name(lchan->ts), log_name, chan_nr); if (lchan->conn) - log_set_context(LOG_CTX_VLR_SUBSCR, lchan->conn->subscr); + log_set_context(LOG_CTX_VLR_SUBSCR, lchan->conn->vsub); return lchan; } diff --git a/openbsc/src/libbsc/bsc_api.c b/openbsc/src/libbsc/bsc_api.c index 54978e50c..08a5bdf4c 100644 --- a/openbsc/src/libbsc/bsc_api.c +++ b/openbsc/src/libbsc/bsc_api.c @@ -32,6 +32,7 @@ #include #include #include +#include #include #include @@ -262,13 +263,14 @@ void bsc_subscr_con_free(struct gsm_subscriber_connection *conn) if (!conn) return; + if (conn->network->bsc_api->conn_cleanup) + conn->network->bsc_api->conn_cleanup(conn); - if (conn->subscr) { - subscr_put(conn->subscr); - conn->subscr = NULL; + if (conn->vsub) { + LOGP(DNM, LOGL_ERROR, "conn->vsub should have been cleared.\n"); + conn->vsub = NULL; } - if (conn->ho_lchan) { LOGP(DNM, LOGL_ERROR, "The ho_lchan should have been cleared.\n"); conn->ho_lchan->conn = NULL; diff --git a/openbsc/src/libbsc/bsc_init.c b/openbsc/src/libbsc/bsc_init.c index b17ff79c5..bd47addb6 100644 --- a/openbsc/src/libbsc/bsc_init.c +++ b/openbsc/src/libbsc/bsc_init.c @@ -37,6 +37,7 @@ #include #include #include +#include /* global pointer to the gsm network data structure */ extern struct gsm_network *bsc_gsmnet; @@ -485,6 +486,12 @@ int bsc_network_alloc(mncc_recv_cb_t mncc_recv) bsc_gsmnet->name_long = talloc_strdup(bsc_gsmnet, "OpenBSC"); bsc_gsmnet->name_short = talloc_strdup(bsc_gsmnet, "OpenBSC"); + /* TODO: move to libmsc when gsm_network is split between libbsc and + * libmsc */ + bsc_gsmnet->gsup_server_addr_str = talloc_strdup(bsc_gsmnet, + MSC_HLR_REMOTE_IP_DEFAULT); + bsc_gsmnet->gsup_server_port = MSC_HLR_REMOTE_PORT_DEFAULT; + return 0; } diff --git a/openbsc/src/libbsc/bsc_vty.c b/openbsc/src/libbsc/bsc_vty.c index b1747aa33..d8a234a03 100644 --- a/openbsc/src/libbsc/bsc_vty.c +++ b/openbsc/src/libbsc/bsc_vty.c @@ -53,8 +53,8 @@ #include #include #include - #include +#include #include @@ -791,6 +791,9 @@ static int config_write_net(struct vty *vty) vty_out(vty, " location updating reject cause %u%s", gsmnet->reject_cause, VTY_NEWLINE); vty_out(vty, " encryption a5 %u%s", gsmnet->a5_encryption, VTY_NEWLINE); + vty_out(vty, " authentication %s%s", + gsmnet->authentication_required ? "required" : "optional", + VTY_NEWLINE); vty_out(vty, " neci %u%s", gsmnet->neci, VTY_NEWLINE); vty_out(vty, " paging any use tch %d%s", gsmnet->pag_any_tch, VTY_NEWLINE); vty_out(vty, " rrlp mode %s%s", rrlp_mode_name(gsmnet->rrlp.mode), @@ -821,8 +824,11 @@ static int config_write_net(struct vty *vty) vty_out(vty, " timer t3119 %u%s", gsmnet->T3119, VTY_NEWLINE); vty_out(vty, " timer t3122 %u%s", gsmnet->T3122, VTY_NEWLINE); vty_out(vty, " timer t3141 %u%s", gsmnet->T3141, VTY_NEWLINE); + /* + TODO: add in libvlr? vty_out(vty, " subscriber-keep-in-ram %d%s", gsmnet->subscr_group->keep_subscr, VTY_NEWLINE); + */ if (gsmnet->tz.override != 0) { if (gsmnet->tz.dst) vty_out(vty, " timezone %d %d %d%s", @@ -1006,21 +1012,24 @@ DEFUN(show_ts, return CMD_SUCCESS; } -static void subscr_dump_vty(struct vty *vty, struct gsm_subscriber *subscr) +static void subscr_dump_vty(struct vty *vty, struct vlr_subscr *vsub) { - vty_out(vty, " ID: %llu, Authorized: %d%s", subscr->id, - subscr->authorized, VTY_NEWLINE); - if (strlen(subscr->name)) - vty_out(vty, " Name: '%s'%s", subscr->name, VTY_NEWLINE); - if (strlen(subscr->extension)) - vty_out(vty, " Extension: %s%s", subscr->extension, + OSMO_ASSERT(vsub); + if (strlen(vsub->name)) + vty_out(vty, " Name: '%s'%s", vsub->name, VTY_NEWLINE); + if (strlen(vsub->msisdn)) + vty_out(vty, " Extension: %s%s", vsub->msisdn, + VTY_NEWLINE); + if (strlen(vsub->imsi)) + vty_out(vty, " IMSI: %s%s", vsub->imsi, VTY_NEWLINE); + if (vsub->tmsi != GSM_RESERVED_TMSI) + vty_out(vty, " TMSI: %08X%s", vsub->tmsi, VTY_NEWLINE); - vty_out(vty, " IMSI: %s%s", subscr->imsi, VTY_NEWLINE); - if (subscr->tmsi != GSM_RESERVED_TMSI) - vty_out(vty, " TMSI: %08X%s", subscr->tmsi, + if (vsub->tmsi_new != GSM_RESERVED_TMSI) + vty_out(vty, " new TMSI: %08X%s", vsub->tmsi_new, VTY_NEWLINE); - vty_out(vty, " Use count: %u%s", subscr->use_count, VTY_NEWLINE); + vty_out(vty, " Use count: %u%s", vsub->use_count, VTY_NEWLINE); } static void bsc_subscr_dump_vty(struct vty *vty, struct bsc_subscr *bsub) @@ -1149,9 +1158,9 @@ static void lchan_dump_full_vty(struct vty *vty, struct gsm_lchan *lchan) vty_out(vty, " Channel Mode / Codec: %s%s", get_value_string(gsm48_cmode_names, lchan->tch_mode), VTY_NEWLINE); - if (lchan->conn && lchan->conn->subscr) { + if (lchan->conn && lchan->conn->vsub) { vty_out(vty, " Subscriber:%s", VTY_NEWLINE); - subscr_dump_vty(vty, lchan->conn->subscr); + subscr_dump_vty(vty, lchan->conn->vsub); } else vty_out(vty, " No Subscriber%s", VTY_NEWLINE); if (is_ipaccess_bts(lchan->ts->trx->bts)) { diff --git a/openbsc/src/libbsc/handover_logic.c b/openbsc/src/libbsc/handover_logic.c index ffcca6647..8caa3c989 100644 --- a/openbsc/src/libbsc/handover_logic.c +++ b/openbsc/src/libbsc/handover_logic.c @@ -40,6 +40,7 @@ #include #include #include +#include struct bsc_handover { struct llist_head list; @@ -261,7 +262,7 @@ static int ho_gsm48_ho_compl(struct gsm_lchan *new_lchan) net = new_lchan->ts->trx->bts->network; LOGP(DHO, LOGL_INFO, "Subscriber %s HO from BTS %u->%u on ARFCN " - "%u->%u\n", subscr_name(ho->old_lchan->conn->subscr), + "%u->%u\n", vlr_subscr_name(ho->old_lchan->conn->vsub), ho->old_lchan->ts->trx->bts->nr, new_lchan->ts->trx->bts->nr, ho->old_lchan->ts->trx->arfcn, new_lchan->ts->trx->arfcn); diff --git a/openbsc/src/libbsc/paging.c b/openbsc/src/libbsc/paging.c index bd23d89de..6766ad659 100644 --- a/openbsc/src/libbsc/paging.c +++ b/openbsc/src/libbsc/paging.c @@ -50,6 +50,7 @@ #include #include #include +#include void *tall_paging_ctx; -- cgit v1.2.3