Skip to content
ARP, but with more DVCS.
OCaml Makefile
Branch: master
Clone or download

Latest commit

Fetching latest commit…
Cannot retrieve the latest commit at this time.


Type Name Latest commit message Commit time
Failed to load latest commit information.

Caution: Sharp Edges

This library is intended as a test/prototype library and exploration of the possibility space around testing networking code in the MirageOS library operating systems project. It is usable as a drop-in replacement for the stock MirageOS ARP module supplied by tcpip -- for an example, see this example unikernel. For limitations, please see a more thorough explanation of the project.

To Build

The following unreleased package is required:

opam pin add irmin-network-datastores

The following dependencies are needed from the default opam repository:

opam install irmin irmin-unix alcotest ezjsonm lwt ipaddr ounit mirage-clock-unix mirage-unix tcpip mirage mirage-types

make should now conclude successfully; if not, please let me know!

What Does This Thing Do?

A more thorough explanation of this code's aims and actions is available on my blog.

The ARP implementation given uses Irmin to store a Map representing the ARP cache. This is functorized and can be either an in-memory Irmin store or a Git-backed store on a filesystem. (Currently, only the in-memory store is available to MirageOS unikernels running on Xen.)

Tests are included which use Magnus Skjegstad's mirage-vnetif library to mock out communications between network devices using the mirage-tcpip Ethernet protocol implementation.

Test code is included which uses the Git-backed filesystem store to make assertions about the operations performed on the cache as a result of certain packet inputs.

To see something interesting happen, build the tests:

ocaml -configure --enable-tests
make test

Git repositories reflecting test state will be generated in the subdirectory test_results. For example, to see commits and merges made by the "speaker" interface during the entries_aged_out test:

cd test_results/entries_aged_out/speaker
git log --all --graph --oneline

Alternately, interacting with the state of the repository via the graphical git repository browser gitk is also of potential interest. Be sure to invoke gitk --all if you're interested in seeing all the branches (you probably are!).

There is also a demo which simulates multiple network nodes communicating over a TCP built on top of Irmin-ARP with the in-memory backend. Build and run it with:

ocaml -configure --enable-demo
You can’t perform that action at this time.