From: Vincent Bernat Date: Sun, 29 Aug 2021 19:57:07 +0000 (+0200) Subject: interfaces-bsd: do not consider an interface when it is down X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fheads%2Ffix%2Fbsd-iface-down;p=thirdparty%2Flldpd.git interfaces-bsd: do not consider an interface when it is down At least on OpenBSD, an interface can be oper down while `IFF_RUNNING`. Check the link state and removes the `IFF_RUNNING` flag in this case. Something similar may work with FreeBSD and NetBSD, but it may not be needed. It does not work with MacOS. Fix #474 --- diff --git a/src/daemon/interfaces-bsd.c b/src/daemon/interfaces-bsd.c index f21bad1a..c8baefbb 100644 --- a/src/daemon/interfaces-bsd.c +++ b/src/daemon/interfaces-bsd.c @@ -433,6 +433,15 @@ ifbsd_extract(struct lldpd *cfg, "grabbing information on interface %s", ifaddr->ifa_name); device = ifbsd_extract_device(cfg, ifaddr); +#if defined HOST_OS_OPENBSD + /* On OpenBSD, the interface can have IFF_RUNNING but be down. */ + { + struct if_data *ifdata; + ifdata = ifaddr->ifa_data; + if (!LINK_STATE_IS_UP(ifdata->ifi_link_state)) + device->flags &= ~IFF_RUNNING; + } +#endif if (device) TAILQ_INSERT_TAIL(interfaces, device, next); break;