X-Git-Url: http://git.openwrt.org/?p=openwrt%2Fopenwrt.git;a=blobdiff_plain;f=package%2Fbase-files%2Ffiles%2Flib%2Fpreinit%2F10_indicate_preinit;h=5442a749b182bde2919eb1f10d8ff553be9bb7e4;hp=cd3ca5571a021f64858a049b5d69cea48380d2aa;hb=23b9dc2eca8a0dc4b05963820effa318df20d15a;hpb=56bc02a305ae8d8a7e927622d924cdab56d4f012 diff --git a/package/base-files/files/lib/preinit/10_indicate_preinit b/package/base-files/files/lib/preinit/10_indicate_preinit index cd3ca5571a..5442a749b1 100644 --- a/package/base-files/files/lib/preinit/10_indicate_preinit +++ b/package/base-files/files/lib/preinit/10_indicate_preinit @@ -2,51 +2,154 @@ # Copyright (C) 2006 OpenWrt.org # Copyright (C) 2010 Vertical Communications +preinit_ip_config() { + local netdev vid + + netdev=${1%\.*} + vid=${1#*\.} + + if [ "$vid" = "$netdev" ]; then + vid= + fi + + grep -q "$netdev" /proc/net/dev || return + + if [ -n "$vid" ]; then + ip link add link $netdev name $1 type vlan id $vid + fi + + ip link set dev $netdev up + ip -4 address add $pi_ip/$pi_netmask broadcast $pi_broadcast dev $1 +} + +preinit_config_switch() { + local role roles ports device enable reset + + local name=$1 + local lan_if=$2 + + json_select switch + json_select $name + + json_get_vars enable reset + + if json_is_a roles array; then + json_get_keys roles roles + json_select roles + + for role in $roles; do + json_select "$role" + json_get_vars ports device + json_select .. + + if [ "$device" = "$lan_if" ]; then + if [ "$reset" -eq "1" ]; then + swconfig dev $name set reset + fi + + swconfig dev $name set enable_vlan $enable + swconfig dev $name vlan $role set ports "$ports" + swconfig dev $name set apply + fi + done + + json_select .. + fi + + json_select .. + json_select .. +} + +preinit_config_board() { + /bin/board_detect /tmp/board.json + + [ -f "/tmp/board.json" ] || return + + . /usr/share/libubox/jshn.sh + + json_init + json_load "$(cat /tmp/board.json)" + + json_select network + json_select "lan" + json_get_vars ifname + json_select .. + json_select .. + + [ -n "$ifname" ] || return + + # only use the first one + ifname=${ifname%% *} + + if [ -x /sbin/swconfig ]; then + # configure the switch, if present + + json_get_keys keys switch + for key in $keys; do + preinit_config_switch $key $ifname + done + else + # trim any vlan ids + ifname=${ifname%\.*} + fi + + pi_ifname=$ifname + + preinit_ip_config $pi_ifname +} + preinit_ip() { - # if the preinit interface isn't specified and ifname is set in - # preinit.arch use that interface - if [ -z "$pi_ifname" ]; then - pi_ifname=$ifname - fi - - [ -n "$pi_ifname" ] && grep "$pi_ifname" /proc/net/dev >/dev/null && { - ifconfig $pi_ifname $pi_ip netmask $pi_netmask broadcast $pi_broadcast up - } + [ "$pi_preinit_no_failsafe" = "y" ] && return + + # if the preinit interface isn't specified and ifname is set in + # preinit.arch use that interface + if [ -z "$pi_ifname" ]; then + pi_ifname=$ifname + fi + + if [ -n "$pi_ifname" ]; then + preinit_ip_config $pi_ifname + elif [ -d "/etc/board.d/" ]; then + preinit_config_board + fi + + preinit_net_echo "Doing Lede Preinit\n" } preinit_ip_deconfig() { - [ -n "$pi_ifname" ] && grep "$pi_ifname" /proc/net/dev >/dev/null && { - ifconfig $pi_ifname 0.0.0.0 down - } + [ -n "$pi_ifname" ] && grep -q "$pi_ifname" /proc/net/dev && { + local netdev vid + + netdev=${pi_ifname%\.*} + vid=${pi_ifname#*\.} + + if [ "$vid" = "$netdev" ]; then + vid= + fi + + ip -4 address flush dev $pi_ifname + ip link set dev $netdev down + + if [ -n "$vid" ]; then + ip link delete $pi_ifname + fi + } } preinit_net_echo() { - [ -n "$pi_ifname" ] && grep "$pi_ifname" /proc/net/dev >/dev/null && { - { + [ -n "$pi_ifname" ] && grep -q "$pi_ifname" /proc/net/dev && { + { [ "$pi_preinit_net_messages" = "y" ] || { - [ "$pi_failsafe_net_message" = "true" ] && - [ "$pi_preinit_no_failsafe_netmsg" != "y" ] - } - + [ "$pi_failsafe_net_message" = "true" ] && + [ "$pi_preinit_no_failsafe_netmsg" != "y" ] + } } && netmsg $pi_broadcast "$1" - } -} - -preinit_echo() { - preinit_net_echo $1 - echo $1 -} - -pi_indicate_led() { - set_state preinit + } } pi_indicate_preinit() { - echo "- preinit -" - preinit_net_echo "Doing OpenWRT Preinit\n" - pi_indicate_led + set_state preinit } boot_hook_add preinit_main preinit_ip boot_hook_add preinit_main pi_indicate_preinit -