package mirage-protocols
Library
Module
Module type
Parameter
Class
Class type
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.
The type for ethernet interface errors.
val pp_error : error Fmt.t
pp_error
is the pretty-printer for errors.
val disconnect : t -> unit Lwt.t
Disconnect from the ethernet layer. While this might take some time to complete, it can never result in an error.
val write :
t ->
?src:Macaddr.t ->
Macaddr.t ->
Ethernet.proto ->
?size:int ->
(Cstruct.t -> int) ->
(unit, error) Stdlib.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.