opam-version: "2.0"
maintainer:   "Anil Madhavapeddy <anil@recoil.org>"
authors:      "Anil Madhavapeddy <anil@recoil.org>"
homepage:     "https://github.com/mirage/ocaml-vmnet"
bug-reports:  "https://github.com/mirage/ocaml-vmnet/issues"
dev-repo: "git+https://github.com/mirage/ocaml-vmnet.git"
doc:          "https://mirage.github.io/ocaml-vmnet/"
license:      "ISC"

build: [
  ["jbuilder" "subst" "-p" name] {pinned}
  ["jbuilder" "build" "-p" name "-j" jobs]
  ["jbuilder" "subst" "-p" name] {with-test & pinned}
  ["jbuilder" "build" "-p" name "-j" jobs] {with-test}
  ["jbuilder" "runtest"] {with-test}
]
depends: [
  "ocaml"
  "jbuilder" {>= "1.0+beta9"}
  "ppx_tools"
  "ppx_sexp_conv" {< "v0.15"}
  "ocaml-migrate-parsetree" {build & < "2.0.0"}
  "sexplib" {>= "113.24.00" & < "v0.15"}
  "ipaddr" {>= "1.4.0" & < "3.0.0"}
  "lwt" {>= "2.4.3" & < "4.0.0"}
  "cstruct" {>= "1.9.0"}
  "cstruct-unix"
]
available: os = "macos"
post-messages: [
  "This package requires the vmnet.framework plus development headers which are present in Yosemite (10.10.*) and later." {failure}
]
synopsis: "MacOS X `vmnet` NAT networking"
description: """
MacOS X 10.10 (Yosemite) introduced the somewhat undocumented `vmnet`
framework.  This exposes virtual network interfaces to userland applications.
There are a number of advantages of this over previous implementations:

- Unlike [tuntaposx](http://tuntaposx.sourceforge.net/), this is builtin
  to MacOS X now and so is easier to package up and distribute for end users.
- `vmnet` uses the XPC sandboxing interfaces and should make it easier to
  drop a hard dependency on running networking applications as `root`.
- Most significantly, `vmnet` optionally supports NATing network traffic to the
  outside world, which was previously unsupported.

These OCaml bindings are constructed against the documentation contained
in the `<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](http://openmirage.org) applications that can connect to the
outside world.

Note the application must be configured to use DHCP: static IPs are not supported."""
url {
  src:
    "https://github.com/mirage/ocaml-vmnet/releases/download/1.3.1/vmnet-1.3.1.tbz"
  checksum: "md5=2d29f60735a4579fcce6dee37bd015fe"
}
