net/sched: cls_api: Support hardware miss to tc action
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
linux-bluefield (Ubuntu) |
Invalid
|
Undecided
|
Unassigned | ||
Focal |
Fix Released
|
Medium
|
William Tu | ||
Jammy |
Fix Committed
|
Undecided
|
Unassigned |
Bug Description
* Explain the bug(s)
Currently tc miss interface only supports resuming from a specific tc chain.
If a packet modification is done before a missable action such as CT and
there is a miss in CT after it, this may cause a miss match when resuming
re-executing the same chain in software, and wrong packet count.
This use case for example is a stateless (static) nat.
* brief explanation of fixes
Add support for missing to a specific action instance, and support
of per action hardware stats to update what was actually done in hardware.
* How to test
Create OVS bridge with 2 devices mlx5 rep devices.
Enable HW offload and configure regular connection tracking OpenFlow rules
with packet modification before the CT action (such as statless nat):
e.g:
ovs-ofctl del-flows br-ovs
ovs-ofctl add-flow br-ovs arp,actions=normal
ovs-ofctl add-flow br-ovs "in_port=1,table=0, ip,ct_state=-trk actions=
ovs-ofctl add-flow br-ovs "in_port=1,table=1, ip,ct_state=
ovs-ofctl add-flow br-ovs "in_port=1,table=1, ip,ct_state=
ovs-ofctl add-flow br-ovs "in_port=2,table=0, ip,ct_state=-trk actions=
ovs-ofctl add-flow br-ovs "in_port=2,table=1, ip,ct_state=
Config VF1 ip 1.1.1.1, VF2 ip 1.1.1.2
For VF2, add route and static neighbour to floating (router) ip 5.5.5.5
Then run a TCP connection, e.g:
on mlx5 VF1 iperf -s #(which will listen on 1.1.1.2)
on mlx5 VF2 iperf -c 5.5.5.5 -t 10 #(this creates a packet from 1.1.1.1 -> 5.5.5.5, and nat will change this to 1.1.1.1->1.1.1.2)
Optional: In different terminal, while traffic is running, check for offload:
tcpdump -nnepi <RELEVANT_MLX5_REP> tcp
and see no iperf tcp packets.
Dump conntrack with relevant ip:
cat /proc/net/
See tuples were offloaded:
ipv4 2 tcp 6 src= 1.1.1.1 dst=1.1.1.2 sport=56394 dport=5001 packets=2 bytes=112 src=1.1.1.2 dst=1.1.1.1 sport=5001 dport=56394 packets=1777 bytes=665340 [HW_OFFLOAD] mark=0 zone=0 use=3
* What it could break.
offload for modifications + ct and tc packet count.
CVE References
Changed in linux-bluefield (Ubuntu Focal): | |
assignee: | nobody → William Tu (wtu) |
importance: | Undecided → Medium |
status: | New → In Progress |
Changed in linux-bluefield (Ubuntu): | |
status: | New → Invalid |
Changed in linux-bluefield (Ubuntu Focal): | |
status: | In Progress → Fix Committed |
Changed in linux-bluefield (Ubuntu Jammy): | |
status: | New → Fix Committed |
This bug is awaiting verification that the linux-bluefield /5.4.0- 1061.67 kernel in -proposed solves the problem. Please test the kernel and update this bug with the results. If the problem is solved, change the tag 'verification- needed- focal' to 'verification- done-focal' . If the problem still exists, change the tag 'verification- needed- focal' to 'verification- failed- focal'.
If verification is not done by 5 working days from today, this fix will be dropped from the source code, and this bug will be closed.
See https:/ /wiki.ubuntu. com/Testing/ EnableProposed for documentation how to enable and use -proposed. Thank you!