package mirage-protocols

  1. Overview
  2. Docs

Ethernet (IEEE 802.3) is a widely used data link layer. The hardware is usually a twisted pair or fibre connection, on the software side it consists of an Ethernet header where source and destination mac addresses, and a type field, indicating the type of the next layer, are present. The Ethernet layer consists of network card mac address and MTU information, and provides decapsulation and encapsulation.

type error = private [>
  1. | Ethernet.error
]

The type for ethernet interface errors.

val pp_error : error Fmt.t

pp_error is the pretty-printer for errors.

type buffer

The type for memory buffers.

type macaddr

The type for unique MAC identifiers.

include Mirage_device.S
type +'a io
type t
val disconnect : t -> unit io
val write : t -> ?src:macaddr -> macaddr -> Ethernet.proto -> ?size:int -> (buffer -> int) -> (unit, error) Stdlib.result io

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

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:(buffer -> unit io) -> ipv4:(buffer -> unit io) -> ipv6:(buffer -> unit io) -> t -> buffer -> unit io

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

OCaml

Innovation. Community. Security.