diff --git a/libc/ifaddrs/getifaddrs.c b/libc/ifaddrs/getifaddrs.c index 58de0e63..dfdec8fa 100644 --- a/libc/ifaddrs/getifaddrs.c +++ b/libc/ifaddrs/getifaddrs.c @@ -66,6 +66,7 @@ int getifaddrs(struct ifaddrs** ifas_ptr) freeifaddrs(ifas); return -1; } + struct if_status status; struct if_config cfg; if ( ioctl(fd, NIOC_GETCONFIG, &cfg) < 0 ) { @@ -89,7 +90,7 @@ int getifaddrs(struct ifaddrs** ifas_ptr) ifas = &ifa->pub; strlcpy(ifa->name, netif->if_name, sizeof(ifa->name)); ifa->pub.ifa_name = ifa->name; - ifa->pub.ifa_flags = 0; + ifa->pub.ifa_flags = status.flags & IF_STATUS_FLAGS_UP ? IFF_UP : 0; ifa->addr.in.sin_family = AF_INET; memcpy(&ifa->addr.in.sin_addr, &cfg.inet.address, sizeof(struct in_addr)); diff --git a/libc/include/ifaddrs.h b/libc/include/ifaddrs.h index 44b0b8db..6e3b7137 100644 --- a/libc/include/ifaddrs.h +++ b/libc/include/ifaddrs.h @@ -24,6 +24,8 @@ #include +#define IFF_UP (1 << 0) + #ifndef __socklen_t_defined #define __socklen_t_defined typedef __socklen_t socklen_t;