Review at  https://gerrit.osmocom.org/6112

msc: Make TC_lu_and_mo_call succeed with osmo-mg enabled osmo-msc

This is for patch https://gerrit.osmocom.org/#/c/4980 in osmo-msc

Change-Id: Ieec52d5e0da776d35d6a473bd726b368af9d5c66
---
M library/L3_Templates.ttcn
M library/MGCP_Templates.ttcn
M library/MNCC_Types.ttcn
M msc_tests/BSC_ConnectionHandler.ttcn
M msc_tests/MSC_Tests.ttcn
5 files changed, 93 insertions(+), 25 deletions(-)


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

diff --git a/library/L3_Templates.ttcn b/library/L3_Templates.ttcn
index 549997e..2050e3d 100644
--- a/library/L3_Templates.ttcn
+++ b/library/L3_Templates.ttcn
@@ -585,6 +585,49 @@
        }
 }
 
+template PDU_ML3_NW_MS tr_ML3_MT_CC_CONNECT(integer tid) := {
+       discriminator := '0011'B,
+       tiOrSkip := {
+               transactionId := {
+                       tio := int2bit(tid, 3),
+                       tiFlag := '1'B,
+                       tIExtension := omit
+               }
+       },
+       msgs := {
+               cc := {
+                       connect_NW_MS := {
+                               messageType := '000111'B,
+                               nsd := '00'B,
+                               facility := *,
+                               progressIndicator := *,
+                               connectedNumber := *,
+                               connectedSubAddress := *,
+                               user_user := *
+                       }
+               }
+       }
+}
+
+template (value) PDU_ML3_MS_NW ts_ML3_MO_CC_CONNECT_ACK(integer tid) := {
+       discriminator := '0011'B,
+       tiOrSkip := {
+               transactionId := {
+                       tio := int2bit(tid, 3),
+                       tiFlag := '0'B,
+                       tIExtension := omit
+               }
+       },
+       msgs := {
+               cc := {
+                       connectAck := {
+                               messageType := '001111'B,
+                               nsd := '00'B
+                       }
+               }
+       }
+}
+
 template PDU_ML3_NW_MS tr_ML3_MT_CC_DISC(integer tid) := {
        discriminator := '0011'B,
        tiOrSkip := {
diff --git a/library/MGCP_Templates.ttcn b/library/MGCP_Templates.ttcn
index 182868e..7f10bd2 100644
--- a/library/MGCP_Templates.ttcn
+++ b/library/MGCP_Templates.ttcn
@@ -74,8 +74,8 @@
                sdp := sdp
        }
 
-       template MgcpCommand tr_CRCX := {
-               line := t_MgcpCmdLine("CRCX", ?, ?),
+       template MgcpCommand tr_CRCX(template MgcpEndpoint ep := ?) := {
+               line := t_MgcpCmdLine("CRCX", ?, ep),
                params := *,
                sdp := *
        }
diff --git a/library/MNCC_Types.ttcn b/library/MNCC_Types.ttcn
index 46159b7..884a7c0 100644
--- a/library/MNCC_Types.ttcn
+++ b/library/MNCC_Types.ttcn
@@ -499,9 +499,9 @@
        }
 };
 
-/* MT: MSC -> MNCC: Respons to SETUP.req */
-template MNCC_PDU tr_MNCC_SETUP_rsp(template uint32_t call_id := ?, template 
MNCC_number connected := *,
-                                   template charstring imsi := ?) := {
+/* MO: MSC <- MNCC: Respons to SETUP.ind */
+template MNCC_PDU ts_MNCC_SETUP_rsp(uint32_t call_id, charstring imsi := "",
+                                   template MNCC_number connected := omit) := {
        msg_type := MNCC_SETUP_RSP,
        u := {
                signal := {     /* See 24.008 9.3.5 */
@@ -513,20 +513,20 @@
                        connected := connected,
                        cause := omit,
                        progress := omit,
-                       useruser := *,
-                       facility := *,
+                       useruser := omit,                               /* 
optional */
+                       facility := omit,                               /* 
optional */
                        cccap := omit,
-                       ssversion := *,
+                       ssversion := omit,                              /* 
optional */
                        clir_sup := 0,
                        clir_inv := 0,
                        signal := omit,
                        keypad := omit,
                        more := 0,
                        notify := 0,
-                       emergency := *,
+                       emergency := omit,
                        imsi := imsi,
-                       lchan_type := ?,
-                       lchan_mode := ?
+                       lchan_type := 0,
+                       lchan_mode := 0
                }
        }
 };
@@ -595,9 +595,9 @@
        }
 }
 
