bsc: Unregister old RSL channel number after assignment

Change-Id: I27d113391094f938ff92c4d6514172ee634f695c
This commit is contained in:
Harald Welte 2018-01-29 22:29:29 +01:00
parent 21583088e8
commit 1909f464af
2 changed files with 20 additions and 3 deletions

View File

@ -426,8 +426,9 @@ altstep as_assignment(inout AssignmentState st) runs on MSC_ConnHdlr {
}
[st.rr_ass_cmpl_seen] RSL.receive(tr_RSL_RF_CHAN_REL(st.old_chan_nr)) {
RSL.send(ts_RSL_RF_CHAN_REL_ACK(st.old_chan_nr));
/* FIXME: unregister for old channel number in RSL emulation */
//f_rslem_unregister(0, st.old_chan_nr);
/* unregister for old channel number in RSL emulation */
/* FIXME: Determine TRX NR by ARFCN, instead of hard-coded TRX0! */
f_rslem_unregister(0, st.old_chan_nr);
st.assignment_done := true;
repeat;
}

View File

@ -50,9 +50,10 @@ type port RSL_DCHAN_PT message {
} with { extension "internal" };
signature RSLEM_register(uint8_t trx_nr, RslChannelNr chan_nr, RSL_DchanHdlr hdlr);
signature RSLEM_unregister(uint8_t trx_nr, RslChannelNr chan_nr, RSL_DchanHdlr hdlr);
type port RSLEM_PROC_PT procedure {
inout RSLEM_register;
inout RSLEM_register, RSLEM_unregister;
} with { extension "internal" };
/***********************************************************************
@ -379,6 +380,13 @@ function main() runs on RSL_Emulation_CT {
RSL_PROC.reply(RSLEM_register:{trx_nr, chan_nr, vc_conn});
}
[] RSL_PROC.getcall(RSLEM_unregister:{?,?,?}) -> param(trx_nr, chan_nr, vc_conn) {
cid := f_cid_by_chan_nr(trx_nr, chan_nr);
f_cid_clear(cid);
RSL_PROC.reply(RSLEM_unregister:{trx_nr, chan_nr, vc_conn});
}
}
}
}
@ -400,4 +408,12 @@ function f_rslem_register(uint8_t trx_nr, RslChannelNr chan_nr) runs on RSL_Dcha
}
}
/* client/conn_hdlr side function to use procedure port to unregister stream_id/chan_nr */
function f_rslem_unregister(uint8_t trx_nr, RslChannelNr chan_nr) runs on RSL_DchanHdlr {
RSL_PROC.call(RSLEM_unregister:{trx_nr, chan_nr, self}) {
[] RSL_PROC.getreply(RSLEM_unregister:{?,?,?}) {};
}
}
}