}
function ip2int(ip) {
- for (ret=0,n=split(ip,a,"\."),x=1;x<=n;x++) ret=or(lshift(ret,8),a[x])
+ for (ret=0,n=split(ip,a,"\."),x=1;x<=n;x++) ret=or(lshift(ret,8),a[x])
return ret
}
option ip6assign 60
config interface wan6
- option ifname @wan
+ option ifname @wan
option proto dhcpv6
config globals globals
#!/bin/sh /etc/rc.common
-# Copyright (C) 2006 OpenWrt.org
+# Copyright (C) 2006 OpenWrt.org
START=11
start() {
#!/bin/sh /etc/rc.common
-# Copyright (C) 2006 OpenWrt.org
+# Copyright (C) 2006 OpenWrt.org
STOP=99
stop() {
boot_hook_init preinit_mount_root
for pi_source_file in /lib/preinit/*; do
- . $pi_source_file
+ . $pi_source_file
done
boot_run_hook preinit_essential
pi_failsafe_net_message=false
boot_run_hook preinit_main
-
# determine first IPv4 address of given logical interface
# 1: destination variable
# 2: interface
-network_get_ipaddr() { __network_ipaddr "$1" "$2" "address4" "%%/*" 0; }
+network_get_ipaddr() { __network_ipaddr "$1" "$2" "address4" "%%/*" 0; }
# determine first IPv6 address of given logical interface
# 1: destination variable
# determine first IPv4 subnet of given logical interface
# 1: destination variable
# 2: interface
-network_get_subnet() { __network_ipaddr "$1" "$2" "address4" "%% *" 0; }
+network_get_subnet() { __network_ipaddr "$1" "$2" "address4" "%% *" 0; }
# determine first IPv6 subnet of given logical interface
# 1: destination variable
# determine all IPv4 addresses of given logical interface
# 1: destination variable
# 2: interface
-network_get_ipaddrs() { __network_ipaddr "$1" "$2" "address4" "%%/*" 1; }
+network_get_ipaddrs() { __network_ipaddr "$1" "$2" "address4" "%%/*" 1; }
# determine all IPv6 addresses of given logical interface
# 1: destination variable
# determine all IPv4 subnets of given logical interface
# 1: destination variable
# 2: interface
-network_get_subnets() { __network_ipaddr "$1" "$2" "address4" "" 1; }
+network_get_subnets() { __network_ipaddr "$1" "$2" "address4" "" 1; }
# determine all IPv6 subnets of given logical interface
# 1: destination variable
# 1: destination variable
# 2: interface
# 3: consider inactive gateway if "true" (optional)
-network_get_gateway() { __network_gateway "$1" "$2" 4 "${3:-0}"; }
+network_get_gateway() { __network_gateway "$1" "$2" 4 "${3:-0}"; }
-# determine IPv6 gateway of given logical interface
+# determine IPv6 gateway of given logical interface
# 1: destination variable
# 2: interface
# 3: consider inactive gateway if "true" (optional)
# find the logical interface which holds the current IPv4 default route
# 1: destination variable
# 2: consider inactive default routes if "true" (optional)
-network_find_wan() { __network_wan "$1" 4 "${2:-0}"; }
+network_find_wan() { __network_wan "$1" 4 "${2:-0}"; }
# find the logical interface which holds the current IPv6 default route
# 1: destination variable
# determine the layer 3 linux network device of the given logical interface
# 1: destination variable
# 2: interface
-network_get_device() { __network_device "$1" "$2" l3_device; }
+network_get_device() { __network_device "$1" "$2" l3_device; }
# determine the layer 2 linux network device of the given logical interface
# 1: destination variable
# 2: interface
-network_get_physdev() { __network_device "$1" "$2" device; }
+network_get_physdev() { __network_device "$1" "$2" device; }
__network_defer()
# Usage: service ACTION EXEC ARGS...
#
# Action:
-# -C check if EXEC is alive
-# -S start EXEC, passing it ARGS as its arguments
-# -K kill EXEC, sending it a TERM signal if not specified otherwise
+# -C check if EXEC is alive
+# -S start EXEC, passing it ARGS as its arguments
+# -K kill EXEC, sending it a TERM signal if not specified otherwise
#
# Environment variables exposed:
-# SERVICE_DAEMONIZE run EXEC in background
-# SERVICE_WRITE_PID create a pid-file and use it for matching
-# SERVICE_MATCH_EXEC use EXEC command-line for matching (default)
-# SERVICE_MATCH_NAME use EXEC process name for matching
-# SERVICE_USE_PID assume EXEC create its own pid-file and use it for matching
-# SERVICE_NAME process name to use (default to EXEC file part)
-# SERVICE_PID_FILE pid file to use (default to /var/run/$SERVICE_NAME.pid)
-# SERVICE_SIG signal to send when using -K
-# SERVICE_SIG_RELOAD default signal used when reloading
-# SERVICE_SIG_STOP default signal used when stopping
-# SERVICE_STOP_TIME time to wait for a process to stop gracefully before killing it
-# SERVICE_UID user EXEC should be run as
-# SERVICE_GID group EXEC should be run as
+# SERVICE_DAEMONIZE run EXEC in background
+# SERVICE_WRITE_PID create a pid-file and use it for matching
+# SERVICE_MATCH_EXEC use EXEC command-line for matching (default)
+# SERVICE_MATCH_NAME use EXEC process name for matching
+# SERVICE_USE_PID assume EXEC create its own pid-file and use it for matching
+# SERVICE_NAME process name to use (default to EXEC file part)
+# SERVICE_PID_FILE pid file to use (default to /var/run/$SERVICE_NAME.pid)
+# SERVICE_SIG signal to send when using -K
+# SERVICE_SIG_RELOAD default signal used when reloading
+# SERVICE_SIG_STOP default signal used when stopping
+# SERVICE_STOP_TIME time to wait for a process to stop gracefully before killing it
+# SERVICE_UID user EXEC should be run as
+# SERVICE_GID group EXEC should be run as
#
-# SERVICE_DEBUG don't do anything, but show what would be done
-# SERVICE_QUIET don't print anything
+# SERVICE_DEBUG don't do anything, but show what would be done
+# SERVICE_QUIET don't print anything
#
SERVICE_QUIET=1
while grep -qs "$name" "/proc/$pid/cmdline"; do sleep 1; done
done
}
-
-
-
# commands for emitting messages to network in failsafe mode
indicate_failsafe_led () {
- set_state failsafe
+ set_state failsafe
}
indicate_failsafe() {
- echo "- failsafe -"
- preinit_net_echo "Entering Failsafe!\n"
- indicate_failsafe_led
+ echo "- failsafe -"
+ preinit_net_echo "Entering Failsafe!\n"
+ indicate_failsafe_led
}
boot_hook_add failsafe indicate_failsafe
-
# Copyright (C) 2010 Vertical Communications
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 -q "$pi_ifname" /proc/net/dev && {
- ifconfig $pi_ifname $pi_ip netmask $pi_netmask broadcast $pi_broadcast up
- }
+ # 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 -q "$pi_ifname" /proc/net/dev && {
+ ifconfig $pi_ifname $pi_ip netmask $pi_netmask broadcast $pi_broadcast up
+ }
}
preinit_ip_deconfig() {
- [ -n "$pi_ifname" ] && grep -q "$pi_ifname" /proc/net/dev && {
- ifconfig $pi_ifname 0.0.0.0 down
- }
+ [ -n "$pi_ifname" ] && grep -q "$pi_ifname" /proc/net/dev && {
+ ifconfig $pi_ifname 0.0.0.0 down
+ }
}
preinit_net_echo() {
[ -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
+ preinit_net_echo $1
+ echo $1
}
pi_indicate_led() {
- set_state preinit
+ set_state preinit
}
pi_indicate_preinit() {
- preinit_net_echo "Doing OpenWRT Preinit\n"
- pi_indicate_led
+ preinit_net_echo "Doing OpenWRT Preinit\n"
+ pi_indicate_led
}
boot_hook_add preinit_main preinit_ip
boot_hook_add preinit_main pi_indicate_preinit
-
# Copyright (C) 2010 Vertical Communications
fs_wait_for_key () {
- local timeout=$3
- local timer
- local do_keypress
- local keypress_true="$(mktemp)"
- local keypress_wait="$(mktemp)"
- local keypress_sec="$(mktemp)"
- if [ -z "$keypress_wait" ]; then
- keypress_wait=/tmp/.keypress_wait
- touch $keypress_wait
- fi
- if [ -z "$keypress_true" ]; then
- keypress_true=/tmp/.keypress_true
- touch $keypress_true
- fi
- if [ -z "$keypress_sec" ]; then
- keypress_sec=/tmp/.keypress_sec
- touch $keypress_sec
- fi
+ local timeout=$3
+ local timer
+ local do_keypress
+ local keypress_true="$(mktemp)"
+ local keypress_wait="$(mktemp)"
+ local keypress_sec="$(mktemp)"
+ if [ -z "$keypress_wait" ]; then
+ keypress_wait=/tmp/.keypress_wait
+ touch $keypress_wait
+ fi
+ if [ -z "$keypress_true" ]; then
+ keypress_true=/tmp/.keypress_true
+ touch $keypress_true
+ fi
+ if [ -z "$keypress_sec" ]; then
+ keypress_sec=/tmp/.keypress_sec
+ touch $keypress_sec
+ fi
- trap "echo 'true' >$keypress_true; lock -u $keypress_wait ; rm -f $keypress_wait" INT
- trap "echo 'true' >$keypress_true; lock -u $keypress_wait ; rm -f $keypress_wait" USR1
+ trap "echo 'true' >$keypress_true; lock -u $keypress_wait ; rm -f $keypress_wait" INT
+ trap "echo 'true' >$keypress_true; lock -u $keypress_wait ; rm -f $keypress_wait" USR1
- [ -n "$timeout" ] || timeout=1
- [ $timeout -ge 1 ] || timeout=1
- timer=$timeout
- lock $keypress_wait
- {
- while [ $timer -gt 0 ]; do
- echo "$timer" >$keypress_sec
- timer=$(($timer - 1))
- sleep 1
- done
- lock -u $keypress_wait
- rm -f $keypress_wait
- } &
-
- echo "Press the [$1] key and hit [enter] $2"
- echo "Press the [1], [2], [3] or [4] key and hit [enter] to select the debug level"
- # if we're on the console we wait for input
- {
- while [ -r $keypress_wait ]; do
- timer="$(cat $keypress_sec)"
-
- [ -n "$timer" ] || timer=1
- timer="${timer%%\ *}"
- [ $timer -ge 1 ] || timer=1
- do_keypress=""
- {
- read -t "$timer" do_keypress
- case "$do_keypress" in
- $1)
- echo "true" >$keypress_true
- ;;
- 1 | 2 | 3 | 4)
- echo "$do_keypress" >/tmp/debug_level
- ;;
- *)
- continue;
- ;;
- esac
+ [ -n "$timeout" ] || timeout=1
+ [ $timeout -ge 1 ] || timeout=1
+ timer=$timeout
+ lock $keypress_wait
+ {
+ while [ $timer -gt 0 ]; do
+ echo "$timer" >$keypress_sec
+ timer=$(($timer - 1))
+ sleep 1
+ done
lock -u $keypress_wait
rm -f $keypress_wait
- }
- done
- }
- lock -w $keypress_wait
+ } &
+
+ echo "Press the [$1] key and hit [enter] $2"
+ echo "Press the [1], [2], [3] or [4] key and hit [enter] to select the debug level"
+ # if we're on the console we wait for input
+ {
+ while [ -r $keypress_wait ]; do
+ timer="$(cat $keypress_sec)"
+
+ [ -n "$timer" ] || timer=1
+ timer="${timer%%\ *}"
+ [ $timer -ge 1 ] || timer=1
+ do_keypress=""
+ {
+ read -t "$timer" do_keypress
+ case "$do_keypress" in
+ $1)
+ echo "true" >$keypress_true
+ ;;
+ 1 | 2 | 3 | 4)
+ echo "$do_keypress" >/tmp/debug_level
+ ;;
+ *)
+ continue;
+ ;;
+ esac
+ lock -u $keypress_wait
+ rm -f $keypress_wait
+ }
+ done
+ }
+ lock -w $keypress_wait
- keypressed=1
- [ "$(cat $keypress_true)" = "true" ] && keypressed=0
-
- rm -f $keypress_true
- rm -f $keypress_wait
- rm -f $keypress_sec
-
- return $keypressed
+ keypressed=1
+ [ "$(cat $keypress_true)" = "true" ] && keypressed=0
+
+ rm -f $keypress_true
+ rm -f $keypress_wait
+ rm -f $keypress_sec
+
+ return $keypressed
}
failsafe_wait() {
- FAILSAFE=
- grep -q 'failsafe=' /proc/cmdline && FAILSAFE=true && export FAILSAFE
- if [ "$FAILSAFE" != "true" ]; then
- pi_failsafe_net_message=true
- preinit_net_echo "Please press button now to enter failsafe"
- pi_failsafe_net_message=false
- fs_wait_for_key f 'to enter failsafe mode' $fs_failsafe_wait_timeout && FAILSAFE=true
- [ -f "/tmp/failsafe_button" ] && FAILSAFE=true && echo "- failsafe button "`cat /tmp/failsafe_button`" was pressed -"
- [ "$FAILSAFE" = "true" ] && export FAILSAFE && touch /tmp/failsafe
- fi
+ FAILSAFE=
+ grep -q 'failsafe=' /proc/cmdline && FAILSAFE=true && export FAILSAFE
+ if [ "$FAILSAFE" != "true" ]; then
+ pi_failsafe_net_message=true
+ preinit_net_echo "Please press button now to enter failsafe"
+ pi_failsafe_net_message=false
+ fs_wait_for_key f 'to enter failsafe mode' $fs_failsafe_wait_timeout && FAILSAFE=true
+ [ -f "/tmp/failsafe_button" ] && FAILSAFE=true && echo "- failsafe button "`cat /tmp/failsafe_button`" was pressed -"
+ [ "$FAILSAFE" = "true" ] && export FAILSAFE && touch /tmp/failsafe
+ fi
}
boot_hook_add preinit_main failsafe_wait
-
}
boot_hook_add preinit_main run_failsafe_hook
-
# Copyright (C) 2010 Vertical Communications
indicate_regular_preinit() {
- preinit_net_echo "Continuing with Regular Preinit\n"
- pi_indicate_led
+ preinit_net_echo "Continuing with Regular Preinit\n"
+ pi_indicate_led
}
boot_hook_add preinit_main indicate_regular_preinit
-
# Copyright (C) 2010 Vertical Communications
initramfs_test() {
- if [ -n "$INITRAMFS" ]; then
- boot_run_hook initramfs
- preinit_ip_deconfig
- break
- fi
+ if [ -n "$INITRAMFS" ]; then
+ boot_run_hook initramfs
+ preinit_ip_deconfig
+ break
+ fi
}
boot_hook_add preinit_main initramfs_test
-
# Copyright (C) 2010 Vertical Communications
failsafe_netlogin () {
- telnetd -l /bin/login.sh <> /dev/null 2>&1
+ telnetd -l /bin/login.sh <> /dev/null 2>&1
}
failsafe_shell() {
- lock /tmp/.failsafe
- ash --login
- echo "Please reboot system when done with failsafe network logins"
+ lock /tmp/.failsafe
+ ash --login
+ echo "Please reboot system when done with failsafe network logins"
}
-
boot_hook_add failsafe failsafe_netlogin
boot_hook_add failsafe failsafe_shell
-
# Copyright (C) 2010 Vertical Communications
run_init() {
- preinit_ip_deconfig
+ preinit_ip_deconfig
}
boot_hook_add preinit_main run_init
-
mkdir -p $1$2 $1/proc $1/sys $1/dev $1/tmp $1/overlay && \
mount -o noatime,move /proc $1/proc && \
pivot_root $1 $1$2 || {
- umount -l $1 $1
+ umount -l $1 $1
return 1
}
}
run_ramfs() { # <command> [...]
- install_bin /bin/busybox /bin/ash /bin/sh /bin/mount /bin/umount \
- /sbin/pivot_root /usr/bin/wget /sbin/reboot /bin/sync /bin/dd \
- /bin/grep /bin/cp /bin/mv /bin/tar /usr/bin/md5sum "/usr/bin/[" \
- /bin/vi /bin/ls /bin/cat /usr/bin/awk /usr/bin/hexdump \
+ install_bin /bin/busybox /bin/ash /bin/sh /bin/mount /bin/umount \
+ /sbin/pivot_root /usr/bin/wget /sbin/reboot /bin/sync /bin/dd \
+ /bin/grep /bin/cp /bin/mv /bin/tar /usr/bin/md5sum "/usr/bin/[" \
+ /bin/vi /bin/ls /bin/cat /usr/bin/awk /usr/bin/hexdump \
/bin/sleep /bin/zcat /usr/bin/bzcat /usr/bin/printf /usr/bin/wc
install_bin /sbin/mtd
local cmdline
read cmdline < /proc/$pid/cmdline
- # Skip kernel threads
+ # Skip kernel threads
[ -n "$cmdline" ] || continue
case "$name" in
export TEST=0
# parse options
-while [ -n "$1" ]; do
+while [ -n "$1" ]; do
case "$1" in
-i) export INTERACTIVE=1;;
-d) export DELAY="$2"; shift;;
[ "${#key}" -eq 10 -a $hex -eq 1 ] || \
[ "${#key}" -eq 26 -a $hex -eq 1 ] || {
[ "${key:0:2}" = "s:" ] && key="${key#s:}"
- key="$(echo -n "$key" | hexdump -ve '1/1 "%02x" ""')"
+ key="$(echo -n "$key" | hexdump -ve '1/1 "%02x" ""')"
}
echo "$key"
}
;;
*)
hwmode=
- if [ "${channel:-0}" -gt 0 ]; then
+ if [ "${channel:-0}" -gt 0 ]; then
if [ "${channel:-0}" -gt 14 ]; then
hwmode=a
else
case "$TYPE" in
wifi-iface)
config_get device "$CONFIG_SECTION" device
- config_get vifs "$device" vifs
+ config_get vifs "$device" vifs
append vifs "$CONFIG_SECTION"
config_set "$device" vifs "$vifs"
;;