Module type
Class type

Conversion between wire and high-level data

There is a binary wire representation, and a high-level datatype. This module converts between the two. While decoding can result in an error, encoding can not.

type t = {
  1. operation : Arp_wire.op;
  2. source_mac : Macaddr.t;
  3. source_ip : Ipaddr.V4.t;
  4. target_mac : Macaddr.t;
  5. target_ip : Ipaddr.V4.t;

The high-level ARP frame consisting of the two address pairs and an operation.

val pp : Format.formatter -> t -> unit

pp ppf t prints the frame t on ppf.

type error =
  1. | Too_short
  2. | Unusable
  3. | Unknown_operation of Cstruct.uint16

The type of possible errors during decoding

  • Too_short if the provided buffer is not long enough
  • Unusable if the protocol or hardware address type is not IPv4 and Ethernet
  • Unknown_operation if it is neither a request nor a reply
val pp_error : Format.formatter -> error -> unit

pp_error ppf err prints the error err on ppf.


val decode : Cstruct.t -> (t, error) Result.result

decode buf attempts to decode the buffer into an ARP frame t.


val encode : t -> Cstruct.t

encode t is a buf, a freshly allocated buffer, which contains the encoded ARP frame t.

val encode_into : t -> Cstruct.t -> unit

encode_into t buf encodes t into the buffer buf at offset 0.

  • raises Invalid_argument

    if the buffer buf is too small (below 28 bytes).