tc 过滤器...ht HANDLE...不允许使用 8 位存储桶

tc 过滤器...ht HANDLE...不允许使用 8 位存储桶

TC-u32 手册页指出 HANDLE 是:

HANDLE := { u12_hex_htid:[**u8_hex_hash:[u12_hex_nodeid]** | 0xu32_hex_value }

因此,由于它是一个 u8 值,因此存储桶的大小应在 0x00 到 0xff 之间。

问题是我无法创建大于 0x1f(五位)的存储桶。我收到:RTNETLINK 答案:无效参数我们在与内核通信时出错

/sbin/tc filter add dev ifb0 parent 1:0 protocol ip prio 5 u32 ht 5:2: match ip src 10.16.240.0/24 hashkey mask 0x000000ff at 12 link 100:

没问题

/sbin/tc filter add dev ifb0 parent 1:0 protocol ip prio 5 u32 ht 5:20: match ip src 10.16.240.0/24 hashkey mask 0x000000ff at 12 link 100:

产生错误。

环境:

iproute2 版本 4.3.0-1ubuntu3.16

Ubuntu 16.04.5 LTS

有什么提示吗?

閱讀

答案1

回答我自己的问题:我错误地理解了 bucket 必须大于我打算散列的过滤器数量,但事实并非如此。bucket 必须大于或等于(限制为 0xff)我打算在其上使用的最大散列值。

因此,由于我打算在存储桶内使用 26 个过滤器,因此我创建了一个“除数为 32”的存储桶。由于我对这个存储桶的 26 个哈希值随机取值范围从 0 到 255(最后一个 IP 地址八位字节),因此我溢出了,内核对此表示不满。

然后,我使用“除数 256”创建了一个存储桶,尽管事实上我只会使用其中的 26 个,但错误就消失了。

我希望这对将来的某人有所帮助

干杯

(顺便问一下:我该如何将其标记为“已解决”?

相关内容