我正在尝试将 SFQ 的默认过滤更改为基于源 IP 的过滤,其中每个 IP 都属于一个类。
我知道我可以用以下类似方法创建一个具有更多除数的 SFQ:
tc qdisc add ... sfq divisor 512
然后我想使用类似以下方法将每个 src 发送到一个不同的类:
tc filter add ... flow map key src addend -192.168.0.0 divisor 256
tc filter add ... flow map key src addend -192.168.4.0 divisor 256
问题是,第一行将把 192.168.0.x 流量发送到类 1-256,但第二行也会将来自 192.168.4.0 的流量发送到类 1-256。
有没有办法设置偏移量?我一直在检查按位运算符,但我确信这是可以实现的。
我知道我可以使用如下哈希:
tc filter add ... flow hash keys src divisor 512
但是,由于源 IP 地址会被散列,不同的源 IP 可能会出现在同一个队列中,而不是每个队列一个。
此整形将安装在具有 5120 个不同 src IP 的高性能路由器(20gbps)中,因此我无法真正为每个 IP 设置一个队列或设置大量过滤器,这就是为什么我试图找到一种更优化的方法来做到这一点。
谢谢!
答案1
我相信您也许能够通过使用过滤器并根据源 IP 地址将数据包定向到队列来获得所需的结果nfct-src
。您还可以添加过滤器掩码来解决超过 256 个队列的问题。
tc filter add dev $dev parent $class_index: handle 1 flow divisor 256 map key nfct-src and 0xff