You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
2.8 KiB
101 lines
2.8 KiB
#ifdef HAVE_CONFIG_H
|
|
#include <config.h>
|
|
#endif
|
|
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <sys/types.h>
|
|
#ifdef _WIN32
|
|
#include <winsock2.h>
|
|
#include <ws2tcpip.h>
|
|
#include <windows.h>
|
|
#else
|
|
#include <unistd.h>
|
|
#include <sys/resource.h>
|
|
#endif
|
|
|
|
#include <pcap.h>
|
|
|
|
#include "varattrs.h"
|
|
#include "pcap/funcattrs.h"
|
|
|
|
#ifdef _WIN32
|
|
#include "portability.h"
|
|
#endif
|
|
|
|
int main(int argc _U_, char **argv _U_)
|
|
{
|
|
pcap_if_t *alldevs;
|
|
int exit_status = 0;
|
|
char errbuf[PCAP_ERRBUF_SIZE+1];
|
|
#ifdef _WIN32
|
|
FILETIME start_ktime, start_utime, end_ktime, end_utime;
|
|
FILETIME dummy1, dummy2;
|
|
ULARGE_INTEGER start_kticks, end_kticks, start_uticks, end_uticks;
|
|
ULONGLONG ktime, utime, tottime;
|
|
#else
|
|
struct rusage start_rusage, end_rusage;
|
|
struct timeval ktime, utime, tottime;
|
|
#endif
|
|
|
|
#ifdef _WIN32
|
|
if (!GetProcessTimes(GetCurrentProcess(), &dummy1, &dummy2,
|
|
&start_ktime, &start_utime))
|
|
{
|
|
fprintf(stderr, "GetProcessTimes() fails at start\n");
|
|
exit(1);
|
|
}
|
|
start_kticks.LowPart = start_ktime.dwLowDateTime;
|
|
start_kticks.HighPart = start_ktime.dwHighDateTime;
|
|
start_uticks.LowPart = start_utime.dwLowDateTime;
|
|
start_uticks.HighPart = start_utime.dwHighDateTime;
|
|
#else
|
|
if (getrusage(RUSAGE_SELF, &start_rusage) == -1) {
|
|
fprintf(stderr, "getrusage() fails at start\n");
|
|
exit(1);
|
|
}
|
|
#endif
|
|
for (int i = 0; i < 500; i++)
|
|
{
|
|
if (pcap_findalldevs(&alldevs, errbuf) == -1)
|
|
{
|
|
fprintf(stderr,"Error in pcap_findalldevs: %s\n",errbuf);
|
|
exit(1);
|
|
}
|
|
pcap_freealldevs(alldevs);
|
|
}
|
|
|
|
#ifdef _WIN32
|
|
if (!GetProcessTimes(GetCurrentProcess(), &dummy1, &dummy2,
|
|
&end_ktime, &end_utime))
|
|
{
|
|
fprintf(stderr, "GetProcessTimes() fails at end\n");
|
|
exit(1);
|
|
}
|
|
end_kticks.LowPart = end_ktime.dwLowDateTime;
|
|
end_kticks.HighPart = end_ktime.dwHighDateTime;
|
|
end_uticks.LowPart = end_utime.dwLowDateTime;
|
|
end_uticks.HighPart = end_utime.dwHighDateTime;
|
|
ktime = end_kticks.QuadPart - start_kticks.QuadPart;
|
|
utime = end_uticks.QuadPart - start_uticks.QuadPart;
|
|
tottime = ktime + utime;
|
|
printf("Total CPU secs: kernel %g, user %g, total %g\n",
|
|
((double)ktime) / 10000000.0,
|
|
((double)utime) / 10000000.0,
|
|
((double)tottime) / 10000000.0);
|
|
#else
|
|
if (getrusage(RUSAGE_SELF, &end_rusage) == -1) {
|
|
fprintf(stderr, "getrusage() fails at end\n");
|
|
exit(1);
|
|
}
|
|
timersub(&end_rusage.ru_stime, &start_rusage.ru_stime, &ktime);
|
|
timersub(&end_rusage.ru_utime, &start_rusage.ru_utime, &utime);
|
|
timeradd(&ktime, &utime, &tottime);
|
|
printf("Total CPU secs: kernel %g, user %g, total %g\n",
|
|
(double)ktime.tv_sec + ((double)ktime.tv_usec / 1000000.0),
|
|
(double)utime.tv_sec + ((double)utime.tv_usec / 1000000.0),
|
|
(double)tottime.tv_sec + ((double)tottime.tv_usec / 1000000.0));
|
|
#endif
|
|
exit(exit_status);
|
|
}
|