Changeset 27140


Ignore:
Timestamp:
2011-06-09T01:52:28+02:00 (7 years ago)
Author:
jow
Message:

[package] wide-dhcpv6:

  • fix DUID calculation for virtual interfaces like pppoe-wan (#9503)
  • add a config option "duid" to allow users to override the DUID
  • use service_kill to cleanly terminate dhcp6c
  • bump package revision
Location:
packages/ipv6/wide-dhcpv6
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • packages/ipv6/wide-dhcpv6/Makefile

    r23802 r27140  
    44PKG_NAME:=wide-dhcpv6 
    55PKG_VERSION:=20080615 
    6 PKG_RELEASE:=5 
     6PKG_RELEASE:=6 
    77 
    88PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz 
  • packages/ipv6/wide-dhcpv6/files/dhcp6c.conf

    r21161 r27140  
    2323        option 'bcmcs_server_domain_name' '0' 
    2424         
     25        # Override the used DUID, by default it is derived from the interface MAC 
     26        # The given value must be uppercase and globally unique! 
     27        #option 'duid' '00:03:00:06:D8:5D:4C:A5:03:F2' 
     28 
    2529        # Script to run when a reply is received 
    2630        option 'script' '/usr/bin/dhcp6c-state' 
  • packages/ipv6/wide-dhcpv6/files/dhcp6c.init

    r25461 r27140  
    1212} 
    1313 
     14get_device() { 
     15        local interface=$1 
     16        local ifname=$2 
     17        local device 
     18        scan_interfaces 
     19        config_get device "$interface" device 
     20        grep -qE "^ *$device:" /proc/net/dev && \ 
     21                printf '%s\n' "$device" || \ 
     22                printf '%s\n' "$ifname" 
     23        return 0 
     24} 
     25 
    1426dhcp6c_write_duid() { 
    15         local ifname="$1" 
    16         local mac=$(ifconfig "$client_ifname" | sed -ne 's/.*HWaddr //p') 
    17         local oIFS="$IFS"; IFS=":"; set -- $mac; IFS="$oIFS" 
     27        local mac="${1:-$(ifconfig "$client_device" | sed -ne 's/[[:space:]]*$//; s/.*HWaddr //p')}" 
     28        local pat="[0-9A-F][0-9A-F]" 
    1829 
    19         # low endian 
    20         if [ "$(printf \\1 | hexdump -n1 -ve '8/2 "%04x"')" = "0001" ]; then 
    21                 printf \\x0a\\x00 
     30        case "$mac" in 
     31                $pat:$pat:$pat:$pat:$pat:$pat:$pat:$pat:$pat:$pat) 
     32                        printf $(echo "$mac" | sed -e 's/^/\\x/; s/:/\\x/g') 
     33                        logger -t dhcp6c "Using user provided DUID $mac" 
     34                ;; 
     35                $pat:$pat:$pat:$pat:$pat:$pat) 
     36                        local oIFS="$IFS"; IFS=":"; set -- $mac; IFS="$oIFS" 
    2237 
    23         # big endian 
    24         else 
    25                 printf \\x00\\x0a 
    26         fi 
     38                        # low endian 
     39                        if [ "$(printf \\1 | hexdump -n1 -ve '8/2 "%04x"')" = "0001" ]; then 
     40                                printf \\x0a\\x00 
    2741 
    28         printf \\x00\\x03\\x00\\x06\\x$1\\x$2\\x$3\\x$4\\x$5\\x$6 
     42                        # big endian 
     43                        else 
     44                                printf \\x00\\x0a 
     45                        fi 
    2946 
    30         logger -t dhcp6c "Using DUID 00:03:00:06:$1:$2:$3:$4:$5:$6" 
     47                        printf \\x00\\x03\\x00\\x06\\x$1\\x$2\\x$3\\x$4\\x$5\\x$6 
     48                        logger -t dhcp6c "Using MAC address DUID 00:03:00:06:$1:$2:$3:$4:$5:$6" 
     49                ;; 
     50                *) 
     51                        logger -t dhcp6c "Unable to derive DUID from interface '$client_device' and no valid user DUID given" 
     52                ;; 
     53        esac 
    3154} 
    3255 
     
    118141        config_get_bool enabled basic enabled 0 
    119142        [ $enabled -eq 0 ] && return 0 
    120          
     143 
     144        local user_duid 
     145        config_get user_duid basic duid 
     146 
    121147        logger -t dhcp6c starting dhcp6c 
    122148         
     
    124150        config_get client_interface basic interface 
    125151        local client_ifname=$(get_ifname "$client_interface") 
     152        local client_device=$(get_device "$client_interface" "$client_ifname") 
    126153         
    127154        local config_file="/var/etc/dhcp6c.conf" 
     
    129156        mkdir -m 755 -p /var/etc 
    130157        dhcp6c_write_config > $config_file 
    131         dhcp6c_write_duid > $duid_file 
     158        dhcp6c_write_duid "$user_duid" > $duid_file 
    132159         
    133160        local debug 
     
    147174 
    148175        logger -t dhcp6c stopping dhcp6c 
    149         rm -f /var/etc/dhcp6c.conf 
    150         kill -TERM `cat /var/run/dhcp6c.pid` 
     176        service_kill dhcp6c /var/run/dhcp6c.pid 
     177        rm -f /var/etc/dhcp6c.conf /var/run/dhcp6c.pid 
    151178        ACTION=stop /sbin/hotplug-call dhcp6c 
    152179        return 0 
Note: See TracChangeset for help on using the changeset viewer.