<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/20056">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">WIP: mncc: Support IPv6 addresses (new version mncc 7)<br><br>Apparently commit 06b859ca314f53a902329ed95848dbafef1d4f87 forgot to<br>bump the MNCC_SOCK_VERSION field from 5 to 6 in<br><br>TODO: check what about MNCC_Emulation.mp_mncc_version<br><br>TODO: Add IPv6 tests for sip/SIP_Tests<br><br>Change-Id: I5448ff931ec33f24f4837a51376f1703fe97683b<br>---<br>M library/MNCC_Emulation.ttcn<br>M library/MNCC_EncDec.cc<br>M library/MNCC_Types.ttcn<br>M library/mncc.h<br>4 files changed, 47 insertions(+), 14 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/56/20056/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/library/MNCC_Emulation.ttcn b/library/MNCC_Emulation.ttcn</span><br><span>index be087ec..13a842b 100644</span><br><span>--- a/library/MNCC_Emulation.ttcn</span><br><span>+++ b/library/MNCC_Emulation.ttcn</span><br><span>@@ -38,7 +38,7 @@</span><br><span> import from UD_Types all;</span><br><span> </span><br><span> modulepar {</span><br><span style="color: hsl(0, 100%, 40%);">- int mp_mncc_version := 6;</span><br><span style="color: hsl(120, 100%, 40%);">+ int mp_mncc_version := 7;</span><br><span> }</span><br><span> </span><br><span> /* General "base class" component definition, of which specific implementations</span><br><span>diff --git a/library/MNCC_EncDec.cc b/library/MNCC_EncDec.cc</span><br><span>index f2692d7..d9529ee 100644</span><br><span>--- a/library/MNCC_EncDec.cc</span><br><span>+++ b/library/MNCC_EncDec.cc</span><br><span>@@ -188,8 +188,20 @@</span><br><span> memset(&rtp, 0, sizeof(rtp));</span><br><span> rtp.msg_type = in.msg__type();</span><br><span> rtp.callref = in.u().rtp().callref();</span><br><span style="color: hsl(0, 100%, 40%);">- rtp.ip = in.u().rtp().ip();</span><br><span style="color: hsl(0, 100%, 40%);">- rtp.port = in.u().rtp().rtp__port();</span><br><span style="color: hsl(120, 100%, 40%);">+ if (in.u().rtp().is__ipv6()) {</span><br><span style="color: hsl(120, 100%, 40%);">+ rtp.addr.ss_family = AF_INET6;</span><br><span style="color: hsl(120, 100%, 40%);">+ ((struct sockaddr_in6*)&rtp.addr)->sin6_port = in.u().rtp().rtp__port();</span><br><span style="color: hsl(120, 100%, 40%);">+ //TODO: verify octetstring len</span><br><span style="color: hsl(120, 100%, 40%);">+ memcpy(((struct sockaddr_in6*)&rtp.addr)->sin6_addr, in.u().rtp().ip().data(),</span><br><span style="color: hsl(120, 100%, 40%);">+ sizeof(struct in6_addr));</span><br><span style="color: hsl(120, 100%, 40%);">+ } else {</span><br><span style="color: hsl(120, 100%, 40%);">+ rtp.addr.ss_family = AF_INET;</span><br><span style="color: hsl(120, 100%, 40%);">+ ((struct sockaddr_in*)&rtp.addr)->sin_port = in.u().rtp().rtp__port();</span><br><span style="color: hsl(120, 100%, 40%);">+ //TODO: verify octetstring len</span><br><span style="color: hsl(120, 100%, 40%);">+ memcpy(((struct sockaddr_in*)&rtp.addr)->sin_addr, in.u().rtp().ip().data(),</span><br><span style="color: hsl(120, 100%, 40%);">+ sizeof(struct in_addr));</span><br><span style="color: hsl(120, 100%, 40%);">+ //rtp.ip = in.u().rtp().ip();</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span> rtp.payload_type = in.u().rtp().payload__type();</span><br><span> rtp.payload_msg_type = in.u().rtp().payload__msg__type();</span><br><span> ret_val = OCTETSTRING(sizeof(rtp), (uint8_t *) &rtp);</span><br><span>@@ -224,6 +236,9 @@</span><br><span> const struct gsm_mncc_rtp *in_rtp;</span><br><span> MNCC__PDU__Rtp rtp;</span><br><span> MNCC__MsgUnion u;</span><br><span style="color: hsl(120, 100%, 40%);">+ bool is_ipv6;</span><br><span style="color: hsl(120, 100%, 40%);">+ OCTETSTRING ip;</span><br><span style="color: hsl(120, 100%, 40%);">+ uint16_t port;</span><br><span> </span><br><span> in_mncc = (struct gsm_mncc *) ttcn_buffer.get_read_data();</span><br><span> </span><br><span>@@ -258,7 +273,20 @@</span><br><span> case MNCC_RTP_CONNECT:</span><br><span> case MNCC_RTP_FREE:</span><br><span> in_rtp = (const struct gsm_mncc_rtp *) in_mncc;</span><br><span style="color: hsl(0, 100%, 40%);">- rtp = MNCC__PDU__Rtp(in_rtp->callref, in_rtp->ip, in_rtp->port, in_rtp->payload_type,</span><br><span style="color: hsl(120, 100%, 40%);">+ switch (in_rtp->addr.ss_family) {</span><br><span style="color: hsl(120, 100%, 40%);">+ case AF_INET:</span><br><span style="color: hsl(120, 100%, 40%);">+ is_ipv6 = false;</span><br><span style="color: hsl(120, 100%, 40%);">+ port = ((struct sockaddr_in*)&in_rtp->addr)->sin_port;</span><br><span style="color: hsl(120, 100%, 40%);">+ ip = OCTETSTRING(sizeof(struct in_addr), &(struct sockaddr_in*)&in_rtp->addr)->sin_addr);</span><br><span style="color: hsl(120, 100%, 40%);">+ break;</span><br><span style="color: hsl(120, 100%, 40%);">+ case AF_INET6:</span><br><span style="color: hsl(120, 100%, 40%);">+ is_ipv6 = true;</span><br><span style="color: hsl(120, 100%, 40%);">+ port = ((struct sockaddr_in6*)&in_rtp->addr)->sin6_port;</span><br><span style="color: hsl(120, 100%, 40%);">+ ip = OCTETSTRING(sizeof(struct in6_addr), &(struct sockaddr_in6*)&in_rtp->addr)->sin6_addr);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ break;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ rtp = MNCC__PDU__Rtp(in_rtp->callref, is_ipv6, ip, port, in_rtp->payload_type,</span><br><span> in_rtp->payload_msg_type, in_rtp->sdp);</span><br><span> u.rtp() = rtp;</span><br><span> break;</span><br><span>diff --git a/library/MNCC_Types.ttcn b/library/MNCC_Types.ttcn</span><br><span>index 0a8e7d9..fa4fc3e 100644</span><br><span>--- a/library/MNCC_Types.ttcn</span><br><span>+++ b/library/MNCC_Types.ttcn</span><br><span>@@ -373,7 +373,8 @@</span><br><span> </span><br><span> type record MNCC_PDU_Rtp {</span><br><span> uint32_t callref,</span><br><span style="color: hsl(0, 100%, 40%);">- uint32_t ip,</span><br><span style="color: hsl(120, 100%, 40%);">+ boolean is_ipv6,</span><br><span style="color: hsl(120, 100%, 40%);">+ octetstring ip, //TODO: define size of octetstring based on is_ipv6 using CROSSTAGS?</span><br><span> uint16_t rtp_port,</span><br><span> uint32_t payload_type,</span><br><span> uint32_t payload_msg_type,</span><br><span>@@ -1921,7 +1922,8 @@</span><br><span> u := {</span><br><span> rtp := {</span><br><span> callref := call_id,</span><br><span style="color: hsl(0, 100%, 40%);">- ip := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ is_ipv6 := false,</span><br><span style="color: hsl(120, 100%, 40%);">+ ip := '00000000'O,</span><br><span> rtp_port := 0,</span><br><span> payload_type := 0,</span><br><span> payload_msg_type := 0,</span><br><span>@@ -1935,13 +1937,14 @@</span><br><span> </span><br><span> /* MSC -> MNCC: RTP_CREATE.rsp; acknowledge creation of RTP (stating MSC side IP/Port) */</span><br><span> template MNCC_PDU tr_MNCC_RTP_CREATE(template uint32_t call_id := ?,</span><br><span style="color: hsl(0, 100%, 40%);">- template uint32_t ip := ?,</span><br><span style="color: hsl(0, 100%, 40%);">- template uint32_t rtp_port := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ template octetstring ip := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ template uint16_t rtp_port := ?,</span><br><span> template uint32_t payload_type := ?) := {</span><br><span> msg_type := MNCC_RTP_CREATE,</span><br><span> u := {</span><br><span> rtp := {</span><br><span> callref := call_id,</span><br><span style="color: hsl(120, 100%, 40%);">+ is_ipv6 := false,</span><br><span> ip := ip,</span><br><span> rtp_port := rtp_port,</span><br><span> payload_type := payload_type,</span><br><span>@@ -1952,11 +1955,12 @@</span><br><span> }</span><br><span> </span><br><span> /* MSC <- MNCC: RTP_CONNECT.req; request connect of RTP */</span><br><span style="color: hsl(0, 100%, 40%);">-template MNCC_PDU ts_MNCC_RTP_CONNECT(uint32_t call_id, uint32_t ip, uint32_t rtp_port, uint32_t pt) := {</span><br><span style="color: hsl(120, 100%, 40%);">+template MNCC_PDU ts_MNCC_RTP_CONNECT(uint32_t call_id, octetstring ip, uint16_t rtp_port, uint32_t pt) := {</span><br><span> msg_type := MNCC_RTP_CONNECT,</span><br><span> u := {</span><br><span> rtp := {</span><br><span> callref := call_id,</span><br><span style="color: hsl(120, 100%, 40%);">+ is_ipv6 := false,</span><br><span> ip := ip,</span><br><span> rtp_port := rtp_port,</span><br><span> payload_type := pt,</span><br><span>@@ -1966,13 +1970,14 @@</span><br><span> }</span><br><span> }</span><br><span> template MNCC_PDU tr_MNCC_RTP_CONNECT(template uint32_t call_id,</span><br><span style="color: hsl(0, 100%, 40%);">- template uint32_t ip := ?,</span><br><span style="color: hsl(0, 100%, 40%);">- template uint32_t rtp_port := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ template octetstring ip := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ template uint16_t rtp_port := ?,</span><br><span> template uint32_t pt := ?) := {</span><br><span> msg_type := MNCC_RTP_CONNECT,</span><br><span> u := {</span><br><span> rtp := {</span><br><span> callref := call_id,</span><br><span style="color: hsl(120, 100%, 40%);">+ is_ipv6 := false,</span><br><span> ip := ip,</span><br><span> rtp_port := rtp_port,</span><br><span> payload_type := pt,</span><br><span>diff --git a/library/mncc.h b/library/mncc.h</span><br><span>index 9aff948..1e45c37 100644</span><br><span>--- a/library/mncc.h</span><br><span>+++ b/library/mncc.h</span><br><span>@@ -5,6 +5,7 @@</span><br><span> */</span><br><span> </span><br><span> #include <stdint.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <netinet/in.h></span><br><span> </span><br><span> /* GSM 04.08 Bearer Capability: Rate Adaption */</span><br><span> enum gsm48_bcap_ra {</span><br><span>@@ -275,7 +276,7 @@</span><br><span> unsigned char data[0];</span><br><span> };</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#define MNCC_SOCK_VERSION 5</span><br><span style="color: hsl(120, 100%, 40%);">+#define MNCC_SOCK_VERSION 7</span><br><span> struct gsm_mncc_hello {</span><br><span> uint32_t msg_type;</span><br><span> uint32_t version;</span><br><span>@@ -294,8 +295,7 @@</span><br><span> struct gsm_mncc_rtp {</span><br><span> uint32_t msg_type;</span><br><span> uint32_t callref;</span><br><span style="color: hsl(0, 100%, 40%);">- uint32_t ip;</span><br><span style="color: hsl(0, 100%, 40%);">- uint16_t port;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct sockaddr_storage addr;</span><br><span> uint32_t payload_type;</span><br><span> uint32_t payload_msg_type;</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/20056">change 20056</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/+/20056"/><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: I5448ff931ec33f24f4837a51376f1703fe97683b </div>
<div style="display:none"> Gerrit-Change-Number: 20056 </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>