From 63f67ae965586971c136e79b6bf479f347b66660 Mon Sep 17 00:00:00 2001 From: Erik Boasson Date: Fri, 20 Mar 2020 11:48:13 +0100 Subject: [PATCH] Fix IPv6 multicast breakage The moving around and cleaning up of network code broke the IPv6 multicast support by memcpy'ing a sockaddr_in6 instead of an in6_addr in a multicast join record. Signed-off-by: Erik Boasson --- src/core/ddsi/src/ddsi_udp.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/core/ddsi/src/ddsi_udp.c b/src/core/ddsi/src/ddsi_udp.c index 9f4e509..65d10fd 100644 --- a/src/core/ddsi/src/ddsi_udp.c +++ b/src/core/ddsi/src/ddsi_udp.c @@ -561,7 +561,7 @@ static int joinleave_asm_mcgroup (ddsrt_socket_t socket, int join, const nn_loca { struct ipv6_mreq ipv6mreq; memset (&ipv6mreq, 0, sizeof (ipv6mreq)); - memcpy (&ipv6mreq.ipv6mr_multiaddr, &mcip.a6, sizeof (ipv6mreq.ipv6mr_multiaddr)); + ipv6mreq.ipv6mr_multiaddr = mcip.a6.sin6_addr; ipv6mreq.ipv6mr_interface = interf ? interf->if_index : 0; rc = ddsrt_setsockopt (socket, IPPROTO_IPV6, join ? IPV6_JOIN_GROUP : IPV6_LEAVE_GROUP, &ipv6mreq, sizeof (ipv6mreq)); } @@ -592,8 +592,8 @@ static int joinleave_ssm_mcgroup (ddsrt_socket_t socket, int join, const nn_loca struct group_source_req gsr; memset (&gsr, 0, sizeof (gsr)); gsr.gsr_interface = interf ? interf->if_index : 0; - memcpy (&gsr.gsr_group, &mcip.a6, sizeof (gsr.gsr_group)); - memcpy (&gsr.gsr_source, &srcip.a6, sizeof (gsr.gsr_source)); + gsr.gsr_group = mcip.x; + gsr.gsr_source = srcip.x; rc = ddsrt_setsockopt (socket, IPPROTO_IPV6, join ? MCAST_JOIN_SOURCE_GROUP : MCAST_LEAVE_SOURCE_GROUP, &gsr, sizeof (gsr)); } else