MSC_ConnHdlr: Tighten permitted messages

Accept CRCX only once; Accept MDCX only after CRCX; Accept RSL MODIFY
only after RR MODIFY.

Change-Id: I44abdc3d000c76243f9885f0e30e15c2dc9aadaa
This commit is contained in:
Harald Welte 2017-12-16 23:36:23 +01:00
parent 35988316c7
commit 60e80dd705
1 changed files with 8 additions and 4 deletions

View File

@ -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;
}