Difference between revisions of "VPPHostStack"
Florin.coras (Talk | contribs) (→Running List of Presentations) |
Florin.coras (Talk | contribs) (→Getting Started) |
||
(30 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
− | = Description = | + | == Description == |
− | VPP's host stack is a user space implementation of a number of transport, session and application layer protocols. It roughly consists of four | + | VPP's host stack is a user space implementation of a number of transport, session and application layer protocols that leverages VPP's existing protocol stack. It roughly consists of four major components: |
* Session Layer that accepts pluggable transport protocols | * Session Layer that accepts pluggable transport protocols | ||
− | * Shared memory mechanisms for pushing data between | + | * Shared memory mechanisms for pushing data between VPP and applications |
* Transport protocol implementations (e.g. TCP, SCTP, UDP) | * Transport protocol implementations (e.g. TCP, SCTP, UDP) | ||
− | * Comms Library (VCL) | + | * Comms Library (VCL) and LD_PRELOAD Library |
− | = | + | == Documentation == |
− | = Running List of Presentations = | + | [[VPP/Setting_Up_Your_Dev_Environment|Set Up Dev Environment]] - Explains how to set up a VPP development environment and the requirements for using the build tools |
+ | |||
+ | [[VPP/HostStack/SessionLayerArchitecture | Session Layer Architecture]] - Goes over the main features of the session layer | ||
+ | |||
+ | == Getting Started == | ||
+ | |||
+ | Applications can link against the following APIs for host-stack service: | ||
+ | * Builtin C API. It can only be used by applications hosted within VPP | ||
+ | * "Raw" session layer API. It does not offer any support for async communication | ||
+ | * VCL API that offers a POSIX-like interface. It comes with its own epoll implementation. | ||
+ | * POSIX API through LD_PRELOAD | ||
+ | |||
+ | A number of test applications can be used to exercise these APIs. For all the examples below, it assumed that two VPP instances have been brought up and properly configured to ensure networking connectivity between them. To test that network connectivity is available, the builtin ping tool can be used. As a convention, we consider the first vpp instance (vpp1) to be the one the server is attached to and the second instance (vpp2) to be the one where the client application is attached. For illustrative purposes all examples use TCP as a transport protocol but other available protocols could be used. | ||
+ | |||
+ | === Builtin Echo Server/Client === | ||
+ | |||
+ | On vpp1, from the cli do: | ||
+ | |||
+ | # test echo server uri tcp://vpp1_ip/port | ||
+ | |||
+ | and on vpp2: | ||
+ | |||
+ | # test echo client uri tcp://vpp1_ip/port | ||
+ | |||
+ | For more details on how to further configure the client/server apps to do throughput and CPS testing see [[VPP/HostStack/BuiltinEchoClientServer | here]] | ||
+ | |||
+ | === External Echo Server/Client === | ||
+ | |||
+ | To build the external test echo apps first edit vnet.am to make test apps installable | ||
+ | |||
+ | # sed -i 's/noinst_PROGRAMS += tcp_echo udp_echo/bin_PROGRAMS += tcp_echo udp_echo/' src/vnet.am | ||
+ | |||
+ | then build vpp and the apps. Start vpp1 and attach the server application: | ||
+ | |||
+ | <code>$ ./build-root/install-vpp_debug-native/vpp/bin/tcp_echo uri tcp://vpp1_ip/port</code> | ||
+ | |||
+ | Then start vpp2 and attach the client: | ||
+ | |||
+ | <code>$ ./build-root/install-vpp_debug-native/vpp/bin/tcp_echo slave uri tcp://vpp1_ip/port</code> | ||
+ | |||
+ | === VCL socket client/server === | ||
+ | |||
+ | For more details see the tutorial [[VPP/VPPCommunicationsLibrary | here]] | ||
+ | |||
+ | == Tutorials/Test Apps == | ||
+ | [[VPP/HostStack/TestHttpServer|Test HTTP Server App]] | ||
+ | |||
+ | [[VPP/HostStack/BuiltinEchoClientServer |Test Echo Client/Server Apps]] | ||
+ | |||
+ | [[VPP/HostStack/TestProxy|Test Proxy App]] | ||
+ | |||
+ | == Running List of Presentations == | ||
* [[Media:Vpp-hoststack.pdf|DPDK Summit North America 2017]] | * [[Media:Vpp-hoststack.pdf|DPDK Summit North America 2017]] | ||
* [[Media:Vpp-hoststack-kc.pdf|FD.io Mini Summit KubeCon 2017]] | * [[Media:Vpp-hoststack-kc.pdf|FD.io Mini Summit KubeCon 2017]] | ||
− | |||
− | |||
− |
Latest revision as of 02:16, 7 March 2018
Contents
Description
VPP's host stack is a user space implementation of a number of transport, session and application layer protocols that leverages VPP's existing protocol stack. It roughly consists of four major components:
- Session Layer that accepts pluggable transport protocols
- Shared memory mechanisms for pushing data between VPP and applications
- Transport protocol implementations (e.g. TCP, SCTP, UDP)
- Comms Library (VCL) and LD_PRELOAD Library
Documentation
Set Up Dev Environment - Explains how to set up a VPP development environment and the requirements for using the build tools
Session Layer Architecture - Goes over the main features of the session layer
Getting Started
Applications can link against the following APIs for host-stack service:
- Builtin C API. It can only be used by applications hosted within VPP
- "Raw" session layer API. It does not offer any support for async communication
- VCL API that offers a POSIX-like interface. It comes with its own epoll implementation.
- POSIX API through LD_PRELOAD
A number of test applications can be used to exercise these APIs. For all the examples below, it assumed that two VPP instances have been brought up and properly configured to ensure networking connectivity between them. To test that network connectivity is available, the builtin ping tool can be used. As a convention, we consider the first vpp instance (vpp1) to be the one the server is attached to and the second instance (vpp2) to be the one where the client application is attached. For illustrative purposes all examples use TCP as a transport protocol but other available protocols could be used.
Builtin Echo Server/Client
On vpp1, from the cli do:
# test echo server uri tcp://vpp1_ip/port
and on vpp2:
# test echo client uri tcp://vpp1_ip/port
For more details on how to further configure the client/server apps to do throughput and CPS testing see here
External Echo Server/Client
To build the external test echo apps first edit vnet.am to make test apps installable
# sed -i 's/noinst_PROGRAMS += tcp_echo udp_echo/bin_PROGRAMS += tcp_echo udp_echo/' src/vnet.am
then build vpp and the apps. Start vpp1 and attach the server application:
$ ./build-root/install-vpp_debug-native/vpp/bin/tcp_echo uri tcp://vpp1_ip/port
Then start vpp2 and attach the client:
$ ./build-root/install-vpp_debug-native/vpp/bin/tcp_echo slave uri tcp://vpp1_ip/port
VCL socket client/server
For more details see the tutorial here