我正在编写一个网桥,可以动态地重新组装和分析TCP流。我有一对多队列NICS,我使用netmap从不同线程上的每个rx队列捕获数据包,然后将它们传递给另一个NIC进行传输。问题是,由于源和目标地址以及端口被反转,来自同一流的数据包不会落在两个NIC上的同一队列中。
我尝试使用ethtool来更改其散列用于分发数据包的元组。运行这个:
# ethtool --show-nfc p1p1 rx-flow-hash tcp4
结果:
TCP over IPV4 flows use these fields for computing Hash flow key:
IP SA
IP DA
L4 bytes 0 & 1 [TCP/UDP src port]
L4 bytes 2 & 3 [TCP/UDP dst port]
为其他NIC重复上述命令会产生相同的队列。我以为我可以通过运行ethtool --config-nfc p1p1 rx-flow-hash tcp4 dsfn
来更改其中一个响铃的顺序,但这不会更改哈希中使用的字段的顺序。似乎sdfn
和dsfn
都会产生相同的元组。 ds
和sd
也是如此。
是否有办法使一个流中的数据包始终位于两个NIC上的同一队列(和同一个线程)上,无论是使用ethtool
配置NIC还是其他方法或工具?