Allow scoped addresses to be used for IPv6 multicast socket.
authorGuus Sliepen <guus@tinc-vpn.org>
Sun, 25 Mar 2012 12:42:10 +0000 (13:42 +0100)
committerGuus Sliepen <guus@tinc-vpn.org>
Sun, 25 Mar 2012 12:42:10 +0000 (13:42 +0100)
src/multicast_device.c

index 495f8fc..879eb66 100644 (file)
@@ -119,7 +119,7 @@ static bool setup_device(void) {
                        struct sockaddr_in6 in6;
                        memcpy(&in6, ai->ai_addr, sizeof in6);
                        memcpy(&mreq.ipv6mr_multiaddr, &in6.sin6_addr, sizeof mreq.ipv6mr_multiaddr);
                        struct sockaddr_in6 in6;
                        memcpy(&in6, ai->ai_addr, sizeof in6);
                        memcpy(&mreq.ipv6mr_multiaddr, &in6.sin6_addr, sizeof mreq.ipv6mr_multiaddr);
-                       mreq.ipv6mr_interface = 0;
+                       mreq.ipv6mr_interface = in6.sin6_scope_id;
                        if(setsockopt(device_fd, IPPROTO_IPV6, IPV6_JOIN_GROUP, &mreq, sizeof mreq)) {
                                logger(LOG_ERR, "Cannot join multicast group %s %s: %s", host, port, sockstrerror(sockerrno));
                                closesocket(device_fd);
                        if(setsockopt(device_fd, IPPROTO_IPV6, IPV6_JOIN_GROUP, &mreq, sizeof mreq)) {
                                logger(LOG_ERR, "Cannot join multicast group %s %s: %s", host, port, sockstrerror(sockerrno));
                                closesocket(device_fd);