
The ingress vlan rewrite mode affects the vlan header of ingress packet. The enic driver currently uses the 'passthrough' mode, which leaves the vlan header intact. As all packets in UCS network are tagged, this default mode leads to tagged ingress packets in the following cases where VPP expects untagged packets. 1. Trunk-mode vNIC on UCS standalone server. A remote device sends an untagged packet to the server. This packet is ultimately tagged with vlan 0 as it reaches the driver, and VPP sees an ingress packet tagged with vlan 0. 2. Access-mode vNIC on UCS blade or standalone server. A remote device sends a packet on the vNIC's default vlan (e.g. 200) to the server. This tag is untouched, and VPP sees an ingress packet tagged with the default vlan (e.g. 200). In both cases, VPP expects to see untagged packets. To work around the issue, VPP currently enables vlan stripping on VIC interfaces, which breaks vlan sub-interface features. To avoid the current workaround, use the "untag default vlan" rewrite mode. With this mode, the VIC adapter removes the vlan header if it matches the default vlan. In the cases described above, VPP would see untagged packets. Packets tagged with non-default vlan (e.g. non-0 for case 1 and non-200 for case 2) are received with their tags intact, so VPP sees tagged packets as expected. The driver currently has no programmatic way to change the rewrite mode after rte_eal_init. So use this patch to change the mode for the time being. Change-Id: Iff6408275363ed52d6016e7516d745214d6b30d4 Signed-off-by: Hyong Youb Kim <hyonkim@cisco.com>
Changes needed to DPDK are stored here as git patch files. Maintaining these files using “git format-patch” and “git am” will make it simpler to manage these changes. Patches made to DPDK should only be temporary until they are accepted upstream and made available in the next DPDK release. The following is the method used to generate these patches: 1. Git clone the package to a new directory: # git clone http://dpdk.org/git/dpdk dpdk 2. Create a branch based on the release you wish to patch. Note, “git tag” will show you all the release tags. The following example is for release tag “v2.2.0” and will create a branch named “two_dot_two”. # cd <root dir> # git checkout -b two_dot_two v2.2.0 3. Apply all the existing patches to this new branch. # git am </path/to/existing/patches/*> 4. Make your changes and commit your change to your repository. # <edit files> # git commit -s 5. Create the patch files with format-patch. This creates all the patch files for your branch (two_dot_two), with your latest commits as the last ones. # git format-patch master..two_dot_two 6. Copy, add and commit the new patches into the patches directory.