diff options
author | Jacob Erlbeck <jerlbeck@sysmocom.de> | 2013-08-14 11:10:34 +0200 |
---|---|---|
committer | Holger Hans Peter Freyther <holger@moiji-mobile.com> | 2013-08-14 12:07:07 +0200 |
commit | 6cb2cccc8d942b220b2653b15d3ecfcecccc6cb5 (patch) | |
tree | bc9bb7f23a1d9ed68ffa42ac967ba21ce6c9155a /openbsc/src | |
parent | 27876a2df0c76ab43f528f21d942d4461dc3a759 (diff) |
nat/ussd: Add 'show ussd-connection' vty command
This command returns the current state of the connection to the USSD
side channel provider. It shows whether a provider has been connected
and authorized or not.
Fixes: OW#953
Diffstat (limited to 'openbsc/src')
-rw-r--r-- | openbsc/src/osmo-bsc_nat/bsc_nat_vty.c | 13 | ||||
-rw-r--r-- | openbsc/src/osmo-bsc_nat/bsc_ussd.c | 19 |
2 files changed, 32 insertions, 0 deletions
diff --git a/openbsc/src/osmo-bsc_nat/bsc_nat_vty.c b/openbsc/src/osmo-bsc_nat/bsc_nat_vty.c index 6ab48d69e..36a46f2ba 100644 --- a/openbsc/src/osmo-bsc_nat/bsc_nat_vty.c +++ b/openbsc/src/osmo-bsc_nat/bsc_nat_vty.c @@ -1155,6 +1155,18 @@ DEFUN(cfg_pgroup_no_lac, cfg_pgroup_no_lac_cmd, return CMD_SUCCESS; } +DEFUN(show_ussd_connection, + show_ussd_connection_cmd, + "show ussd-connection", + SHOW_STR "USSD connection related information\n") +{ + vty_out(vty, "The USSD side channel provider is %sconnected and %sauthorized.%s", + _nat->ussd_con ? "" : "not ", + _nat->ussd_con && _nat->ussd_con->authorized? "" : "not ", + VTY_NEWLINE); + return CMD_SUCCESS; +} + int bsc_nat_vty_init(struct bsc_nat *nat) { _nat = nat; @@ -1172,6 +1184,7 @@ int bsc_nat_vty_init(struct bsc_nat *nat) install_element_ve(&show_acc_lst_cmd); install_element_ve(&show_bar_lst_cmd); install_element_ve(&show_prefix_tree_cmd); + install_element_ve(&show_ussd_connection_cmd); install_element(ENABLE_NODE, &set_last_endp_cmd); install_element(ENABLE_NODE, &block_new_conn_cmd); diff --git a/openbsc/src/osmo-bsc_nat/bsc_ussd.c b/openbsc/src/osmo-bsc_nat/bsc_ussd.c index f7753fb49..d422f9e93 100644 --- a/openbsc/src/osmo-bsc_nat/bsc_ussd.c +++ b/openbsc/src/osmo-bsc_nat/bsc_ussd.c @@ -69,6 +69,20 @@ static void bsc_nat_ussd_destroy(struct bsc_nat_ussd_con *con) talloc_free(con); } +static void ussd_pong(struct bsc_nat_ussd_con *conn) +{ + struct msgb *msg; + + msg = msgb_alloc_headroom(4096, 128, "pong message"); + if (!msg) { + LOGP(DNAT, LOGL_ERROR, "Failed to allocate pong msg\n"); + return; + } + + msgb_v_put(msg, IPAC_MSGT_PONG); + bsc_do_write(&conn->queue, msg, IPAC_PROTO_IPACCESS); +} + static int forward_sccp(struct bsc_nat *nat, struct msgb *msg) { struct nat_sccp_connection *con; @@ -133,6 +147,11 @@ static int ussd_read_cb(struct osmo_fd *bfd) } if (TLVP_PRESENT(&tvp, IPAC_IDTAG_UNITNAME)) ussd_auth_con(&tvp, conn); + } else if (msg->l2h[0] == IPAC_MSGT_PING) { + LOGP(DNAT, LOGL_DEBUG, "Got USSD ping request.\n"); + ussd_pong(conn); + } else { + LOGP(DNAT, LOGL_NOTICE, "Got unknown IPACCESS message 0x%02x.\n", msg->l2h[0]); } msgb_free(msg); |