function ipv4Packet
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.

Examples

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);

Return Type

Coder<Ipv4Packet>

A coder for Ipv4Packet values.

Usage

import { ipv4Packet } from ".";