-/* MO: MSC <- MNCC: SETUP_COMPL.req; request to send CONNECT ACK */
-template MNCC_PDU ts_MNCC_SETUP_COMPL_req(uint32_t call_id) :=
-               ts_MNCC_SIMPLE(MNCC_SETUP_COMPL_REQ, call_id); /* See 24.008 
9.3.6 */
+/* MT: MSC -> MNCC: SETUP_COMPL.req; request to send CONNECT ACK */
+template MNCC_PDU tr_MNCC_SETUP_COMPL_req(template uint32_t call_id) :=
+               tr_MNCC_SIMPLE(MNCC_SETUP_COMPL_REQ, call_id); /* See 24.008 
9.3.6 */
 
 /* MT: MSC -> MNCC: SETUP_COMPL.ind; receipt of CONNECT ACK */
 template MNCC_PDU tr_MNCC_SETUP_COMPL_ind(template uint32_t call_id := ?) :=
diff --git a/msc_tests/BSC_ConnectionHandler.ttcn 
b/msc_tests/BSC_ConnectionHandler.ttcn
index 8ce1332..75871c5 100644
--- a/msc_tests/BSC_ConnectionHandler.ttcn
+++ b/msc_tests/BSC_ConnectionHandler.ttcn
@@ -285,6 +285,10 @@
        PortNumber bss_rtp_port optional,               /* BSS Side RTP Port */
        HostName mss_rtp_ip optional,                   /* MSS Side RTP IP */
        PortNumber mss_rtp_port optional,               /* MSS Side RTP Port */
+       HostName mgw_rtp_ip_bss,                        /* BSS-facing MGW RTP 
IP */
+       PortNumber mgw_rtp_port_bss,                    /* BSS-facing MGW RTP 
Port */
+       HostName mgw_rtp_ip_mss,                        /* MSS-facing MGW RTP 
IP */
+       PortNumber mgw_rtp_port_mss,                    /* MSS-facing MGW RTP 
Port */
        uint7_t rtp_payload_type,                       /* dynamic RTP payload 
type */
        charstring rtp_sdp_format,                      /* AMR/8000 or the like 
*/
 
@@ -302,10 +306,14 @@
        bearer_cap := valueof(ts_Bcap_voice),
        mncc_callref := omit,
        mncc_bearer_cap := valueof(ts_MNCC_bcap_voice),
-       bss_rtp_ip := "1.1.1.1",
-       bss_rtp_port := 0,//
+       bss_rtp_ip := "9.8.7.6",
+       bss_rtp_port := 9000,
        mss_rtp_ip := omit,
        mss_rtp_port := omit,
+       mgw_rtp_ip_bss := "1.1.1.1",
+       mgw_rtp_port_bss := 10000,
+       mgw_rtp_ip_mss := "1.1.1.1",
+       mgw_rtp_port_mss := 11000,
        rtp_payload_type := 98,
        rtp_sdp_format := "AMR/8000",
        mgcp_call_id := omit,
@@ -342,13 +350,14 @@
                MNCC.send(ts_MNCC_CALL_PROC_req(cpars.mncc_callref, 
cpars.mncc_bearer_cap));
                
BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_CC_CALL_PROC(cpars.transaction_id)));
                };
