Difference between revisions of "VPP/HostStack"
Florin.coras (Talk | contribs) (→Builtin Echo Server/Client) |
Florin.coras (Talk | contribs) (→Tests) |
||
(33 intermediate revisions by 5 users not shown) | |||
Line 5: | Line 5: | ||
* Session Layer that accepts pluggable transport protocols | * Session Layer that accepts pluggable transport protocols | ||
* Shared memory mechanisms for pushing data between VPP and applications | * Shared memory mechanisms for pushing data between VPP and applications | ||
− | * Transport protocol implementations (e.g. TCP, | + | * Transport protocol implementations (e.g. TCP, QUIC, TLS, UDP) |
* Comms Library (VCL) and LD_PRELOAD Library | * Comms Library (VCL) and LD_PRELOAD Library | ||
Line 14: | Line 14: | ||
[[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/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 | + | [[VPP/HostStack/SessionLayerArchitecture | Session Layer]] - Goes over the main features of the session layer |
+ | |||
+ | [[VPP/HostStack/VCL | VCL ]] - Description and configuration | ||
[[VPP/HostStack/TLS | TLS Application]] - Describes the TLS Application Layer protocol implementation | [[VPP/HostStack/TLS | TLS Application]] - Describes the TLS Application Layer protocol implementation | ||
+ | |||
+ | [[VPP/HostStack/hs-test | Host Stack Test Framework]] - Architecture description of host stack's test framework | ||
== Getting Started == | == Getting Started == | ||
Line 26: | Line 30: | ||
* POSIX API through LD_PRELOAD | * POSIX API through LD_PRELOAD | ||
− | A number of test applications can be used to exercise these APIs. For | + | A number of test applications can be used to exercise these APIs. For many of the examples in the tutorials section [[VPP/HostStack#Tutorials.2FTest_Apps | below]], it is 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. |
− | + | One of the simplest ways to test that the host stack is running would be to use the builtin echo applications. On vpp1, from the cli do: | |
− | + | ||
− | On vpp1, from the cli do: | + | |
# test echo server uri tcp://vpp1_ip/port | # test echo server uri tcp://vpp1_ip/port | ||
Line 38: | Line 40: | ||
# test echo client uri tcp://vpp1_ip/port | # 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/EchoClientServer | here]] | + | For more details on how to further configure the client/server apps to do throughput and CPS testing see [[VPP/HostStack/EchoClientServer | here]] and for more examples check the [[VPP/HostStack#Tutorials.2FTest_Apps | tutorials section]]. |
− | == | + | == Tutorials/Test Apps == |
+ | [[VPP/HostStack/EchoClientServer |Test Builtin Echo Client/Server Apps]] | ||
− | + | [[VPP/HostStack/ExternalEchoClientServer |Test External Echo Client/Server Apps]] | |
− | + | [[VPP/HostStack/VclEchoClientServer |Test VCL Echo Client/Server Apps]] | |
− | + | [[VPP/HostStack/TestHttpServer|Test HTTP Server App]] | |
− | + | [[VPP/HostStack/TestProxy|Test Proxy App]] | |
− | + | [[VPP/HostStack/LDP/iperf | iperf3 with LD_PRELOAD]] | |
− | + | [[VPP/HostStack/LDP/sshd | sshd with LD_PRELOAD]] | |
− | + | [[VPP/HostStack/LDP/nginx | nginx with LD_PRELOAD]] | |
− | == | + | == Tests == |
− | + | Make test VCL tests [https://git.fd.io/vpp/tree/test/asf/test_vcl.py source code] | |
− | + | Unit tests for [https://git.fd.io/vpp/tree/src/plugins/unittest/tcp_test.c tcp], [https://git.fd.io/vpp/tree/src/plugins/unittest/session_test.c session layer] and [https://git.fd.io/vpp/tree/src/plugins/unittest/svm_fifo_test.c svm infra] | |
− | [ | + | CSIT [https://csit.fd.io/trending/#eNqFUMsOgjAQ_Jp6MZvwFC8eRP7DlHaRBoRNWwj49RZiLByMl91kZ2dnZo3tNd4NtheW5izLWZQp6QqLr0fXRiKIO1Bigih9YEQhnsNgmkaQJBuoe2ON5aKBMDkFJYQC0NagKBkkldwgtJI0tj2Xboi6iqEks5yPbst5Odidlkeonj3y24EncI3cM77G_IJFsxH7Y9PTKs2faNQLPXfN6jeE--AGFHtJO9MG_aTPCpYWh67Xz_XtafEGPBpwqQ trending] |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
== Running List of Presentations == | == Running List of Presentations == | ||
Line 72: | Line 71: | ||
* [[Media:Vpp-hoststack-kc.pdf|FD.io Mini Summit KubeCon 2017]] | * [[Media:Vpp-hoststack-kc.pdf|FD.io Mini Summit KubeCon 2017]] | ||
* [[Media:Vpp-hoststack-kc-eu-18.pdf|FD.io Mini Summit KubeCon Europe 2018]] | * [[Media:Vpp-hoststack-kc-eu-18.pdf|FD.io Mini Summit KubeCon Europe 2018]] | ||
+ | * FD.io Mini Summit KubeCon NA 2018 [[Media:Fcoras-vpp-hoststack-kc-na18.pdf | slides]] and [https://www.youtube.com/watch?v=3Pp7ytZeaLk video] | ||
+ | * FD.io Mini Summit KubeCon EU 2019 [[Media:Vpp-hoststack-kc-eu19.pdf | slides]] and [https://youtu.be/5c5ymviBP7k video] | ||
+ | * EnvoyCon 2020 [[Media:using_vpp_as_envoys_network_stack.pdf|slides]] and [https://youtu.be/AUVuUevPzZ4 video] |
Latest revision as of 18:20, 18 April 2023
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, QUIC, TLS, 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 - Goes over the main features of the session layer
VCL - Description and configuration
TLS Application - Describes the TLS Application Layer protocol implementation
Host Stack Test Framework - Architecture description of host stack's test framework
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 many of the examples in the tutorials section below, it is 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.
One of the simplest ways to test that the host stack is running would be to use the builtin echo applications. 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 and for more examples check the tutorials section.
Tutorials/Test Apps
Test Builtin Echo Client/Server Apps
Test External Echo Client/Server Apps
Test VCL Echo Client/Server Apps
Tests
Make test VCL tests source code
Unit tests for tcp, session layer and svm infra CSIT trending
Running List of Presentations
- DPDK Summit North America 2017
- FD.io Mini Summit KubeCon 2017
- FD.io Mini Summit KubeCon Europe 2018
- FD.io Mini Summit KubeCon NA 2018 slides and video
- FD.io Mini Summit KubeCon EU 2019 slides and video
- EnvoyCon 2020 slides and video