Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ipv6 sit: Fix 6rd relay address.

ipv6 sit: Fix 6rd relay address.

Relay's address should be extracted from real IPv6 address
instead of configured prefix.

Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

YOSHIFUJI Hideaki / 吉藤英明 and committed by
David S. Miller
e7db38c3 e0c93948

+2 -2
+2 -2
net/ipv6/sit.c
··· 569 569 pbw0 = tunnel->ip6rd.prefixlen >> 5; 570 570 pbi0 = tunnel->ip6rd.prefixlen & 0x1f; 571 571 572 - d = (ntohl(tunnel->ip6rd.prefix.s6_addr32[pbw0]) << pbi0) >> 572 + d = (ntohl(v6dst->s6_addr32[pbw0]) << pbi0) >> 573 573 tunnel->ip6rd.relay_prefixlen; 574 574 575 575 pbi1 = pbi0 - tunnel->ip6rd.relay_prefixlen; 576 576 if (pbi1 > 0) 577 - d |= ntohl(tunnel->ip6rd.prefix.s6_addr32[pbw0 + 1]) >> 577 + d |= ntohl(v6dst->s6_addr32[pbw0 + 1]) >> 578 578 (32 - pbi1); 579 579 580 580 dst = tunnel->ip6rd.relay_prefix | htonl(d);