ndp: fix adding proxy neighbor entries
authorHans Dedecker <dedeckeh@gmail.com>
Thu, 21 Mar 2019 13:17:50 +0000 (14:17 +0100)
committerHans Dedecker <dedeckeh@gmail.com>
Thu, 21 Mar 2019 14:41:39 +0000 (15:41 +0100)
In case multiple logical OpenWrt interfaces are stacked on the same device
and one of the interfaces is configured in relay and the other not; adding
a proxy neighbor entry will result into it immediately being deleted if
the interface in non relay mode comes last.
Fix this by not doing a delete on the interface which is not configured in
relay mode.

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

index c819062947f40b33918444671b37813ef73c92f9..800c61612b799a9b81f0989ae918a415f5cd0154 100644 (file)
--- a/src/ndp.c
+++ b/src/ndp.c
@@ -342,16 +342,14 @@ static void setup_addr_for_relaying(struct in6_addr *addr, struct interface *ifa
        inet_ntop(AF_INET6, addr, ipbuf, sizeof(ipbuf));
 
        avl_for_each_element(&interfaces, c, avl) {
        inet_ntop(AF_INET6, addr, ipbuf, sizeof(ipbuf));
 
        avl_for_each_element(&interfaces, c, avl) {
-               if (iface == c || (c->ndp != MODE_RELAY && !add))
+               if (iface == c || c->ndp != MODE_RELAY)
                        continue;
 
                        continue;
 
-               bool neigh_add = (c->ndp == MODE_RELAY ? add : false);
-
-               if (netlink_setup_proxy_neigh(addr, c->ifindex, neigh_add))
+               if (netlink_setup_proxy_neigh(addr, c->ifindex, add))
                        syslog(LOG_DEBUG, "Failed to %s proxy neighbour entry %s on %s",
                        syslog(LOG_DEBUG, "Failed to %s proxy neighbour entry %s on %s",
-                               neigh_add ? "add" : "delete", ipbuf, c->name);
+                               add ? "add" : "delete", ipbuf, c->name);
                else
                        syslog(LOG_DEBUG, "%s proxy neighbour entry %s on %s",
                else
                        syslog(LOG_DEBUG, "%s proxy neighbour entry %s on %s",
-                               neigh_add ? "Added" : "Deleted", ipbuf, c->name);
+                               add ? "Added" : "Deleted", ipbuf, c->name);
        }
 }
        }
 }