arpData(): Coder<ArpData>
Creates a coder for the common Ethernet/IPv4 ARP packet (RFC 826).
Round-trip encode and decode an ARP reply
Round-trip encode and decode an ARP reply
import { assertEquals } from "@std/assert"; import { parseAddressv4 } from "@hertzg/ip/addressv4"; import { parse as parseMac } from "@hertzg/mac"; import { ARP_ETHERNET_IPV4_SIZE, ARP_HARDWARE_TYPE, ARP_HW_LEN_ETHERNET, ARP_OPCODE, ARP_PROTOCOL_TYPE, ARP_PROTO_LEN_IPV4, arpData, } from "@binstruct/arp"; const coder = arpData(); const reply = { hardwareType: ARP_HARDWARE_TYPE.ETHERNET, protocolType: ARP_PROTOCOL_TYPE.IPV4, hardwareAddressLength: ARP_HW_LEN_ETHERNET, protocolAddressLength: ARP_PROTO_LEN_IPV4, operation: ARP_OPCODE.REPLY, senderHardwareAddress: parseMac("aa:bb:cc:dd:ee:ff"), senderProtocolAddress: parseAddressv4("192.168.1.2").address, targetHardwareAddress: parseMac("00:11:22:33:44:55"), targetProtocolAddress: parseAddressv4("192.168.1.1").address, }; const buffer = new Uint8Array(ARP_ETHERNET_IPV4_SIZE); const bytesWritten = coder.encode(reply, buffer); const [decoded, bytesRead] = coder.decode(buffer); assertEquals(bytesWritten, ARP_ETHERNET_IPV4_SIZE); assertEquals(bytesRead, ARP_ETHERNET_IPV4_SIZE); assertEquals(decoded, reply);