[ovs-dev] [PATCH v3 0/6] offload Linux LAG devices to the TC datapath

John Hurley john.hurley at netronome.com
Thu Jun 28 16:03:01 UTC 2018


This patchset extends OvS TC and the linux-netdev implementation to
support the offloading of Linux Link Aggregation devices (LAG) and their
slaves. TC blocks are used to provide this offload. Blocks, in TC, group
together a series of qdiscs. If a filter is added to one of these qdiscs
then it is applied to all. Similarly, if a packet is matched on one of the
grouped qdiscs then the stats for the entire block are increased. The
basis of the LAG offload is that the LAG master (attached to the OvS
bridge) and slaves that may exist outside of OvS are all added to the same
TC block. OvS can then control the filters and collect the stats on the
slaves via its interaction with the LAG master.

The TC API is extended within OvS to allow the addition of a block id to
ingress qdisc adds. Block ids are then assigned to each LAG master that is
attached to the OvS bridge. The linux netdev netlink socket is used to
monitor slave devices. If a LAG slave is found whose master is on the bridge
then it is added to the same block as its master. If the underlying slaves
belong to an offloadable device then the Linux LAG device can be offloaded
to hardware.

v2->v3:
- patch 6
 - ensure lag update is only applied to link related messages. Without
   this the slave pointer may be accessed without being explicitly set to
   the Netlink attribute or NULL (fixes further bug reported by Roi Dayan)

v1->v2:
- patch 6
 - add check for non-null ifname before calling lag update function (fixes
   namespace bug reported by Roi Dayan)

John Hurley (6):
  tc: allow offloading of block ids
  netdev-provider: add class op to get block_id
  rtnetlink: extend parser to include kind of master and slave
  netdev-linux: indicate if netdev is a LAG master
  netdev-linux: assign LAG devs to tc blocks
  netdev-linux: monitor and offload LAG slaves to TC

 lib/netdev-bsd.c         |   3 +-
 lib/netdev-dpdk.c        |   3 +-
 lib/netdev-dummy.c       |   3 +-
 lib/netdev-linux.c       | 132 ++++++++++++++++++++++++++++++++++++++++++++---
 lib/netdev-provider.h    |   4 ++
 lib/netdev-tc-offloads.c |  82 +++++++++++++++++++++++------
 lib/netdev-vport.c       |   3 +-
 lib/netdev.c             |  10 ++++
 lib/netdev.h             |   1 +
 lib/rtnetlink.c          |  43 +++++++++++++++
 lib/rtnetlink.h          |   4 ++
 lib/tc.c                 |  60 +++++++++++++++------
 lib/tc.h                 |  12 ++---
 13 files changed, 309 insertions(+), 51 deletions(-)
 mode change 100644 => 100755 lib/rtnetlink.h

-- 
2.7.4



More information about the dev mailing list