# HG changeset patch # User Pascal Bellard # Date 1289056123 -3600 # Node ID 1ff68145904f79c285e4db9fe65bd3b39808adcc # Parent da9081c3c91578031a5c378dd8aaf5f4082cd423 Add udhcpc6-fake diff -r da9081c3c915 -r 1ff68145904f udhcpc6-fake/receipt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udhcpc6-fake/receipt Sat Nov 06 16:08:43 2010 +0100 @@ -0,0 +1,16 @@ +# SliTaz package receipt. + +PACKAGE="udhcpc6-fake" +VERSION="1.0" +CATEGORY="network" +SHORT_DESC="Temporary? udhcpc fake for ipv6 support." +MAINTAINER="pascal.bellard@slitaz.org" +WEB_SITE="http://www.isc.org/products/DHCP/" +DEPENDS="dhcp6-client" + +# Rules to gen a SliTaz package suitable for Tazpkg. +genpkg_rules() +{ + cp -a stuff/* $fs +} + diff -r da9081c3c915 -r 1ff68145904f udhcpc6-fake/stuff/etc/dhclient-script --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udhcpc6-fake/stuff/etc/dhclient-script Sat Nov 06 16:08:43 2010 +0100 @@ -0,0 +1,266 @@ +#!/bin/ash + +# dhclient-script for Linux. Dan Halbert, March, 1997. +# Updated for Linux 2.[12] by Brian J. Murrell, January 1999. +# Modified for Debian. Matt Zimmerman and Eloy Paris, December 2003 +# Modified to remove useless tests for antiquated kernel versions that +# this doesn't even work with anyway, and introduces a dependency on /usr +# being mounted, which causes cosmetic errors on hosts that NFS mount /usr +# Andrew Pollock, February 2005 +# Modified to work on point-to-point links. Andrew Pollock, June 2005 +# Modified to support passing the parameters called with to the hooks. Andrew Pollock, November 2005 + +# The alias handling in here probably still sucks. -mdz + +make_resolv_conf() { + if [ -n "$new_domain_name" -o -n "$new_domain_name_servers" ]; then + # Find out whether we are going to mount / rw + exec 9>&0 &9 9>&- + + # Wait for /etc/resolv.conf to become writable + if [ "$rootmode" = "rw" ]; then + while [ ! -w /etc ]; do + sleep 1 + done + fi + + local new_resolv_conf=/etc/resolv.conf.dhclient-new + rm -f $new_resolv_conf + if [ -n "$new_domain_name" ]; then + echo search $new_domain_name >>$new_resolv_conf + else # keep 'old' search/domain scope + egrep -i '^ *[:space:]*(search|domain)' /etc/resolv.conf >> $new_resolv_conf + fi + if [ -n "$new_domain_name_servers" ]; then + for nameserver in $new_domain_name_servers; do + echo nameserver $nameserver >>$new_resolv_conf + done + else # keep 'old' nameservers + sed -n /^\w*[Nn][Aa][Mm][Ee][Ss][Ee][Rr][Vv][Ee][Rr]/p /etc/resolv.conf >>$new_resolv_conf + fi + chown root.root $new_resolv_conf + chmod 644 $new_resolv_conf + mv -f $new_resolv_conf /etc/resolv.conf + fi +} + +run_hook() { + local script="$1" + local exit_status + shift # discard the first argument, then the rest are the script's + + if [ -f $script ]; then + . $script "$@" + fi + + + if [ -n "$exit_status" ] && [ "$exit_status" -ne 0 ]; then + logger -p daemon.err "$script returned non-zero exit status $exit_status" + save_exit_status=$exit_status + fi + + return $exit_status +} + +run_hookdir() { + local dir="$1" + local exit_status + shift # See run_hook + + if [ -d "$dir" ]; then + for script in $(run-parts --list $dir); do + run_hook $script "$@" || true + exit_status=$? + done + fi + + return $exit_status +} + +# Must be used on exit. Invokes the local dhcp client exit hooks, if any. +exit_with_hooks() { + exit_status=$1 + + # Source the documented exit-hook script, if it exists + if ! run_hook /etc/dhcp3/dhclient-exit-hooks "$@"; then + exit_status=$? + fi + + # Now run scripts in the Debian-specific directory. + if ! run_hookdir /etc/dhcp3/dhclient-exit-hooks.d "$@"; then + exit_status=$? + fi + + exit $exit_status +} + +set_hostname() { + local current_hostname=$(hostname) + if [ -z "$current_hostname" -o "$current_hostname" = "(none)" ]; then + hostname "$new_host_name" + fi +} + +if [ -n "$new_broadcast_address" ]; then + new_broadcast_arg="broadcast $new_broadcast_address" +fi +if [ -n "$old_broadcast_address" ]; then + old_broadcast_arg="broadcast $old_broadcast_address" +fi +if [ -n "$new_subnet_mask" ]; then + new_subnet_arg="netmask $new_subnet_mask" +fi +if [ -n "$old_subnet_mask" ]; then + old_subnet_arg="netmask $old_subnet_mask" +fi +if [ -n "$alias_subnet_mask" ]; then + alias_subnet_arg="netmask $alias_subnet_mask" +fi +if [ -n "$new_interface_mtu" ] && [ $new_interface_mtu -ge 575 ]; then + mtu_arg="mtu $new_interface_mtu" +fi +if [ -n "$IF_METRIC" ]; then + metric_arg="metric $IF_METRIC" # interfaces(5), "metric" option +fi + + +# The action starts here + +# Invoke the local dhcp client enter hooks, if they exist. +run_hook /etc/dhcp3/dhclient-enter-hooks +run_hookdir /etc/dhcp3/dhclient-enter-hooks.d + +# Execute the operation +case "$reason" in + MEDIUM|ARPCHECK|ARPSEND) + # Do nothing + ;; + PREINIT) + # The DHCP client is requesting that an interface be + # configured as required in order to send packets prior to + # receiving an actual address. - dhclient-script(8) + + if [ -n "$alias_ip_address" ]; then + # Bring down alias interface. Its routes will disappear too. + ifconfig $interface:0- inet 0 + fi + ifconfig $interface inet 0 up + + # We need to give the kernel some time to get the interface up. + sleep 1 + ;; + BOUND|RENEW|REBIND|REBOOT) + + set_hostname + + if [ -n "$old_ip_address" -a -n "$alias_ip_address" -a \ + "$alias_ip_address" != "$old_ip_address" ]; then + # Possible new alias. Remove old alias. + ifconfig $interface:0- inet 0 + fi + + if [ -n "$old_ip_address" -a \ + "$old_ip_address" != "$new_ip_address" ]; then + # IP address changed. Bringing down the interface will delete all routes, + # and clear the ARP cache. + ifconfig $interface inet 0 + + fi + + if [ -z "$old_ip_address" -o "$old_ip_address" != "$new_ip_address" -o \ + "$reason" = "BOUND" -o "$reason" = "REBOOT" ]; then + + ifconfig $interface inet $new_ip_address $new_subnet_arg \ + $new_broadcast_arg $mtu_arg + + # point to point + if [ "$new_subnet_mask" == "255.255.255.255" ]; then + for router in $new_routers; do + route add -host $router dev $interface + done + fi + + for router in $new_routers; do + route add default dev $interface gw $router $metric_arg + done + fi + + if [ "$new_ip_address" != "$alias_ip_address" -a -n "$alias_ip_address" ]; + then + ifconfig $interface:0- inet 0 + ifconfig $interface:0 inet $alias_ip_address $alias_subnet_arg + route add -host $alias_ip_address $interface:0 + fi + + make_resolv_conf + + ;; + + EXPIRE|FAIL|RELEASE|STOP) + if [ -n "$alias_ip_address" ]; then + # Turn off alias interface. + ifconfig $interface:0- inet 0 + fi + + if [ -n "$old_ip_address" ]; then + # Shut down interface, which will delete routes and clear arp cache. + ifconfig $interface inet 0 + fi + + if [ -n "$alias_ip_address" ]; then + ifconfig $interface:0 inet $alias_ip_address $alias_subnet_arg + route add -host $alias_ip_address $interface:0 + fi + + ;; + + TIMEOUT) + if [ -n "$alias_ip_address" ]; then + ifconfig $interface:0- inet 0 + fi + + ifconfig $interface inet $new_ip_address $new_subnet_arg \ + $new_broadcast_arg $mtu_arg + + set -- $new_routers + first_router="$1" + + if ping -q -c 1 $first_router; then + if [ "$new_ip_address" != "$alias_ip_address" -a \ + -n "$alias_ip_address" ]; then + ifconfig $interface:0 inet $alias_ip_address $alias_subnet_arg + route add -host $alias_ip_address dev $interface:0 + fi + + # point to point + if [ "$new_subnet_mask" == "255.255.255.255" ]; then + for router in $new_routers; do + route add -host $router dev $interface + done + fi + + for router in $new_routers; do + route add default dev $interface gw $router $metric_arg + done + + make_resolv_conf + else + # Changed from 'ifconfig $interface inet 0 down' - see Debian bug #144666 + ifconfig $interface inet 0 + exit_with_hooks 2 "$@" + fi + + ;; +esac + +exit_with_hooks 0 diff -r da9081c3c915 -r 1ff68145904f udhcpc6-fake/stuff/etc/dhclient.conf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udhcpc6-fake/stuff/etc/dhclient.conf Sat Nov 06 16:08:43 2010 +0100 @@ -0,0 +1,1 @@ +request subnet-mask, broadcast-address, time-offset, routers, static-routes, domain-name, domain-name-servers, host-name, ntp-servers; diff -r da9081c3c915 -r 1ff68145904f udhcpc6-fake/stuff/sbin/udhcpc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udhcpc6-fake/stuff/sbin/udhcpc Sat Nov 06 16:08:43 2010 +0100 @@ -0,0 +1,14 @@ +#/bin/sh + +INTERFACE=eth0 +while [ -n "$1" ]; do + [ "$1" == "-i" ] && INTERFACE=$2 + shift +done + +exec /usr/sbin/dhclient -e IF_METRIC=100 \ + -pf /var/run/dhclient.$INTERFACE.pid \ + -lf /var/lib/dhcp3/dhclient.$INTERFACE.leases \ + -cf /etc/dhclient.conf \ + -sf /etc/dhclient-script \ + $INTERFACE