base-files: uci-defaults-new, config_generate: allow force tagged cpu ports
[openwrt/openwrt.git] / package / base-files / files / bin / config_generate
index d5bc38ecd722673109fb72c8c3d7dcd8d5b40729..45dcd716163534f025eca74d8bc8f02eb595d94e 100755 (executable)
@@ -49,7 +49,6 @@ generate_network() {
                delete network.$1
                set network.$1='interface'
                set network.$1.ifname='$ifname'
-               set network.$1.force_link=1
                set network.$1.proto='none'
                set network.$1.macaddr='$macaddr'
        EOF
@@ -64,6 +63,7 @@ generate_network() {
                                set network.$1.ip6assign='60'
                        EOF
                ;;
+
                wan)
                        uci -q batch <<-EOF
                                set network.$1.proto='dhcp'
@@ -73,6 +73,12 @@ generate_network() {
                                set network.wan6.proto='dhcpv6'
                        EOF
                ;;
+
+               *)
+                       uci -q batch <<-EOF
+                               set network.$1.force_link=1
+                       EOF
+               ;;
        esac
 }
 
@@ -167,7 +173,8 @@ calculate_switch_vlans() {
                        if [ "$role" != "$prev_role" ]; then
                                if [ -n "$vlan_ports" ]; then
                                        let cpu_port="cpu$((vlan_off % n_cpu))"
-                                       [ $n_vlan -gt $n_cpu ] && cpu_port="${cpu_port}t"
+                                       let need_tag="tag$((vlan_off % n_cpu))"
+                                       [ $n_vlan -gt $n_cpu -o $need_tag -eq 1 ] && cpu_port="${cpu_port}t"
 
                                        uci -q batch <<-EOF
                                                add network switch_vlan
@@ -192,8 +199,9 @@ calculate_switch_vlans() {
        # autogenerate interfaces
        vlan_off=0; while [ $vlan_off -lt $n_vlan ]; do
                eval role="\$role$((vlan_off))"
-               eval device="\$dev$((vlan_off++ % n_cpu))"
-               [ $n_vlan -gt $n_cpu ] && device="$device.$vlan_off"
+               eval device="\$dev$((vlan_off % n_cpu))"
+               let need_tag="tag$((vlan_off++ % n_cpu))"
+               [ $n_vlan -gt $n_cpu -o $need_tag -eq 1 ] && device="$device.$vlan_off"
 
                # quirk: append ifnames for subsequent switches
                case "$switch" in switch[1-9])
@@ -293,36 +301,50 @@ generate_led() {
 
        json_select led
        json_select "$key"
-       json_get_vars name sysfs type trigger device interface default port_mask
+       json_get_vars name sysfs type trigger default
 
        uci -q batch <<-EOF
                delete system.$cfg
                set system.$cfg='led'
                set system.$cfg.name='$name'
                set system.$cfg.sysfs='$sysfs'
-               set system.$cfg.dev='$device'
                set system.$cfg.trigger='$trigger'
-               set system.$cfg.port_mask='$port_mask'
                set system.$cfg.default='$default'
        EOF
 
        case "$type" in
+               gpio)
+                       local gpio inverted
+                       json_get_vars gpio inverted
+                       uci -q batch <<-EOF
+                               set system.$cfg.trigger='gpio'
+                               set system.$cfg.gpio='$gpio'
+                               set system.$cfg.inverted='$inverted'
+                       EOF
+               ;;
+
                netdev)
+                       local device
+                       json_get_vars device
                        uci -q batch <<-EOF
                                set system.$cfg.trigger='netdev'
                                set system.$cfg.mode='link tx rx'
+                               set system.$cfg.dev='$device'
                        EOF
                ;;
 
                usb)
+                       local device
+                       json_get_vars device
                        uci -q batch <<-EOF
                                set system.$cfg.trigger='usbdev'
                                set system.$cfg.interval='50'
+                               set system.$cfg.dev='$device'
                        EOF
                ;;
 
                rssi)
-                       local minq maxq offset factor
+                       local iface minq maxq offset factor
                        json_get_vars iface minq maxq offset factor
                        uci -q batch <<-EOF
                                set system.$cfg.trigger='rssi'
@@ -333,6 +355,14 @@ generate_led() {
                                set system.$cfg.factor='$factor'
                        EOF
                ;;
+
+               switch)
+                       local port_mask
+                       json_get_vars port_mask
+                       uci -q batch <<-EOF
+                               set system.$cfg.port_mask='$port_mask'
+                       EOF
+               ;;
        esac
 
        json_select ..