aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHolger Hans Peter Freyther <zecke@selfish.org>2010-04-21 19:05:14 +0800
committerHolger Hans Peter Freyther <zecke@selfish.org>2010-04-21 19:05:14 +0800
commite5981edf6a8af5d58154f0ea09b831a3fd9fcaf7 (patch)
tree6aa19715ffe4a45b008799e9dab5052dc4ad4d72
parent93cc16ae4f85c8712f50881f094c1ac6882f99f3 (diff)
[nat] Add option to forbid the paging to the BSC.
This can be done for testing purposes and to allow making a BTS crash that can not handle paging requests properly.
-rw-r--r--openbsc/include/openbsc/bsc_nat.h2
-rw-r--r--openbsc/src/nat/bsc_nat.c4
-rw-r--r--openbsc/src/nat/bsc_nat_vty.c19
3 files changed, 24 insertions, 1 deletions
diff --git a/openbsc/include/openbsc/bsc_nat.h b/openbsc/include/openbsc/bsc_nat.h
index 040d39374..353cf0809 100644
--- a/openbsc/include/openbsc/bsc_nat.h
+++ b/openbsc/include/openbsc/bsc_nat.h
@@ -146,6 +146,8 @@ struct bsc_config {
char *imsi_deny;
regex_t imsi_deny_re;
+ int forbid_paging;
+
/* backpointer */
struct bsc_nat *nat;
diff --git a/openbsc/src/nat/bsc_nat.c b/openbsc/src/nat/bsc_nat.c
index eaa9d30bc..d5a5d2b42 100644
--- a/openbsc/src/nat/bsc_nat.c
+++ b/openbsc/src/nat/bsc_nat.c
@@ -311,7 +311,9 @@ send_to_all:
if (parsed->ipa_proto == IPAC_PROTO_SCCP && parsed->gsm_type == BSS_MAP_MSG_PAGING) {
int lac;
bsc = bsc_nat_find_bsc(nat, msg, &lac);
- if (bsc)
+ if (bsc && bsc->cfg->forbid_paging)
+ LOGP(DNAT, LOGL_NOTICE, "Paging forbidden for BTS: %d\n", bsc->cfg->nr);
+ else if (bsc)
bsc_send_data(bsc, msg->l2h, msgb_l2len(msg), parsed->ipa_proto);
else
LOGP(DNAT, LOGL_ERROR, "Could not determine BSC for paging on lac: %d/0x%x\n",
diff --git a/openbsc/src/nat/bsc_nat_vty.c b/openbsc/src/nat/bsc_nat_vty.c
index a03b5d178..d8b6040c7 100644
--- a/openbsc/src/nat/bsc_nat_vty.c
+++ b/openbsc/src/nat/bsc_nat_vty.c
@@ -69,6 +69,7 @@ static void config_write_bsc_single(struct vty *vty, struct bsc_config *bsc)
vty_out(vty, " imsi allow %s%s", bsc->imsi_allow, VTY_NEWLINE);
if (bsc->imsi_deny)
vty_out(vty, " imsi deny %s%s", bsc->imsi_deny, VTY_NEWLINE);
+ vty_out(vty, " paging forbidden %d%s", bsc->forbid_paging, VTY_NEWLINE);
}
static int config_write_bsc(struct vty *vty)
@@ -128,6 +129,8 @@ DEFUN(show_bsc_cfg, show_bsc_cfg_cmd, "bsc config show",
conf->imsi_allow ? conf->imsi_allow: "any",
conf->imsi_deny ? conf->imsi_deny : "none",
VTY_NEWLINE);
+ vty_out(vty, " paging forbidden: %d%s",
+ conf->forbid_paging, VTY_NEWLINE);
}
return CMD_SUCCESS;
@@ -315,6 +318,21 @@ DEFUN(cfg_bsc_imsi_deny,
return CMD_SUCCESS;
}
+DEFUN(cfg_bsc_paging,
+ cfg_bsc_paging_cmd,
+ "paging forbidden (0|1)",
+ "Forbid sending PAGING REQUESTS to the BSC.")
+{
+ struct bsc_config *conf = vty->index;
+
+ if (strcmp("1", argv[1]) == 0)
+ conf->forbid_paging = 1;
+ else
+ conf->forbid_paging = 0;
+
+ return CMD_SUCCESS;
+}
+
int bsc_nat_vty_init(struct bsc_nat *nat)
{
_nat = nat;
@@ -347,6 +365,7 @@ int bsc_nat_vty_init(struct bsc_nat *nat)
install_element(BSC_NODE, &cfg_bsc_lac_cmd);
install_element(BSC_NODE, &cfg_bsc_imsi_allow_cmd);
install_element(BSC_NODE, &cfg_bsc_imsi_deny_cmd);
+ install_element(BSC_NODE, &cfg_bsc_paging_cmd);
mgcp_vty_init();