[ovs-dev] [PATCH 00/25] netdev datapath vxlan offload

Eli Britstein elibr at mellanox.com
Mon Feb 3 11:18:09 UTC 2020


ping

On 1/20/2020 5:08 PM, Eli Britstein wrote:
> In the netdev datapath, packets arriving over a tunnel are processed by
> more than one flow. For example a packet that should be decapsulated and
> forwarded to another port is processed by two flows:
> 1. in_port=<PF>, outer-header matches, dst-port=4789 (VXLAN),
>     actions:tnl_pop(vxlan_sys_4789).
> 2. in_port=vxlan_sys_4789, tunnel matches (VNI for example),
>     inner-header matches, actions: vm1.
>
> In order to offload such a multi-flow processing path, a multi-table HW
> model is used. Flow #1 matches are offloaded as is, but tnl_pop is
> translated to MARK and JUMP to a tnl-port table actions. Flow #2 is
> offloaded to that tnl-port table, its tunnel matches are translated to
> outer-header matches, followed by the inner-header ones. The actions
> start with an implicit DECAP action followed by the flow's actions.
> The DECAP is done in flow #2. If it was done in flow #1, the outer
> headers of the packets would have been lost, and they could not have
> been matched in flow #2.
> Furthermore, once the HW processing path is composed of a multi table
> processing, there is a need to handle a case where the processing starts
> in HW, but is not completed in HW. For example, only flow #1 is
> offloaded while flow #2 doesn't exist. For that, the MARK value set in
> the tnl_pop action is received in SW, the packet is recovered by the
> mapped vport, and processing continues in SW.
> As vports are virtual and cannot have rte_flows, offloading a vport
> generates rte_flows for every PF in the system, as we cannot know from
> which one the packets arrive from.
>
> This series adds support for IPv6, tunnel push actions, and the
> multi-table model for the decap processing.
>
> v1 Travis passed: https://eur03.safelinks.protection.outlook.com/?url=https%3A%2F%2Ftravis-ci.org%2Felibritstein%2FOVS%2Fbuilds%2F639484233&data=02%7C01%7Celibr%40mellanox.com%7C5995f26af0ba4ae7470c08d79dbaac7b%7Ca652971c7d2e4d9ba6a4d149256f461b%7C0%7C0%7C637151297392981653&sdata=BvwPjOndhz4uzuwAmqJMWjiqi%2B02Yn7obWLvDMf9fQ4%3D&reserved=0
>
> Eli Britstein (14):
>    dpif-netdev: Add mega ufid in flow add log
>    netdev-offload-dpdk: Remove pre-validate of patterns function
>    netdev-offload-dpdk: Add IPv6 pattern matching
>    netdev-offload-dpdk: Support offload of clone tnl_push/output actions
>    netdev-offload-dpdk: Support tnl/push using vxlan encap attribute
>    netdev-offload: Don't use zero flow mark
>    netdev-offload-dpdk: Introduce map APIs for table id and miss context
>    netdev-offload-dpdk: Implement HW miss packet recover for vport
>    netdev-offload-dpdk: Refactor disassociate ufid function
>    netdev-offload-dpdk: Support tunnel pop action
>    netdev-offload-dpdk: Implement flow dump create/destroy APIs
>    netdev-dpdk: Getter function for dpdk devargs API
>    netdev-dpdk: Introduce get netdev by devargs function
>    netdev-dpdk-offload: Add vxlan pattern matching function
>
> Ilya Maximets (4):
>    netdev: Allow storing dpif type into netdev structure.
>    netdev-offload: Use dpif type instead of class.
>    netdev-offload: Allow offloading to netdev without ifindex.
>    netdev-offload: Disallow offloading to unrelated tunneling vports.
>
> Ophir Munk (6):
>    dpif-netdev: Make mark allocation public API
>    dpif-netdev: Add HW miss packet state recover logic
>    netdev-dpdk: Introduce an API to query if a dpdk port is an uplink
>      port
>    netdev-dpdk-offload: Infrastructure for multiple rte_flows per UFID
>    netdev-dpdk: Add flow_api support for netdev vxlan vports
>    netdev-offload-dpdk: Support offload for vxlan vport
>
> Oz Shlomo (1):
>    netdev-offload: Add HW miss packet state recover API
>
>   Documentation/howto/dpdk.rst  |    5 +-
>   NEWS                          |    6 +-
>   lib/dpif-netdev.c             |   70 +--
>   lib/dpif-netlink.c            |   23 +-
>   lib/dpif.c                    |   21 +-
>   lib/netdev-dpdk.c             |   68 +++
>   lib/netdev-dpdk.h             |    6 +
>   lib/netdev-offload-dpdk.c     | 1275 +++++++++++++++++++++++++++++++++++------
>   lib/netdev-offload-provider.h |    6 +
>   lib/netdev-offload-tc.c       |   11 +-
>   lib/netdev-offload.c          |  115 ++--
>   lib/netdev-offload.h          |   23 +-
>   lib/netdev-provider.h         |    3 +-
>   lib/netdev.c                  |   16 +
>   lib/netdev.h                  |    2 +
>   ofproto/ofproto-dpif-upcall.c |    5 +-
>   tests/dpif-netdev.at          |   14 +-
>   tests/ofproto-macros.at       |    3 +-
>   18 files changed, 1394 insertions(+), 278 deletions(-)
>


More information about the dev mailing list