net/tap: implement RSS using eBPF
authorOphir Munk <ophirmu@mellanox.com>
Sat, 20 Jan 2018 21:11:36 +0000 (21:11 +0000)
committerFerruh Yigit <ferruh.yigit@intel.com>
Sun, 21 Jan 2018 14:51:52 +0000 (15:51 +0100)
commit036d721a8229425687d9841f58e62bc7ebd06616
tree94cbf8ff76272854347e832473def023d1f0c7dc
parentb02d85e19cc8a1a175e0596d100a64501da8e531
net/tap: implement RSS using eBPF

TAP PMD is required to support RSS queue mapping based on rte_flow API. An
example usage for this requirement is failsafe transparent switching from a
PCI device to TAP device while keep redirecting packets to the same RSS
queues on both devices.

TAP RSS implementation is based on eBPF programs sent to Linux kernel
through BPF system calls and using netlink messages to reference the
programs as part of traffic control commands.

TC uses eBPF programs as classifiers and actions.
eBPF classification: packets marked with an RSS queue will be directed
to this queue using TC with "skbedit" action.
BPF classifiers are downloaded to the kernel once on TAP creation for
each TAP Rx queue.

eBPF action: calculate the Toeplitz RSS hash based on L3 addresses and
L4 ports. Mark the packet with the RSS queue according the resulting
RSS hash, then reclassify the packet.
BPF actions are downloaded to the kernel for each new RSS rule.

TAP eBPF requires Linux version 4.9 configured with BPF. TAP PMD will
successfully compile on systems with old or non-BPF configured kernels but
RSS rules creation on TAP devices will not be successful

Signed-off-by: Ophir Munk <ophirmu@mellanox.com>
Acked-by: Pascal Mazon <pascal.mazon@6wind.com>
drivers/net/tap/Makefile
drivers/net/tap/rte_eth_tap.h
drivers/net/tap/tap_flow.c
drivers/net/tap/tap_flow.h
drivers/net/tap/tap_rss.h [new file with mode: 0644]
drivers/net/tap/tap_tcmsgs.h