#pragma once #include #include #include #include "eth.h" #include "ipv4.h" #include "span_writer.h" namespace icmp { struct __attribute__((packed)) echo { uint8_t type; uint8_t code; uint16_t checksum; uint16_t id; uint16_t seq; }; static_assert(sizeof(echo) == 8); void handle(std::span frame, span_writer& tx, eth::mac_addr our_mac, ipv4::ip4_addr our_ip, std::function)> send_raw); size_t build_echo_request(std::span buf, eth::mac_addr src_mac, ipv4::ip4_addr src_ip, eth::mac_addr dst_mac, ipv4::ip4_addr dst_ip, uint16_t id, uint16_t seq); bool parse_echo_reply(std::span frame, ipv4::ip4_addr& src_ip, uint16_t expected_id); } // namespace icmp