Address Resolution Protocol purely in OCaml
Module type
Class type
Library arp.mirage
Parameter #1 Arp . Make . Ethernet
type error#row

The type for ethernet interface errors.

and error = private [>
| Mirage_protocols.Ethernet.error

The type for ethernet interface errors.

val pp_error : error Fmt.t

pp_error is the pretty-printer for errors.

include Mirage_device.S
type t

The type representing the internal state of the device

val disconnect : t -> unit Lwt.t

Disconnect from the device. While this might take some time to complete, it can never result in an error.

val write : t -> ?src:Macaddr.t -> Macaddr.t -> Mirage_protocols.Ethernet.proto -> ?size:int -> ( Cstruct.t -> int ) -> ( unit, error ) result Lwt.t

write eth ~src dst proto ~size payload outputs an ethernet frame which header is filled by eth, and its payload is the buffer from the call to payload. Payload gets a buffer of size (defaults to mtu) to fill with their payload. If size exceeds mtu, an error is returned.

val mac : t -> Macaddr.t

mac eth is the MAC address of eth.

val mtu : t -> int

mtu eth is the Maximum Transmission Unit of the eth i.e. the maximum size of the payload, excluding the ethernet frame header.

val input : arpv4:( Cstruct.t -> unit Lwt.t ) -> ipv4:( Cstruct.t -> unit Lwt.t ) -> ipv6:( Cstruct.t -> unit Lwt.t ) -> t -> Cstruct.t -> unit Lwt.t

input ~arpv4 ~ipv4 ~ipv6 eth buffer decodes the buffer and demultiplexes it depending on the protocol to the callback.