This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
pespin gerrit-no-reply at lists.osmocom.orgpespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/20056 )
Change subject: WIP: mncc: Support IPv6 addresses (new version mncc 7)
......................................................................
WIP: mncc: Support IPv6 addresses (new version mncc 7)
Apparently commit 06b859ca314f53a902329ed95848dbafef1d4f87 forgot to
bump the MNCC_SOCK_VERSION field from 5 to 6 in
TODO: check what about MNCC_Emulation.mp_mncc_version
TODO: Add IPv6 tests for sip/SIP_Tests
Change-Id: I5448ff931ec33f24f4837a51376f1703fe97683b
---
M library/MNCC_Emulation.ttcn
M library/MNCC_EncDec.cc
M library/MNCC_Types.ttcn
M library/mncc.h
4 files changed, 47 insertions(+), 14 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/56/20056/1
diff --git a/library/MNCC_Emulation.ttcn b/library/MNCC_Emulation.ttcn
index be087ec..13a842b 100644
--- a/library/MNCC_Emulation.ttcn
+++ b/library/MNCC_Emulation.ttcn
@@ -38,7 +38,7 @@
import from UD_Types all;
modulepar {
- int mp_mncc_version := 6;
+ int mp_mncc_version := 7;
}
/* General "base class" component definition, of which specific implementations
diff --git a/library/MNCC_EncDec.cc b/library/MNCC_EncDec.cc
index f2692d7..d9529ee 100644
--- a/library/MNCC_EncDec.cc
+++ b/library/MNCC_EncDec.cc
@@ -188,8 +188,20 @@
memset(&rtp, 0, sizeof(rtp));
rtp.msg_type = in.msg__type();
rtp.callref = in.u().rtp().callref();
- rtp.ip = in.u().rtp().ip();
- rtp.port = in.u().rtp().rtp__port();
+ if (in.u().rtp().is__ipv6()) {
+ rtp.addr.ss_family = AF_INET6;
+ ((struct sockaddr_in6*)&rtp.addr)->sin6_port = in.u().rtp().rtp__port();
+ //TODO: verify octetstring len
+ memcpy(((struct sockaddr_in6*)&rtp.addr)->sin6_addr, in.u().rtp().ip().data(),
+ sizeof(struct in6_addr));
+ } else {
+ rtp.addr.ss_family = AF_INET;
+ ((struct sockaddr_in*)&rtp.addr)->sin_port = in.u().rtp().rtp__port();
+ //TODO: verify octetstring len
+ memcpy(((struct sockaddr_in*)&rtp.addr)->sin_addr, in.u().rtp().ip().data(),
+ sizeof(struct in_addr));
+ //rtp.ip = in.u().rtp().ip();
+ }
rtp.payload_type = in.u().rtp().payload__type();
rtp.payload_msg_type = in.u().rtp().payload__msg__type();
ret_val = OCTETSTRING(sizeof(rtp), (uint8_t *) &rtp);
@@ -224,6 +236,9 @@
const struct gsm_mncc_rtp *in_rtp;
MNCC__PDU__Rtp rtp;
MNCC__MsgUnion u;
+ bool is_ipv6;
+ OCTETSTRING ip;
+ uint16_t port;
in_mncc = (struct gsm_mncc *) ttcn_buffer.get_read_data();
@@ -258,7 +273,20 @@
case MNCC_RTP_CONNECT:
case MNCC_RTP_FREE:
in_rtp = (const struct gsm_mncc_rtp *) in_mncc;
- rtp = MNCC__PDU__Rtp(in_rtp->callref, in_rtp->ip, in_rtp->port, in_rtp->payload_type,
+ switch (in_rtp->addr.ss_family) {
+ case AF_INET:
+ is_ipv6 = false;
+ port = ((struct sockaddr_in*)&in_rtp->addr)->sin_port;
+ ip = OCTETSTRING(sizeof(struct in_addr), &(struct sockaddr_in*)&in_rtp->addr)->sin_addr);
+ break;
+ case AF_INET6:
+ is_ipv6 = true;
+ port = ((struct sockaddr_in6*)&in_rtp->addr)->sin6_port;
+ ip = OCTETSTRING(sizeof(struct in6_addr), &(struct sockaddr_in6*)&in_rtp->addr)->sin6_addr);
+
+ break;
+ }
+ rtp = MNCC__PDU__Rtp(in_rtp->callref, is_ipv6, ip, port, in_rtp->payload_type,
in_rtp->payload_msg_type, in_rtp->sdp);
u.rtp() = rtp;
break;
diff --git a/library/MNCC_Types.ttcn b/library/MNCC_Types.ttcn
index 0a8e7d9..fa4fc3e 100644
--- a/library/MNCC_Types.ttcn
+++ b/library/MNCC_Types.ttcn
@@ -373,7 +373,8 @@
type record MNCC_PDU_Rtp {
uint32_t callref,
- uint32_t ip,
+ boolean is_ipv6,
+ octetstring ip, //TODO: define size of octetstring based on is_ipv6 using CROSSTAGS?
uint16_t rtp_port,
uint32_t payload_type,
uint32_t payload_msg_type,
@@ -1921,7 +1922,8 @@
u := {
rtp := {
callref := call_id,
- ip := 0,
+ is_ipv6 := false,
+ ip := '00000000'O,
rtp_port := 0,
payload_type := 0,
payload_msg_type := 0,
@@ -1935,13 +1937,14 @@
/* MSC -> MNCC: RTP_CREATE.rsp; acknowledge creation of RTP (stating MSC side IP/Port) */
template MNCC_PDU tr_MNCC_RTP_CREATE(template uint32_t call_id := ?,
- template uint32_t ip := ?,
- template uint32_t rtp_port := ?,
+ template octetstring ip := ?,
+ template uint16_t rtp_port := ?,
template uint32_t payload_type := ?) := {
msg_type := MNCC_RTP_CREATE,
u := {
rtp := {
callref := call_id,
+ is_ipv6 := false,
ip := ip,
rtp_port := rtp_port,
payload_type := payload_type,
@@ -1952,11 +1955,12 @@
}
/* MSC <- MNCC: RTP_CONNECT.req; request connect of RTP */
-template MNCC_PDU ts_MNCC_RTP_CONNECT(uint32_t call_id, uint32_t ip, uint32_t rtp_port, uint32_t pt) := {
+template MNCC_PDU ts_MNCC_RTP_CONNECT(uint32_t call_id, octetstring ip, uint16_t rtp_port, uint32_t pt) := {
msg_type := MNCC_RTP_CONNECT,
u := {
rtp := {
callref := call_id,
+ is_ipv6 := false,
ip := ip,
rtp_port := rtp_port,
payload_type := pt,
@@ -1966,13 +1970,14 @@
}
}
template MNCC_PDU tr_MNCC_RTP_CONNECT(template uint32_t call_id,
- template uint32_t ip := ?,
- template uint32_t rtp_port := ?,
+ template octetstring ip := ?,
+ template uint16_t rtp_port := ?,
template uint32_t pt := ?) := {
msg_type := MNCC_RTP_CONNECT,
u := {
rtp := {
callref := call_id,
+ is_ipv6 := false,
ip := ip,
rtp_port := rtp_port,
payload_type := pt,
diff --git a/library/mncc.h b/library/mncc.h
index 9aff948..1e45c37 100644
--- a/library/mncc.h
+++ b/library/mncc.h
@@ -5,6 +5,7 @@
*/
#include <stdint.h>
+#include <netinet/in.h>
/* GSM 04.08 Bearer Capability: Rate Adaption */
enum gsm48_bcap_ra {
@@ -275,7 +276,7 @@
unsigned char data[0];
};
-#define MNCC_SOCK_VERSION 5
+#define MNCC_SOCK_VERSION 7
struct gsm_mncc_hello {
uint32_t msg_type;
uint32_t version;
@@ -294,8 +295,7 @@
struct gsm_mncc_rtp {
uint32_t msg_type;
uint32_t callref;
- uint32_t ip;
- uint16_t port;
+ struct sockaddr_storage addr;
uint32_t payload_type;
uint32_t payload_msg_type;
--
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/20056
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: I5448ff931ec33f24f4837a51376f1703fe97683b
Gerrit-Change-Number: 20056
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin at sysmocom.de>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20200909/0136fa63/attachment.htm>