我正在研究一个用例,即只有一个以太网端口(eth1)的 SoC 连接到 SJA1105 交换机芯片。正如 Linux 内核文档中提到的,DSA 机制将以 eth1 作为管理端口,并且限制直接在此接口上打开套接字。对于 Vlan-unware 情况,我使用以下文档中的参考配置:
ip link set eth1 up
ip link set swp1 up
ip link set swp2 up
ip link add name br0 type bridge
ip link set dev swp1 master br0
ip link set dev swp2 master br0
ip addr add 172.20.1.129/24 dev br0
ip link set dev br0 up
它工作正常。我可以使用 br0 代替 eth1 来访问 swpN 后面的主机。但是当涉及到 Vlan-aware 情况时,它不起作用。我仍然使用从参考中修改的配置:
ip link set eth1 up
ip link set swp1 up
ip link set swp2 up
ip link add name br0 type bridge
ip link set dev br0 type bridge vlan_filtering 1
ip link set dev swp1 master br0
ip link set dev swp2 master br0
bridge vlan add dev swp1 vid 100 pvid untagged
bridge vlan add dev swp2 vid 100 pvid untagged
bridge vlan add dev br0 vid 100 pvid untagged self
ip addr add 172.20.1.129/24 dev br0
ip link set dev br0 up
swpN 后面的主机仍可互相 ping 通,但无法 ping 通 br0,反之亦然。tcpdump 在 br0 上未捕获任何数据包,但在 eth1 上发现了数据包。
我的配置有什么问题吗?或者还有其他方法可以实现 CPU 守护进程可以与 swpN 后面带有 Vlan 标记的主机进行通信的目标吗?
如有任何评论我将不胜感激,提前谢谢!
答案1
您需要为本机 br0 VLAN(标记为 PVID)创建一个 VLAN 接口,并将 IP 地址分配给该接口,而不是网桥本身。这似乎是与“普通”网桥的区别。
ip link add link br0 name br0.100 type vlan id 100
ip addr add 172.20.1.129/24 dev br0.100
我没有找到任何描述此行为的文档,但此解决方案有效且有意义。