<div>Hi. Rob.</div><div> </div><div>In the pending code, arping has an 32bit overflowing issue when calculating time delta</div><div> </div><div>Plz, have a look.</div><div> </div><div> </div><div> </div><div>---<br> toys/pending/arping.c | 33 +++++++++++++++------------------<br> 1 file changed, 15 insertions(+), 18 deletions(-)</div><div>diff --git a/toys/pending/arping.c b/toys/pending/arping.c<br>index be43cab..a6f91b2 100644<br>--- a/toys/pending/arping.c<br>+++ b/toys/pending/arping.c<br>@@ -33,15 +33,12 @@ config ARPING<br> #include <netpacket/packet.h><br> <br> GLOBALS(<br>-    long count;<br>-    unsigned long time_out;<br>-    char *iface;<br>-    char *src_ip;<br>-<br>-    int sockfd;<br>-    unsigned long start, end;<br>-    unsigned sent_at, sent_nr, rcvd_nr, brd_sent, rcvd_req, brd_rcv,<br>-             unicast_flag;<br>+  long count, time_out;<br>+  char *iface, *src_ip;<br>+<br>+  int sockfd;<br>+  unsigned sent_nr, rcvd_nr, brd_sent, rcvd_req, brd_rcv, unicast_flag;<br>+  unsigned long long sent_at;<br> )<br> <br> struct sockaddr_ll src_pk, dst_pk; <br>@@ -160,11 +157,11 @@ static void recv_from(struct sockaddr_ll *from, int *recv_len)<br>         arp_hdr->ar_op == htons(ARPOP_REPLY) ? "ply" : "quest",<br>         inet_ntoa(s_ip), ether_ntoa((struct ether_addr *) p));<br>     if (TT.sent_at) {  <br>-      unsigned delta;<br>+      unsigned long long delta;<br>       struct timeval tval;<br> <br>       gettimeofday(&tval, NULL);<br>-      delta = (tval.tv_sec * 1000000ULL + (tval.tv_usec)) - TT.sent_at;<br>+      delta = (tval.tv_sec * 1000000ULL + tval.tv_usec) - TT.sent_at;<br>       xprintf(" %u.%03ums\n", delta / 1000, delta % 1000);<br>       xflush();<br>     }<br>@@ -182,18 +179,18 @@ static void recv_from(struct sockaddr_ll *from, int *recv_len)<br> // Alarm signal Handle, send packets in one second interval.<br> static void send_signal(int sig)<br> {<br>-  struct timeval start;<br>+  struct timeval tval;<br>+  static unsigned long long start, end;<br> <br>-  gettimeofday(&start, NULL);<br>-  if (!TT.start) <br>-    TT.end = TT.start = start.tv_sec * 1000 + start.tv_usec / 1000;<br>-  else TT.end = start.tv_sec*1000 + start.tv_usec / 1000;<br>+  gettimeofday(&tval, NULL);<br>+  if (!start) end = start = tval.tv_sec * 1000 + tval.tv_usec / 1000;<br>+  else end = tval.tv_sec*1000 + tval.tv_usec / 1000;<br>   if (toys.optflags & FLAG_c) {<br>     if (!TT.count) done(0);<br>     TT.count--; <br>   }<br>-  if ((toys.optflags & FLAG_w) && ((TT.end - TT.start) > <br>-        ((TT.time_out)*1000))) done(0);<br>+  if ((toys.optflags & FLAG_w) && ((end - start) > <br>+        (TT.time_out*1000))) done(0);<br>   send_packet();<br>   alarm(1);<br> }<br>-- </div>