ipv4Packet(): Coder<Ipv4Packet>
Creates a coder for a complete IPv4 datagram — header, options, and the
transport-layer payload sized via the totalLength field.
Pair this with refineSwitch on the protocol field (see @binstruct/inet)
to dispatch the payload into a typed L4 value.
Round-trip a UDP-bearing datagram
Round-trip a UDP-bearing datagram
import { assertEquals } from "@std/assert"; import { parseAddressv4 } from "@hertzg/ip/addressv4"; import { ipv4Packet } from "@binstruct/ipv4"; const coder = ipv4Packet(); const datagram = { versionIhl: { version: 4, ihl: 5 }, typeOfService: 0, totalLength: 24, identification: 0, flagsFragmentOffset: { reserved: 0, dontFragment: 0, moreFragments: 0, fragmentOffset: 0 }, timeToLive: 64, protocol: 17, headerChecksum: 0, sourceAddress: parseAddressv4("192.0.2.1").address, destinationAddress: parseAddressv4("192.0.2.2").address, options: new Uint8Array(0), payload: new Uint8Array([0xde, 0xad, 0xbe, 0xef]), }; const buffer = new Uint8Array(64); const written = coder.encode(datagram, buffer); const [decoded] = coder.decode(buffer.subarray(0, written)); assertEquals(written, 24); assertEquals(decoded.totalLength, 24); assertEquals(decoded.payload.length, 4);
Coder<Ipv4Packet>
A coder for Ipv4Packet values.