diff options
author | Daniel Willmann <dwillmann@sysmocom.de> | 2017-03-02 16:37:03 +0100 |
---|---|---|
committer | Daniel Willmann <dwillmann@sysmocom.de> | 2017-03-15 14:14:06 +0100 |
commit | 75152e662f0ace393505314b8b727a8cda6619b9 (patch) | |
tree | 48cac84c89430a977ee3d0c917d07ee3c7c60788 | |
parent | 96279f9cc81dcb41e6b3dd5ed0918588d122dab0 (diff) |
osmo-bsc_nat: Have a default MSC for messages from BSC
Change-Id: I343e6d9d17bcde6dbdf8f48b7b51e998a296680c
Ticket: SYS#3208
Sponsored-by: On-Waves ehf.
-rw-r--r-- | openbsc/include/openbsc/bsc_nat.h | 2 | ||||
-rw-r--r-- | openbsc/src/osmo-bsc_nat/bsc_nat.c | 8 | ||||
-rw-r--r-- | openbsc/src/osmo-bsc_nat/bsc_nat_utils.c | 12 | ||||
-rw-r--r-- | openbsc/src/osmo-bsc_nat/bsc_nat_vty.c | 9 |
4 files changed, 28 insertions, 3 deletions
diff --git a/openbsc/include/openbsc/bsc_nat.h b/openbsc/include/openbsc/bsc_nat.h index 32be4d9dd..f6c1aaa9f 100644 --- a/openbsc/include/openbsc/bsc_nat.h +++ b/openbsc/include/openbsc/bsc_nat.h @@ -275,6 +275,7 @@ struct bsc_nat { /* MSC connections */ struct llist_head msc_configs; int num_msc; + int default_msc; /* timeouts */ int auth_timeout; @@ -350,6 +351,7 @@ int bsc_config_handles_lac(struct bsc_config *cfg, int lac); struct msc_config *msc_config_alloc(struct bsc_nat *nat); struct msc_config *msc_config_num(struct bsc_nat *nat, int num); struct msc_config *msc_config_by_con(struct bsc_nat *nat, struct bsc_msc_connection *msc_con); +struct bsc_msc_connection *msc_conn_by_num(struct bsc_nat *nat, int num); struct bsc_msc_connection *msc_conn_by_imsi(struct bsc_nat *nat, const char *imsi); void msc_config_free(struct msc_config *); diff --git a/openbsc/src/osmo-bsc_nat/bsc_nat.c b/openbsc/src/osmo-bsc_nat/bsc_nat.c index da923a45d..7936e0dab 100644 --- a/openbsc/src/osmo-bsc_nat/bsc_nat.c +++ b/openbsc/src/osmo-bsc_nat/bsc_nat.c @@ -1154,11 +1154,13 @@ static int forward_sccp_to_msc(struct bsc_connection *bsc, struct msgb *msg) goto exit2; con = patch_sccp_src_ref_to_msc(msg, parsed, bsc); -#warning Implement routing by IMSI - if (!imsi) - LOGP(DNAT, LOGL_ERROR, "No IMSI for CR\n"); con->msc_con = msc_conn_by_imsi(bsc->nat, imsi); + if (!con->msc_con) { + /* Fall back to default MSC */ + LOGP(DNAT, LOGL_NOTICE, "Falling back to default MSC\n"); + con->msc_con = msc_conn_by_num(bsc->nat, bsc->nat->default_msc); + } con_msc = con->msc_con; con->filter_state.con_type = con_type; con->filter_state.imsi_checked = filter; diff --git a/openbsc/src/osmo-bsc_nat/bsc_nat_utils.c b/openbsc/src/osmo-bsc_nat/bsc_nat_utils.c index 57c62a4f3..bed5af66c 100644 --- a/openbsc/src/osmo-bsc_nat/bsc_nat_utils.c +++ b/openbsc/src/osmo-bsc_nat/bsc_nat_utils.c @@ -250,6 +250,18 @@ struct msc_config *msc_config_by_con(struct bsc_nat *nat, struct bsc_msc_connect return NULL; } +struct bsc_msc_connection *msc_conn_by_num(struct bsc_nat *nat, int num) +{ + struct msc_config *conf; + + conf = msc_config_num(nat, num); + + if (!conf) + return NULL; + + return conf->msc_con; +} + struct bsc_msc_connection *msc_conn_by_imsi(struct bsc_nat *nat, const char *imsi) { struct msc_config *conf; diff --git a/openbsc/src/osmo-bsc_nat/bsc_nat_vty.c b/openbsc/src/osmo-bsc_nat/bsc_nat_vty.c index 4c42791b5..5d37b521e 100644 --- a/openbsc/src/osmo-bsc_nat/bsc_nat_vty.c +++ b/openbsc/src/osmo-bsc_nat/bsc_nat_vty.c @@ -758,6 +758,14 @@ DEFUN(cfg_nat_use_ipa_for_mgcp, return CMD_SUCCESS; } +DEFUN(cfg_nat_default_msc, + cfg_nat_default_msc_cmd, + "default msc NR", + "The MSC to route messages to by default\n" "MSC number\n") +{ + _nat->default_msc = atoi(argv[0]); +} + DEFUN(cfg_nat_sdp_amr_mode_set, cfg_nat_sdp_amr_mode_set_cmd, "sdp-ensure-amr-mode-set", @@ -1279,6 +1287,7 @@ int bsc_nat_vty_init(struct bsc_nat *nat) install_element(NAT_NODE, &cfg_nat_ussd_token_cmd); install_element(NAT_NODE, &cfg_nat_ussd_local_cmd); install_element(NAT_NODE, &cfg_nat_use_ipa_for_mgcp_cmd); + install_element(NAT_NODE, &cfg_nat_default_msc_cmd); bsc_msg_lst_vty_init(nat, &nat->access_lists, NAT_NODE); |