From 37013fd1482d2cd6d2ecc331f7c8388aac7e3c51 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Thu, 16 Aug 2012 15:53:57 +0000 Subject: [PATCH] IPv6 socket requires IPv4 PKTINFO for setting source address correctly --- daemon/call.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/daemon/call.c b/daemon/call.c index d7a1590a1..190f6eacd 100644 --- a/daemon/call.c +++ b/daemon/call.c @@ -287,6 +287,7 @@ forward: mh.msg_name = &sin; mh.msg_namelen = sizeof(sin); +ipv4_src: ch->cmsg_len = CMSG_LEN(sizeof(*pi)); ch->cmsg_level = IPPROTO_IP; ch->cmsg_type = IP_PKTINFO; @@ -307,6 +308,9 @@ forward: mh.msg_name = &sin6; mh.msg_namelen = sizeof(sin6); + if (IN6_IS_ADDR_V4MAPPED(&sin6.sin6_addr)) + goto ipv4_src; + ch->cmsg_len = CMSG_LEN(sizeof(*pi6)); ch->cmsg_level = IPPROTO_IPV6; ch->cmsg_type = IPV6_PKTINFO;