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.orgReview at https://gerrit.osmocom.org/2238 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. Change-Id: I836e0940a8dbb0f55ddf132202a5f0d51473b82d --- M src/xua_asp_fsm.c 1 file changed, 22 insertions(+), 11 deletions(-) git pull ssh://gerrit.osmocom.org:29418/libosmo-sccp refs/changes/38/2238/1 diff --git a/src/xua_asp_fsm.c b/src/xua_asp_fsm.c index 80faeb2..a8ef01a 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; @@ -217,7 +217,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 +229,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 +328,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 +340,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 +401,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 +411,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 +424,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 +470,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 +480,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 +508,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 +586,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: newchange Gerrit-Change-Id: I836e0940a8dbb0f55ddf132202a5f0d51473b82d Gerrit-PatchSet: 1 Gerrit-Project: libosmo-sccp Gerrit-Branch: master Gerrit-Owner: Harald Welte <laforge at gnumonks.org>