package mirage-types
include IP
with type +'a io = 'a io
with type ipaddr = ipv4addr
with type buffer = buffer
with type t = ipv4
type buffer = buffer
The type for memory buffers.
type ipaddr = ipv4addr
The type for IP addresses.
type error = [
| `Unknown of string
(*an undiagnosed error
*)| `Unimplemented
(*operation not yet implemented in the code
*)
]
The type for IO operation errors.
An input continuation used by the parsing functions to pass on an input packet down the stack.
callback ~src ~dst buf
will be called with src
and dst
containing the source and destination IP address respectively, and buf
will be a buffer pointing at the start of the IP payload.
val input :
t ->
tcp:callback ->
udp:callback ->
default:(proto:int -> callback) ->
buffer ->
unit io
input ~tcp ~udp ~default ip buf
demultiplexes an incoming buffer
that contains an IP frame. It examines the protocol header and passes the result onto either the tcp
or udp
function, or the default
function for unknown IP protocols.
allocate_frame t ~dst ~proto
retrurns a pair (pkt, len)
such that Cstruct.sub pkt 0 len
is the IP header (including the link layer part) of a packet going to dst
for protocol proto
. The space in pkt
after the first len
bytes can be used by the client.
write t frame buf
writes the packet frame :: buf :: []
to the address dst
.
writev t frame bufs
writes the packet frame :: bufs
.
checksum frame bufs
computes the IP checksum of bufs
computing the pseudo-header from the actual header frame
. It assumes that frame is of the form returned by allocate_frame
, i.e., that it contains the link-layer part.
get_source ip ~dst
is the source address to be used to send a packet to dst
.
Set the IP address associated with this interface. For IPv4, currently only supports a single IPv4 address, and aliases will be added in a future revision.
Set an IP netmask associated with this interface. For IPv4, currently only supports a single IPv4 netmask, and aliases will be added in a future revision.
Convert an IP address with a specific version (eg. V4) into a universal IP address.