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