router: close socket upon NETEV_IFINDEX_CHANGE
authorKoen Aerts <aertskoen5@gmail.com>
Tue, 13 Aug 2019 13:02:19 +0000 (15:02 +0200)
committerHans Dedecker <dedeckeh@gmail.com>
Wed, 14 Aug 2019 20:59:34 +0000 (22:59 +0200)
Make sure the socket is closed in a case where the bridge goes down
as a result of NO-CARRIER on the bridge.
If not present Router Discovery and Router Advertisement will break
permanently after the bridge went down.

Related to  https://github.com/openwrt/odhcpd/issues/135

Signed-off-by: Koen Aerts <aertskoen5@gmail.com>
src/router.c

index c68d0d53c08caa9760884547e40998c3bac1d249..85940f8a1b3d747a4dea92281dc49ed0ecaa82ba 100644 (file)
@@ -229,6 +229,11 @@ static void router_netevent_cb(unsigned long event, struct netevent_handler_info
        struct interface *iface;
 
        switch (event) {
+       case NETEV_IFINDEX_CHANGE:
+               iface = info->iface;
+               if (iface && iface->router_event.uloop.fd >= 0)
+                       close(iface->router_event.uloop.fd);
+               break;
        case NETEV_ROUTE6_ADD:
        case NETEV_ROUTE6_DEL:
                if (info->rt.dst_len)