pespin has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/14493


Change subject: WIP
......................................................................

WIP

Change-Id: I21ffcaa241e4fc0bd2c6563e21f1c8bdb4d14dd6
---
M bsc/BSC_Tests.ttcn
M bsc/MSC_ConnectionHandler.ttcn
M library/BSSMAP_Templates.ttcn
3 files changed, 94 insertions(+), 3 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks 
refs/changes/93/14493/1

diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
index 00995bf..37e1bf8 100644
--- a/bsc/BSC_Tests.ttcn
+++ b/bsc/BSC_Tests.ttcn
@@ -1233,6 +1233,20 @@
        setverdict(pass);
 }

+/* Verify MGCP muxed over IPA from MSC (or BSC-NAT) is forwarded to MGW by BSC 
*/
+testcase TC_assignment_mgcp_ipa() runs on test_CT {
+       var TestHdlrParams pars := f_gen_test_hdlr_pars();
+       var MSC_ConnHdlr vc_conn;
+
+       f_init(1, true);
+       f_sleep(1.0);
+
+       pars.ass_codec_list := valueof(ts_BSSMAP_IE_CodecList({ts_CodecFR}));
+       pars.forward_mgcp_ipa := true;
+       vc_conn := f_start_handler(refers(f_TC_assignment_codec), pars);
+       vc_conn.done;
+}
+
 function f_bssap_tx_ud(template PDU_BSSAP bssap) runs on test_CT {
        BSSAP.send(ts_BSSAP_UNITDATA_req(g_bssap.sccp_addr_peer, 
g_bssap.sccp_addr_own, bssap));
 }
@@ -1717,6 +1731,7 @@
        }
        connect(vc_conn:BSSAP, g_bssap.vc_RAN:CLIENT);
        connect(vc_conn:MGCP, vc_MGCP:MGCP_CLIENT);
+       connect(vc_conn:MGCP_MSC_CLIENT, g_bssap.vc_RAN:MGCP)
 }

 function f_start_handler(void_fn fn, template (omit) TestHdlrParams pars := 
omit)
@@ -4018,6 +4033,7 @@
        execute( TC_ctrl() );
        if (mp_bssap_cfg.transport == BSSAP_TRANSPORT_SCCPlite_SERVER) {
                execute( TC_ctrl_location() );
+               execute( TC_assignment_mgcp_ipa() );
        }

        /* RSL DCHAN Channel ACtivation / Deactivation */
diff --git a/bsc/MSC_ConnectionHandler.ttcn b/bsc/MSC_ConnectionHandler.ttcn
index c709794..870103f 100644
--- a/bsc/MSC_ConnectionHandler.ttcn
+++ b/bsc/MSC_ConnectionHandler.ttcn
@@ -15,6 +15,7 @@
 import from General_Types all;
 import from Osmocom_Types all;
 import from GSM_Types all;
+import from IPA_Emulation all;
 import from SCCPasp_Types all;
 import from BSSAP_Types all;
 import from RAN_Emulation all;
@@ -23,6 +24,7 @@
 import from IPL4asp_Types all;
 import from Native_Functions all;

+import from MGCP_CodecPort all;
 import from MGCP_Types all;
 import from MGCP_Templates all;
 import from MGCP_Emulation all;
@@ -357,9 +359,19 @@
        port RAN_PROC_PT RAN;
        port TELNETasp_PT BSCVTY;

+       /* Proxy MGCP-over-IPA and MGCP-over-UDP */
+       //var MGCP_Adapter_CT vc_MGCP_UDP;
+       port IPA_MGCP_PT MGCP_MSC_CLIENT;
+       var integer g_trans_id := 0;
+       var MgcpConnectionId g_mgcp_conn_id;
+
        var MediaState g_media;
        var TestHdlrParams g_pars;

+       var charstring host_bts := "127.0.0.2";
+       var charstring host_mgw := "127.0.0.3";
+       var charstring host_msc := "127.0.0.4";
+
        var boolean g_vty_initialized := false;
 }

@@ -372,6 +384,19 @@
                f_vty_transceive(BSCVTY, "enable");
                g_vty_initialized := true;
        }
