pespin has submitted this change. ( https://gerrit.osmocom.org/c/osmo-hnbgw/+/37808?usp=email )
Change subject: on RUA DT for unknown context, respond with RUA Disconnect ......................................................................
on RUA DT for unknown context, respond with RUA Disconnect
If we receive a DirectTransfer for an unknown RUA context, respond with a RUA Disconnect to make sure the peer knows there is no such context. (Do not respond to RUA Disconnect though.)
Related: OS#6283 Tweaked-by: Oliver Smith osmith@sysmocom.de Change-Id: If0b9a999649c9822f55b42b0cae8408af668e1b8 --- M src/osmo-hnbgw/hnbgw_rua.c 1 file changed, 9 insertions(+), 5 deletions(-)
Approvals: Jenkins Builder: Verified fixeria: Looks good to me, approved pespin: Looks good to me, but someone else must approve
diff --git a/src/osmo-hnbgw/hnbgw_rua.c b/src/osmo-hnbgw/hnbgw_rua.c index 01e9e3a..b804b46 100644 --- a/src/osmo-hnbgw/hnbgw_rua.c +++ b/src/osmo-hnbgw/hnbgw_rua.c @@ -242,7 +242,6 @@ struct msgb *ranap_msg = NULL; struct hnbgw_context_map *map = NULL; bool is_ps; - int logl;
switch (cN_DomainIndicator) { case RUA_CN_DomainIndicator_cs_domain: @@ -267,7 +266,6 @@ }
map = context_map_find_by_rua_ctx_id(hnb, context_id, is_ps); - logl = LOGL_ERROR;
switch (rua_procedure) { case RUA_ProcedureCode_id_Connect: @@ -293,13 +291,19 @@ /* For RUA Disconnect, do not spam the ERROR log. It is just a stray Disconnect, no harm done. * Context: some CN are known to rapidly tear down SCCP without waiting for RUA to disconnect gracefully * (IU Release Complete). Such CN would cause ERROR logging for each and every released context map. */ - logl = LOGL_DEBUG; - /* fall thru */ + if (!map) { + LOGHNB(hnb, DRUA, LOGL_DEBUG, "rx RUA %s for unknown RUA context %u\n", + rua_procedure_code_name(rua_procedure), context_id); + return -EINVAL; + } + break; + default: /* Any message other than Connect must have a valid RUA context */ if (!map) { - LOGHNB(hnb, DRUA, logl, "rx RUA %s for unknown RUA context %u\n", + LOGHNB(hnb, DRUA, LOGL_ERROR, "rx RUA %s for unknown RUA context %u\n", rua_procedure_code_name(rua_procedure), context_id); + rua_tx_disc_conn_fail(hnb, is_ps, context_id); return -EINVAL; } break;