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
"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;