diff options
author | Holger Hans Peter Freyther <holger@moiji-mobile.com> | 2015-04-05 13:45:53 +0200 |
---|---|---|
committer | Holger Hans Peter Freyther <holger@moiji-mobile.com> | 2015-04-05 14:06:16 +0200 |
commit | 7c00983275c1b830b88db124bc0b15078b9cd45d (patch) | |
tree | 53a84fb2ec43f6c882522aef1eda8d187e8a0b7b | |
parent | fa1cba9e606c3364fecabe85967950cc217fd870 (diff) |
nat: Inform others if an IMSI is rejected
In case one wants to monitor the access lists one
there is now a trap for the IMSI.
-rw-r--r-- | openbsc/include/openbsc/bsc_nat.h | 4 | ||||
-rw-r--r-- | openbsc/src/osmo-bsc_nat/bsc_nat.c | 4 | ||||
-rw-r--r-- | openbsc/src/osmo-bsc_nat/bsc_nat_ctrl.c | 18 |
3 files changed, 26 insertions, 0 deletions
diff --git a/openbsc/include/openbsc/bsc_nat.h b/openbsc/include/openbsc/bsc_nat.h index 15e20997a..9d29d26c3 100644 --- a/openbsc/include/openbsc/bsc_nat.h +++ b/openbsc/include/openbsc/bsc_nat.h @@ -498,6 +498,10 @@ int bsc_nat_handle_ctrlif_msg(struct bsc_connection *bsc, struct msgb *msg); int bsc_nat_extract_lac(struct bsc_connection *bsc, struct nat_sccp_connection *con, struct bsc_nat_parsed *parsed, struct msgb *msg); +/** + * CTRL interface helper + */ +void bsc_nat_inform_reject(struct bsc_connection *bsc, const char *imsi); /* * Use for testing diff --git a/openbsc/src/osmo-bsc_nat/bsc_nat.c b/openbsc/src/osmo-bsc_nat/bsc_nat.c index 6b061bc20..2f6711a53 100644 --- a/openbsc/src/osmo-bsc_nat/bsc_nat.c +++ b/openbsc/src/osmo-bsc_nat/bsc_nat.c @@ -1060,6 +1060,8 @@ static int forward_sccp_to_msc(struct bsc_connection *bsc, struct msgb *msg) filter = bsc_nat_filter_sccp_cr(bsc, msg, parsed, &con_type, &imsi, &cause); if (filter < 0) { + if (imsi) + bsc_nat_inform_reject(bsc, imsi); bsc_stat_reject(filter, bsc, 0); goto exit3; } @@ -1091,6 +1093,8 @@ static int forward_sccp_to_msc(struct bsc_connection *bsc, struct msgb *msg) filter = bsc_nat_filter_dt(bsc, msg, con, parsed, &cause); if (filter < 0) { + if (imsi) + bsc_nat_inform_reject(bsc, imsi); bsc_stat_reject(filter, bsc, 1); bsc_send_con_release(bsc, con, &cause); con = NULL; diff --git a/openbsc/src/osmo-bsc_nat/bsc_nat_ctrl.c b/openbsc/src/osmo-bsc_nat/bsc_nat_ctrl.c index 1a45e7667..6aa2ff044 100644 --- a/openbsc/src/osmo-bsc_nat/bsc_nat_ctrl.c +++ b/openbsc/src/osmo-bsc_nat/bsc_nat_ctrl.c @@ -412,3 +412,21 @@ error: return NULL; } +void bsc_nat_inform_reject(struct bsc_connection *conn, const char *imsi) +{ + struct ctrl_cmd *cmd; + + cmd = ctrl_cmd_create(conn, CTRL_TYPE_TRAP); + if (!cmd) { + LOGP(DCTRL, LOGL_ERROR, "Failed to create TRAP command.\n"); + return; + } + + cmd->id = "0"; + cmd->variable = talloc_asprintf(cmd, "net.0.bsc.%d.notification-rejection-v1", + conn->cfg->nr); + cmd->reply = talloc_asprintf(cmd, "imsi=%s", imsi); + + ctrl_cmd_send_to_all(conn->cfg->nat->ctrl, cmd); + talloc_free(cmd); +} |