opam-version: "2.0"
maintainer:   "anil@recoil.org"
homepage:     "https://github.com/mirage/mirage-tcpip"
dev-repo: "git+https://github.com/mirage/mirage-tcpip.git"
bug-reports:  "https://github.com/mirage/mirage-tcpip/issues"
authors: [
  "Anil Madhavapeddy" "Balraj Singh" "Richard Mortier" "Nicolas Ojeda Bar"
  "Thomas Gazagnaire" "Vincent Bernardoff" "Magnus Skjegstad" "Mindy Preston"
  "Thomas Leonard" "David Scott" "Gabor Pali" "Hannes Mehnert" "Haris Rotsos"
  "Kia" "Luke Dunstan" "Pablo Polvorin" "Tim Cuthbertson" "lnmx" "pqwy" ]
license: "ISC"
tags: ["org:mirage"]

build: [
  ["jbuilder" "subst" "-p" name] {pinned}
  ["env" "OPAM_PKG_CONFIG_PATH=%{prefix}%/lib/pkgconfig" "jbuilder" "build" "-p" name "-j" jobs]
  ["env" "OPAM_PKG_CONFIG_PATH=%{prefix}%/lib/pkgconfig" "jbuilder" "runtest" "-p" name "-j" jobs] {with-test}
]

depopts: ["mirage-xen-ocaml"]

depends: [
  "ocaml" {>= "4.03.0" & < "4.06.0"}
  "jbuilder" {>= "1.0+beta9" & < "1.0+beta18"}
  "configurator" {build & < "v0.15"}
  "ppx_cstruct"
  "rresult"
  "cstruct" {>= "3.0.2" & < "3.4.0"}
  "cstruct-lwt"
  "mirage-net" {>= "1.0.0" & < "2.0.0"}
  "mirage-net-lwt" {>= "1.0.0" & < "2.0.0"}
  "mirage-clock" {>= "1.2.0" & < "3.0.0"}
  "mirage-random" {>= "1.0.0" & < "1.2.0"}
  "mirage-clock-lwt" {>= "1.2.0"}
  "mirage-stack-lwt" {>= "1.0.0" & < "1.3.0"}
  "mirage-protocols" {>= "1.1.0" & < "1.3.0"}
  "mirage-protocols-lwt" {>= "1.1.0" & < "1.3.0"}
  "mirage-time-lwt" {>= "1.0.0"}
  "ipaddr" {>= "2.2.0" & < "3.0.0"}
  "mirage-profile" {>= "0.5"}
  "mirage-flow" {with-test & >= "1.2.0" & < "2.0.0"}
  "mirage-vnetif" {with-test & >= "0.4.0"}
  "alcotest" {with-test & >= "0.7.0"}
  "ounit" {with-test}
  "pcap-format" {with-test}
  "mirage-clock-unix" {with-test & >= "1.2.0" & < "2.0.0"}
  "fmt"
  "lwt" {>= "2.7.0"}
  "logs" {>= "0.6.0"}
  "duration"
  "io-page-unix"
  "randomconv"
]
synopsis: "An OCaml TCP/IP networking stack"
description: """
`mirage-tcpip` provides a networking stack for the [Mirage operating
system](https://mirage.io). It provides implementations for the following module types
(which correspond with the similarly-named protocols):

* ETHERNET
* ARP
* IP (via the IPv4 and IPv6 modules)
* ICMP
* UDP
* TCP

## Implementations

There are two implementations of the IP, ICMP, UDP, and TCP module types -
the `socket` stack, and the `direct` stack.

### The `socket` stack

The `socket` stack uses socket calls to a traditional operating system to
provide the functionality described in the module types.

See the [`src/stack-unix/`](./src/stack-unix/) directory for the modules used as implementations of the
`socket` stack. 

The `socket` stack is used for testing or other applications which do not
expect to run as unikernels.

### The `direct` stack

The `direct` stack expects to write to a device implementing the `NETIF` module
type defined for MirageOS.

See the [`src/`](./src/) directory for the modules used as implementations of the
`direct` stack, which is the expected stack for most MirageOS applications.

The `direct` stack is the only usable set of implementations for
applications which will run as unikernels on a hypervisor target.

## Community

* WWW: <https://mirage.io>
* E-mail: <mirageos-devel@lists.xenproject.org>
* Issues: <https://github.com/mirage/mirage-tcpip/issues>
* API docs: <http://docs.mirage.io/tcpip/index.html>

## License

`mirage-tcpip` is distributed under the ISC license."""
url {
  src:
    "https://github.com/mirage/mirage-tcpip/releases/download/v3.2.0/tcpip-3.2.0.tbz"
  checksum: "md5=9dfd4447f690eada28d2e38d81bfbb8f"
}
