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