... 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.