pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/libosmo-sigtran/+/42093?usp=email )
Change subject: sua: Support rx SCON in role=IPSP ......................................................................
sua: Support rx SCON in role=IPSP
Change-Id: I3f46b634084c1d71643812828d4f114ab45dffde --- M src/sua.c M src/xua_snm.c 2 files changed, 27 insertions(+), 1 deletion(-)
git pull ssh://gerrit.osmocom.org:29418/libosmo-sigtran refs/changes/93/42093/1
diff --git a/src/sua.c b/src/sua.c index ceb5d7a..2eb93e3 100644 --- a/src/sua.c +++ b/src/sua.c @@ -1068,6 +1068,30 @@ return rc; }
+/* received SNM message on IPSP side */ +static int sua_rx_snm_ipsp(struct osmo_ss7_asp *asp, struct xua_msg *xua) +{ + struct osmo_ss7_as *as = NULL; + struct xua_msg_part *rctx_ie; + int rc = 0; + + switch (xua->hdr.msg_type) { + case M3UA_SNM_SCON: + /* RFC3868 1.5.6: "The SUA layer at an ASP or IPSP MAY indicate local congestion to + * an SUA peer with an SCON message." */ + rctx_ie = xua_msg_find_tag(xua, SUA_IEI_ROUTE_CTX); + rc = xua_find_as_for_asp(&as, asp, rctx_ie); + if (rc) + return rc; + xua_snm_rx_scon(asp, as, xua); + break; + default: + return M3UA_ERR_UNSUPP_MSG_TYPE; + } + + return rc; +} + static int sua_rx_snm(struct osmo_ss7_asp *asp, struct xua_msg *xua) { /* SNM only permitted in ACTIVE state */ @@ -1087,6 +1111,8 @@ return sua_rx_snm_sg(asp, xua); case OSMO_SS7_ASP_ROLE_ASP: return sua_rx_snm_asp(asp, xua); + case OSMO_SS7_ASP_ROLE_IPSP: + return sua_rx_snm_ipsp(asp, xua); default: return SUA_ERR_UNSUPP_MSG_CLASS; } diff --git a/src/xua_snm.c b/src/xua_snm.c index e983293..f7d3192 100644 --- a/src/xua_snm.c +++ b/src/xua_snm.c @@ -587,7 +587,7 @@ xua_snm_upu(as, aff_pc, user, cause, info_str); }
-/* an incoming SUA/M3UA SCON was received from a remote SG */ +/* an incoming SUA/M3UA SCON was received from a remote ASP/SG/IPSP */ void xua_snm_rx_scon(struct osmo_ss7_asp *asp, struct osmo_ss7_as *as, struct xua_msg *xua) { struct xua_msg_part *ie_aff_pc = xua_msg_find_tag(xua, M3UA_IEI_AFFECTED_PC);