sig
  type port_range = int * int
  val port_in_range : '-> 'a * '-> bool
  type route = {
    iface_num : int option;
    src_mask : Ip.Cidr.t option;
    dst_mask : Ip.Cidr.t option;
    ip_proto : Ip.Proto.t option;
    src_port : Router.Router.port_range option;
    dst_port : Router.Router.port_range option;
  }
  val test_route :
    Router.Router.route ->
    int ->
    Ip.Addr.t option ->
    Ip.Addr.t option -> Ip.Proto.t option -> int option -> int option -> bool
  type t = {
    trxs : Tools.trx array;
    route_tbl : (Router.Router.route * int) array;
  }
  val route : int -> Router.Router.t -> Bitstring.bitstring -> unit
  val set_read :
    int -> Router.Router.t -> (Bitstring.bitstring -> unit) -> unit
  val make :
    Tools.trx array -> (Router.Router.route * int) array -> Router.Router.t
  val make_from_addrs :
    (Ip.Addr.t * Eth.Addr.t) BatEnum.t ->
    (Router.Router.route * int) array -> Router.Router.t * Tools.trx array
end