#!/bin/sh # script for udhcpc # Copyright (c) 2008 Natanael Copa 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