laforge has submitted this change. ( https://gerrit.osmocom.org/c/libosmo-sigtran/+/40008?usp=email )
Change subject: asp: Expect optional ASP Identifier in Rx ASPUP ACK ......................................................................
asp: Expect optional ASP Identifier in Rx ASPUP ACK
Change-Id: Idaa1a547d835402ca82e4abbae90681a3286d4da --- M src/xua_asp_fsm.c M tests/ss7/ss7_test.c 2 files changed, 20 insertions(+), 5 deletions(-)
Approvals: osmith: Looks good to me, but someone else must approve fixeria: Looks good to me, approved Jenkins Builder: Verified
diff --git a/src/xua_asp_fsm.c b/src/xua_asp_fsm.c index e285e18..3834ece 100644 --- a/src/xua_asp_fsm.c +++ b/src/xua_asp_fsm.c @@ -461,6 +461,11 @@ case XUA_ASP_E_ASPSM_ASPUP_ACK: /* only if role ASP */ ENSURE_ASP_OR_IPSP(fi, event); + /* Optional ASP Identifier */ + if ((asp_id_ie = xua_msg_find_tag(data, SUA_IEI_ASP_ID))) { + asp->remote_asp_id = xua_msg_part_get_u32(asp_id_ie); + asp->remote_asp_id_present = true; + } osmo_fsm_inst_state_chg(fi, XUA_ASP_S_INACTIVE, 0, 0); /* inform layer manager */ send_xlm_prim_simple(fi, OSMO_XLM_PRIM_M_ASP_UP, PRIM_OP_CONFIRM); @@ -472,9 +477,8 @@ case XUA_ASP_E_ASPSM_ASPUP: /* only if role SG */ ENSURE_SG_OR_IPSP(fi, event); - asp_id_ie = xua_msg_find_tag(data, SUA_IEI_ASP_ID); /* Optional ASP Identifier: Store for NTFY */ - if (asp_id_ie) { + if ((asp_id_ie = xua_msg_find_tag(data, SUA_IEI_ASP_ID))) { asp->remote_asp_id = xua_msg_part_get_u32(asp_id_ie); asp->remote_asp_id_present = true; } diff --git a/tests/ss7/ss7_test.c b/tests/ss7/ss7_test.c index f61ee0a..bb96e71 100644 --- a/tests/ss7/ss7_test.c +++ b/tests/ss7/ss7_test.c @@ -10,6 +10,7 @@
#include <osmocom/sigtran/osmo_ss7.h> #include <osmocom/sigtran/protocol/m3ua.h> +#include <osmocom/sigtran/protocol/sua.h>
#include <osmocom/core/utils.h> #include <osmocom/core/msgb.h> @@ -276,6 +277,8 @@ { struct osmo_ss7_as *as; struct osmo_ss7_asp *asp; + struct xua_msg *xua; + int rc;
OSMO_ASSERT(osmo_ss7_as_find_by_name(s7i, "as1") == NULL); as = osmo_ss7_as_find_or_create(s7i, "as1", OSMO_SS7_ASP_PROT_M3UA); @@ -296,9 +299,17 @@ osmo_ss7_asp_restart(asp);
/* ask FSM to send ASP-UP.req */ - osmo_fsm_inst_dispatch(asp->fi, XUA_ASP_E_M_ASP_UP_REQ, NULL); - osmo_fsm_inst_dispatch(asp->fi, XUA_ASP_E_ASPSM_ASPUP_ACK, NULL); - osmo_fsm_inst_dispatch(asp->fi, XUA_ASP_E_ASPTM_ASPAC_ACK, NULL); + rc = osmo_fsm_inst_dispatch(asp->fi, XUA_ASP_E_M_ASP_UP_REQ, NULL); + OSMO_ASSERT(rc == 0); + + xua = xua_msg_alloc(); + xua->hdr = XUA_HDR(SUA_MSGC_ASPSM, SUA_ASPSM_UP_ACK); + rc = osmo_fsm_inst_dispatch(asp->fi, XUA_ASP_E_ASPSM_ASPUP_ACK, xua); + xua_msg_free(xua); + OSMO_ASSERT(rc == 0); + + rc = osmo_fsm_inst_dispatch(asp->fi, XUA_ASP_E_ASPTM_ASPAC_ACK, NULL); + OSMO_ASSERT(rc == 0);
OSMO_ASSERT(osmo_ss7_as_del_asp(as, "asp1") == 0); OSMO_ASSERT(osmo_ss7_as_del_asp(as, "asp2") == -ENODEV);