#!/bin/sh # udhcpc script edited by Tim Riker RESOLV_CONF="/etc/resolv.conf" [ -n "$1" ] || { echo "Error: should be called from udhcpc"; exit 1; } NETMASK="" if command -v ip >/dev/null; then [ -n "$subnet" ] && NETMASK="/$subnet" else [ -n "$subnet" ] && NETMASK="netmask $subnet" fi BROADCAST="broadcast +" [ -n "$broadcast" ] && BROADCAST="broadcast $broadcast" case "$1" in deconfig) echo "Setting IP address 0.0.0.0 on $interface" if command -v ip >/dev/null; then ip addr flush dev $interface else ifconfig $interface 0.0.0.0 fi ;; renew|bound) echo "Setting IP address $ip on $interface" if command -v ip >/dev/null; then ip addr add $ip$NETMASK $BROADCAST dev $interface else ifconfig $interface $ip $NETMASK $BROADCAST fi if [ -n "$router" ] ; then echo "Deleting routers" while route del default gw 0.0.0.0 dev $interface ; do : done metric=0 for i in $router ; do echo "Adding router $i" if [ "$subnet" = "255.255.255.255" ]; then # special case for /32 subnets: # /32 instructs kernel to always use routing for all outgoing packets # (they can never be sent to local subnet - there is no local subnet for /32). # Used in datacenters, avoids the need for private ip-addresses between two hops. ip route add $i dev $interface fi route add default gw $i dev $interface metric $((metric++)) done fi echo "Recreating $RESOLV_CONF" # If the file is a symlink somewhere (like /etc/resolv.conf # pointing to /run/resolv.conf), make sure things work. if test -L "$RESOLV_CONF"; then # If it's a dangling symlink, try to create the target. test -e "$RESOLV_CONF" || touch "$RESOLV_CONF" fi realconf=$(readlink -f "$RESOLV_CONF" 2>/dev/null || echo "$RESOLV_CONF") tmpfile="$realconf-$$" > "$tmpfile" [ -n "$domain" ] && echo "search $domain" >> "$tmpfile" for i in $dns ; do echo " Adding DNS server $i" echo "nameserver $i" >> "$tmpfile" done mv "$tmpfile" "$realconf" ;; esac exit 0