... say if you pull a usb stick.

OK?

diff --git frontend.c frontend.c
index 87141f81e8c..b92cde8226c 100644
--- frontend.c
+++ frontend.c
@@ -913,8 +913,21 @@ handle_route_message(struct rt_msghdr *rtm, struct 
sockaddr **rti_info)
 {
        struct imsg_rdns_proposal        rdns_proposal;
        struct sockaddr_rtdns           *rtdns;
+       struct if_announcemsghdr        *ifan;
 
        switch (rtm->rtm_type) {
+       case RTM_IFANNOUNCE:
+               ifan = (struct if_announcemsghdr *)rtm;
+               if (ifan->ifan_what == IFAN_ARRIVAL)
+                       break;
+               rdns_proposal.if_index = ifan->ifan_index;
+               rdns_proposal.src = 0;
+               rdns_proposal.rtdns.sr_family = AF_INET;
+               rdns_proposal.rtdns.sr_len = offsetof(struct sockaddr_rtdns,
+                   sr_dns);
+               frontend_imsg_compose_resolver(IMSG_REPLACE_DNS, 0,
+                   &rdns_proposal, sizeof(rdns_proposal));
+               break;
        case RTM_IFINFO:
                frontend_imsg_compose_resolver(IMSG_NETWORK_CHANGED, 0, NULL,
                    0);
diff --git resolver.c resolver.c
index 874ad5e76b3..8cf72db7250 100644
--- resolver.c
+++ resolver.c
@@ -1952,10 +1952,13 @@ replace_autoconf_forwarders(struct imsg_rdns_proposal 
*rdns_proposal)
        }
 
        TAILQ_FOREACH(tmp, &autoconf_forwarder_list, entry) {
-               /* if_index of zero signals to clear all proposals */
-               if (rdns_proposal->src == tmp->src &&
-                   (rdns_proposal->if_index == 0 || rdns_proposal->if_index ==
-                   tmp->if_index))
+               /*
+                * if_index of zero signals to clear all proposals
+                * src of zero signals interface gone
+                */
+               if ((rdns_proposal->src == 0 || rdns_proposal->src ==
+                   tmp->src) && (rdns_proposal->if_index == 0 ||
+                   rdns_proposal->if_index == tmp->if_index))
                        continue;
                if ((uw_forwarder = calloc(1, sizeof(struct uw_forwarder))) ==
                    NULL)
diff --git unwind.c unwind.c
index b17bf7e413c..d7ae76d4274 100644
--- unwind.c
+++ unwind.c
@@ -266,7 +266,8 @@ main(int argc, char *argv[])
            AF_INET)) == -1)
                fatal("route socket");
 
-       rtfilter = ROUTE_FILTER(RTM_IFINFO) | ROUTE_FILTER(RTM_PROPOSAL);
+       rtfilter = ROUTE_FILTER(RTM_IFINFO) | ROUTE_FILTER(RTM_PROPOSAL)
+           | ROUTE_FILTER(RTM_IFANNOUNCE);
        if (setsockopt(frontend_routesock, AF_ROUTE, ROUTE_MSGFILTER,
            &rtfilter, sizeof(rtfilter)) == -1)
                fatal("setsockopt(ROUTE_MSGFILTER)");


-- 
I'm not entirely sure you are real.

Reply via email to