proc_v4.lc 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. #include "ping.h"## 1 ##src/ping/proc_v4.c##
  2. void## 2 ##src/ping/proc_v4.c##
  3. proc_v4(char *ptr, ssize_t len, struct timeval *tvrecv)## 3 ##src/ping/proc_v4.c##
  4. {## 4 ##src/ping/proc_v4.c##
  5. int hlen1, icmplen;## 5 ##src/ping/proc_v4.c##
  6. double rtt;## 6 ##src/ping/proc_v4.c##
  7. struct ip *ip;## 7 ##src/ping/proc_v4.c##
  8. struct icmp *icmp;## 8 ##src/ping/proc_v4.c##
  9. struct timeval *tvsend;## 9 ##src/ping/proc_v4.c##
  10. ip = (struct ip *) ptr; /* start of IP header */## 10 ##src/ping/proc_v4.c##
  11. hlen1 = ip->ip_hl << 2; /* length of IP header */## 11 ##src/ping/proc_v4.c##
  12. icmp = (struct icmp *) (ptr + hlen1); /* start of ICMP header */## 12 ##src/ping/proc_v4.c##
  13. if ((icmplen = len - hlen1) < 8)## 13 ##src/ping/proc_v4.c##
  14. err_quit("icmplen (%d) < 8", icmplen);## 14 ##src/ping/proc_v4.c##
  15. if (icmp->icmp_type == ICMP_ECHOREPLY) {## 15 ##src/ping/proc_v4.c##
  16. if (icmp->icmp_id != pid)## 16 ##src/ping/proc_v4.c##
  17. return; /* not a response to our ECHO_REQUEST */## 17 ##src/ping/proc_v4.c##
  18. if (icmplen < 16)## 18 ##src/ping/proc_v4.c##
  19. err_quit("icmplen (%d) < 16", icmplen);## 19 ##src/ping/proc_v4.c##
  20. tvsend = (struct timeval *) icmp->icmp_data;## 20 ##src/ping/proc_v4.c##
  21. tv_sub(tvrecv, tvsend);## 21 ##src/ping/proc_v4.c##
  22. rtt = tvrecv->tv_sec * 1000.0 + tvrecv->tv_usec / 1000.0;## 22 ##src/ping/proc_v4.c##
  23. printf("%d bytes from %s: seq=%u, ttl=%d, rtt=%.3f ms\n",## 23 ##src/ping/proc_v4.c##
  24. icmplen, Sock_ntop_host(pr->sarecv, pr->salen),## 24 ##src/ping/proc_v4.c##
  25. icmp->icmp_seq, ip->ip_ttl, rtt);## 25 ##src/ping/proc_v4.c##
  26. } else if (verbose) {## 26 ##src/ping/proc_v4.c##
  27. printf(" %d bytes from %s: type = %d, code = %d\n",## 27 ##src/ping/proc_v4.c##
  28. icmplen, Sock_ntop_host(pr->sarecv, pr->salen),## 28 ##src/ping/proc_v4.c##
  29. icmp->icmp_type, icmp->icmp_code);## 29 ##src/ping/proc_v4.c##
  30. }## 30 ##src/ping/proc_v4.c##
  31. }## 31 ##src/ping/proc_v4.c##