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");

--
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/35052?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: I98c6171a592dfe1573e15136c4ecf4ff234048d7
Gerrit-Change-Number: 35052
Gerrit-PatchSet: 4
Gerrit-Owner: neels <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <[email protected]>
Gerrit-Reviewer: laforge <[email protected]>
Gerrit-Reviewer: neels <[email protected]>
Gerrit-Reviewer: pespin <[email protected]>
Gerrit-MessageType: merged

Reply via email to