1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
--- 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 <ronald@cs.vu.nl>
+ 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
}
|