aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc
diff options
context:
space:
mode:
Diffstat (limited to 'openbsc')
-rw-r--r--openbsc/include/openbsc/bsc_nat.h1
-rw-r--r--openbsc/src/osmo-bsc_nat/bsc_nat.c4
-rw-r--r--openbsc/src/osmo-bsc_nat/bsc_nat_vty.c23
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);