neels has uploaded this change for review.
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");
To view, visit change 35052. To unsubscribe, or for help writing mail filters, visit settings.