MacOS X 10.10 (Yosemite) introduced the somewhat undocumented
framework. This exposes virtual network interfaces to userland applications.
There are a number of advantages of this over previous implementations:
- Unlike tuntaposx, this is builtin to MacOS X now and so is easier to package up and distribute for end users.
vmnetuses the XPC sandboxing interfaces and should make it easier to drop a hard dependency on running networking applications as
- Most significantly,
vmnetsupports bridging network traffic to the outside world, which was previously unsupported.
These OCaml bindings are constructed against the documentation contained
<vmnet.h> header file in Yosemite, and may not be correct due to
the lack of any other example code. However, they do suffice to run
MirageOS applications that can connect to the
outside world. The bindings are also slightly complicated by the need
to interface GCD
thread pools with the OCaml runtime, so please report any instabilities
that you see when using this interface as a consumer.
There are two libraries provided:
Vmnetis the raw OCaml binding to the
vmnetframework, using OCaml preemptive threads to handle synchronisation.
Lwt_vmnetuses the Lwt framework to provide a monadic asynchronous I/O interface at a higher level.
Most users should use
Lwt_vmnet to handle guest traffic.
>= "2.4.3" & < "4.0.0"
>= "1.4.0" & < "3.0.0"