This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
Harald Welte gerrit-no-reply at lists.osmocom.orgHello Jenkins Builder, I'd like you to reexamine a change. Please visit https://gerrit.osmocom.org/2238 to look at the new patch set (#2). xua_asp_fsm: Always return BEAT-ACK for BEAT, including BEAT DATA IE The RFCs say we *must* always respond to the optional heartbeat message, and we must return a verbatim copy of the heartbeat data IE. This was discovered (and fix validated) using m3ua-sgp-asptm-v-011 of Michael Tuexen's m3ua-testtool. Change-Id: I836e0940a8dbb0f55ddf132202a5f0d51473b82d --- M src/xua_asp_fsm.c 1 file changed, 23 insertions(+), 11 deletions(-) git pull ssh://gerrit.osmocom.org:29418/libosmo-sccp refs/changes/38/2238/2 diff --git a/src/xua_asp_fsm.c b/src/xua_asp_fsm.c index 80faeb2..aafc09f 100644 --- a/src/xua_asp_fsm.c +++ b/src/xua_asp_fsm.c @@ -128,7 +128,7 @@ } /* ask the xUA implementation to transmit a specific message */ -static int peer_send(struct osmo_fsm_inst *fi, int out_event) +static int peer_send(struct osmo_fsm_inst *fi, int out_event, struct xua_msg *in) { struct xua_asp_fsm_priv *xafp = fi->priv; struct osmo_ss7_asp *asp = xafp->asp; @@ -168,6 +168,7 @@ /* RFC3868 Ch. 3.5.6 */ xua->hdr = XUA_HDR(SUA_MSGC_ASPSM, SUA_ASPSM_BEAT_ACK); /* Optional: Heartbeat Data */ + xua_msg_copy_part(xua, M3UA_IEI_HEARDBT_DATA, in, M3UA_IEI_HEARDBT_DATA); break; case XUA_ASP_E_ASPTM_ASPAC: /* RFC3868 Ch. 3.6.1 */ @@ -217,7 +218,7 @@ osmo_fsm_event_name(fi->fsm, xafp->t_ack.out_event)); /* Re-transmit message */ - peer_send(fi, xafp->t_ack.out_event); + peer_send(fi, xafp->t_ack.out_event, NULL); /* Re-start the timer */ osmo_timer_schedule(&xafp->t_ack.timer, XUA_T_ACK_SEC, 0); @@ -229,7 +230,7 @@ struct xua_asp_fsm_priv *xafp = fi->priv; int rc; - rc = peer_send(fi, out_event); + rc = peer_send(fi, out_event, NULL); if (rc < 0) return rc; @@ -328,7 +329,7 @@ asp->asp_id_present = true; } /* send ACK */ - peer_send(fi, XUA_ASP_E_ASPSM_ASPUP_ACK); + peer_send(fi, XUA_ASP_E_ASPSM_ASPUP_ACK, NULL); /* transition state and inform layer manager */ osmo_fsm_inst_state_chg(fi, XUA_ASP_S_INACTIVE, 0, 0); send_xlm_prim_simple(fi, OSMO_XLM_PRIM_M_ASP_UP, @@ -340,7 +341,7 @@ /* The SGP MUST send an ASP Down Ack message in response * to a received ASP Down message from the ASP even if * the ASP is already marked as ASP-DOWN at the SGP. */ - peer_send(fi, XUA_ASP_E_ASPSM_ASPDN_ACK); + peer_send(fi, XUA_ASP_E_ASPSM_ASPDN_ACK, NULL); break; } } @@ -401,7 +402,7 @@ /* only in role SG */ ENSURE_SG_OR_IPSP(fi, event); /* send ACK */ - peer_send(fi, XUA_ASP_E_ASPTM_ASPAC_ACK); + peer_send(fi, XUA_ASP_E_ASPTM_ASPAC_ACK, NULL); /* transition state and inform layer manager */ osmo_fsm_inst_state_chg(fi, XUA_ASP_S_ACTIVE, 0, 0); send_xlm_prim_simple(fi, OSMO_XLM_PRIM_M_ASP_ACTIVE, @@ -411,7 +412,7 @@ /* only in role SG */ ENSURE_SG_OR_IPSP(fi, event); /* send ACK */ - peer_send(fi, XUA_ASP_E_ASPSM_ASPDN_ACK); + peer_send(fi, XUA_ASP_E_ASPSM_ASPDN_ACK, NULL); /* transition state and inform layer manager */ osmo_fsm_inst_state_chg(fi, XUA_ASP_S_DOWN, 0, 0); send_xlm_prim_simple(fi, OSMO_XLM_PRIM_M_ASP_DOWN, @@ -424,7 +425,7 @@ * remote ASP is already in the ASP-INACTIVE state, an * ASP Up Ack message is returned and no further action * is taken. */ - peer_send(fi, XUA_ASP_E_ASPSM_ASPUP_ACK); + peer_send(fi, XUA_ASP_E_ASPSM_ASPUP_ACK, NULL); break; } } @@ -470,7 +471,7 @@ /* only in role SG */ ENSURE_SG_OR_IPSP(fi, event); /* send ACK */ - peer_send(fi, XUA_ASP_E_ASPTM_ASPIA_ACK); + peer_send(fi, XUA_ASP_E_ASPTM_ASPIA_ACK, NULL); /* transition state and inform layer manager */ osmo_fsm_inst_state_chg(fi, XUA_ASP_S_INACTIVE, 0, 0); send_xlm_prim_simple(fi, OSMO_XLM_PRIM_M_ASP_INACTIVE, @@ -480,7 +481,7 @@ /* only in role SG */ ENSURE_SG_OR_IPSP(fi, event); /* send ACK */ - peer_send(fi, XUA_ASP_E_ASPSM_ASPDN_ACK); + peer_send(fi, XUA_ASP_E_ASPSM_ASPDN_ACK, NULL); /* transition state and inform layer manager */ osmo_fsm_inst_state_chg(fi, XUA_ASP_S_DOWN, 0, 0); send_xlm_prim_simple(fi, OSMO_XLM_PRIM_M_ASP_DOWN, @@ -508,12 +509,21 @@ static void xua_asp_allstate(struct osmo_fsm_inst *fi, uint32_t event, void *data) { + struct xua_msg *xua; + switch (event) { case XUA_ASP_E_SCTP_COMM_DOWN_IND: case XUA_ASP_E_SCTP_RESTART_IND: osmo_fsm_inst_state_chg(fi, XUA_ASP_S_DOWN, 0, 0); send_xlm_prim_simple(fi, OSMO_XLM_PRIM_M_ASP_DOWN, PRIM_OP_INDICATION); + break; + case XUA_ASP_E_ASPSM_BEAT: + xua = data; + peer_send(fi, XUA_ASP_E_ASPSM_BEAT_ACK, xua); + break; + case XUA_ASP_E_ASPSM_BEAT_ACK: + /* FIXME: stop timer, if any */ break; default: break; @@ -577,7 +587,9 @@ .log_subsys = DLSS7, .event_names = xua_asp_event_names, .allstate_event_mask = S(XUA_ASP_E_SCTP_COMM_DOWN_IND) | - S(XUA_ASP_E_SCTP_RESTART_IND), + S(XUA_ASP_E_SCTP_RESTART_IND) | + S(XUA_ASP_E_ASPSM_BEAT) | + S(XUA_ASP_E_ASPSM_BEAT_ACK), .allstate_action = xua_asp_allstate, }; -- To view, visit https://gerrit.osmocom.org/2238 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newpatchset Gerrit-Change-Id: I836e0940a8dbb0f55ddf132202a5f0d51473b82d Gerrit-PatchSet: 2 Gerrit-Project: libosmo-sccp Gerrit-Branch: master Gerrit-Owner: Harald Welte <laforge at gnumonks.org> Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org> Gerrit-Reviewer: Jenkins Builder