Latest netifd allows us to setup network bridges with implicit vlan
tagging. For this to work, we need to setup several additional uci
sections. This feature is particularly usefull for DSA tupe devices.
Add board.d and uci-defaults support for generating the sections.
Signed-off-by: John Crispin <john@phrozen.org>
include $(INCLUDE_DIR)/feeds.mk
PKG_NAME:=base-files
include $(INCLUDE_DIR)/feeds.mk
PKG_NAME:=base-files
PKG_FLAGS:=nonshared
PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/
PKG_FLAGS:=nonshared
PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/
[ -s $CFG ] || /bin/board_detect || exit 1
[ -s /etc/config/network -a -s /etc/config/system ] && exit 0
[ -s $CFG ] || /bin/board_detect || exit 1
[ -s /etc/config/network -a -s /etc/config/system ] && exit 0
+generate_bridge() {
+ local name=$1
+ uci -q batch <<-EOF
+ set network.$name=device
+ set network.$name.name=$name
+ set network.$name.type=bridge
+ EOF
+}
+
+bridge_vlan_id=0
+generate_bridge_vlan() {
+ local device=$1
+ local ports="$2"
+ bridge_vlan_id=$((bridge_vlan_id + 1))
+ uci -q batch <<-EOF
+ add network bridge-vlan
+ set network.@bridge-vlan[-1].device='$device'
+ set network.@bridge-vlan[-1].vlan='$bridge_vlan_id'
+ set network.@bridge-vlan[-1].ports='$ports'
+ EOF
+}
+
generate_static_network() {
uci -q batch <<-EOF
delete network.loopback
generate_static_network() {
uci -q batch <<-EOF
delete network.loopback
addr_offset=2
generate_network() {
local ifname macaddr protocol type ipaddr netmask
addr_offset=2
generate_network() {
local ifname macaddr protocol type ipaddr netmask
json_select network
json_select "$1"
json_select network
json_select "$1"
*\ * | lan:*) type="bridge" ;;
esac
*\ * | lan:*) type="bridge" ;;
esac
+ [ -n "$bridge" ] && {
+ generate_bridge_vlan $bridge "$ifname"
+ ifname=$bridge.$bridge_vlan_id
+ type=""
+ }
+
uci -q batch <<-EOF
delete network.$1
set network.$1='interface'
uci -q batch <<-EOF
delete network.$1
set network.$1='interface'
generate_static_system() {
uci -q batch <<-EOF
delete system.@system[0]
generate_static_system() {
uci -q batch <<-EOF
delete system.@system[0]
touch /etc/config/network
generate_static_network
touch /etc/config/network
generate_static_network
+ json_get_vars bridge
+ [ -n "$bridge" ] && generate_bridge $bridge
+
json_get_keys keys network
json_get_keys keys network
- for key in $keys; do generate_network $key; done
+ for key in $keys; do generate_network $key $bridge; done
json_get_keys keys switch
for key in $keys; do generate_switch $key; done
json_get_keys keys switch
for key in $keys; do generate_switch $key; done
ucidef_set_interface_wan "$wan_if"
}
ucidef_set_interface_wan "$wan_if"
}
+ucidef_set_bridge_device() {
+ json_add_string bridge "${1:switch0}"
+}
+
_ucidef_add_switch_port() {
# inherited: $num $device $need_tag $want_untag $role $index $prev_role
# inherited: $n_cpu $n_ports $n_vlan $cpu0 $cpu1 $cpu2 $cpu3 $cpu4 $cpu5
_ucidef_add_switch_port() {
# inherited: $num $device $need_tag $want_untag $role $index $prev_role
# inherited: $n_cpu $n_ports $n_vlan $cpu0 $cpu1 $cpu2 $cpu3 $cpu4 $cpu5