
我正在研究一個用例,即 SoC 只有一個乙太網路連接埠(eth1)連接到 SJA1105 交換晶片。如同linux內核文件中所提到的,DSA機制將eth1作為管理端口,並且限制在該介面上直接開啟socket。對於 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 感知的情況時,它就不起作用了。我仍然使用參考修改後的配置:
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 建立一個 VLAN 介面(標記為 PVID),並將 IP 位址指派給該介面而不是網橋本身。這似乎是與「普通」橋樑的區別。
ip link add link br0 name br0.100 type vlan id 100
ip addr add 172.20.1.129/24 dev br0.100
我還沒有找到任何描述這種行為的文檔,但是這個解決方案有效且有意義。