<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/20039">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">mgw: Test IPv6 RTP streams in osmo-mgw<br><br>Change-Id: I2a47926757af84ffa190a954aac0dcc5369528b3<br>---<br>M mgw/MGCP_Test.ttcn<br>1 file changed, 83 insertions(+), 17 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/39/20039/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/mgw/MGCP_Test.ttcn b/mgw/MGCP_Test.ttcn</span><br><span>index b767dd4..4be034b 100644</span><br><span>--- a/mgw/MGCP_Test.ttcn</span><br><span>+++ b/mgw/MGCP_Test.ttcn</span><br><span>@@ -65,8 +65,10 @@</span><br><span>     modulepar {</span><br><span>          PortNumber mp_local_udp_port := 2727;</span><br><span>                charstring mp_local_ipv4 := "127.0.0.1";</span><br><span style="color: hsl(120, 100%, 40%);">+            charstring mp_local_ipv6 := "::1";</span><br><span>                 PortNumber mp_remote_udp_port := 2427;</span><br><span>               charstring mp_remote_ipv4 := "127.0.0.1";</span><br><span style="color: hsl(120, 100%, 40%);">+           charstring mp_remote_ipv6 := "::1";</span><br><span>                PortNumber mp_local_rtp_port_base := 10000;</span><br><span>          PortNumber mp_local_osmux_port := 1985;</span><br><span>      }</span><br><span>@@ -1186,7 +1188,9 @@</span><br><span>            return true;</span><br><span>         }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   function f_TC_two_crcx_and_rtp_osmux(boolean bidir) runs on dummy_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+        function f_TC_two_crcx_and_rtp_osmux(boolean bidir,</span><br><span style="color: hsl(120, 100%, 40%);">+                                        charstring local_ip_rtp, charstring remote_ip_rtp,</span><br><span style="color: hsl(120, 100%, 40%);">+                                            charstring local_ip_osmux, charstring remote_ip_osmux) runs on dummy_CT {</span><br><span>               var RtpFlowData flow[2];</span><br><span>             var RtpemStats stats_rtp;</span><br><span>            var OsmuxemStats stats_osmux;</span><br><span>@@ -1198,7 +1202,7 @@</span><br><span>                f_init(ep, true);</span><br><span> </span><br><span>                /* from us to MGW */</span><br><span style="color: hsl(0, 100%, 40%);">-            flow[0] := valueof(t_RtpFlow(mp_local_ipv4, mp_remote_ipv4, 112, "AMR/8000"));</span><br><span style="color: hsl(120, 100%, 40%);">+              flow[0] := valueof(t_RtpFlow(local_ip_rtp, remote_ip_rtp, 112, "AMR/8000"));</span><br><span>               flow[0].rtp_cfg := c_RtpemDefaultCfg</span><br><span>                 flow[0].rtp_cfg.tx_payload_type := flow[0].pt;</span><br><span>               /* 0014 is the ToC (CMR=AMR4.75) in front of AMR Payload in RTP Payload */</span><br><span>@@ -1209,7 +1213,7 @@</span><br><span>           f_flow_create(RTPEM[0], ep, call_id, "sendrecv", flow[0]);</span><br><span> </span><br><span>             /* from MGW back to us */</span><br><span style="color: hsl(0, 100%, 40%);">-               flow[1] := valueof(t_RtpFlow(mp_local_ipv4, mp_remote_ipv4, 110, "AMR/8000"));</span><br><span style="color: hsl(120, 100%, 40%);">+              flow[1] := valueof(t_RtpFlow(local_ip_osmux, remote_ip_osmux, 110, "AMR/8000"));</span><br><span>           flow[1].em.portnr := mp_local_osmux_port;</span><br><span>            flow[1].osmux_cid := 2;</span><br><span>              flow[1].osmux_cfg := c_OsmuxemDefaultCfg;</span><br><span>@@ -1254,17 +1258,37 @@</span><br><span> </span><br><span>      /* create one RTP and one OSmux emulations; create two connections on MGW EP, exchange some data */</span><br><span>  testcase TC_two_crcx_and_rtp_osmux() runs on dummy_CT {</span><br><span style="color: hsl(0, 100%, 40%);">-          f_TC_two_crcx_and_rtp_osmux(false);</span><br><span style="color: hsl(120, 100%, 40%);">+           f_TC_two_crcx_and_rtp_osmux(false, mp_local_ipv4, mp_remote_ipv4,</span><br><span style="color: hsl(120, 100%, 40%);">+                                         mp_local_ipv4, mp_remote_ipv4);</span><br><span>         }</span><br><span> </span><br><span>        /* create one RTP and one OSmux emulations; create two connections on MGW EP,</span><br><span>         * exchange some data in both directions */</span><br><span>  testcase TC_two_crcx_and_rtp_osmux_bidir() runs on dummy_CT {</span><br><span style="color: hsl(0, 100%, 40%);">-            f_TC_two_crcx_and_rtp_osmux(true);</span><br><span style="color: hsl(120, 100%, 40%);">+            f_TC_two_crcx_and_rtp_osmux(true, mp_local_ipv4, mp_remote_ipv4,</span><br><span style="color: hsl(120, 100%, 40%);">+                                          mp_local_ipv4, mp_remote_ipv4);</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Same as TC_two_crcx_and_rtp_osmux_bidir, but using IPv6 */</span><br><span style="color: hsl(120, 100%, 40%);">+ testcase TC_two_crcx_and_rtp_osmux_bidir_ipv6() runs on dummy_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+             f_TC_two_crcx_and_rtp_osmux(true, mp_local_ipv6, mp_remote_ipv6,</span><br><span style="color: hsl(120, 100%, 40%);">+                                          mp_local_ipv6, mp_remote_ipv6);</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span style="color: hsl(120, 100%, 40%);">+     /* Same as TC_two_crcx_and_rtp_osmux_bidir, but using IPv4 (RTP) and IPv6 (Osmux) */</span><br><span style="color: hsl(120, 100%, 40%);">+  testcase TC_two_crcx_and_rtp_osmux_bidir_ipv4_ipv6() runs on dummy_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+                f_TC_two_crcx_and_rtp_osmux(true, mp_local_ipv4, mp_remote_ipv4,</span><br><span style="color: hsl(120, 100%, 40%);">+                                          mp_local_ipv6, mp_remote_ipv6);</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span style="color: hsl(120, 100%, 40%);">+     /* Same as TC_two_crcx_and_rtp_osmux_bidir, but using IPv6 (RTP) and IPv4 (Osmux) */</span><br><span style="color: hsl(120, 100%, 40%);">+  testcase TC_two_crcx_and_rtp_osmux_bidir_ipv6_ipv4() runs on dummy_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+                f_TC_two_crcx_and_rtp_osmux(true, mp_local_ipv6, mp_remote_ipv6,</span><br><span style="color: hsl(120, 100%, 40%);">+                                          mp_local_ipv4, mp_remote_ipv4);</span><br><span>         }</span><br><span> </span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       function f_two_crcx_mdcx_and_rtp_osmux(boolean crcx_osmux_wildcard) runs on dummy_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+        function f_two_crcx_mdcx_and_rtp_osmux(boolean crcx_osmux_wildcard,</span><br><span style="color: hsl(120, 100%, 40%);">+                                          charstring local_ip_rtp, charstring remote_ip_rtp,</span><br><span style="color: hsl(120, 100%, 40%);">+                                            charstring local_ip_osmux, charstring remote_ip_osmux) runs on dummy_CT {</span><br><span>             var RtpFlowData flow[2];</span><br><span>             var RtpemStats stats_rtp;</span><br><span>            var OsmuxemStats stats_osmux;</span><br><span>@@ -1277,7 +1301,7 @@</span><br><span>                f_init(ep, true);</span><br><span> </span><br><span>                /* Create the first connection in receive only mode */</span><br><span style="color: hsl(0, 100%, 40%);">-          flow[0] := valueof(t_RtpFlow(mp_local_ipv4, mp_remote_ipv4, 112, "AMR/8000"));</span><br><span style="color: hsl(120, 100%, 40%);">+              flow[0] := valueof(t_RtpFlow(local_ip_rtp, remote_ip_rtp, 112, "AMR/8000"));</span><br><span>               flow[0].rtp_cfg := c_RtpemDefaultCfg</span><br><span>                 flow[0].rtp_cfg.tx_payload_type := flow[0].pt;</span><br><span>               /* 0014 is the ToC (CMR=AMR4.75) in front of AMR Payload in RTP Payload */</span><br><span>@@ -1285,12 +1309,12 @@</span><br><span>                 flow[0].rtp_cfg.tx_fixed_payload := flow[0].rtp_cfg.rx_fixed_payload;</span><br><span>                /* bind local RTP emulation sockets */</span><br><span>               flow[0].em.portnr := 10000;</span><br><span style="color: hsl(0, 100%, 40%);">-             f_flow_create(RTPEM[0], ep, call_id, "recvonly", flow[0], false);</span><br><span style="color: hsl(120, 100%, 40%);">+           f_flow_create(RTPEM[0], ep, call_id, "recvonly", flow[0], true);</span><br><span> </span><br><span> </span><br><span>           /* Create the second connection. This connection will be also</span><br><span>                 * in receive only mode */</span><br><span style="color: hsl(0, 100%, 40%);">-              flow[1] := valueof(t_RtpFlow(mp_local_ipv4, mp_remote_ipv4, 110, "AMR/8000"));</span><br><span style="color: hsl(120, 100%, 40%);">+              flow[1] := valueof(t_RtpFlow(local_ip_osmux, remote_ip_osmux, 110, "AMR/8000"));</span><br><span>           flow[1].em.portnr := mp_local_osmux_port;</span><br><span>            if (crcx_osmux_wildcard) {</span><br><span>                   flow[1].osmux_cid := -1;</span><br><span>@@ -1298,7 +1322,7 @@</span><br><span>                     flow[1].osmux_cid := 2;</span><br><span>              }</span><br><span>            flow[1].osmux_cfg := c_OsmuxemDefaultCfg;</span><br><span style="color: hsl(0, 100%, 40%);">-               f_flow_create_osmux(OsmuxEM, ep, call_id, "recvonly", flow[1], false);</span><br><span style="color: hsl(120, 100%, 40%);">+              f_flow_create_osmux(OsmuxEM, ep, call_id, "recvonly", flow[1], true);</span><br><span> </span><br><span> </span><br><span>              /* The first leg starts transmitting */</span><br><span>@@ -1393,14 +1417,32 @@</span><br><span>        directions. Create CRCX with wildcard Osmux CID and set it later</span><br><span>             during MDCX. This is similar to how MSC sets up the call in AoIP. */</span><br><span>     testcase TC_two_crcx_mdcx_and_rtp_osmux_wildcard() runs on dummy_CT {</span><br><span style="color: hsl(0, 100%, 40%);">-           f_two_crcx_mdcx_and_rtp_osmux(true);</span><br><span style="color: hsl(120, 100%, 40%);">+          f_two_crcx_mdcx_and_rtp_osmux(true, mp_local_ipv4, mp_remote_ipv4,</span><br><span style="color: hsl(120, 100%, 40%);">+                                          mp_local_ipv4, mp_remote_ipv4);</span><br><span>        }</span><br><span> </span><br><span>        /*  create one RTP and one OSmux emulations and pass data in both</span><br><span>        directions. Create CRCX with fixed Osmux CID and keep it during</span><br><span>      MDCX. This is similar to how BSC sets up the call in AoIP. */</span><br><span>    testcase TC_two_crcx_mdcx_and_rtp_osmux_fixed() runs on dummy_CT {</span><br><span style="color: hsl(0, 100%, 40%);">-              f_two_crcx_mdcx_and_rtp_osmux(false);</span><br><span style="color: hsl(120, 100%, 40%);">+         f_two_crcx_mdcx_and_rtp_osmux(false, mp_local_ipv4, mp_remote_ipv4,</span><br><span style="color: hsl(120, 100%, 40%);">+                                         mp_local_ipv4, mp_remote_ipv4);</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /*  Same as TC_two_crcx_mdcx_and_rtp_osmux_wildcard, but using IPv6. */</span><br><span style="color: hsl(120, 100%, 40%);">+       testcase TC_two_crcx_mdcx_and_rtp_osmux_ipv6() runs on dummy_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+             f_two_crcx_mdcx_and_rtp_osmux(false, mp_local_ipv6, mp_remote_ipv6,</span><br><span style="color: hsl(120, 100%, 40%);">+                                         mp_local_ipv6, mp_remote_ipv6);</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+     /*  Same as TC_two_crcx_mdcx_and_rtp_osmux_wildcard, but using IPv4 (RTP) and IPv6 (Osmux). */</span><br><span style="color: hsl(120, 100%, 40%);">+        testcase TC_two_crcx_mdcx_and_rtp_osmux_ipv4_ipv6() runs on dummy_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+                f_two_crcx_mdcx_and_rtp_osmux(false, mp_local_ipv4, mp_remote_ipv4,</span><br><span style="color: hsl(120, 100%, 40%);">+                                         mp_local_ipv6, mp_remote_ipv6);</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+     /*  Same as TC_two_crcx_mdcx_and_rtp_osmux_wildcard, but using IPv6 (RTP) and IPv4 (Osmux). */</span><br><span style="color: hsl(120, 100%, 40%);">+        testcase TC_two_crcx_mdcx_and_rtp_osmux_ipv6_ipv4() runs on dummy_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+                f_two_crcx_mdcx_and_rtp_osmux(false, mp_local_ipv6, mp_remote_ipv6,</span><br><span style="color: hsl(120, 100%, 40%);">+                                         mp_local_ipv4, mp_remote_ipv4);</span><br><span>        }</span><br><span> </span><br><span>        function f_crcx_and_dlcx_ep_callid_connid(MgcpEndpoint ep, MgcpCallId call_id) runs on dummy_CT {</span><br><span>@@ -1727,7 +1769,8 @@</span><br><span>    }</span><br><span> </span><br><span>        /* create two local RTP emulations and pass data in both directions */</span><br><span style="color: hsl(0, 100%, 40%);">-  testcase TC_two_crcx_mdcx_and_rtp() runs on dummy_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+        function f_tc_two_crcx_mdcx_and_rtp(charstring local_ip_a, charstring remote_ip_a,</span><br><span style="color: hsl(120, 100%, 40%);">+                                        charstring local_ip_b, charstring remote_ip_b) runs on dummy_CT {</span><br><span>                var RtpFlowData flow[2];</span><br><span>             var RtpemStats stats[2];</span><br><span>             var MgcpResponse resp;</span><br><span>@@ -1739,15 +1782,15 @@</span><br><span>             f_init(ep);</span><br><span> </span><br><span>              /* Create the first connection in receive only mode */</span><br><span style="color: hsl(0, 100%, 40%);">-          flow[0] := valueof(t_RtpFlow(mp_local_ipv4, mp_remote_ipv4, 3, "GSM/8000/1"));</span><br><span style="color: hsl(120, 100%, 40%);">+              flow[0] := valueof(t_RtpFlow(local_ip_a, remote_ip_a, 3, "GSM/8000/1"));</span><br><span>           flow[0].em.portnr := 10000;</span><br><span style="color: hsl(0, 100%, 40%);">-             f_flow_create(RTPEM[0], ep, call_id, "recvonly", flow[0], false);</span><br><span style="color: hsl(120, 100%, 40%);">+           f_flow_create(RTPEM[0], ep, call_id, "recvonly", flow[0], true);</span><br><span> </span><br><span>               /* Create the second connection. This connection will be also</span><br><span>                 * in receive only mode */</span><br><span style="color: hsl(0, 100%, 40%);">-              flow[1] := valueof(t_RtpFlow(mp_local_ipv4, mp_remote_ipv4, 3, "GSM/8000/1"));</span><br><span style="color: hsl(120, 100%, 40%);">+              flow[1] := valueof(t_RtpFlow(local_ip_b, remote_ip_b, 3, "GSM/8000/1"));</span><br><span>           flow[1].em.portnr := 20000;</span><br><span style="color: hsl(0, 100%, 40%);">-             f_flow_create(RTPEM[1], ep, call_id, "recvonly", flow[1], false);</span><br><span style="color: hsl(120, 100%, 40%);">+           f_flow_create(RTPEM[1], ep, call_id, "recvonly", flow[1], true);</span><br><span> </span><br><span>               /* The first leg starts transmitting */</span><br><span>              f_rtpem_mode(RTPEM[0], RTPEM_MODE_TXONLY);</span><br><span>@@ -1828,6 +1871,21 @@</span><br><span>          setverdict(pass);</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ testcase TC_two_crcx_mdcx_and_rtp() runs on dummy_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+                f_tc_two_crcx_mdcx_and_rtp(mp_local_ipv4, mp_remote_ipv4,</span><br><span style="color: hsl(120, 100%, 40%);">+                                        mp_local_ipv4, mp_remote_ipv4);</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   testcase TC_two_crcx_mdcx_and_rtp_ipv6() runs on dummy_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+           f_tc_two_crcx_mdcx_and_rtp(mp_local_ipv6, mp_remote_ipv6,</span><br><span style="color: hsl(120, 100%, 40%);">+                                        mp_local_ipv6, mp_remote_ipv6);</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   testcase TC_two_crcx_mdcx_and_rtp_ipv4_ipv6() runs on dummy_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+              f_tc_two_crcx_mdcx_and_rtp(mp_local_ipv4, mp_remote_ipv4,</span><br><span style="color: hsl(120, 100%, 40%);">+                                        mp_local_ipv6, mp_remote_ipv6);</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  /* Test what happens when two RTP streams from different sources target</span><br><span>       * a single connection. Is the unsolicited stream properly ignored? */</span><br><span>       testcase TC_two_crcx_and_unsolicited_rtp() runs on dummy_CT {</span><br><span>@@ -2358,5 +2416,13 @@</span><br><span> </span><br><span>           execute(TC_crcx_mdcx_ip4());</span><br><span>                 execute(TC_crcx_mdcx_ip6());</span><br><span style="color: hsl(120, 100%, 40%);">+          execute(TC_two_crcx_mdcx_and_rtp_ipv4_ipv6());</span><br><span style="color: hsl(120, 100%, 40%);">+                execute(TC_two_crcx_mdcx_and_rtp_ipv6());</span><br><span style="color: hsl(120, 100%, 40%);">+             execute(TC_two_crcx_and_rtp_osmux_bidir_ipv6());</span><br><span style="color: hsl(120, 100%, 40%);">+              execute(TC_two_crcx_and_rtp_osmux_bidir_ipv4_ipv6());</span><br><span style="color: hsl(120, 100%, 40%);">+         execute(TC_two_crcx_and_rtp_osmux_bidir_ipv6_ipv4());</span><br><span style="color: hsl(120, 100%, 40%);">+         execute(TC_two_crcx_mdcx_and_rtp_osmux_ipv6());</span><br><span style="color: hsl(120, 100%, 40%);">+               execute(TC_two_crcx_mdcx_and_rtp_osmux_ipv4_ipv6());</span><br><span style="color: hsl(120, 100%, 40%);">+          execute(TC_two_crcx_mdcx_and_rtp_osmux_ipv6_ipv4());</span><br><span>         }</span><br><span> }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/20039">change 20039</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/20039"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-ttcn3-hacks </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I2a47926757af84ffa190a954aac0dcc5369528b3 </div>
<div style="display:none"> Gerrit-Change-Number: 20039 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>