sig
  type socket = {
    proto : Ip.Proto.t;
    nat_port : int;
    remote_addr : Ip.Addr.t;
    remote_port : int;
  }
  type cnx = { in_addr : Ip.Addr.t; in_port : int; out_port : int; }
  type t = {
    addr : Ip.Addr.t;
    cnxs : Router.Nat.cnx Tools.OrdArray.t;
    in_cnxs_h : (Router.Nat.socket, int) Batteries.Hashtbl.t;
    out_cnxs_h : (Router.Nat.socket, int) Batteries.Hashtbl.t;
    mutable emit : Bitstring.bitstring -> unit;
    mutable recv : Bitstring.bitstring -> unit;
  }
  val patch_src_port :
    Ip.Proto.t ->
    string * int * int -> Tcp.Port.outer_t -> Bitstring.bitstring
  val patch_dst_port :
    Ip.Proto.t ->
    string * int * int -> Tcp.Port.outer_t -> Bitstring.bitstring
  val tx : Router.Nat.t -> Bitstring.bitstring -> unit
  val rx : Router.Nat.t -> Bitstring.bitstring -> unit
  val make : Ip.Addr.t -> int -> Tools.trx
end