[dpdk-dev] [PATCH 00/10] Add a VXLAN sample

Jijiang Liu jijiang.liu at intel.com
Fri May 15 08:08:51 CEST 2015


This VXLAN sample simulates a VXLAN Tunnel Endpoint (VTEP) termination in DPDK, which is used to demonstrate the offload and filtering capabilities of i40 NIC for VXLAN packet.

And this sample uses the basic virtio devices management function from vHOST example, and the US-vHost interface and tunnel filtering mechanism to direct the traffic to/from a specific VM.

In addition, this sample is also designed to show how tunneling protocols can be handled. For the vHost interface, we do not need to support zero copy/inter VM packet transfer, etc. The approaches we took would be of benefit to you because we put a pluggable structure in place so that the application could be easily extended to support a new tunneling protocol.

The software framework is as follows:


       |-------------------|   |-------------------|
       | VM-1(VNI:100)     |   |  VM-2(VNI:200)    |
       | |------| |------| |   | |------| |------| |
       | |vport0| |vport1| |   | |vport0| |vport1| |
       |-|------|-|------|-|   |-|------|-|------|-|      Guests
                      \         /      
         |-------------\-------/--------|
         |     us-vHost interface       |
         |          |-|----|--|         |
         |     decap| | TEP|  | encap   |       DPDK App
         |          |-|----|--|         |
         |            |    |            |
         |------------|----|------------|
                      |    |     
        |-------------|----|---------------|
        |tunnel filter|    | IP/L4 Tx csum |
        |IP/L4 csum   |    | TSO           |
        |packet type  |    |               |               NIC
        |packet recogn|    |               |
        |-------------|----|---------------|
                      |    |   
                      |    |   
                      |    |   
                     /-------\  
                    VXLAN Tunnel  

The sample will support the followings:
1> Tunneling packet recognition.

2> The port of UDP tunneling is configurable

3> Directing incoming traffic to the correct queue based on the tunnel filter type such as inner MAC address and VNI.

	The VNI will be assigned from a static internal table based on the US-VHOST device ID. Each device will receive a unique device ID. The inner MAC will be learned by  the first packet transmitted from a device.

4> Decapsulation of Rx VXLAN traffic. This is a software only operation (will use HW header split instead later)

5> Encapsulation of Tx VXLAN traffic. This is a software only operation

6> Tx outer IP, inner IP and L4 checksum offload

7> TSO support for tunneling packet

The limitations:
1. No ARP support
2. There are some duplicated source codes because I used  the basic virtio device management function from VHOST sample. Considering that the current VHOST sample is quite complicated and huge enough,  I think we shall have a separate sample for tunneling packet processing.
3. Currently, only the i40e NIC is tested in the sample, but other types of NICs will also be supported if they are able to support tunneling packet filter.


Jijiang Liu (10):
  create VXLAN sample framework using virtio device management function 
  add basic VXLAN structures 
  addthe pluggable structures
  implement VXLAN packet processing
  add udp port configuration
  add filter type configuration
  add tx checksum offload configuration
  add TSO offload configuration
  add Rx checksum statistics
  add encapsulation and decapsulation flags

 config/common_linuxapp                 |    2 +-
 examples/Makefile                      |    1 +
 examples/tep_termination/Makefile      |   55 ++
 examples/tep_termination/main.c        | 1205 ++++++++++++++++++++++++++++++++
 examples/tep_termination/main.h        |  129 ++++
 examples/tep_termination/vxlan.c       |  260 +++++++
 examples/tep_termination/vxlan.h       |   76 ++
 examples/tep_termination/vxlan_setup.c |  453 ++++++++++++
 examples/tep_termination/vxlan_setup.h |   78 ++
 9 files changed, 2258 insertions(+), 1 deletions(-)
 create mode 100644 examples/tep_termination/Makefile
 create mode 100644 examples/tep_termination/main.c
 create mode 100644 examples/tep_termination/main.h
 create mode 100644 examples/tep_termination/vxlan.c
 create mode 100644 examples/tep_termination/vxlan.h
 create mode 100644 examples/tep_termination/vxlan_setup.c
 create mode 100644 examples/tep_termination/vxlan_setup.h

-- 
1.7.7.6



More information about the dev mailing list