aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xpackage/base-files/files/bin/config_generate8
-rwxr-xr-xpackage/base-files/files/lib/functions/uci-defaults-new.sh10
2 files changed, 13 insertions, 5 deletions
diff --git a/package/base-files/files/bin/config_generate b/package/base-files/files/bin/config_generate
index 6da386faff..45dcd71616 100755
--- a/package/base-files/files/bin/config_generate
+++ b/package/base-files/files/bin/config_generate
@@ -173,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
@@ -198,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])
diff --git a/package/base-files/files/lib/functions/uci-defaults-new.sh b/package/base-files/files/lib/functions/uci-defaults-new.sh
index 613a418a1d..ae23d22a79 100755
--- a/package/base-files/files/lib/functions/uci-defaults-new.sh
+++ b/package/base-files/files/lib/functions/uci-defaults-new.sh
@@ -116,7 +116,7 @@ ucidef_add_switch_attr() {
ucidef_add_switch_ports() {
local name="$1"; shift
- local port num role dev idx
+ local port num role dev idx tag
json_select_object switch
json_select_object "$name"
@@ -127,6 +127,11 @@ ucidef_add_switch_ports() {
[0-9]*@*)
num="${port%%@*}"
dev="${port##*@}"
+ tag=0
+ [ "${num%t}" != "$num" ] && {
+ num="${num%t}"
+ tag=1
+ }
;;
[0-9]*:*:[0-9]*)
num="${port%%:*}"
@@ -143,12 +148,13 @@ ucidef_add_switch_ports() {
json_add_object
json_add_int num "$num"
[ -n "$dev" ] && json_add_string device "$dev"
+ [ -n "$tag" ] && json_add_boolean need_tag "$tag"
[ -n "$role" ] && json_add_string role "$role"
[ -n "$idx" ] && json_add_int index "$idx"
json_close_object
fi
- unset num dev role idx
+ unset num dev role idx tag
done
json_select ..