aboutsummaryrefslogtreecommitdiffstats
path: root/package
diff options
context:
space:
mode:
Diffstat (limited to 'package')
-rwxr-xr-xpackage/base-files/files/bin/config_generate32
-rwxr-xr-xpackage/base-files/files/lib/functions/uci-defaults-new.sh36
2 files changed, 47 insertions, 21 deletions
diff --git a/package/base-files/files/bin/config_generate b/package/base-files/files/bin/config_generate
index 264f7d3ed1..02f6998c84 100755
--- a/package/base-files/files/bin/config_generate
+++ b/package/base-files/files/bin/config_generate
@@ -20,12 +20,13 @@ generate_static_network() {
EOF
}
+addr_offset=2
generate_network() {
- local ifname macaddr type
+ local ifname macaddr protocol type
json_select network
json_select "$1"
- json_get_vars ifname macaddr
+ json_get_vars ifname macaddr protocol
json_select ..
json_select ..
@@ -45,23 +46,32 @@ generate_network() {
set network.$1.macaddr='$macaddr'
EOF
- case "$1" in
- lan)
+ case "$protocol" in
+ static)
+ local ipaddr
+ case "$1" in
+ lan) ipaddr="192.168.1.1" ;;
+ *) ipaddr="192.168.$((addr_offset++)).1" ;;
+ esac
+
uci -q batch <<-EOF
set network.$1.proto='static'
- set network.$1.ipaddr='192.168.1.1'
+ set network.$1.ipaddr='$ipaddr'
set network.$1.netmask='255.255.255.0'
set network.$1.ip6assign='60'
EOF
;;
- wan)
+
+ dhcp)
+ # fixup IPv6 slave interface if parent is a bridge
+ [ "$type" = "bridge" ] && ifname="br-$1"
+
uci -q batch <<-EOF
set network.$1.proto='dhcp'
- delete network.wan6
- set network.wan6='interface'
- set network.wan6.type='$type'
- set network.wan6.ifname='$ifname'
- set network.wan6.proto='dhcpv6'
+ delete network.${1}6
+ set network.${1}6='interface'
+ set network.${1}6.ifname='$ifname'
+ set network.${1}6.proto='dhcpv6'
EOF
;;
esac
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 9fa3fa204e..b350549b34 100755
--- a/package/base-files/files/lib/functions/uci-defaults-new.sh
+++ b/package/base-files/files/lib/functions/uci-defaults-new.sh
@@ -32,9 +32,26 @@ json_select_object() {
_ucidef_set_interface() {
local name="$1"
local iface="$2"
+ local proto="$3"
json_select_object "$name"
json_add_string ifname "$iface"
+
+ if ! json_is_a protocol string; then
+ case "$proto" in
+ static|dhcp|none) : ;;
+ *)
+ case "$name" in
+ lan) proto="static" ;;
+ wan) proto="dhcp" ;;
+ *) proto="none" ;;
+ esac
+ ;;
+ esac
+
+ json_add_string protocol "$proto"
+ fi
+
json_select ..
}
@@ -57,19 +74,15 @@ ucidef_set_interface_loopback()
}
ucidef_set_interface_lan() {
- local lan_if="$1"
-
json_select_object network
- _ucidef_set_interface lan "$lan_if"
+ _ucidef_set_interface lan "$@"
json_select ..
}
ucidef_set_interface_wan() {
- local wan_if="$1"
-
- json_select_object network
- _ucidef_set_interface wan "$wan_if"
- json_select ..
+ json_select_object network
+ _ucidef_set_interface wan "$@"
+ json_select ..
}
ucidef_set_interfaces_lan_wan() {
@@ -164,14 +177,17 @@ _ucidef_finish_switch_roles() {
json_select ..
json_select_object network
+ local devices
+
json_select_object "$role"
# attach previous interfaces (for multi-switch devices)
- local devices; json_get_var devices ifname
+ json_get_var devices ifname
if ! list_contains devices "$device"; then
devices="${devices:+$devices }$device"
fi
- json_add_string ifname "$devices"
json_select ..
+
+ _ucidef_set_interface "$role" "$devices"
json_select ..
done
}