diff options
author | Harald Welte <laforge@gnumonks.org> | 2017-12-16 23:36:23 +0100 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2017-12-17 13:24:39 +0100 |
commit | 82d2b87b47dcedcc9f2026749cf3aa45b1467ad8 (patch) | |
tree | 8c71aad3136a8beddcf088c233deedde4c2214b4 | |
parent | 552620d5700b1d4f10d5d9270a1833e656cd405e (diff) |
MSC_ConnHdlr: Tighten permitted messages
Accept CRCX only once; Accept MDCX only after CRCX; Accept RSL MODIFY
only after RR MODIFY.
Change-Id: I44abdc3d000c76243f9885f0e30e15c2dc9aadaa
-rw-r--r-- | bsc/MSC_ConnectionHandler.ttcn | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/bsc/MSC_ConnectionHandler.ttcn b/bsc/MSC_ConnectionHandler.ttcn index 1bc4350f..d6154976 100644 --- a/bsc/MSC_ConnectionHandler.ttcn +++ b/bsc/MSC_ConnectionHandler.ttcn @@ -106,6 +106,8 @@ runs on MSC_ConnHdlr return PDU_BSSAP { var RSL_Message rsl; timer T := 10.0; var boolean exp_compl := ischosen(exp_ass_cpl.pdu.bssmap.assignmentComplete); + var boolean crcx_seen := false; + var boolean rr_modify_seen := false; f_create_chan_and_exp(pars); /* we should now have a COMPL_L3 at the MSC */ @@ -118,24 +120,26 @@ runs on MSC_ConnHdlr return PDU_BSSAP { setverdict(pass); return bssap; } - [] RSL.receive(tr_RSL_DATA_REQ(g_chan_nr)) -> value rsl { + [rr_modify_seen == false] RSL.receive(tr_RSL_DATA_REQ(g_chan_nr)) -> value rsl { var PDU_ML3_NW_MS l3 := dec_PDU_ML3_NW_MS(rsl.ies[2].body.l3_info.payload); log("Rx L3 from net: ", l3); if (ischosen(l3.msgs.rrm.channelModeModify)) { f_rsl_reply(ts_RRM_ModeModifyAck(l3.msgs.rrm.channelModeModify.channelDescription, l3.msgs.rrm.channelModeModify.channelMode), rsl); + rr_modify_seen := true; } repeat; } - [] RSL.receive(tr_RSL_MsgTypeD(RSL_MT_MODE_MODIFY_REQ)) -> value rsl { + [rr_modify_seen] RSL.receive(tr_RSL_MsgTypeD(RSL_MT_MODE_MODIFY_REQ)) -> value rsl { RSL.send(ts_RSL_MODE_MODIFY_ACK(g_chan_nr)); repeat; } - [] RSL.receive(tr_RSL_IPA_CRCX(g_chan_nr)) -> value rsl { + [crcx_seen == false] RSL.receive(tr_RSL_IPA_CRCX(g_chan_nr)) -> value rsl { RSL.send(ts_RSL_IPA_CRCX_ACK(g_chan_nr, 1, 1, 1, 1)); + crcx_seen := true; repeat; } - [] RSL.receive(tr_RSL_IPA_MDCX(g_chan_nr, ?)) -> value rsl{ + [crcx_seen] RSL.receive(tr_RSL_IPA_MDCX(g_chan_nr, ?)) -> value rsl{ RSL.send(ts_RSL_IPA_MDCX_ACK(g_chan_nr, 1, 1, 1, 1)); repeat; } |