2015-12-30 04:52:24 -05:00
|
|
|
(* Copyright (C) 2015, Thomas Leonard <thomas.leonard@unikernel.com>
|
|
|
|
See the README file for details. *)
|
|
|
|
|
|
|
|
(** Routing packets to the right network interface. *)
|
|
|
|
|
2017-03-02 09:52:55 -05:00
|
|
|
open Fw_utils
|
2015-12-30 04:52:24 -05:00
|
|
|
|
2015-12-30 11:07:16 -05:00
|
|
|
type t = private {
|
2023-06-30 09:33:41 -04:00
|
|
|
config : Dao.network_config;
|
2023-06-30 07:59:03 -04:00
|
|
|
clients : Client_eth.t;
|
2017-03-02 09:52:55 -05:00
|
|
|
nat : My_nat.t;
|
2016-01-01 06:32:57 -05:00
|
|
|
uplink : interface;
|
2015-12-30 11:07:16 -05:00
|
|
|
}
|
2015-12-30 04:52:24 -05:00
|
|
|
|
|
|
|
val create :
|
2023-06-30 09:33:41 -04:00
|
|
|
config : Dao.network_config ->
|
|
|
|
clients : Client_eth.t ->
|
|
|
|
uplink : interface ->
|
|
|
|
nat : My_nat.t ->
|
2015-12-30 04:52:24 -05:00
|
|
|
t
|
2020-04-29 09:58:01 -04:00
|
|
|
(** [create ~client_eth ~uplink ~nat] is a new routing table
|
2016-01-01 06:32:57 -05:00
|
|
|
that routes packets outside of [client_eth] via [uplink]. *)
|
2015-12-30 04:52:24 -05:00
|
|
|
|
2017-03-02 09:52:55 -05:00
|
|
|
val target : t -> Ipv4_packet.t -> interface option
|
|
|
|
(** [target t packet] is the interface to which [packet] should be routed. *)
|
2015-12-30 04:52:24 -05:00
|
|
|
|
2016-09-25 10:14:16 -04:00
|
|
|
val add_client : t -> client_link -> unit Lwt.t
|
|
|
|
(** [add_client t iface] adds a rule for routing packets addressed to [iface]. *)
|
2015-12-30 04:52:24 -05:00
|
|
|
|
|
|
|
val remove_client : t -> client_link -> unit
|
2015-12-30 08:48:13 -05:00
|
|
|
|
2015-12-30 11:07:16 -05:00
|
|
|
val classify : t -> Ipaddr.t -> Packet.host
|
2016-01-01 06:32:57 -05:00
|
|
|
val resolve : t -> Packet.host -> Ipaddr.t
|