OSDN Git Service

ipv4: Handle ipv6 gateway in ipv4_confirm_neigh
authorDavid Ahern <dsahern@gmail.com>
Fri, 5 Apr 2019 23:30:36 +0000 (16:30 -0700)
committerDavid S. Miller <davem@davemloft.net>
Mon, 8 Apr 2019 22:22:41 +0000 (15:22 -0700)
Update ipv4_confirm_neigh to handle an ipv6 gateway.

Signed-off-by: David Ahern <dsahern@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/route.c

index 32ecb4c..efa6a36 100644 (file)
@@ -465,13 +465,15 @@ static void ipv4_confirm_neigh(const struct dst_entry *dst, const void *daddr)
        struct net_device *dev = dst->dev;
        const __be32 *pkey = daddr;
 
-       if (rt->rt_gw_family == AF_INET)
+       if (rt->rt_gw_family == AF_INET) {
                pkey = (const __be32 *)&rt->rt_gw4;
-       else if (!daddr ||
+       } else if (rt->rt_gw_family == AF_INET6) {
+               return __ipv6_confirm_neigh_stub(dev, &rt->rt_gw6);
+       } else if (!daddr ||
                 (rt->rt_flags &
-                 (RTCF_MULTICAST | RTCF_BROADCAST | RTCF_LOCAL)))
+                 (RTCF_MULTICAST | RTCF_BROADCAST | RTCF_LOCAL))) {
                return;
-
+       }
        __ipv4_confirm_neigh(dev, *(__force u32 *)pkey);
 }