u32 数据包分类器从哪里开始

u32 数据包分类器从哪里开始

我有一个功能正常的流量分类器,它使用原始数据包偏移量来匹配数据包的源和/或目标 MAC 地址。过滤器使用负偏移量,因为默认情况下偏移量似乎为 0 是 IP 数据包的开头。这意味着以太网报头的内容就在那之前。

例如,对于 MAC 12:34:56:78:90:ab:

tc filter add dev <iface> protocol ip parent 1:0 prio 1 u32 \
    match u16 0x0800 0xffff at -2 \
    match u32 0x90ab 0xffff at -12 \
    match u16 0x12345678 0xffffffff at -14 \
    flowid 1:10

网络链路现在将承载 802.1Q VLAN 流量以及非 VLAN 流量。protocol ip阻止此流量匹配。问题是,我如何为 VLAN 流量构建类似的规则?我试图再次执行负偏移来搜索 DotQ 流量的“以太网类型”值 0x8100,只是为了确认我对偏移的假设,但似乎找不到它,或者至少似乎无法匹配它。以下示例未成功匹配 DotQ 流量:

tc filter add dev <iface> parent 1:0 prio 1 u32 \
    match u16 0x8100 0xffff at -6 flowid 1:10

我无法在tc系统上找到任何文档来指定offset=0代表什么。它是无条件地从 IP 标头开始,还是会protocol ip影响这一点?

答案1

我的猜测是protocol IP使用EtherType字段来确定第 3 层协议是什么。由于 VLAN 标签插入在EtherType字段之前,如https://en.wikipedia.org/wiki/IEEE_802.1Q,它作为 IP 数据包不匹配。

相关内容