Address Resolution Protocol purely in OCaml
Library arp
Module Arp_packet
type op =
| Request
| Reply
val op_to_int : op -> int
val int_to_op : int -> op option
type t = {
operation : op;
source_mac : Macaddr.t;
source_ip : Ipaddr.V4.t;
target_mac : Macaddr.t;
target_ip : Ipaddr.V4.t;

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

val size : int

size is the size of an ARP frame.

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

pp ppf t prints the frame t on ppf.

val equal : t -> t -> bool

equal a b returns true if frames a and b are equal, false otherwise.

type error =
| Too_short
| Unusable
| 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

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