ndp: don't trigger IPv6 ping when neighbor entry is invalid
authorHans Dedecker <dedeckeh@gmail.com>
Fri, 28 Apr 2017 08:20:13 +0000 (10:20 +0200)
committerHans Dedecker <dedeckeh@gmail.com>
Fri, 28 Apr 2017 12:11:02 +0000 (14:11 +0200)
A ping for an IPv6 address not present on an interface will generate a
netlink neighbor message with as status fail; launching again an IPv6
ping on other proxy enabled interfaces will create a cascade effect of
netlink neighbor messages with as status fail which in its turn will
again trigger an IPv6 ping on proxy enabled interfaces ...

Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
src/ndp.c

index 49aea1cb5e0479d2dbc7cecf9ee724a8cafbc5a1..366522b63833e1dd3f65ff9e96b9b2e8b7b896fe 100644 (file)
--- a/src/ndp.c
+++ b/src/ndp.c
@@ -414,21 +414,6 @@ static void setup_addr_for_relaying(struct in6_addr *addr, struct interface *ifa
        }
 }
 
-static void setup_ping6(struct in6_addr *addr, struct interface *iface)
-{
-       struct interface *c;
-
-       list_for_each_entry(c, &interfaces, head) {
-               if (iface == c || c->ndp != RELAYD_RELAY ||
-                               c->external == true)
-                       continue;
-
-               ping6(addr, c);
-       }
-}
-
-static struct in6_addr last_solicited;
-
 static void handle_rtnl_event(struct odhcpd_event *e)
 {
        struct event_socket *ev_sock = container_of(e, struct event_socket, ev);
@@ -543,14 +528,8 @@ static int cb_rtnl_valid(struct nl_msg *msg, _unused void *arg)
 
                if (add && !(ndm->ndm_state &
                                (NUD_REACHABLE | NUD_STALE | NUD_DELAY | NUD_PROBE |
-                                NUD_PERMANENT | NUD_NOARP))) {
-                       if (!IN6_ARE_ADDR_EQUAL(&last_solicited, addr)) {
-                               last_solicited = *addr;
-                               setup_ping6(addr, iface);
-                       }
-
+                                NUD_PERMANENT | NUD_NOARP)))
                        return NL_OK;
-               }
 
                setup_addr_for_relaying(addr, iface, add);
                setup_route(addr, iface, add);