neels has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/35052?usp=email )
Change subject: msc: split off f_mo_call_establish__handle_assignment_request() ......................................................................
msc: split off f_mo_call_establish__handle_assignment_request()
Change-Id: I98c6171a592dfe1573e15136c4ecf4ff234048d7 --- M msc/BSC_ConnectionHandler.ttcn 1 file changed, 67 insertions(+), 51 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/52/35052/1
diff --git a/msc/BSC_ConnectionHandler.ttcn b/msc/BSC_ConnectionHandler.ttcn index e25d496..1737071 100644 --- a/msc/BSC_ConnectionHandler.ttcn +++ b/msc/BSC_ConnectionHandler.ttcn @@ -1554,6 +1554,63 @@ } }
+private function f_mo_call_establish__handle_assignment_request(inout CallParameters cpars, PDU_BSSAP ass_req, + BSSMAP_FIELD_CodecElement codec_chosen) runs on BSC_ConnHdlr { + var BSSMAP_IE_AoIP_TransportLayerAddress tla; + var BSSMAP_IE_SpeechCodec codec; + var BSSMAP_IE_Osmo_OsmuxCID osmuxCID; + + if (not ispresent(ass_req.pdu.bssmap.assignmentRequest.aoIPTransportLayer)) { + setverdict(fail, "MSC sent Assignment Request without AoIP Transport Layer IE"); + mtc.stop; + } + + var template BSSMAP_IE_AoIP_TransportLayerAddress tla_ass1 := + f_tr_BSSMAP_IE_AoIP_TLA(cpars.mgw_conn_1.mgw_rtp_ip, ?); + var template BSSMAP_IE_AoIP_TransportLayerAddress tla_ass2 := + f_tr_BSSMAP_IE_AoIP_TLA(cpars.mgw_conn_2.mgw_rtp_ip, ?); + + if (not match(ass_req.pdu.bssmap.assignmentRequest.aoIPTransportLayer, tla_ass1) + and not match(ass_req.pdu.bssmap.assignmentRequest.aoIPTransportLayer, tla_ass2)) { + log("Expected one of: 1:", tla_ass1, " 2:", tla_ass2); + log("Got:", ass_req.pdu.bssmap.assignmentRequest.aoIPTransportLayer); + setverdict(fail, "MSC sent Assignment Request with unexpected AoIP Transport Layer IE"); + mtc.stop; + } + + if (cpars.csd and not match(ass_req.pdu.bssmap.assignmentRequest.codecList.codecElements, + {ts_CodecCSData})) { + setverdict(fail, "MSC sent Assignment Request with unexpected codec list for CSD ", + ass_req.pdu.bssmap.assignmentRequest.codecList); + mtc.stop; + } + + tla := valueof(f_ts_BSSMAP_IE_AoIP_TLA(cpars.bss_rtp_ip, cpars.bss_rtp_port)); + + if (cpars.csd) { + codec := valueof(ts_BSSMAP_IE_SpeechCodec({ts_CodecCSData})); + } else { + codec := valueof(ts_BSSMAP_IE_SpeechCodec({codec_chosen})); + } + + var PDU_BSSAP bssap; + if (cpars.use_osmux) { + if (not ispresent(ass_req.pdu.bssmap.assignmentRequest.osmuxCID)) { + setverdict(fail, "MSC sent AssignReq without expected OsmuxCID IE"); + mtc.stop; + } + osmuxCID := valueof(ts_OsmuxCID(0)); + if (cpars.use_osmux and not match(ass_req.pdu.bssmap.assignmentRequest.osmuxCID, osmuxCID)) { + setverdict(fail, "MSC sent AssignReq without expected OsmuxCID IE"); + mtc.stop; + } + bssap := valueof(ts_BSSMAP_AssignmentComplete(omit, tla, codec, osmuxCID)); + } else { + bssap := valueof(ts_BSSMAP_AssignmentComplete(omit, tla, codec)); + } + BSSAP.send(bssap); +} + function f_mo_call_establish(inout CallParameters cpars) runs on BSC_ConnHdlr {
@@ -1590,11 +1647,6 @@ return; }
- var template BSSMAP_IE_AoIP_TransportLayerAddress tla_ass1 := - f_tr_BSSMAP_IE_AoIP_TLA(cpars.mgw_conn_1.mgw_rtp_ip, ?); - var template BSSMAP_IE_AoIP_TransportLayerAddress tla_ass2 := - f_tr_BSSMAP_IE_AoIP_TLA(cpars.mgw_conn_2.mgw_rtp_ip, ?); - var default mdcx := activate(as_optional_mgcp_mdcx(cpars.mgw_conn_2.mgw_rtp_ip, cpars.mgw_conn_2.mgw_rtp_port)); var boolean got_mncc_setup_compl_ind := false; var boolean got_cc_connect := false; @@ -1635,52 +1687,7 @@ //[g_pars.ran_is_geran] BSSAP.receive(tr_BSSMAP_AssignmentReq(omit, tla_ass)) -> value bssap [] BSSAP.receive(tr_BSSMAP_AssignmentReq(omit)) -> value bssap { log("f_mo_call_establish 4: rx Assignment Request"); - var BSSMAP_IE_AoIP_TransportLayerAddress tla; - var BSSMAP_IE_SpeechCodec codec; - var BSSMAP_IE_Osmo_OsmuxCID osmuxCID; - - if (not ispresent(bssap.pdu.bssmap.assignmentRequest.aoIPTransportLayer)) { - setverdict(fail, "MSC sent Assignment Request without AoIP Transport Layer IE"); - mtc.stop; - } - if (not match(bssap.pdu.bssmap.assignmentRequest.aoIPTransportLayer, tla_ass1) - and not match(bssap.pdu.bssmap.assignmentRequest.aoIPTransportLayer, tla_ass2)) { - log("Expected one of: 1:", tla_ass1, " 2:", tla_ass2); - log("Got:", bssap.pdu.bssmap.assignmentRequest.aoIPTransportLayer); - setverdict(fail, "MSC sent Assignment Request with unexpected AoIP Transport Layer IE"); - mtc.stop; - } - - if (cpars.csd and not match(bssap.pdu.bssmap.assignmentRequest.codecList.codecElements, - {ts_CodecCSData})) { - setverdict(fail, "MSC sent Assignment Request with unexpected codec list for CSD ", - bssap.pdu.bssmap.assignmentRequest.codecList); - mtc.stop; - } - - tla := valueof(f_ts_BSSMAP_IE_AoIP_TLA(cpars.bss_rtp_ip, cpars.bss_rtp_port)); - - if (cpars.csd) { - codec := valueof(ts_BSSMAP_IE_SpeechCodec({ts_CodecCSData})); - } else { - codec := valueof(ts_BSSMAP_IE_SpeechCodec({ts_CodecFR})); - } - - if (cpars.use_osmux) { - if (not ispresent(bssap.pdu.bssmap.assignmentRequest.osmuxCID)) { - setverdict(fail, "MSC sent AssignReq without expected OsmuxCID IE"); - mtc.stop; - } - osmuxCID := valueof(ts_OsmuxCID(0)); - if (cpars.use_osmux and not match(bssap.pdu.bssmap.assignmentRequest.osmuxCID, osmuxCID)) { - setverdict(fail, "MSC sent AssignReq without expected OsmuxCID IE"); - mtc.stop; - } - bssap := valueof(ts_BSSMAP_AssignmentComplete(omit, tla, codec, osmuxCID)); - } else { - bssap := valueof(ts_BSSMAP_AssignmentComplete(omit, tla, codec)); - } - BSSAP.send(bssap); + f_mo_call_establish__handle_assignment_request(cpars, bssap, cpars.ass_compl_chosen_codec); } [] BSSAP.receive(tr_RANAP_RabAssReq(*)) -> value ranap { log("f_mo_call_establish 4.iu: rx RANAP RAB Assignment Request");