Intel® Ethernet Controller E810 eSwitch Switchdev Mode

Technology and Configuration Guide

ID Date Version Classification
645272 12/31/2023 1.3 Public
Document Table of Contents

Switchdev Mode TC-Flower Hardware Offloads

In eSwitch switchdev mode, the device allows hardware offload of the L2/L3/L4, VXLAN, GRETAP, GENEVE, GTP, L2TPv3, and PPPoE TC-Flower exact match rules through the PRs. TC-Flower can be used to offload the kernel data path. Table: Supported Patterns and Input Sets for TC-Flower Hardware Offload shows the pattern types and input sets available for TC-Flower hardware offload programming.

Supported Patterns and Input Sets for TC-Flower Hardware Offload

Pattern Input Set
L2 / L3 / L4
eth src_​mac | dst_​mac | ethertype
eth / vlan src_​mac | dst_​mac | ethertype | vlan
eth / svlan / cvlan src_​mac | dst_​mac | svlan | cvlan
eth / ipv4 dst_​mac | src_​ip | dst_​ip | proto | ttl | tos
eth / ipv4 / udp dst_​mac | src_​ip | dst_​ip | proto | ttl | tos | src_​port | dst_​port
eth / ipv4 / tcp dst_​mac | src_​ip | dst_​ip | proto | ttl | tos | src_​port | dst_​port
eth / ipv6 dst_​mac | src_​ip | dst_​ip | tc
eth / ipv6 / udp dst_​mac | src_​ip | dst_​ip | tc | src_​port | dst_​port
eth / ipv6 / tcp dst_​mac | src_​ip | dst_​ip | tc | src_​port | dst_​port
VXLAN/GRETAP/GENEVE
eth / ipv4 / udp / vxlan / eth / ipv4 outer_​dst_​ip | vni | inner_​dst_​mac | inner_​src_​ip | inner_​dst_​ip
eth / ipv4 / udp / vxlan / eth / ipv4 / udp outer_​dst_​ip | vni | inner_​dst_​mac | inner_​src_​ip | inner_​dst_​ip | inner_​src_​port | inner_​dst_​port
eth / ipv4 / udp / vxlan / eth / ipv4 / tcp outer_​dst_​ip | vni | inner_​dst_​mac | inner_​src_​ip | inner_​dst_​ip | inner_​src_​port | inner_​dst_​port
eth / ipv4 / udp / nvgre / eth / ipv4 outer_​dst_​ip | tni | inner_​dst_​mac | inner_​src_​ip | inner_​dst_​ip
eth / ipv4 / udp / nvgre / eth / ipv4 / udp outer_​dst_​ip | tni | inner_​dst_​mac | inner_​src_​ip | inner_​dst_​ip | inner_​src_​port | inner_​dst_​port
eth / ipv4 / udp / nvgre / eth / ipv4 / tcp outer_​dst_​ip | tni |inner_​dst_​mac| inner_​src_​ip | inner_​dst_​ip | inner_​src_​port | inner_​dst_​port
GTP
eth / ipv4 / udp / gtpu dst_​mac | src_​ip | dst_​ip | proto | ttl | tos | teid
eth / ipv6 / udp / gtpu dst_​mac | src_​ip | dst_​ip | tc | teid
eth / ipv4 / udp / gtpu / ipv4 dst_​mac | teid | inner_​src_​ip | inner_​dst_​ip
eth / ipv4 / udp / gtpu / gtp_​psc / ipv4 dst_​mac | teid | qfi | inner_​src_​ip | inner_​dst_​ip
eth / ipv4 / udp / gtpu / ipv4 / udp dst_​mac | teid | inner_​src_​ip | inner_​dst_​ip | inner_​src_​port | inner_​dst_​port
eth / ipv4 / udp / gtpu / gtp_​psc / ipv4 / udp dst_​mac | teid | qfi | inner_​src_​ip | inner_​dst_​ip | inner_​src_​port | inner_​dst_​port
eth / ipv4 / udp / gtpu / ipv4 / tcp dst_​mac | teid | inner_​src_​ip | inner_​dst_​ip | inner_​src_​port | inner_​dst_​port
eth / ipv4 / udp / gtpu / gtp_​psc / ipv4 / tcp dst_​mac | teid | qfi | inner_​src_​ip | inner_​dst_​ip | inner_​src_​port | inner_​dst_​port
eth / ipv4 / udp / gtpu / ipv6 dst_​mac | teid | inner_​src_​ip | inner_​dst_​ip
eth / ipv4 / udp / gtpu / gtp_​psc / ipv6 dst_​mac | teid | qfi | inner_​src_​ip | inner_​dst_​ip
eth / ipv4 / udp / gtpu / ipv6 / udp dst_​mac | teid | inner_​src_​ip | inner_​dst_​ip | inner_​src_​port | inner_​dst_​port
eth / ipv4 / udp / gtpu / gtp_​psc / ipv6 / udp dst_​mac | teid | qfi | inner_​src_​ip | inner_​dst_​ip | inner_​src_​port | inner_​dst_​port
eth / ipv4 / udp / gtpu / ipv6 / tcp dst_​mac | teid | inner_​src_​ip | inner_​dst_​ip | inner_​src_​port | inner_​dst_​port
eth / ipv4 / udp / gtpu / gtp_​psc / ipv6 / tcp dst_​mac | teid | qfi | inner_​src_​ip | inner_​dst_​ip | inner_​src_​port | inner_​dst_​port
eth / ipv6 / udp / gtpu / ipv4 dst_​mac | teid | inner_​src_​ip | inner_​dst_​ip
eth / ipv6 / udp / gtpu / gtp_​psc / ipv4 dst_​mac | teid | qfi | inner_​src_​ip | inner_​dst_​ip
eth / ipv6 / udp / gtpu / ipv4 / udp dst_​mac | teid | inner_​src_​ip | inner_​dst_​ip | inner_​src_​port | inner_​dst_​port
eth / ipv6 / udp / gtpu / gtp_​psc / ipv4 / udp dst_​mac | teid | qfi | inner_​src_​ip | inner_​dst_​ip | inner_​src_​port | inner_​dst_​port
eth / ipv6 / udp / gtpu / ipv4 / tcp dst_​mac | teid | inner_​src_​ip | inner_​dst_​ip | inner_​src_​port | inner_​dst_​port
eth / ipv6 / udp / gtpu / gtp_​psc / ipv4 / tcp dst_​mac | teid | qfi | inner_​src_​ip | inner_​dst_​ip | inner_​src_​port | inner_​dst_​port
eth / ipv6 / udp / gtpu / ipv6 dst_​mac | teid | inner_​src_​ip | inner_​dst_​ip
eth / ipv6 / udp / gtpu / gtp_​psc / ipv6 dst_​mac | teid | qfi | inner_​src_​ip | inner_​dst_​ip
eth / ipv6 / udp / gtpu / ipv6 / udp dst_​mac | teid | inner_​src_​ip | inner_​dst_​ip | inner_​src_​port | inner_​dst_​port
eth / ipv6 / udp / gtpu / gtp_​psc / ipv6 / udp dst_​mac | teid | qfi | inner_​src_​ip | inner_​dst_​ip | inner_​src_​port | inner_​dst_​port
eth / ipv6 / udp / gtpu / ipv6 / tcp dst_​mac | teid | inner_​src_​ip | inner_​dst_​ip | inner_​src_​port | inner_​dst_​port
eth / ipv6 / udp / gtpu / gtp_​psc / ipv6 / tcp dst_​mac | teid | qfi | inner_​src_​ip | inner_​dst_​ip | inner_​src_​port | inner_​dst_​port
eth / ipv4 / udp / gtpc dst_​mac | src_​ip | dst_​ip | proto | ttl | tos | teid
PPPoE
eth / pppoes dst_​mac | session_​id
eth / vlan / pppoes dst_​mac | vlan | session_​id
eth / pppoes / pppoes_​proto dst_​mac | session_​id | proto
eth / vlan / pppoes / pppoes_​proto dst_​mac | vlan | session_​id | proto
eth / pppoe / ipv4 dst_​mac | ethertype | session_​id | src_​ip | dst_​ip | proto | ttl | tos
eth / pppoe / ipv4 / tcp dst_​mac | ethertype | session_​id | src_​ip | dst_​ip | proto | ttl | tos | src_​port | dst_​port
eth / pppoe / ipv4 / udp dst_​mac | ethertype | session_​id | src_​ip | dst_​ip | proto | ttl | tos | src_​port | dst_​port
eth / pppoe / ipv6 dst_​mac | ethertype | session_​id | src_​ip | dst_​ip | tc
eth / pppoe / ipv6 / tcp dst_​mac | ethertype | session_​id | src_​ip | dst_​ip | tc | src_​port | dst_​port
eth / pppoe / ipv6 / udp dst_​mac | ethertype | session_​id | src_​ip | dst_​ip | tc | src_​port | dst_​port
eth / vlan / pppoe / ipv4 dst_​mac | ethertype | vlan | session_​id | src_​ip | dst_​ip | proto | ttl | tos
eth / vlan / pppoe / ipv4 / tcp dst_​mac | ethertype | vlan | session_​id | src_​ip | dst_​ip | proto | ttl | tos | src_​port | dst_​port
eth / vlan / pppoe / ipv4 / udp dst_​mac | ethertype | vlan | session_​id | src_​ip | dst_​ip | proto | ttl | tos | src_​port | dst_​port
eth / vlan / pppoe / ipv6 dst_​mac | ethertype | vlan | session_​id | src_​ip | dst_​ip | tc
eth / vlan / pppoe / ipv6 / tcp dst_​mac | ethertype | vlan | session_​id | src_​ip | dst_​ip | tc | src_​port | dst_​port
eth / vlan / pppoe / ipv6 / udp dst_​mac | ethertype | vlan | session_​id | src_​ip | dst_​ip | tc | src_​port | dst_​port
eth / svlan / cvlan / pppoes dst_​mac | svlan | cvlan | session_​id
eth / svlan / cvlan / pppoes / pppoes_​proto dst_​mac | svlan | cvlan | session_​id | proto
eth / svlan / cvlan / pppoes / ipv4 dst_​mac | svlan | cvlan | session_​id | src_​ip | dst_​ip | proto | ttl | tos
eth / svlan / cvlan / pppoes / ipv6 dst_​mac | svlan | cvlan | session_​id | src_​ip | dst_​ip | tc
L2TPv3
eth / ipv4 / l2tpv3 dst_​mac | src_​ip | dst_​ip | proto | ttl | tos | session_​id
eth / ipv6 / l2tpv3 dst_​mac | src_​ip | dst_​ip | tc | session_​id

The following actions are supported for HW offload:

  • Drop (FLOW_​ACTION_​DROP)
  • Redirect to an if index (FLOW_​ACTION_​REDIRECT)
Note:The VLAN ID that is set from the PR netdev is always the outer VLAN for the VLAN. This can be of type 0x8100 (802.1q) or 0x88A8 (802.1ad).

If match/action is requested that cannot be offloaded because it is either unsupported or there are no resources, software must fail the offload and then flush all existing fast-path rules.

The following actions are unsupported in the 800 Series:

  • VLAN push (id, prio)
  • VLAN pop
  • VXLAN encap/decap