.. _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.