Change in osmo-msc[master]: WIP: mncc: Support IPv6 addresses (new version mncc 7)

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.org
Wed Sep 9 16:41:17 UTC 2020


pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-msc/+/20053 )


Change subject: WIP: mncc: Support IPv6 addresses (new version mncc 7)
......................................................................

WIP: mncc: Support IPv6 addresses (new version mncc 7)

Change-Id: I6002b648bcb2055dcbbdae3f688f6e2cb7282b7f
---
M include/osmocom/msc/mncc.h
M src/libmsc/gsm_04_08_cc.c
M src/libmsc/mncc_call.c
M src/libmsc/sdp_msg.c
M tests/mncc/mncc_test.ok
5 files changed, 22 insertions(+), 21 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-msc refs/changes/53/20053/1

diff --git a/include/osmocom/msc/mncc.h b/include/osmocom/msc/mncc.h
index cf7d7ce..1c8aff0 100644
--- a/include/osmocom/msc/mncc.h
+++ b/include/osmocom/msc/mncc.h
@@ -28,6 +28,7 @@
 #include <osmocom/gsm/mncc.h>
 
 #include <stdint.h>
+#include <netinet/in.h>
 
 struct gsm_network;
 struct msgb;
@@ -170,7 +171,7 @@
 	unsigned char	data[0];
 };
 
-#define MNCC_SOCK_VERSION	6
+#define MNCC_SOCK_VERSION	7
 struct gsm_mncc_hello {
 	uint32_t	msg_type;
 	uint32_t	version;
@@ -189,8 +190,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;
 	char		sdp[1024];
diff --git a/src/libmsc/gsm_04_08_cc.c b/src/libmsc/gsm_04_08_cc.c
index 8cfb611..d385c83 100644
--- a/src/libmsc/gsm_04_08_cc.c
+++ b/src/libmsc/gsm_04_08_cc.c
@@ -1623,8 +1623,8 @@
 	rtp->callref = callref;
 	rtp->msg_type = cmd;
 	if (rtp_addr) {
-		rtp->ip = osmo_htonl(inet_addr(rtp_addr->ip));
-		rtp->port = rtp_addr->port;
+		if (osmo_sockaddr_str_to_sockaddr(rtp_addr, &rtp->addr) < 0)
+			return -EINVAL;
 	}
 	rtp->payload_type = payload_type;
 	rtp->payload_msg_type = payload_msg_type;
@@ -1746,7 +1746,8 @@
 		return -EINVAL;
 	}
 
-	osmo_sockaddr_str_from_32n(&rtp_addr, rtp->ip, rtp->port);
+	if (osmo_sockaddr_str_from_sockaddr(&rtp_addr, &rtp->addr) <0)
+		return -EINVAL;
 	rtp_stream_set_remote_addr(rtps, &rtp_addr);
 	rtp_stream_commit(rtps);
 	return 0;
diff --git a/src/libmsc/mncc_call.c b/src/libmsc/mncc_call.c
index 0deb903..9d52952 100644
--- a/src/libmsc/mncc_call.c
+++ b/src/libmsc/mncc_call.c
@@ -303,11 +303,10 @@
 		.rtp = {
 			.msg_type = MNCC_RTP_CREATE,
 			.callref = mncc_call->callref,
-			.port = rtp_local->port,
 		},
 	};
 
