+
+ local ipaddr netmask ip6addr
+ config_get ipaddr "$config" ipaddr
+ config_get netmask "$config" netmask
+ config_get ip6addr "$config" ip6addr
+ [ -z "$ipaddr" -o -z "$netmask" ] && [ -z "$ip6addr" ] && return 1
+
+ local gateway ip6gw dns bcast metric
+ config_get gateway "$config" gateway
+ config_get ip6gw "$config" ip6gw
+ config_get dns "$config" dns
+ config_get bcast "$config" broadcast
+ config_get metric "$config" metric
+
+ [ -z "$ipaddr" ] || $DEBUG ifconfig "$iface" "$ipaddr" netmask "$netmask" broadcast "${bcast:-+}"
+ [ -z "$ip6addr" ] || $DEBUG ifconfig "$iface" add "$ip6addr"
+ [ -z "$gateway" ] || $DEBUG route add default gw "$gateway" ${metric:+metric $metric} dev "$iface"
+ [ -z "$ip6gw" ] || $DEBUG route -A inet6 add default gw "$ip6gw" ${metric:+metric $metric} dev "$iface"
+ [ -z "$dns" ] || add_dns "$config" $dns
+
+ config_get type "$config" TYPE
+ [ "$type" = "alias" ] && return 0
+
+ env -i ACTION="ifup" INTERFACE="$config" DEVICE="$iface" PROTO=static /sbin/hotplug-call "iface" &
+}
+
+setup_interface_alias() {
+ local config="$1"
+ local parent="$2"
+ local iface="$3"
+
+ local cfg
+ config_get cfg "$config" interface
+ [ "$parent" == "$cfg" ] || return 0
+
+ # parent device and ifname
+ local p_device p_type
+ config_get p_device "$cfg" device
+ config_get p_type "$cfg" type
+
+ # select alias ifname
+ local layer use_iface
+ config_get layer "$config" layer 2
+ case "$layer:$p_type" in
+ # layer 3: e.g. pppoe-wan or pptp-vpn
+ 3:*) use_iface="$iface" ;;
+
+ # layer 2 and parent is bridge: e.g. br-wan
+ 2:bridge) use_iface="br-$cfg" ;;
+
+ # layer 1: e.g. eth0 or ath0
+ *) use_iface="$p_device" ;;
+ esac
+
+ # alias counter
+ local ctr
+ config_get ctr "$parent" alias_count 0
+ ctr="$(($ctr + 1))"
+ config_set "$parent" alias_count "$ctr"
+
+ # alias list
+ local list
+ config_get list "$parent" aliases
+ append list "$config"
+ config_set "$parent" aliases "$list"
+
+ use_iface="$use_iface:$ctr"
+ set_interface_ifname "$config" "$use_iface"
+