diff --git a/files/dhclient-script b/files/dhclient-script index d5793c2..4212220 100755 --- a/files/dhclient-script +++ b/files/dhclient-script @@ -18,6 +18,7 @@ ip=/sbin/ip make_resolv_conf() { local new_resolv_conf="/etc/resolv.conf.dhclient-new-$interface" local old_resolv_conf="/etc/resolv.conf.dhclient-old-$interface" + local resolv_conf="/etc/resolv.conf" mv -f $new_resolv_conf $old_resolv_conf if [ -n "$new_domain_name" -o -n "$new_domain_name_servers" ]; then if [ -n "$new_domain_name" ]; then @@ -29,29 +30,29 @@ make_resolv_conf() { done fi elif [ "x${new_dhcp6_name_servers}" != x ] ; then - if [ "x${new_dhcp6_domain_search}" != x ] ; then - echo search ${new_dhcp6_domain_search} >> $new_resolv_conf - fi - for nameserver in ${new_dhcp6_name_servers} ; do - echo nameserver ${nameserver} >> $new_resolv_conf - done + if [ "x${new_dhcp6_domain_search}" != x ] ; then + echo search ${new_dhcp6_domain_search} >> $new_resolv_conf + fi + for nameserver in ${new_dhcp6_name_servers} ; do + echo nameserver ${nameserver} >> $new_resolv_conf + done else echo " " > $new_resolv_conf fi - /opt/vyatta/sbin/vyatta_update_resolv.pl --dhclient-script 1 if ! diff -q $old_resolv_conf $new_resolv_conf >&/dev/null; then if [ -d /opt/vyatta/config/active/service/dns/forwarding ]; then /opt/vyatta/sbin/vyatta-dns-forwarding.pl --update-dnsforwarding --outside-cli >&/dev/null fi fi rm -f $old_resolv_conf + mv -f $new_resolv_conf $resolv_conf } run_hook() { local script="$1" local exit_status - shift # discard the first argument, then the rest are the script's + shift # discard the first argument, then the rest are the script's if [ -f $script ]; then . $script "$@" @@ -69,7 +70,7 @@ run_hook() { run_hookdir() { local dir="$1" local exit_status - shift # See run_hook + shift # See run_hook if [ -d "$dir" ]; then for script in $(run-parts --list $dir); do @@ -102,7 +103,7 @@ get_prefix() { # use existing perl module to compute prefix # one line don't bother with script perl -MNetAddr::IP \ - -e '$ip = new NetAddr::IP(@ARGV); print $ip->masklen(), "\n"' $* + -e '$ip = new NetAddr::IP(@ARGV); print $ip->masklen(), "\n"' $* } set_hostname() { @@ -114,16 +115,16 @@ set_hostname() { set_address() { if [ -n "$old_ip_address" ] && - [ "$old_ip_address" != "$new_ip_address" -o "$old_prefix" != "$new_prefix" ] ; then - # Clear out route cache and ARP tables and all addresses and routes - ip -family inet addr flush dev $interface + [ "$old_ip_address" != "$new_ip_address" -o "$old_prefix" != "$new_prefix" ] ; then + # Clear out route cache and ARP tables and all addresses and routes + ip -family inet addr flush dev $interface fi if [ "$reason" = "BOUND" ] || [ "$reason" = "REBOOT" ] || [ -z "$old_ip_address" -o "$old_ip_address" != "$new_ip_address" ] || [ -z "$old_prefix" -o "$old_prefix" != "$new_prefix" ] ; then ip -family inet addr add $new_ip_address/$new_prefix \ - broadcast $new_broadcast_address dev $interface + broadcast $new_broadcast_address dev $interface fi if [ -n "$new_interface_mtu" ] && @@ -137,33 +138,33 @@ ZEBRA_ROUTE_DHCP=210 update_routers() { if [ -n "$old_routers" ]; then - # No change just renewing - if [ "$reason" = "RENEW" -a "$old_routers" = "$new_routers" ]; then - return 0 - fi - - for router in $old_routers; do - if [ "$old_subnet_mask" == "255.255.255.255" ]; then - vtysh -c "conf t" -c "no ip route $router $interface $ZEBRA_ROUTE_DHCP" >/dev/null 2>&1 - fi - vtysh -c "conf t" -c "no ip route 0.0.0.0/0 $router $ZEBRA_ROUTE_DHCP" >/dev/null 2>&1 - done + # No change just renewing + if [ "$reason" = "RENEW" -a "$old_routers" = "$new_routers" ]; then + return 0 + fi + + for router in $old_routers; do + if [ "$old_subnet_mask" == "255.255.255.255" ]; then + vtysh -c "conf t" -c "no ip route $router $interface $ZEBRA_ROUTE_DHCP" >/dev/null 2>&1 + fi + vtysh -c "conf t" -c "no ip route 0.0.0.0/0 $router $ZEBRA_ROUTE_DHCP" >/dev/null 2>&1 + done fi for router in $new_routers; do - # point to point - if [ "$new_subnet_mask" == "255.255.255.255" ]; then + # point to point + if [ "$new_subnet_mask" == "255.255.255.255" ]; then if vtysh -c exit; then - vtysh -c "conf t" -c "ip route $router $interface $ZEBRA_ROUTE_DHCP" >/dev/null 2>&1 + vtysh -c "conf t" -c "ip route $router $interface $ZEBRA_ROUTE_DHCP" >/dev/null 2>&1 else ip -4 route add ${router} dev $interface >/dev/null 2>&1 fi - fi + fi - # Note: this should really be $router and $interface but zebra does - # not have way to specify this (yet). + # Note: this should really be $router and $interface but zebra does + # not have way to specify this (yet). if vtysh -c exit; then - vtysh -c "conf t" -c "ip route 0.0.0.0/0 $router $ZEBRA_ROUTE_DHCP" >/dev/null 2>&1 + vtysh -c "conf t" -c "ip route 0.0.0.0/0 $router $ZEBRA_ROUTE_DHCP" >/dev/null 2>&1 else ip -4 route add default via ${router} dev $interface >/dev/null 2>&1 fi @@ -176,23 +177,6 @@ fi if [ -n "$old_subnet_mask" ]; then old_prefix=$(get_prefix $old_ip_address $old_subnet_mask) fi -if [ -n "$new_interface_mtu" ]; then - # Vyatta configuration overrides response from server to allow user - # to work around broken ISP's - mtu_path=$(/opt/vyatta/sbin/vyatta-interfaces.pl --dev=$interface --path) - if [ -r $mtu_path ]; then - read new_interface_mtu < $mtu_path - fi - - # The 576 MTU is only used for X.25 and dialup connections - # where the admin wants low latency. Such a low MTU can cause - # problems with UDP traffic, among other things. As such, - # disallow MTUs from 576 and below by default, so that broken - # MTUs are ignored, but higher stuff is allowed (1492, 1500, etc). - if [ $new_interface_mtu -le 576 ]; then - new_interface_mtu= - fi -fi # The action starts here @@ -231,10 +215,10 @@ case "$reason" in BOUND|RENEW|REBIND|REBOOT) set_hostname - make_resolv_conf - set_address - update_routers - + make_resolv_conf + set_address + update_routers + # If FRR is not running make sure dhclient daemon does not keep running. if ! vtysh -c exit; then killall dhclient @@ -244,36 +228,36 @@ case "$reason" in ;; EXPIRE|FAIL|RELEASE|STOP) - new_routers=""; update_routers + new_routers=""; update_routers if [ -n "$old_ip_address" ]; then ip -family inet addr flush dev ${interface} fi - if [ "$reason" = "STOP" ]; then + if [ "$reason" = "STOP" ]; then ip link set ${interface} down - fi + fi - make_resolv_conf + make_resolv_conf ;; TIMEOUT) if [ -n "$new_routers" ]; then ip -family inet addr add $new_ip_address/$new_prefix \ - broadcast $new_broadcast_address dev $interface + broadcast $new_broadcast_address dev $interface set -- $new_routers first_router="$1" if ping -q -c 1 -I $interface $first_router ; then - make_resolv_conf - set_address - update_routers + make_resolv_conf + set_address + update_routers - exit_with_hooks 0 - fi + exit_with_hooks 0 + fi ip -family inet addr flush dev $interface - # Note: this exits with interface still up - # see Debian bug #144666 + # Note: this exits with interface still up + # see Debian bug #144666 fi exit_with_hooks 2 "$@" ;; @@ -283,59 +267,59 @@ case "$reason" in ${ip} link set ${interface} up # Remove any stale addresses from aborted clients. - ${ip} -f inet6 addr flush dev ${interface} scope global permanent + ${ip} -f inet6 addr flush dev ${interface} scope global permanent - exit_with_hooks 0 - ;; + exit_with_hooks 0 + ;; BOUND6) if [ x${new_ip6_address} = x ] || [ x${new_ip6_prefixlen} = x ] ; then - exit_with_hooks 2; - fi + exit_with_hooks 2; + fi - ${ip} -f inet6 addr add ${new_ip6_address}/${new_ip6_prefixlen} \ + ${ip} -f inet6 addr add ${new_ip6_address}/${new_ip6_prefixlen} \ dev ${interface} scope global # Check for nameserver options. - make_resolv_conf + make_resolv_conf - exit_with_hooks 0 - ;; + exit_with_hooks 0 + ;; RENEW6|REBIND6) - # Make sure nothing has moved around on us. + # Make sure nothing has moved around on us. - # Nameservers/domains/etc. - if [ "x${new_dhcp6_name_servers}" != "x${old_dhcp6_name_servers}" ] || - [ "x${new_dhcp6_domain_search}" != "x${old_dhcp6_domain_search}" ] ; then - make_resolv_conf - fi + # Nameservers/domains/etc. + if [ "x${new_dhcp6_name_servers}" != "x${old_dhcp6_name_servers}" ] || + [ "x${new_dhcp6_domain_search}" != "x${old_dhcp6_domain_search}" ] ; then + make_resolv_conf + fi - exit_with_hooks 0 - ;; + exit_with_hooks 0 + ;; DEPREF6) if [ x${new_ip6_prefixlen} = x ] ; then - exit_with_hooks 2; - fi + exit_with_hooks 2; + fi + + ${ip} -f inet6 addr change ${new_ip6_address}/${new_ip6_prefixlen} \ + dev ${interface} scope global preferred_lft 0 - ${ip} -f inet6 addr change ${new_ip6_address}/${new_ip6_prefixlen} \ - dev ${interface} scope global preferred_lft 0 + exit_with_hooks 0 + ;; - exit_with_hooks 0 - ;; - EXPIRE6|RELEASE6|STOP6) if [ x${old_ip6_address} = x ] || [ x${old_ip6_prefixlen} = x ] ; then - exit_with_hooks 2; - fi + exit_with_hooks 2; + fi - ${ip} -f inet6 addr del ${old_ip6_address}/${old_ip6_prefixlen} \ + ${ip} -f inet6 addr del ${old_ip6_address}/${old_ip6_prefixlen} \ dev ${interface} - make_resolv_conf - exit_with_hooks 0 - ;; + make_resolv_conf + exit_with_hooks 0 + ;; esac