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.
This setup will run libmemif ICMP responder example app in container. Install docker engine. Useful link: Docker documentation.
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.