Skip to content

Commit

Permalink
sit: fix prefix length of ll and v4mapped addresses
Browse files Browse the repository at this point in the history
When the local IPv4 endpoint is wilcard (0.0.0.0), the prefix length is
correctly set, ie 64 if the address is a link local one or 96 if the address is
a v4 mapped one.
But when the local endpoint is specified, the prefix length is set to 128 for
both kind of address. This patch fix this wrong prefix length.

Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Nicolas Dichtel authored and David S. Miller committed Nov 14, 2013
1 parent f9a23c8 commit 929c9cf
Showing 1 changed file with 4 additions and 7 deletions.
11 changes: 4 additions & 7 deletions net/ipv6/addrconf.c
Original file line number Diff line number Diff line change
Expand Up @@ -2528,7 +2528,7 @@ static void sit_add_v4_addrs(struct inet6_dev *idev)
struct in6_addr addr;
struct net_device *dev;
struct net *net = dev_net(idev->dev);
int scope;
int scope, plen;

ASSERT_RTNL();

Expand All @@ -2538,12 +2538,14 @@ static void sit_add_v4_addrs(struct inet6_dev *idev)
if (idev->dev->flags&IFF_POINTOPOINT) {
addr.s6_addr32[0] = htonl(0xfe800000);
scope = IFA_LINK;
plen = 64;
} else {
scope = IPV6_ADDR_COMPATv4;
plen = 96;
}

if (addr.s6_addr32[3]) {
add_addr(idev, &addr, 128, scope);
add_addr(idev, &addr, plen, scope);
return;
}

Expand All @@ -2555,7 +2557,6 @@ static void sit_add_v4_addrs(struct inet6_dev *idev)
int flag = scope;

for (ifa = in_dev->ifa_list; ifa; ifa = ifa->ifa_next) {
int plen;

addr.s6_addr32[3] = ifa->ifa_local;

Expand All @@ -2566,10 +2567,6 @@ static void sit_add_v4_addrs(struct inet6_dev *idev)
continue;
flag |= IFA_HOST;
}
if (idev->dev->flags&IFF_POINTOPOINT)
plen = 64;
else
plen = 96;

add_addr(idev, &addr, plen, flag);
}
Expand Down

0 comments on commit 929c9cf

Please sign in to comment.