Package: isc-dhcp-client-udeb Version: 4.1.1-P1-17 Severity: wishlist Tags: patch User: ubuntu-de...@lists.ubuntu.com Usertags: origin-ubuntu ubuntu-patch oneiric
It would be helpful if the Linux udeb variant of dhclient-script supported IPv6, since we're preparing to land IPv6 support in d-i quite soon. Could you please review this patch for that, which mostly consists of copying stuff over from dhclient-script.linux and stripping it down in much the same way that the udeb variant was already stripped down? * Add DHCPv6 support to dhclient-script.linux.udeb. diff --git a/debian/dhclient-script.linux.udeb b/debian/dhclient-script.linux.udeb index 505b035..983176e 100644 --- a/debian/dhclient-script.linux.udeb +++ b/debian/dhclient-script.linux.udeb @@ -14,6 +14,7 @@ set -e make_resolv_conf() { local new_resolv_conf + # DHCPv4 if [ -n "$new_domain_name" ] || [ -n "$new_domain_name_servers" ]; then new_resolv_conf=/etc/resolv.conf.dhclient-new rm -f $new_resolv_conf @@ -27,6 +28,20 @@ make_resolv_conf() { done mv $new_resolv_conf /etc/resolv.conf + # DHCPv6 + elif [ -n "$new_dhcp6_domain_search" ] || [ -n "$new_dhcp6_name_servers" ]; then + new_resolv_conf=/etc/resolv.conf.dhclient-new + rm -f $new_resolv_conf + + if [ -n "$new_dhcp6_domain_search" ]; 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 + + mv $new_resolv_conf /etc/resolv.conf fi } @@ -56,11 +71,14 @@ fi # Execute the operation case "$reason" in + + ### DHCPv4 Handlers + MEDIUM|ARPCHECK|ARPSEND) # Do nothing ;; PREINIT) - ip link set $interface up + ip link set dev $interface up # We need to give the kernel some time to get the interface up. sleep 1 @@ -72,26 +90,20 @@ case "$reason" in if [ -n "$old_ip_address" ] && [ "$old_ip_address" != "$new_ip_address" ]; then - # IP address changed. Bringing down the interface will delete all routes, - # and clear the ARP cache. - ip addr del $old_ip_address$old_mask $old_broadcast_arg dev $interface - ip link set $interface down - fi - - if [ -n "$new_interface_mtu" ]; then - ip link set $interface mtu $new_interface_mtu || true + ip -4 addr flush dev $interface fi if [ -z "$old_ip_address" ] || [ "$old_ip_address" != "$new_ip_address" ] || [ "$reason" = "BOUND" ] || [ "$reason" = "REBOOT" ]; then + ip -4 addr add $new_ip_address$new_mask $new_broadcast_arg dev $interface - ip link set $interface up - ip addr flush dev $interface - ip addr add $new_ip_address$new_mask $new_broadcast_arg dev $interface + if [ -n "$new_interface_mtu" ]; then + ip link set $interface mtu $new_interface_mtu || true + fi for router in $new_routers; do - ip route add default via $router + ip -4 route add default via $router dev $interface done fi @@ -108,9 +120,7 @@ case "$reason" in EXPIRE|FAIL|RELEASE|STOP) if [ -n "$old_ip_address" ]; then - # Shut down interface, which will delete routes and clear arp cache. - ip addr flush dev $interface - ip link set $interface down + ip -4 addr flush dev $interface fi ;; @@ -119,6 +129,46 @@ case "$reason" in ip link set $interface down ;; + + ### DHCPv6 Handlers + # TODO handle prefix change: ?based on ${old_ip6_prefix} and ${new_ip6_prefix}? + + PREINIT6) + # ensure interface is up + ip link set $interface up + + # flush any stale global permanent IPs from interface + ip -6 addr flush dev $interface scope global permanent + + ;; + + BOUND6|RENEW6|REBIND6) + if [ "$new_ip6_address" ] && [ "$new_ip6_prefixlen" ]; then + ip -6 addr add $new_ip6_address/$new_ip6_prefixlen \ + dev $interface scope global + fi + + make_resolv_conf + + # Get the domain name into a file suitable for netcfg to read. + printf "${new_dhcp6_domain_search%% *}" > /tmp/domain_name + + ;; + + DEPREF6) + if [ "$new_ip6_prefixlen" ]; then + ip -6 addr change $cur_ip6_address/$cur_ip6_prefixlen \ + dev $interface scope global preferred_lft 0 + fi + + ;; + + EXPIRE6|RELEASE6|STOP6) + if [ "$old_ip6_address" ] && [ "$old_ip6_prefixlen" ]; then + ip -6 addr del $old_ip6_address/$old_ip6_prefixlen dev $interface + fi + + ;; esac exit 0 Thanks, -- Colin Watson [cjwat...@ubuntu.com] -- To UNSUBSCRIBE, email to debian-boot-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/20110729130922.ga27...@riva.dynamic.greenend.org.uk