+
+/*
+       if (g_pars.forward_mgcp_ipa) {
+               vc_MGCP_UDP := MGCP_Adapter_CT.create(int2str(i) & "-MGCP_UDP");
+               connect(vc_BSSMAP:MGCP, vc_MGCP_UDP:MGCP);
+               vc_MGCP_UDP.start(MGCP_Adapter.main());
+       }*/
+}
+
+private function get_next_trans_id() runs on MSC_ConnHdlr return MgcpTransId {
+       var MgcpTransId tid := int2str(g_trans_id);
+       g_trans_id := g_trans_id + 1;
+       return tid;
 }

 /* Callback function from general RAN_Emulation whenever a connectionless
@@ -453,7 +478,8 @@
        TestHdlrParamsLcls lcls,
        TestHdlrParamsHandover handover optional,
        boolean         aoip,
-       boolean         use_osmux
+       boolean         use_osmux,
+       boolean         forward_mgcp_ipa /* only used for SCCPLite: Forward 
MGCP towards BSC's attached MGW over BSC<->MSC IPA conn */
 };

 /* Note: Do not use valueof() to get a value of this template, use
@@ -478,7 +504,8 @@
        },
        handover := omit,
        aoip := true,
-       use_osmux := false
+       use_osmux := false,
+       forward_mgcp_ipa := false
 }

 function f_create_chan_and_exp() runs on MSC_ConnHdlr {
@@ -846,6 +873,30 @@
        }
 }

+/* Send a MGCP request + receive a (matching!) response */
+function mgcp_transceive_mgw(template MgcpCommand cmd, template MgcpResponse 
resp := ?) runs on MSC_ConnHdlr {
+       template MgcpResponse resp_any := ?
+       var MgcpResponse resp_val;
+       resp.line.trans_id := cmd.line.trans_id;
+       timer T := 5.0;
+
+       BSSAP.send(cmd);
+       T.start;
+       alt {
+               [] BSSAP.receive(resp) -> value resp_val { }
+               [] BSSAP.receive(resp_any) {
+                       setverdict(fail, "Response didn't match template");
+                       mtc.stop;
+                       }
+               [] BSSAP.receive { repeat; }
+               [] T.timeout {
+                       setverdict(fail, "Timeout waiting for response to ", 
cmd);
+                       mtc.stop;
+                       }
+       }
+       T.stop;
+}
+
 /* Helper function to check if the activity on the MGCP matches what we
  * expected */
 function f_check_mgcp_expectations() runs on MSC_ConnHdlr {
@@ -878,7 +929,7 @@
                codecType := FR_AMR;
        }

-       f_MscConnHdlr_init(g_pars.media_nr, "127.0.0.2", "127.0.0.3", 
codecType);
+       f_MscConnHdlr_init(g_pars.media_nr, host_bts, host_mgw, codecType);

        /* patch in the LCLS related items, as needed */
        f_ass_patch_lcls(ass_tpl, exp_ass_cpl);
@@ -964,6 +1015,7 @@
                        g_media.mgcp_conn[0].mdcx_seen_exp := 1;
                        g_media.mgcp_conn[1].crcx_seen_exp := 0;
                        g_media.mgcp_conn[1].mdcx_seen_exp := 0;
+                       /* FIXME: may want to add something here */
                } else {
                        g_media.mgcp_conn[0].crcx_seen_exp := 1;
                        g_media.mgcp_conn[0].mdcx_seen_exp := 1;
@@ -1028,6 +1080,24 @@
                }
        }

+       if (g_pars.forward_mgcp_ipa) {
+               /* With SCCPLite, connect to BSC-located MGW using a CRCX + SDP.
+                  It is sent in MGCP over IPA in the BSC<->MSC (BSC-NAT)
+                  connection. BSC will forward it to its MGW. */
+               var template MgcpCommand cmd;
+               var template MgcpResponse resp := ?;
+               var integer cic := 
f_bssmap_ie_cic_2_int(ass_cmd.pdu.bssmap.assignmentRequest.circuitIdentityCode);
+               var MgcpEndpoint ep := int2str(cic) & "@mgw"; /* 1: matches 
value configured in BSC_Tests.ttcn pass in AssignReq */
+               var MgcpCallId call_id := '51234'H;
+               var SDP_attribute_list attributes := { 
valueof(ts_SDP_ptime(20)) };
+               cmd := ts_CRCX(get_next_trans_id(), ep, "sendrecv", call_id);
+               cmd.sdp := ts_SDP(host_msc, host_mgw, "23", "42",
+                            14000, { int2str(g_media.mgcp_conn[0].rtp_pt) },
+                            { valueof(ts_SDP_ptime(20)) });
+               g_mgcp_conn_id := f_mgcp_alloc_conn_id();
+               mgcp_transceive_mgw(cmd, tr_CRCX_ACK);
+       }
+
        f_check_mgcp_expectations();

        if (st.is_assignment and st.assignment_done) {
diff --git a/library/BSSMAP_Templates.ttcn b/library/BSSMAP_Templates.ttcn
index b377358..9015680 100644
--- a/library/BSSMAP_Templates.ttcn
+++ b/library/BSSMAP_Templates.ttcn
@@ -402,6 +402,11 @@
        cicLow := bit2oct((substr(int2bit(span, 11), 8, 3) << 5) & int2bit(ts, 
5))
 }

+function f_bssmap_ie_cic_2_int(BSSMAP_IE_CircuitIdentityCode cic_ie) return 
integer {
+       var integer cic := (oct2int(cic_ie.cicHigh) * 256) + 
oct2int(cic_ie.cicLow);
+       return cic;
+}
+
 template (value) BSSMAP_IE_AoIP_TransportLayerAddress 
ts_BSSMAP_IE_AoIP_TLA(BSSMAP_FIELD_IPAddress addr,
                                                                            
uint16_t udp_port,
                                                                            
integer len) := {

--
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/14493
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: I21ffcaa241e4fc0bd2c6563e21f1c8bdb4d14dd6
Gerrit-Change-Number: 14493
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pes...@sysmocom.de>
Gerrit-MessageType: newchange

Reply via email to