方案简介
高通QCA9563就一MAC接口,所以在软件适配的过程中,一般都是通过SGMII外接一个以太网芯片,在外接转发芯片上进行Vlan隔离,手动配置出一个WAN口出来。
添加方法
在脚本中适配多wan口
OpenWrt在单板启动过程中才会创建/etc/config/network配置文件,在network中会有config switch和config switch_vlan的相关配置节点。然后通过swconfig命令下发switch相关的配置,例如端口speed、pvid、vlan等。
#/target/linux/ar71xx/base-files/etc/board.d/02_network
#从lan口中移出一个做第二个WAN口,一般按照顺序来
mr3200)
ucidef_add_switch "switch0" \
"0@eth0" "3:lan" "4:lan" "5:lan" "1:wan1" "2:wan2"
生成隔离WAN口的vlan
最终生成的配置:
config switch
option name 'switch0'
option reset '1'
option enable_vlan '1'
config switch_vlan
option device 'switch0'
option vlan '1'
option ports '3 4 5 0t'
config switch_vlan
option device 'switch0'
option vlan '2'
option ports '1 0t'
config switch_vlan
option device 'switch0'
option vlan '3'
option ports '2 0t'
由上面适配处可知,会调用ucidef_add_switch函数。ucidef_add_switch会解析上面传入的参数,生成config switch、config switch_vlan配置信息。
然后调用到_uci_finish_switch_roles来配置每个一端口角色,最终根据ucidef_set_interface "
r
o
l
e
"
i
f
n
a
m
e
"
role" ifname "
role"ifname"devices"来自动生成配置。
#适配多WAN口匹配/package/base-files/files/lib/functions/uci-default.sh
ucidef_set_interface() {
local network=$1; shift
[ -z "$network" ] && return
json_select_object network
json_select_object "$network"
while [ -n "$1" ]; do
local opt=$1; shift
local val=$1; shift
[ -n "$opt" -a -n "$val" ] || break
json_add_string "$opt" "$val"
done
if ! json_is_a protocol string; then
case "$network" in
lan) json_add_string protocol static ;;
wan) json_add_string protocol dhcp ;;
wan1) json_add_string protocol dhcp ;;#添加多WAN口配置
wan2) json_add_string protocol dhcp ;;#添加多WAN口配置
*) json_add_string protocol none ;;
esac
fi
json_select ..
json_select ..
}
加入默认防火墙
/package/network/config/firewall/files/
list network 'wan'
list network 'wan1'
list network 'wan2'
list network 'wan16' ipv6的配置
list network 'wan26'