3 --- network.c.orig Mon Oct 26 05:35:01 1998
4 +++ network.c Mon Nov 30 18:25:26 1998
9 +#include <sys/param.h>
13 extern int socket(), ioctl(), sscanf(), printf(), pclose();
14 #elif defined(SUNOS5x)
15 #include <sys/sockio.h>
17 +#elif !(defined(BSD) && BSD >= 199306)
19 /* Returns kernel revision number (10*major+minor). Only used on Linux to
20 figure out what kind of parsing format to use for /proc/net/dev output */
22 #define AddrOpen popen("/usr/bin/netstat -nr", "r")
23 #define AddrScanf sscanf(routeLine, "%*s %*s %*s %*s %*s %s", IF)
24 #define AddrClose while (fgets(routeLine,128,infofp) != NULL); pclose(infofp)
25 +#elif (defined(BSD) && BSD >= 199306)
26 + #define AddrOpen popen("/usr/bin/netstat -nr", "r")
27 + #define AddrScanf sscanf(routeLine, "%*s %*s %*s %*s %*s %*s %s", IF)
28 + #define AddrClose while (fgets(routeLine,128,infofp) != NULL); pclose(infofp)
30 #define AddrOpen fopen("/proc/net/route", "r")
31 #define AddrScanf sscanf(routeLine,"%s", IF)
33 #define PktsScanf sscanf(line, "%s %*s %*s %*s %u %*s %u", \
34 interface, &recv, &trans)
35 #define PktsClose while (fgets(line,128,infofp) != NULL); pclose(infofp)
36 +#elif (defined(BSD) && BSD >= 199306)
37 + #define PktsOpen popen((sprintf(line,"/usr/bin/netstat -n -I %s",IFName)) ? \
39 + #define PktsScanf sscanf(line, "%s %*s %s %*s %u %*s %u", \
40 + interface, network, &recv, &trans)
41 + #define PktsClose while (fgets(line,128,infofp) != NULL); pclose(infofp)
43 #define PktsOpen fopen("/proc/net/dev", "r")
44 #define PktsScanf sscanf(line, ((kernelRevNo()>20) ? \
46 int IFLen = strlen(IFName);
48 char line[129], interface[16];
49 +#if (defined(BSD) && BSD >= 199306)
52 unsigned recv = 0, trans = 0;
54 infofp = PktsOpen; /* open IF stats info stream */
55 while (fgets(line, 128, infofp) != NULL) {
56 PktsScanf; /* read line by line */
57 if (!strncmp(interface,IFName,IFLen)) { /* scanning for interface */
58 +#if (defined(BSD) && BSD >= 199306)
59 + /* Discard non-conforming multicast line. */
60 + if (strncmp(network,"<Link>",strlen(network))) {
62 PktsClose; /* found, close info stream */
63 if (pTX) *pTX = trans; /* if return storage avail */
64 if (pRX) *pRX = recv; /* save TXed/RXed separately */
65 return (recv + trans); /* return total I/O packets */
66 +#if (defined(BSD) && BSD >= 199306)
71 PktsClose; /* close info stream */