diff options
Diffstat (limited to 'main/busybox-initscripts/default.script')
-rw-r--r-- | main/busybox-initscripts/default.script | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/main/busybox-initscripts/default.script b/main/busybox-initscripts/default.script new file mode 100644 index 0000000000..c6cfbc5be1 --- /dev/null +++ b/main/busybox-initscripts/default.script @@ -0,0 +1,108 @@ +#!/bin/sh + +# script for udhcpc +# Copyright (c) 2008 Natanael Copa <natanael.copa@gmail.com> + +UDHCPC="/etc/udhcpc" +UDHCPC_CONF="$UDHCPC/udhcpc.conf" + +RESOLV_CONF="/etc/resolv.conf" +[ -f $UDHCPC_CONF ] && . $UDHCPC_CONF + +export broadcast +export dns +export domain +export interface +export ip +export mask +export metric +export router +export subnet + +export PATH=/usr/bin:/bin:/usr/sbin:/sbin + +run_scripts() { + local dir=$1 + if [ -d $dir ]; then + for i in $dir/*; do + [ -f $i ] && $i + done + fi +} + +deconfig() { + ip addr flush dev $interface +} + +routes() { + [ -z "$router" ] && return + local gw metric + while ip route del default via dev $interface 2>/dev/null; do + : + done + metric=0 + for gw in $router; do + route add default gw $gw dev $interface metric $metric + metric=$(( $metric + 1 )) + done +} + +resolvconf() { + local i + if [ "$RESOLV_CONF" = "no" ] || [ "$RESOLV_CONF" = "NO" ] \ + || [ -z "$RESOLV_CONF" ]; then + return + fi + echo -n > "$RESOLV_CONF" + [ -n "$domain" ] && echo "search $domain" >> "$RESOLV_CONF" + for i in $dns; do + echo "nameserver $i" >> "$RESOLV_CONF" + done +} + +bound() { + ip addr add $ip/$mask dev $interface + ip link set dev $interface up + routes + resolvconf +} + +renew() { + if ! ip addr show dev $interface | grep $ip/$mask; then + ip addr flush dev $interface + ip addr add $ip/$mask dev $interface + fi + + local i + for i in $router; do + if ! ip route show | grep ^default | grep $i; then + routes + break + fi + done + + if ! grep "^search $domain"; then + resolvconf + return + fi + for i in $dns; do + if ! grep "^nameserver $i"; then + resolvconf + return + fi + done +} + +case "$1" in + deconfig|renew|bound) + run_scripts $UDHCPC/pre-$1 + $1 + run_scripts $UDHCPC/post-$1 + ;; + *) + echo "Error: this script should be called from udhcpc" >&2 + exit 1 + ;; +esac +exit 0 + |