sig
  module Plug :
    sig
      type t = { name : string; dev : Tools.dev; }
      val make : string -> Tools.dev -> Sim.Net.Plug.t
    end
  type equipment =
      Host of Host.host_trx
    | Hub of Hub.Repeater.t
    | Switch of Hub.Switch.t
    | Trx of Tools.trx
  type t = {
    equip : Sim.Net.equipment list;
    mutable plugs : Sim.Net.Plug.t list;
  }
  val make_empty : unit -> Sim.Net.t
  val union : Sim.Net.t list -> Sim.Net.t
  val find_named_plug :
    Sim.Net.t ->
    string option ->
    (Sim.Net.Plug.t, [> `Unknown_plug of string option ]) Batteries.Result.t
  val connect :
    ?plug1:string ->
    Sim.Net.t ->
    ?plug2:string ->
    Sim.Net.t ->
    (unit, [> `Unknown_plug of string option ]) Batteries.Result.t
  val make_sink : string -> Sim.Net.t * Thread.t
  val make_internet : unit -> Sim.Net.t
  val make_simple_lan :
    ?name:string ->
    ?nameserver:Ip.Addr.t -> ?public_ip:Ip.Addr.t -> int -> Sim.Net.t
end