neels has submitted this change. ( 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()
Subsequent patch wants to re-use that code. Split off to keep the patches small.
Related: I402ed0523a2a87b83f29c5577b2c828102005d53 Change-Id: I98c6171a592dfe1573e15136c4ecf4ff234048d7 --- M msc/BSC_ConnectionHandler.ttcn 1 file changed, 74 insertions(+), 51 deletions(-)
Approvals: fixeria: Looks good to me, but someone else must approve Jenkins Builder: Verified neels: Looks good to me, approved
diff --git a/msc/BSC_ConnectionHandler.ttcn b/msc/BSC_ConnectionHandler.ttcn index 056a3c0..109888a 100644 --- a/msc/BSC_ConnectionHandler.ttcn +++ b/msc/BSC_ConnectionHandler.ttcn @@ -979,6 +979,7 @@ BearerCapability_TLV bearer_cap, /* which bearer capabilities to claim */ boolean emergency, /* is this an emergency call? */ boolean csd, /* is this a circuit switched data call? */ + BSSMAP_FIELD_CodecElement tch_codec_chosen, /* If TCH, which codec to send in BSSMAP Assignment Complete. */
/* MNCC related parameters */ uint32_t mncc_callref optional, /* call reference on the MNCC side */ @@ -1016,6 +1017,7 @@ bearer_cap := valueof(ts_Bcap_voice), emergency := false, csd := false, + tch_codec_chosen := valueof(ts_CodecFR), mncc_callref := omit, mncc_bearer_cap := valueof(ts_MNCC_bcap_voice), mncc_rtp_ip := "42.23.11.5", @@ -1056,6 +1058,7 @@ bearer_cap := ?, emergency := ?, csd := ?, + tch_codec_chosen := ?, mncc_callref := *, mncc_bearer_cap := ?, mncc_rtp_ip := ?, @@ -1606,6 +1609,63 @@ } }
+private function f_mo_call_establish__handle_assignment_request(inout CallParameters cpars, PDU_BSSAP ass_req) +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({cpars.tch_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 {
@@ -1642,11 +1702,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; @@ -1687,52 +1742,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); } [] BSSAP.receive(tr_RANAP_RabAssReq(*)) -> value ranap { log("f_mo_call_establish 4.iu: rx RANAP RAB Assignment Request");