Library
Module
Module type
Parameter
Class
Class type
type buffer = Cstruct.t
type ipaddr = Ipaddr.V6.t
type prefix = Ipaddr.V6.Prefix.t
local ~now ~random mac
is a pair ctx, bufs
where ctx
is a local IPv6 context associated to the hardware address mac
. bufs
is a list of ethif packets to be sent.
add_ip ~now ctx ip
is ctx', bufs
where ctx'
is ctx
updated with a new local ip and bufs
is a list of ethif packets to be sent.
allocate_frame ctx ip proto
returns a pair buf, len
where buf
is a new ethernet frame containing an ipv6 header of length len
.
select_source ctx ip
returns the ip that should be put in the source field of a packet destined to ip
.
val handle :
now:time ->
random:(int -> Cstruct.t) ->
context ->
buffer ->
context * buffer list list * event list
handle ~now ~random ctx buf
handles an incoming ipv6 packet. It returns ctx',
bufs, evs
where ctx'
is the updated context, bufs
is a list of packets to be sent and evs
is a list of packets to be passed to the higher layers (udp, tcp, etc) for further processing.
send ~now ctx ip frame bufs
starts route resolution and assembles an ipv6 packet for sending with header frame
and body bufs
. It returns a pair ctx', bufs
where ctx'
is the updated context and bufs
is a list of packets to be sent.
tick ~now ctx
should be called periodically (every 1s is good). It returns ctx', bufs
where ctx'
is the updated context and bufs
is a list of packets to be sent.
add_prefix ~now ctx pfx
adds a local prefix to ctx
.
get_prefix ctx
returns the list of local prefixes known to ctx
.
add_routers ~now ctx ips
adds a list of gateways to ctx
to be used for routing.