-	if (osmo_sockaddr_str_to_32n(rtp_local, &mncc_msg.rtp.ip)) {
+	if (osmo_sockaddr_str_to_sockaddr(rtp_local, &mncc_msg.rtp.addr)) {
 		mncc_call_error(mncc_call, "Failed to compose IP address " OSMO_SOCKADDR_STR_FMT "\n",
 				OSMO_SOCKADDR_STR_FMT_ARGS(rtp_local));
 		return false;
@@ -332,7 +331,7 @@
 		return true;
 	}
 
-	if (osmo_sockaddr_str_from_32n(&rtp, mncc_msg->ip, mncc_msg->port)) {
+	if (osmo_sockaddr_str_from_sockaddr(&rtp, &mncc_msg->addr)) {
 		mncc_call_error(mncc_call, "Cannot RTP-CONNECT, invalid RTP IP:port in incoming MNCC message\n");
 		return false;
 	}
diff --git a/src/libmsc/sdp_msg.c b/src/libmsc/sdp_msg.c
index cc54249..6170e8e 100644
--- a/src/libmsc/sdp_msg.c
+++ b/src/libmsc/sdp_msg.c
@@ -168,15 +168,16 @@
 	const struct sdp_audio_codec *codec;
 	struct osmo_strbuf sb = { .buf = dst, .len = dst_size };
 	const char *ip = sdp->rtp.ip[0] ? sdp->rtp.ip : "0.0.0.0";
+	char ipv = osmo_ip_str_type(ip) == AF_INET6 ? '6' : '4';
 
 	OSMO_STRBUF_PRINTF(sb,
 			   "v=0\r\n"
-			   "o=OsmoMSC 0 0 IN IP4 %s\r\n"
+			   "o=OsmoMSC 0 0 IN IP%c %s\r\n"
 			   "s=GSM Call\r\n"
-			   "c=IN IP4 %s\r\n"
+			   "c=IN IP%c %s\r\n"
 			   "t=0 0\r\n"
 			   "m=audio %d RTP/AVP",
-			   ip, ip,
+			   ipv, ip, ipv, ip,
 			   sdp->rtp.port);
 
 	/* Append all payload type numbers to 'm=audio <port> RTP/AVP 3 4 112' line */
diff --git a/tests/mncc/mncc_test.ok b/tests/mncc/mncc_test.ok
index 807904d..9334706 100644
--- a/tests/mncc/mncc_test.ok
+++ b/tests/mncc/mncc_test.ok
@@ -12,12 +12,12 @@
 len zero: len=0 sdplen=-834 sdp=- rc=-22
 
 struct gsm_mncc_rtp:
-empty SDP: len=1048 sdplen=1024 sdp="\0" rc=0
-empty SDP, shortest possible: len=25 sdplen=1 sdp="\0" rc=0
-empty SDP, zero len: len=24 sdplen=0 sdp=- rc=-22
-terminated SDP str: len=1048 sdplen=1024 sdp="Privacy is a desirable marketing option\0" rc=0
-terminated SDP str, shortest possible: len=64 sdplen=40 sdp="Privacy is a desirable marketing option\0" rc=0
-terminated SDP str, but len excludes nul: len=63 sdplen=39 sdp="Privacy is a desirable marketing option" rc=-22
-terminated SDP str, but len too short: len=47 sdplen=23 sdp="Privacy is a desirable " rc=-22
-len way too short: len=10 sdplen=-14 sdp=- rc=-22
-len zero: len=0 sdplen=-24 sdp=- rc=-22
+empty SDP: len=1168 sdplen=1024 sdp="\0" rc=0
+empty SDP, shortest possible: len=145 sdplen=1 sdp="\0" rc=0
+empty SDP, zero len: len=144 sdplen=0 sdp=- rc=-22
+terminated SDP str: len=1168 sdplen=1024 sdp="Privacy is a desirable marketing option\0" rc=0
+terminated SDP str, shortest possible: len=184 sdplen=40 sdp="Privacy is a desirable marketing option\0" rc=0
+terminated SDP str, but len excludes nul: len=183 sdplen=39 sdp="Privacy is a desirable marketing option" rc=-22
+terminated SDP str, but len too short: len=167 sdplen=23 sdp="Privacy is a desirable " rc=-22
+len way too short: len=10 sdplen=-134 sdp=- rc=-22
+len zero: len=0 sdplen=-144 sdp=- rc=-22

-- 
To view, visit https://gerrit.osmocom.org/c/osmo-msc/+/20053
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-msc
Gerrit-Branch: master
Gerrit-Change-Id: I6002b648bcb2055dcbbdae3f688f6e2cb7282b7f
Gerrit-Change-Number: 20053
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/02c8d51c/attachment.htm>


More information about the gerrit-log mailing list