1 #ifdef HAVE_CONFIG_H
2 #include <config.h>
3 #endif
4
5 #include <stdlib.h>
6 #include <string.h>
7 #include <sys/types.h>
8 #ifdef _WIN32
9 #include <winsock2.h>
10 #include <ws2tcpip.h>
11 #include <windows.h>
12 #else
13 #include <unistd.h>
14 #include <sys/resource.h>
15 #endif
16
17 #include <pcap.h>
18
19 #include "varattrs.h"
20 #include "pcap/funcattrs.h"
21
22 #ifdef _WIN32
23 #include "portability.h"
24 #endif
25
main(int argc _U_,char ** argv _U_)26 int main(int argc _U_, char **argv _U_)
27 {
28 pcap_if_t *alldevs;
29 int exit_status = 0;
30 char errbuf[PCAP_ERRBUF_SIZE+1];
31 #ifdef _WIN32
32 FILETIME start_ktime, start_utime, end_ktime, end_utime;
33 FILETIME dummy1, dummy2;
34 ULARGE_INTEGER start_kticks, end_kticks, start_uticks, end_uticks;
35 ULONGLONG ktime, utime, tottime;
36 #else
37 struct rusage start_rusage, end_rusage;
38 struct timeval ktime, utime, tottime;
39 #endif
40
41 #ifdef _WIN32
42 if (!GetProcessTimes(GetCurrentProcess(), &dummy1, &dummy2,
43 &start_ktime, &start_utime))
44 {
45 fprintf(stderr, "GetProcessTimes() fails at start\n");
46 exit(1);
47 }
48 start_kticks.LowPart = start_ktime.dwLowDateTime;
49 start_kticks.HighPart = start_ktime.dwHighDateTime;
50 start_uticks.LowPart = start_utime.dwLowDateTime;
51 start_uticks.HighPart = start_utime.dwHighDateTime;
52 #else
53 if (getrusage(RUSAGE_SELF, &start_rusage) == -1) {
54 fprintf(stderr, "getrusage() fails at start\n");
55 exit(1);
56 }
57 #endif
58 for (int i = 0; i < 500; i++)
59 {
60 if (pcap_findalldevs(&alldevs, errbuf) == -1)
61 {
62 fprintf(stderr,"Error in pcap_findalldevs: %s\n",errbuf);
63 exit(1);
64 }
65 pcap_freealldevs(alldevs);
66 }
67
68 #ifdef _WIN32
69 if (!GetProcessTimes(GetCurrentProcess(), &dummy1, &dummy2,
70 &end_ktime, &end_utime))
71 {
72 fprintf(stderr, "GetProcessTimes() fails at end\n");
73 exit(1);
74 }
75 end_kticks.LowPart = end_ktime.dwLowDateTime;
76 end_kticks.HighPart = end_ktime.dwHighDateTime;
77 end_uticks.LowPart = end_utime.dwLowDateTime;
78 end_uticks.HighPart = end_utime.dwHighDateTime;
79 ktime = end_kticks.QuadPart - start_kticks.QuadPart;
80 utime = end_uticks.QuadPart - start_uticks.QuadPart;
81 tottime = ktime + utime;
82 printf("Total CPU secs: kernel %g, user %g, total %g\n",
83 ((double)ktime) / 10000000.0,
84 ((double)utime) / 10000000.0,
85 ((double)tottime) / 10000000.0);
86 #else
87 if (getrusage(RUSAGE_SELF, &end_rusage) == -1) {
88 fprintf(stderr, "getrusage() fails at end\n");
89 exit(1);
90 }
91 timersub(&end_rusage.ru_stime, &start_rusage.ru_stime, &ktime);
92 timersub(&end_rusage.ru_utime, &start_rusage.ru_utime, &utime);
93 timeradd(&ktime, &utime, &tottime);
94 printf("Total CPU secs: kernel %g, user %g, total %g\n",
95 (double)ktime.tv_sec + ((double)ktime.tv_usec / 1000000.0),
96 (double)utime.tv_sec + ((double)utime.tv_usec / 1000000.0),
97 (double)tottime.tv_sec + ((double)tottime.tv_usec / 1000000.0));
98 #endif
99 exit(exit_status);
100 }
101