+       /* First MGCP CRCX (for BSS/RAN side) */
        [] MGCP.receive(tr_CRCX) -> value mgcp_cmd {
                cpars.mgcp_call_id := f_MgcpCmd_extract_call_id(mgcp_cmd);
                /* TODO: dynamic EP allocation case */
                cpars.mgcp_ep := mgcp_cmd.line.ep;
-               var SDP_Message sdp := valueof(ts_SDP(cpars.bss_rtp_ip, 
cpars.bss_rtp_ip,
+               var SDP_Message sdp := valueof(ts_SDP(cpars.mgw_rtp_ip_bss, 
cpars.mgw_rtp_ip_bss,
                                                        
hex2str(cpars.mgcp_call_id), "42",
-                                                       cpars.bss_rtp_port,
+                                                       cpars.mgw_rtp_port_bss,
                                                        { 
int2str(cpars.rtp_payload_type) },
                                                        { 
valueof(ts_SDP_rtpmap(cpars.rtp_payload_type,
                                                                                
cpars.rtp_sdp_format)),
@@ -356,22 +365,37 @@
                MGCP.send(ts_CRCX_ACK(mgcp_cmd.line.trans_id, 
cpars.mgcp_connection_id_bss, sdp));
                }
        }
+       /* Second MGCP CRCX (this time for MSS/CN side) */
+       MGCP.receive(tr_CRCX(cpars.mgcp_ep)) -> value mgcp_cmd {
+               var SDP_Message sdp := valueof(ts_SDP(cpars.mgw_rtp_ip_mss, 
cpars.mgw_rtp_ip_mss,
+                                                       
hex2str(cpars.mgcp_call_id), "42",
+                                                       cpars.mgw_rtp_port_mss,
+                                                       { 
int2str(cpars.rtp_payload_type) },
+                                                       { 
valueof(ts_SDP_rtpmap(cpars.rtp_payload_type,
+                                                                               
cpars.rtp_sdp_format)),
+                                                         
valueof(ts_SDP_ptime(20)) }));
+               MGCP.send(ts_CRCX_ACK(mgcp_cmd.line.trans_id, 
cpars.mgcp_connection_id_mss, sdp));
+       }
 
        /* Alerting */
        MNCC.send(ts_MNCC_ALERT_req(cpars.mncc_callref));
-       
BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_CC_ALERTING(cpars.transaction_id)));
 
-       alt {
-       /* FIXME: expect AoIP IP/Port to match what we returned in CRCX_ACK 
above */
-       [] BSSAP.receive(tr_BSSMAP_AssignmentReq) {
+       var BSSMAP_IE_AoIP_TransportLayerAddress tla_ass :=
+               
valueof(ts_BSSMAP_IE_AoIP_TLA4(f_inet_addr(cpars.mgw_rtp_ip_bss),cpars.mgw_rtp_port_bss));
+       interleave {
+       [] 
BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_CC_ALERTING(cpars.transaction_id))) {}
+       /* expect AoIP IP/Port to match what we returned in CRCX_ACK above */
+       [] BSSAP.receive(tr_BSSMAP_AssignmentReq(omit, tla_ass)) {
                var BSSMAP_IE_AoIP_TransportLayerAddress tla;
                tla := 
valueof(ts_BSSMAP_IE_AoIP_TLA4(f_inet_addr(cpars.bss_rtp_ip), 
cpars.bss_rtp_port));
                BSSAP.send(ts_BSSMAP_AssignmentComplete(omit, tla));
                }
        }
 
-       /* Answer. This causes TCH assignment in case of "late assignment" */
-       MNCC.send(ts_MNCC_SETUP_COMPL_req(cpars.mncc_callref));
+       /* Answer. MNCC_SETUP_RSP -> CONNECT to MS; CONNECT_ACK from MS */
+       MNCC.send(ts_MNCC_SETUP_rsp(cpars.mncc_callref));
+       
BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_CC_CONNECT(cpars.transaction_id)));
+       
BSSAP.send(ts_PDU_DTAP_MO(ts_ML3_MO_CC_CONNECT_ACK(cpars.transaction_id)));
 
        f_sleep(3.0);
 
diff --git a/msc_tests/MSC_Tests.ttcn b/msc_tests/MSC_Tests.ttcn
index 5afa93a..c5ab892 100644
--- a/msc_tests/MSC_Tests.ttcn
+++ b/msc_tests/MSC_Tests.ttcn
@@ -866,7 +866,8 @@
        BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_CC_ALERTING(tid)));
 
        /* Answer. This causes TCH assignment in case of "late assignment" */
-       MNCC.send(ts_MNCC_SETUP_COMPL_req(mncc.u.signal.callref));
+       //MNCC.send(ts_MNCC_SETUP_COMPL_req(mncc.u.signal.callref));
+       MNCC.send(ts_MNCC_SETUP_rsp(mncc.u.signal.callref));
 
        f_sleep(3.0);
 

-- 
To view, visit https://gerrit.osmocom.org/6112
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ieec52d5e0da776d35d6a473bd726b368af9d5c66
Gerrit-PatchSet: 1
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Owner: Harald Welte <[email protected]>

Reply via email to