[ovs-dev] [PATCH V7 00/13] Netdev vxlan-decap offload

Eli Britstein elibr at nvidia.com
Wed Jun 23 15:52:39 UTC 2021

VXLAN decap in OVS-DPDK configuration consists of two flows:
F1: in_port(ens1f0),eth(),ipv4(),udp(), actions:tnl_pop(vxlan_sys_4789)
F2: tunnel(),in_port(vxlan_sys_4789),eth(),ipv4(), actions:ens1f0_0

F1 is a classification flow. It has outer headers matches and it
classifies the packet as a VXLAN packet, and using tnl_pop action the
packet continues processing in F2.
F2 is a flow that has matches on tunnel metadata as well as on the inner
packet headers (as any other flow).

In order to fully offload VXLAN decap path, both F1 and F2 should be
offloaded. As there are more than one flow in HW, it is possible that
F1 is done by HW but F2 is not. Packet is received by SW, and should be
processed starting from F2 as F1 was already done by HW.
Rte_flows are applicable only on physical port IDs. Keeping the original
physical in port on which the packet is received on enables applying
vport flows (e.g. F2) on that physical port.

This patch-set makes use of [1] introduced in DPDK 20.11, that adds API
for tunnel offloads.

Note that MLX5 PMD has a bug that the tnl_pop private actions must be
first. In OVS it is not.
Fixing this issue is scheduled for 21.05 (and stable 20.11.2).
Meanwhile, tests were done with a workaround for it [2].

- Tracking original in_port, and applying vport on that physical port instead of all PFs.
- Traversing ports using a new API instead of flow_dump.
- Refactor packet state recover logic, with bug fix for error pop_header.
- One ref count for netdev in non-tunnel case.
- Rename variables, comments, rebase.
- Extract orig_in_port from physdev for flow modify.
- Miss handling fixes.
- Drop refactor offload rule creation commit.
- Comment about setting in_port in restore.
- Refactor vports flow offload commit.
- Fixed duplicate netdev ref bug.
- Adopting Ilya's diff, with a minor fix in set_error stub.
- Fixed abort (remove OVS_NOT_REACHED()) with tunnels other than vxlan
  ("netdev-offload-dpdk: Support tunnel pop action.").

v1: https://travis-ci.org/github/elibritstein/OVS/builds/756418552
v2: https://travis-ci.org/github/elibritstein/OVS/builds/758382963
v3: https://travis-ci.org/github/elibritstein/OVS/builds/761089087
v4: https://travis-ci.org/github/elibritstein/OVS/builds/763146966
v5: https://travis-ci.org/github/elibritstein/OVS/builds/765271879
v6: https://travis-ci.org/github/elibritstein/OVS/builds/765816800
v7: Have a problem to run

GitHub Actions:
v1: https://github.com/elibritstein/OVS/actions/runs/515334647
v2: https://github.com/elibritstein/OVS/actions/runs/554986007
v3: https://github.com/elibritstein/OVS/actions/runs/613226225
v4: https://github.com/elibritstein/OVS/actions/runs/658415274
v5: https://github.com/elibritstein/OVS/actions/runs/704357369
v6: https://github.com/elibritstein/OVS/actions/runs/716304028
v7: https://github.com/elibritstein/OVS/actions/runs/964875737

[1] https://mails.dpdk.org/archives/dev/2020-October/187314.html
[2] https://github.com/elibritstein/dpdk-stable/pull/1

Eli Britstein (10):
  netdev-offload: Add HW miss packet state recover API.
  netdev-dpdk: Introduce DPDK tunnel APIs.
  netdev-offload: Introduce an API to traverse ports.
  netdev-dpdk: Add flow_api support for netdev vxlan vports.
  netdev-offload-dpdk: Implement HW miss packet recover for vport.
  dpif-netdev: Add HW miss packet state recover logic.
  netdev-offload-dpdk: Change log rate limits.
  netdev-offload-dpdk: Support tunnel pop action.
  netdev-offload-dpdk: Support vports flows offload.
  netdev-dpdk-offload: Add vxlan pattern matching function.

Ilya Maximets (2):
  netdev-offload: Allow offloading to netdev without ifindex.
  netdev-offload: Disallow offloading to unrelated tunneling vports.

Sriharsha Basavapatna (1):
  dpif-netdev: Provide orig_in_port in metadata for tunneled packets.

 Documentation/howto/dpdk.rst  |   1 +
 NEWS                          |   4 +
 lib/dpif-netdev.c             |  68 +++-
 lib/netdev-dpdk.c             | 118 ++++++
 lib/netdev-dpdk.h             | 103 ++++-
 lib/netdev-offload-dpdk.c     | 708 +++++++++++++++++++++++++++++++---
 lib/netdev-offload-provider.h |   6 +
 lib/netdev-offload-tc.c       |   8 +
 lib/netdev-offload.c          |  47 ++-
 lib/netdev-offload.h          |  10 +
 lib/packets.h                 |   8 +-
 11 files changed, 1011 insertions(+), 70 deletions(-)


More information about the dev mailing list