summaryrefslogtreecommitdiffstats
path: root/extras/libmemif/libmemif_doc.md
diff options
context:
space:
mode:
authorChris Luke <chrisy@flirble.org>2017-09-27 15:09:48 -0400
committerFlorin Coras <florin.coras@gmail.com>2017-09-28 01:04:56 +0000
commit64ebb5ff1338140d94c7f9ee72138fe84d89de2e (patch)
tree338f13adac0036599943061d2fabfd673479643e /extras/libmemif/libmemif_doc.md
parent4ff586d1c6fc5c40e1548cd6f221a8a7f3ad033b (diff)
General documentation updates
- We now have several developer-focused docs, so create an index page for them. - Rework several docs to fit into the index structure. - Experiment with code highlighting; tweak the CSS slightly to make it slightly nicer to look at. Change-Id: I4185a18f84fa0764745ca7a3148276064a3155c6 Signed-off-by: Chris Luke <chrisy@flirble.org>
Diffstat (limited to 'extras/libmemif/libmemif_doc.md')
-rw-r--r--extras/libmemif/libmemif_doc.md74
1 files changed, 74 insertions, 0 deletions
diff --git a/extras/libmemif/libmemif_doc.md b/extras/libmemif/libmemif_doc.md
new file mode 100644
index 00000000000..fb4a18aff1b
--- /dev/null
+++ b/extras/libmemif/libmemif_doc.md
@@ -0,0 +1,74 @@
+Shared Memory Packet Interface (memif) Library {#libmemif_doc}
+==============================================
+
+## Introduction
+
+Shared memory packet interface (memif) provides high performance packet transmit and receive between user application and Vector Packet Processing (VPP) or multiple user applications. Using libmemif, user application can create shared memory interface in master or slave mode and connect to VPP or another application using libmemif. Once the connection is established, user application can receive or transmit packets using libmemif API.
+
+![Architecture](docs/architecture.png)
+
+## Features
+
+- [x] Slave mode
+ - [x] Connect to VPP over memif
+ - [x] ICMP responder example app
+- [x] Transmit/receive packets
+- [x] Interrupt mode support
+- [x] File descriptor event polling in libmemif (optional)
+ - [x] Simplify file descriptor event polling (one handler for control and interrupt channel)
+- [x] Multiple connections
+- [x] Multiple queues
+ - [x] Multi-thread support
+- [x] Master mode
+ - [ ] Multiple regions (TODO)
+- [ ] Performance testing (TODO)
+
+## Quickstart
+
+This setup will run libmemif ICMP responder example app in container. Install [docker](https://docs.docker.com/engine/installation) engine.
+Useful link: [Docker documentation](https://docs.docker.com/get-started).
+
+Pull image:
+```
+# docker pull ligato/libmemif-sample-service
+```
+
+Now you should be able to see ligato/libmemif-sample-service image on your local machine (IMAGE ID in this README may be outdated):
+```
+# docker images
+REPOSITORY TAG IMAGE ID CREATED SIZE
+ligato/libmemif-sample-service latest 32ecc2f9d013 About a minute ago 468MB
+...
+```
+
+Run container:
+```
+# docker run -it --rm --name icmp-responder --hostname icmp-responder --privileged -v "/run/vpp/:/run/vpp/" ligato/libmemif-sample-service
+```
+Example application will start in debug mode. Output should look like this:
+```
+ICMP_Responder:add_epoll_fd:204: fd 0 added to epoll
+MEMIF_DEBUG:src/main.c:memif_init:383: app name: ICMP_Responder
+ICMP_Responder:add_epoll_fd:204: fd 4 added to epoll
+LIBMEMIF EXAMPLE APP: ICMP_Responder (debug)
+==============================
+libmemif version: 1.0 (debug)
+memif version: 256
+commands:
+ help - prints this help
+ exit - exit app
+ conn <index> - create memif (slave-mode)
+ del <index> - delete memif
+ show - show connection details
+ ip-set <index> <ip-addr> - set interface ip address
+ rx-mode <index> <qid> <polling|interrupt> - set queue rx mode
+```
+
+Continue with @ref libmemif_example_setup which contains instructions on how to set up conenction between icmpr-epoll example app and VPP-memif.
+
+#### Next steps
+
+- @subpage libmemif_build_doc
+- @subpage libmemif_examples_doc
+- @subpage libmemif_example_setup_doc
+- @subpage libmemif_gettingstarted_doc