base-files: add board.d support for bridge device
[openwrt/staging/jow.git] / package / base-files / files / bin / config_generate
index eb6816e5195ea94206ed2ed24d4c805db52b00f5..e23f901504f0e0622c75e5a2d41fc7efd221be28 100755 (executable)
@@ -7,6 +7,28 @@ CFG=/etc/board.json
 [ -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
@@ -63,6 +85,7 @@ generate_static_network() {
 addr_offset=2
 generate_network() {
        local ifname macaddr protocol type ipaddr netmask
+       local bridge=$2
 
        json_select network
                json_select "$1"
@@ -77,6 +100,12 @@ generate_network() {
                *\ * | 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'
@@ -236,7 +265,6 @@ generate_switch() {
        json_select ..
 }
 
-
 generate_static_system() {
        uci -q batch <<-EOF
                delete system.@system[0]
@@ -439,8 +467,11 @@ if [ ! -s /etc/config/network ]; then
        touch /etc/config/network
        generate_static_network
 
+       json_get_vars bridge
+       [ -n "$bridge" ] && generate_bridge $bridge
+
        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