changeset 37:8f1700a42ca5 default tip

set_remote: add functions for IPv6 and for sockaddr_{in,in6} A convenient way to pass in remote end address as struct sockaddr_in is needed for tw-border-mgw; IPv6 support will be needed in order to bring twrtp_endp into Osmocom mainline.
author Mychaela Falconia <falcon@freecalypso.org>
date Sat, 23 Nov 2024 19:08:28 +0000
parents 84affc6de365
children
files include/endp.h src/set_remote.c
diffstat 2 files changed, 36 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/include/endp.h	Tue Jul 09 02:22:18 2024 +0000
+++ b/include/endp.h	Sat Nov 23 19:08:28 2024 +0000
@@ -88,6 +88,12 @@
 
 void twrtp_endp_set_remote_ipv4(struct twrtp_endp *endp,
 				const struct in_addr *ip, uint16_t port);
+void twrtp_endp_set_remote_ipv6(struct twrtp_endp *endp,
+				const struct in6_addr *ip6, uint16_t port);
+void twrtp_endp_set_remote_sin(struct twrtp_endp *endp,
+				const struct sockaddr_in *sin);
+void twrtp_endp_set_remote_sin6(struct twrtp_endp *endp,
+				const struct sockaddr_in6 *sin6);
 
 int twrtp_endp_tx_quantum(struct twrtp_endp *endp, const uint8_t *payload,
 			  unsigned payload_len, uint8_t payload_type,
--- a/src/set_remote.c	Tue Jul 09 02:22:18 2024 +0000
+++ b/src/set_remote.c	Sat Nov 23 19:08:28 2024 +0000
@@ -1,6 +1,6 @@
 /*
  * Here we implement functions for setting the remote end on themwi_endp,
- * initially only IPv4, then possibly IPv6 in the future.
+ * both IPv4 and IPv6.
  */
 
 #include <sys/socket.h>
@@ -25,3 +25,32 @@
 
 	endp->remote_set = true;
 }
+
+void twrtp_endp_set_remote_ipv6(struct twrtp_endp *endp,
+				const struct in6_addr *ip6, uint16_t port)
+{
+	endp->rtp_remote.u.sin6.sin6_family = AF_INET6;
+	memcpy(&endp->rtp_remote.u.sin6.sin6_addr, ip6,
+		sizeof(struct in6_addr));
+	endp->rtp_remote.u.sin6.sin6_port = htons(port);
+
+	endp->rtcp_remote.u.sin6.sin6_family = AF_INET6;
+	memcpy(&endp->rtcp_remote.u.sin6.sin6_addr, ip6,
+		sizeof(struct in6_addr));
+	endp->rtcp_remote.u.sin6.sin6_port = htons(port + 1);
+
+	endp->remote_set = true;
+}
+
+void twrtp_endp_set_remote_sin(struct twrtp_endp *endp,
+				const struct sockaddr_in *sin)
+{
+	twrtp_endp_set_remote_ipv4(endp, &sin->sin_addr, ntohs(sin->sin_port));
+}
+
+void twrtp_endp_set_remote_sin6(struct twrtp_endp *endp,
+				const struct sockaddr_in6 *sin6)
+{
+	twrtp_endp_set_remote_ipv6(endp, &sin6->sin6_addr,
+				   ntohs(sin6->sin6_port));
+}