123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051openFunctoriamoduleKey=Mirage_keytypenetwork=NETWORKletnetwork=Type.vNETWORKletall_networks=ref[]letnetwork_conf(intf:stringKey.key)=letkey=Key.vintfinletkeys=[key]inletpackages_v=Key.match_Key.(valuetarget)@@function|`Unix->[package~min:"3.0.0"~max:"4.0.0""mirage-net-unix"]|`MacOSX->[package~min:"1.8.0"~max:"2.0.0""mirage-net-macosx"]|`Xen->[package~min:"2.1.0"~max:"3.0.0""mirage-net-xen"]|`Qubes->[package~min:"2.1.0"~max:"3.0.0""mirage-net-xen";Mirage_impl_qubesdb.pkg;]|#Mirage_key.mode_solo5->[package~min:"0.8.0"~max:"0.9.0""mirage-net-solo5"]inletconnect_modname_=(* @samoht: why not just use the args paramater? *)Fmt.str"%s.connect %a"modnameKey.serialize_callkeyinletconfigurei=all_networks:=Key.get(Info.contexti)intf::!all_networks;Action.ok()inimpl~keys~packages_v~connect~configure"Netif"networkletnetif?groupdev=network_conf@@Key.interface?groupdevletdefault_network=match_implKey.(valuetarget)[(`Unix,netif"tap0");(`MacOSX,netif"tap0");(* On Solo5 targets, a single default network is customarily
* named just 'service' *)(`Hvt,netif"service");(`Spt,netif"service");(`Virtio,netif"service");(`Muen,netif"service");(`Genode,netif"service");]~default:(netif"0")