diff options
Diffstat (limited to 'openbsc')
-rw-r--r-- | openbsc/include/openbsc/bsc_nat.h | 1 | ||||
-rw-r--r-- | openbsc/src/osmo-bsc_nat/bsc_nat.c | 4 | ||||
-rw-r--r-- | openbsc/src/osmo-bsc_nat/bsc_nat_vty.c | 23 |
3 files changed, 28 insertions, 0 deletions
diff --git a/openbsc/include/openbsc/bsc_nat.h b/openbsc/include/openbsc/bsc_nat.h index 5171c3e0c..3eba70d65 100644 --- a/openbsc/include/openbsc/bsc_nat.h +++ b/openbsc/include/openbsc/bsc_nat.h @@ -262,6 +262,7 @@ struct bsc_nat { int mgcp_length; int mgcp_ipa; int sdp_ensure_amr_mode_set; + int paging_bss_forward; /* msc things */ struct llist_head dests; diff --git a/openbsc/src/osmo-bsc_nat/bsc_nat.c b/openbsc/src/osmo-bsc_nat/bsc_nat.c index 2c6c6443d..05597588f 100644 --- a/openbsc/src/osmo-bsc_nat/bsc_nat.c +++ b/openbsc/src/osmo-bsc_nat/bsc_nat.c @@ -620,6 +620,10 @@ static void bsc_nat_handle_paging(struct bsc_nat *nat, struct msgb *msg) } if (discrim == CELL_IDENT_BSS) { + if (!nat->paging_bss_forward) { + LOGP(DNAT, LOGL_DEBUG, "Dropping BSS paging based on current config\n"); + return; + } /* All cells on the BSS are identified. */ llist_for_each_entry(bsc, &nat->bsc_connections, list_entry) { if (!bsc->authenticated) diff --git a/openbsc/src/osmo-bsc_nat/bsc_nat_vty.c b/openbsc/src/osmo-bsc_nat/bsc_nat_vty.c index eba968a4f..15db66423 100644 --- a/openbsc/src/osmo-bsc_nat/bsc_nat_vty.c +++ b/openbsc/src/osmo-bsc_nat/bsc_nat_vty.c @@ -186,6 +186,8 @@ static int config_write_nat(struct vty *vty) vty_out(vty, " use-msc-ipa-for-mgcp%s", VTY_NEWLINE); vty_out(vty, " %ssdp-ensure-amr-mode-set%s", _nat->sdp_ensure_amr_mode_set ? "" : "no ", VTY_NEWLINE); + vty_out(vty, " %spaging-bss-forward%s", + _nat->paging_bss_forward ? "" : "no ", VTY_NEWLINE); config_write_bsc(vty); @@ -870,6 +872,24 @@ DEFUN(cfg_nat_no_sdp_amr_mode_set, return CMD_SUCCESS; } +DEFUN(cfg_nat_paging_bss_forward, + cfg_nat_paging_bss_forward_cmd, + "paging-bss-forward", + "Forward Paging messages with BSS as Cell Identity Discriminator\n") +{ + _nat->paging_bss_forward = 1; + return CMD_SUCCESS; +} + +DEFUN(cfg_nat_no_paging_bss_forward, + cfg_nat_no_paging_bss_forward_cmd, + "no paging-bss-forward", + NO_STR "Forward Paging messages with BSS as Cell Identity Discriminator\n") +{ + _nat->paging_bss_forward = 0; + return CMD_SUCCESS; +} + /* per BSC configuration */ DEFUN(cfg_bsc, cfg_bsc_cmd, "bsc BSC_NR", "BSC configuration\n" "Identifier of the BSC\n") @@ -1374,6 +1394,9 @@ int bsc_nat_vty_init(struct bsc_nat *nat) install_element(NAT_NODE, &cfg_nat_sdp_amr_mode_set_cmd); install_element(NAT_NODE, &cfg_nat_no_sdp_amr_mode_set_cmd); + install_element(NAT_NODE, &cfg_nat_paging_bss_forward_cmd); + install_element(NAT_NODE, &cfg_nat_no_paging_bss_forward_cmd); + install_element(NAT_NODE, &cfg_nat_pgroup_cmd); install_element(NAT_NODE, &cfg_nat_no_pgroup_cmd); install_node(&pgroup_node, config_write_pgroup); |