aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2019-10-23 17:23:01 +0200
committerPau Espin Pedrol <pespin@sysmocom.de>2019-10-24 17:56:00 +0200
commitd70d82bdf36838f7dc3a236fb777ee8575f191a5 (patch)
tree36ba7e05f341df60c7a83fb70c9283bb2b77f19a
parent6e10736190ad3964eea7156316dd8348b20aa601 (diff)
ss7: Set Traffic mode and Route Ctx in ASPAC ACK msg if known
-rw-r--r--src/xua_asp_fsm.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/xua_asp_fsm.c b/src/xua_asp_fsm.c
index 1b39639..890a6b5 100644
--- a/src/xua_asp_fsm.c
+++ b/src/xua_asp_fsm.c
@@ -204,8 +204,9 @@ static int peer_send(struct osmo_fsm_inst *fi, int out_event, struct xua_msg *in
/* RFC3868 Ch. 3.6.2 */
xua->hdr = XUA_HDR(SUA_MSGC_ASPTM, SUA_ASPTM_ACTIVE_ACK);
/* Optional: Traffic Mode Type */
- /* Mandatory: Routing Context */
- //FIXME xua_msg_add_u32(xua, SUA_IEI_ROUTE_CTX,
+ xua_msg_copy_part(xua, M3UA_IEI_TRAF_MODE_TYP, in, M3UA_IEI_TRAF_MODE_TYP);
+ /* Optional: Routing Context */
+ xua_msg_copy_part(xua, M3UA_IEI_ROUTE_CTX, in, M3UA_IEI_ROUTE_CTX);
/* Optional: Info String */
break;
case XUA_ASP_E_ASPTM_ASPIA:
@@ -469,7 +470,7 @@ static void xua_asp_fsm_inactive(struct osmo_fsm_inst *fi, uint32_t event, void
}
}
/* send ACK */
- peer_send(fi, XUA_ASP_E_ASPTM_ASPAC_ACK, NULL);
+ peer_send(fi, XUA_ASP_E_ASPTM_ASPAC_ACK, xua_in);
/* 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,
@@ -509,6 +510,7 @@ static void xua_asp_fsm_inactive_onenter(struct osmo_fsm_inst *fi, uint32_t prev
static void xua_asp_fsm_active(struct osmo_fsm_inst *fi, uint32_t event, void *data)
{
+ struct xua_msg *xua_in;
check_stop_t_ack(fi, event);
switch (event) {
case XUA_ASP_E_ASPSM_ASPDN_ACK:
@@ -573,10 +575,11 @@ static void xua_asp_fsm_active(struct osmo_fsm_inst *fi, uint32_t event, void *d
PRIM_OP_INDICATION);
break;
case XUA_ASP_E_ASPTM_ASPAC:
+ xua_in = data;
/* only in role SG */
ENSURE_SG_OR_IPSP(fi, event);
/* send ACK */
- peer_send(fi, XUA_ASP_E_ASPTM_ASPAC_ACK, NULL);
+ peer_send(fi, XUA_ASP_E_ASPTM_ASPAC_ACK, xua_in);
break;
}
}