//http://www.saminiir.com/lets-code-tcp-ip-stack-2-ipv4-icmpv4/ #include #include #include "netdev.h" struct icmp_v4 { uint8_t type; // purpose 0-echo reply, 3- unreachable, 8- echo request, etc... uint8_t code; // reason (type=3,code=0 net unreachable, etc..) uint16_t csum; // checksum (Same as in ipv4 header) uint8_t data[]; // payload (example icmp_v4_echo) } __attribute__((packed)); // payload struct icmp_v4_echo { uint16_t id; // set by sender uint16_t seq; // starting at 0 uint8_t data[]; // optinal (example timestamp) } __attribute__((packed)); struct icmp_v4_dst_unreachable { uint8_t unused; uint8_t len; // lenght of original datagramm uint16_t var; // depends on icmp code uint8_t data[]; } __attribute__((packed)); bool icmp_incoming(struct netdev *dev,struct eth_hdr *hdr);