--- src/apppstatus.cc.orig Sat Mar 17 00:17:37 2001 +++ src/apppstatus.cc Thu Apr 5 22:45:29 2001 @@ -270,6 +270,7 @@ return isUpIsdn(); #endif +#ifndef __FreeBSD__ char buffer[32 * sizeof(struct ifreq)]; struct ifconf ifc; struct ifreq *ifr; @@ -301,6 +302,38 @@ } close(s); + +#else // __FreeBSD__ + // FreeBSD code by Ronald Klop + struct ifmibdata ifmd; + size_t ifmd_size=sizeof(ifmibdata); + int nr_network_devs; + size_t int_size=sizeof(int); + int name[6]; + name[0] = CTL_NET; + name[1] = PF_LINK; + name[2] = NETLINK_GENERIC; + name[3] = IFMIB_IFDATA; + name[5] = IFDATA_GENERAL; + + if(sysctlbyname("net.link.generic.system.ifcount",&nr_network_devs, + &int_size,(void*)0,0) == -1) { + printf("%s@%d: %s\n",__FILE__,__LINE__,strerror(errno)); + } else { + for(int i=1;i<=nr_network_devs;i++) { + name[4] = i; /* row of the ifmib table */ + + if(sysctl(name, 6, &ifmd, &ifmd_size, (void *)0, 0) == -1) { + printf(_("%s@%d: %s\n"),__FILE__,__LINE__,strerror(errno)); + continue; + } + + if (strcmp(ifmd.ifmd_name, netDevice) == 0 && (ifmd.ifmd_flags & IFF_RUNNING)) { + return true; + } + } + } +#endif // __FreeBSD__ return false; #endif // if 0 }