.. _libmemif_doc:

Shared Memory Packet Interface (memif) Library
==============================================

Features
--------

-  ✅ Slave mode

   -  ✅ Connect to VPP over memif
   -  ✅ ICMP responder example app

-  ✅ Transmit/receive packets
-  ✅ Interrupt mode support
-  ✅ File descriptor event polling in libmemif (optional)

   -  ✅ Simplify file descriptor event polling (one handler for control
      and interrupt channel)

-  ✅ Multiple connections
-  ✅ Multiple queues

   -  ✅ Multi-thread support

-  ✅ Master mode

   -  ✅ Multiple regions

-  ✅ Loopback

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>`__.

Build the docker image:

::

   # docker build . -t libmemif

Now you should be able to see libmemif image on your local machine:

::

   # docker images
   REPOSITORY                       TAG                 IMAGE ID            CREATED              SIZE
   libmemif                         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/" libmemif

The interface will by default connect to a master interface listening on
``/run/vpp/master.sock``. The example will handle ARP requests and
respond to ICMPv4 requests to ``192.168.1.1``.

Continue with :ref:`libmemif_examples_doc` which contains instructions on
how to set up connection between icmp_responder example app and VPP-memif.
