1 /* Compile with -lrt */
11 #include <sys/socket.h>
14 #include <sys/socket.h>
15 #include <linux/if_packet.h>
16 #include <linux/if_ether.h>
17 #include <linux/if_arp.h>
18 #include <arpa/inet.h>
20 static sig_atomic_t sigint
= 0;
22 static inline double timespec_to_double(const struct timespec
*time
)
24 return time
->tv_nsec
* 1E-9 + (double) time
->tv_sec
;
27 static void sig_handler(int sig
)
37 struct timespec before
, after
;
38 unsigned long long pkts
= 0, byte
= 0;
39 double x1
, x2
, elapsed
;
42 fprintf(stderr
, "Not root?!\n");
46 signal(SIGINT
, sig_handler
);
48 sock
= socket(AF_PACKET
, SOCK_RAW
, htons(ETH_P_ALL
));
54 printf("Hit key to start!\n");
56 printf("Abort with ^C\n");
58 memset(&before
, 0, sizeof(before
));
59 memset(&after
, 0, sizeof(after
));
61 clock_gettime(CLOCK_REALTIME
, &before
);
63 ret
= recv(sock
, buff
, sizeof(buff
), 0);
72 clock_gettime(CLOCK_REALTIME
, &after
);
74 x1
= timespec_to_double(&after
);
75 x2
= timespec_to_double(&before
);
80 printf("time: %lf, pkts/s: %.2lf, bytes/s: %.2lf\n",
81 elapsed
, 1.0 * pkts
/ elapsed
, 1.0 * byte
/ elapsed
);