aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2017-12-16 23:36:23 +0100
committerHarald Welte <laforge@gnumonks.org>2017-12-17 13:24:39 +0100
commit82d2b87b47dcedcc9f2026749cf3aa45b1467ad8 (patch)
tree8c71aad3136a8beddcf088c233deedde4c2214b4
parent552620d5700b1d4f10d5d9270a1833e656cd405e (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.ttcn12
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;
}