tcpip

OCaml TCP/IP networking stack, used in MirageOS
Library tcpip_stack_direct

Parameters

Signature

include Mirage_stack_lwt.V4 with type udpv4 = Udpv4.t and type tcpv4 = Tcpv4.t and type ipv4 = Ipv4.t and module IPV4 = Ipv4 and module TCPV4 = Tcpv4 and module UDPV4 = Udpv4
include Mirage_stack.V4 with type 'a io = 'a Lwt.t and type ipv4addr = Ipaddr.V4.t and type buffer = Cstruct.t with type udpv4 = Udpv4.t with type tcpv4 = Tcpv4.t with type ipv4 = Ipv4.t with module IPV4 = Ipv4 with module TCPV4 = Tcpv4 with module UDPV4 = Udpv4
type ipv4addr = Ipaddr.V4.t

The type for IPv4 addresses.

type buffer = Cstruct.t

The type for memory buffers.

type udpv4 = Udpv4.t

The type for UDPv4 implementations.

type tcpv4 = Tcpv4.t

The type for TCPv4 implementations.

type ipv4 = Ipv4.t

The type for IPv4 implementations.

include Mirage_device.S with type 'a io = 'a Lwt.t
type 'a io = 'a Lwt.t

The type for potentially blocking I/O operation

type t

The type representing the internal state of the device

val disconnect : t -> unit io

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

module UDPV4 = Udpv4
module TCPV4 = Tcpv4
module IPV4 = Ipv4
val udpv4 : t -> udpv4

udpv4 t obtains a descriptor for use with the UDPV4 module, usually to transmit traffic.

val tcpv4 : t -> tcpv4

tcpv4 t obtains a descriptor for use with the TCPV4 module, usually to initiate outgoing connections.

val ipv4 : t -> ipv4

ipv4 t obtains a descriptor for use with the IPV4 module, which can handle raw IPv4 frames, or manipulate IP address configuration on the stack interface.

val listen_udpv4 : t -> port:int -> UDPV4.callback -> unit

listen_udpv4 t ~port cb registers the cb callback on the UDPv4 port and immediately return. If port is invalid (not between 0 and 65535 inclusive), it raises Invalid_argument. Multiple bindings to the same port will overwrite previous bindings, so callbacks will not chain if ports clash.

val listen_tcpv4 : ?keepalive:Mirage_protocols.Keepalive.t -> t -> port:int -> ( TCPV4.flow -> unit io ) -> unit

listen_tcpv4 ~keepalive t ~port cb registers the cb callback on the TCPv4 port and immediatey return. If port is invalid (not between 0 and 65535 inclusive), it raises Invalid_argument. Multiple bindings to the same port will overwrite previous bindings, so callbacks will not chain if ports clash. If ~keepalive is provided then these keepalive settings will be applied to the accepted connections before the callback is called.

val listen : t -> unit io

listen t requests that the stack listen for traffic on the network interface associated with the stack, and demultiplex traffic to the appropriate callbacks.

val connect : Netif.t -> Ethif.t -> Arpv4.t -> Ipv4.t -> Icmpv4.t -> Udpv4.t -> Tcpv4.t -> t Lwt.t

connect assembles the arguments into a network stack, then calls `listen` on the assembled stack before returning it to the caller. The initial `listen` functions to ensure that the lower-level layers (e.g. ARP) are functioning, so that if the user wishes to establish outbound connections, they will be able to do so.