- icmp_echo.data = htons(port);
- icmp_echo.checksum = htons(calc_checksum((uint16_t*) &icmp_echo,
- sizeof (struct icmp_echo_packet)));
-
- memcpy (&packet[off], &icmp_echo, sizeof(struct icmp_echo_packet));
- off += sizeof (struct icmp_echo_packet);
+ icmp_echo.checksum = htons(calc_checksum((uint16_t*) &icmp_echo,
+ sizeof (struct icmp_echo_header)));
+ memcpy (&packet[off],
+ &icmp_echo,
+ sizeof(struct icmp_echo_header));
+
+ /* no go back to calculate ICMP packet checksum */
+ off = sizeof (struct ip_header);
+ icmp_ttl.checksum = htons(calc_checksum((uint16_t*) &packet[off],
+ sizeof (struct icmp_ttl_exceeded_header) +
+ sizeof (struct ip_header) +
+ sizeof (struct icmp_echo_header)));
+ memcpy (&packet[off],
+ &icmp_ttl,
+ sizeof (struct icmp_ttl_exceeded_header));