function pppoeHeader
pppoeHeader(): Coder<PppoeHeader>

Creates a coder for a PPPoE header and its payload (RFC 2516).

The payload length is derived from the header's length field (payload.length === length); length itself is written verbatim on encode, not recomputed, so callers are responsible for keeping it in sync with payload.length.

Examples

Decode a known PADT (session teardown) wire capture

import { assertEquals } from "@std/assert";
import { pppoeHeader, PPPOE_CODE, PPPOE_HEADER_SIZE } from "@binstruct/pppoe";

const wire = new Uint8Array([
  0x11, 0xa7, 0x00, 0x2a, 0x00, 0x00,
]);

const [decoded, read] = pppoeHeader().decode(wire);

assertEquals(read, PPPOE_HEADER_SIZE);
assertEquals(decoded.versionType, { version: 1, type: 1 });
assertEquals(decoded.code, PPPOE_CODE.PADT);
assertEquals(decoded.sessionId, 0x002a);
assertEquals(decoded.length, 0);
assertEquals(decoded.payload.length, 0);

Empty-payload session keepalive

import { assertEquals } from "@std/assert";
import { pppoeHeader, PPPOE_CODE, PPPOE_HEADER_SIZE } from "@binstruct/pppoe";

const coder = pppoeHeader();
const buffer = new Uint8Array(PPPOE_HEADER_SIZE);
const written = coder.encode({
  versionType: { version: 1, type: 1 },
  code: PPPOE_CODE.SESSION_DATA,
  sessionId: 0x1234,
  length: 0,
  payload: new Uint8Array(0),
}, buffer);
const [decoded] = coder.decode(buffer);

assertEquals(written, PPPOE_HEADER_SIZE);
assertEquals(decoded.sessionId, 0x1234);
assertEquals(decoded.payload.length, 0);

Return Type

Coder<PppoeHeader>

A coder for PppoeHeader values.