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 ..
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
_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 ..
}
}
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() {
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
}