proc_v6.lc 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #include "ping.h"## 1 ##src/ping/proc_v6.c##
  2. void## 2 ##src/ping/proc_v6.c##
  3. proc_v6(char *ptr, ssize_t len, struct timeval *tvrecv)## 3 ##src/ping/proc_v6.c##
  4. {## 4 ##src/ping/proc_v6.c##
  5. #ifdef IPV6## 5 ##src/ping/proc_v6.c##
  6. int hlen1, icmp6len;## 6 ##src/ping/proc_v6.c##
  7. double rtt;## 7 ##src/ping/proc_v6.c##
  8. struct ip6_hdr *ip6;## 8 ##src/ping/proc_v6.c##
  9. struct icmp6_hdr *icmp6;## 9 ##src/ping/proc_v6.c##
  10. struct timeval *tvsend;## 10 ##src/ping/proc_v6.c##
  11. ip6 = (struct ip6_hdr *) ptr; /* start of IPv6 header */## 11 ##src/ping/proc_v6.c##
  12. hlen1 = sizeof(struct ip6_hdr);## 12 ##src/ping/proc_v6.c##
  13. if (ip6->ip6_nxt != IPPROTO_ICMPV6)## 13 ##src/ping/proc_v6.c##
  14. err_quit("next header not IPPROTO_ICMPV6");## 14 ##src/ping/proc_v6.c##
  15. icmp6 = (struct icmp6_hdr *) (ptr + hlen1);## 15 ##src/ping/proc_v6.c##
  16. if ((icmp6len = len - hlen1) < 8)## 16 ##src/ping/proc_v6.c##
  17. err_quit("icmp6len (%d) < 8", icmp6len);## 17 ##src/ping/proc_v6.c##
  18. if (icmp6->icmp6_type == ICMP6_ECHO_REPLY) {## 18 ##src/ping/proc_v6.c##
  19. if (icmp6->icmp6_id != pid)## 19 ##src/ping/proc_v6.c##
  20. return; /* not a response to our ECHO_REQUEST */## 20 ##src/ping/proc_v6.c##
  21. if (icmp6len < 16)## 21 ##src/ping/proc_v6.c##
  22. err_quit("icmp6len (%d) < 16", icmp6len);## 22 ##src/ping/proc_v6.c##
  23. tvsend = (struct timeval *) (icmp6 + 1);## 23 ##src/ping/proc_v6.c##
  24. tv_sub(tvrecv, tvsend);## 24 ##src/ping/proc_v6.c##
  25. rtt = tvrecv->tv_sec * 1000.0 + tvrecv->tv_usec / 1000.0;## 25 ##src/ping/proc_v6.c##
  26. printf("%d bytes from %s: seq=%u, hlim=%d, rtt=%.3f ms\n",## 26 ##src/ping/proc_v6.c##
  27. icmp6len, Sock_ntop_host(pr->sarecv, pr->salen),## 27 ##src/ping/proc_v6.c##
  28. icmp6->icmp6_seq, ip6->ip6_hlim, rtt);## 28 ##src/ping/proc_v6.c##
  29. } else if (verbose) {## 29 ##src/ping/proc_v6.c##
  30. printf(" %d bytes from %s: type = %d, code = %d\n",## 30 ##src/ping/proc_v6.c##
  31. icmp6len, Sock_ntop_host(pr->sarecv, pr->salen),## 31 ##src/ping/proc_v6.c##
  32. icmp6->icmp6_type, icmp6->icmp6_code);## 32 ##src/ping/proc_v6.c##
  33. }## 33 ##src/ping/proc_v6.c##
  34. #endif /* IPV6 */## 34 ##src/ping/proc_v6.c##
  35. }## 35 ##src/ping/proc_v6.c##