From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by dpdk.org (Postfix) with ESMTP id 00423C778 for ; Mon, 22 Jun 2015 18:41:24 +0200 (CEST) Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga103.jf.intel.com with ESMTP; 22 Jun 2015 09:41:13 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.13,660,1427785200"; d="scan'208";a="748271951" Received: from shvmail01.sh.intel.com ([10.239.29.42]) by fmsmga002.fm.intel.com with ESMTP; 22 Jun 2015 09:41:12 -0700 Received: from shecgisg004.sh.intel.com (shecgisg004.sh.intel.com [10.239.29.89]) by shvmail01.sh.intel.com with ESMTP id t5MGf9Lx005399 for ; Tue, 23 Jun 2015 00:41:09 +0800 Received: from shecgisg004.sh.intel.com (localhost [127.0.0.1]) by shecgisg004.sh.intel.com (8.13.6/8.13.6/SuSE Linux 0.8) with ESMTP id t5MGf66j020419 for ; Tue, 23 Jun 2015 00:41:08 +0800 Received: (from jijiangl@localhost) by shecgisg004.sh.intel.com (8.13.6/8.13.6/Submit) id t5MGf67m020415 for dev@dpdk.org; Tue, 23 Jun 2015 00:41:06 +0800 From: Jijiang Liu To: dev@dpdk.org Date: Tue, 23 Jun 2015 00:40:55 +0800 Message-Id: <1434991265-20384-1-git-send-email-jijiang.liu@intel.com> X-Mailer: git-send-email 1.7.12.2 Subject: [dpdk-dev] [PATCH v5 00/10] Add a VXLAN sample X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 22 Jun 2015 16:41:26 -0000 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. 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. v2 changes: Fix an issue about the 'nb_ports' duplication in check_ports_num(). Remove the inaccurate comment in main.c Fix an issue about TSO offload. v3 changes: Change some viriable name that don't follow coding rules. Remove the limitation of VXLAN packet size due to TSO support. Remove useless 'll_root_used' variable in vxlan_setup.c file. Remove defination and use of '_htons'. v4 changes: Fix most of warnings detected by the checkpatch.pl in the main.c and the main.h file, and there are still some wairnings(line over 80 characters) in the main.c file. Fix all of warnings detected by the checkpatch.pl in other files. v5 changes: Fix a typo in examples/tep_termination/Makefile. Wrap commit message to about 72 characters. Fix 2 compilation errors using gcc 4.9.2. 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 examples/Makefile | 1 + examples/tep_termination/Makefile | 55 ++ examples/tep_termination/main.c | 1277 ++++++++++++++++++++++++++++++++ examples/tep_termination/main.h | 129 ++++ examples/tep_termination/vxlan.c | 260 +++++++ examples/tep_termination/vxlan.h | 86 +++ examples/tep_termination/vxlan_setup.c | 457 ++++++++++++ examples/tep_termination/vxlan_setup.h | 87 +++ 8 files changed, 2352 insertions(+), 0 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