概述
高通提供的qsdk6.10中,对于IPQ4019系列芯片,其switch交换芯片管理的网口定义是写在DTS设备树文件中的。如果需要对相关方案产品进行胖瘦一体支持,就需要自定义WAN、LAN网口区域。
本文参考:https://www.right.com.cn/forum/thread-956683-1-1.html
为何需要修改DTS文件呢,根据上述贴文描述,IPQ4019中,ESS 驱动接管了部分 VLAN 设置,所以不太好通过设置ethX.X这种划分VLAN的方式来进行WAN、LAN隔离。(并非完全无办法)
1、确定DTS文件
修改目标设备的dts文件,例如:qca/src/linux-3.14/arch/arm/boot/dts/qcom-ipq40xx-ap.dk04.1-c1.dts
2、确定WAN、LAN区域内的网口,计算出修改值
首先确定需要隔离的交换端口port。
例如下面的switch交换芯片有7个port(不一定全有使用),其中1,4,5端口接入的物理网口,而0口是连接CPU的端口。
目前需要4,5端口做LAN,1口做WAN口。其它口硬件未使用。
#7口 6口 5口 4口 3口 2口 1口 0口(CPU口)
0 0 0 0 0 0 0 0
#LAN区域
#每位表示一个口,1表示加入该组
#7口 6口 5口 4口 3口 2口 1口 0口(CPU口)
0 0 1 1 1 1 0 1
#二进制转换十六进制
# 00111101 = 0x3d
#WAN区域
#7口 6口 5口 4口 3口 2口 1口 0口(CPU口)
0 0 0 0 0 0 1 0
# 00000010 = 0x02
计算好WAN、lan区域对应的十六进制值,就可以开始修改DTS了
3、修改设备树文件,UCI配置
找到设备树中的ess-switch
定义,按下面方式修改。gmac也要一并修改。
ess-switch@c000000 {
switch_cpu_bmp = <0x1>;
//LAN区域隔离值
switch_lan_bmp = <0x3d>; /* lan port bitmap */
//WAN区域隔离值
switch_wan_bmp = <0x02>; /* wan port bitmap */
};
edma@c080000 {
gmac0 {
local-mac-address = [000000000000];
qcom,poll-required = <0>;
qcom,poll-required-dynamic = <1>;
//定义LAN区域的vlan标签,对应接口eth1
vlan-tag = <2 0x02>;
};
gmac1 {
local-mac-address = [000000000000];
qcom,poll-required-dynamic = <1>;
//定义WAN区域的vlan标签,对应接口eth0
vlan-tag = <1 0x3d>;
};
};
同时修改uci的network配置,与DTS定义保持一致
#/etc/config/network
config switch
option name 'switch0'
option enable_vlan '1'
config switch_vlan
option device 'switch0'
option vlan '2'
option ports '0t 1'
config switch_vlan 'lanport'
option device 'switch0'
option vlan '1'
option ports '0t 2 3 4 5'
修改好后,就可以开始编译系统。
4、系统中WAN、LAN不同网桥隔离
编译进入系统后,通过操作eth0和eth1两个接口,就相当于操作这两个区域各自的port口集合。
如果需要实现瘦模式,将两个接口加入一个网桥中即可。
通过命令swconfig dev switch0 show
可以查看switch芯片的配置。
不修改DTS文件下实现WAN、LAN隔离
此方法具有局限性,目前测试发现存在间歇性失效问题,没有修改DTS的稳定。
通过给lan区域网口设置pvid实现(没执行这些命令前,相当于网口都是LAN)。重启失效,且有时候会出现LAN口数据不通问题,此时重复执行一遍即可,原因未知。
好处是不影响高通QSDK的组播增强特性(组播转单播),改DTS方案的组播会很卡
# 命令本体,假设端口定义和上述一致
swconfig dev switch0 port 5 set pvid 0
swconfig dev switch0 port 4 set pvid 0
swconfig dev switch0 vlan 0 set ports '0t 1t 4 5'
swconfig dev switch0 set apply
swconfig dev switch0 port 5 set pvid 127
swconfig dev switch0 port 4 set pvid 127
swconfig dev switch0 vlan 127 set ports '0t 4 5'
swconfig dev switch0 set apply