Thanks, applied as 320816c70b01e6376ddf450fa55028ef2ff6fb06.

Michael

[sent from post-receive hook]

On Tue, 29 Jun 2021 07:09:26 +0200, Roland Hieber <[email protected]> wrote:
> Copy the following files from busybox 1.33:
> 
> * examples/udhcp/simple.script
> * examples/udhcp/udhcpd.conf
> 
> This teaches the DHCP client to use iproute2 tools instead of the
> outdated iputils.
> 
> Signed-off-by: Roland Hieber <[email protected]>
> Message-Id: <[email protected]>
> Signed-off-by: Michael Olbrich <[email protected]>
> 
> diff --git a/projectroot/etc/udhcpc.script b/projectroot/etc/udhcpc.script
> index 130c37e0ce6a..f079ec8b849f 100644
> --- a/projectroot/etc/udhcpc.script
> +++ b/projectroot/etc/udhcpc.script
> @@ -1,38 +1,74 @@
>  #!/bin/sh
> +# udhcpc script edited by Tim Riker <[email protected]>
>  
> -# $Id$
> +RESOLV_CONF="/etc/resolv.conf"
>  
> -[ -z "$1" ] && echo "Error: should be called from udhcpc" && exit 1
> +[ -n "$1" ] || { echo "Error: should be called from udhcpc"; exit 1; }
>  
> -RESOLV_CONF="/etc/resolv.conf"
> +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"
> -[ -n "$subnet" ] && NETMASK="netmask $subnet"
>  
>  case "$1" in
>       deconfig)
> -             /sbin/ifconfig $interface 0.0.0.0
> +             echo "Clearing IP addresses on $interface, upping it"
> +             if command -v ip >/dev/null; then
> +                     ip -4 addr flush dev $interface
> +                     ip link set dev $interface up
> +             else
> +                     ifconfig $interface 0.0.0.0
> +             fi
>               ;;
>  
>       renew|bound)
> -             /sbin/ifconfig $interface $ip $BROADCAST $NETMASK
> +             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"
> +                     echo "Deleting routers"
>                       while route del default gw 0.0.0.0 dev $interface ; do
>                               :
>                       done
>  
> +                     metric=0
>                       for i in $router ; do
> -                             route add default gw $i dev $interface
> +                             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 -n > $RESOLV_CONF
> -             [ -n "$domain" ] && echo search $domain >> $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")
> +             echo "Recreating $realconf"
> +             tmpfile="$realconf-$$"
> +             > "$tmpfile"
> +             [ -n "$domain" ] && echo "search $domain" >> "$tmpfile"
>               for i in $dns ; do
> -                     echo adding dns $i
> -                     echo nameserver $i >> $RESOLV_CONF
> +                     echo " Adding DNS server $i"
> +                     echo "nameserver $i" >> "$tmpfile"
>               done
> +             mv "$tmpfile" "$realconf"
>               ;;
>  esac
>  
> diff --git a/projectroot/etc/udhcpd.conf b/projectroot/etc/udhcpd.conf
> index eca44c0ab41e..6eb10852e2e6 100644
> --- a/projectroot/etc/udhcpd.conf
> +++ b/projectroot/etc/udhcpd.conf
> @@ -44,7 +44,7 @@ interface   eth0
>  #notify_file                 # default: no script
>  #notify_file dumpleases      # useful for debugging
>  
> -# The following are bootp specific options
> +# The following are BOOTP specific options
>  # next server to use in bootstrap
>  #siaddr              192.168.0.22    # default: 0.0.0.0 (none)
>  # tftp server name
> @@ -52,9 +52,14 @@ interface  eth0
>  # tftp file to download (e.g. kernel image)
>  #boot_file   /var/nfs_root   # default: none
>  
> +# NOTE: "boot_file FILE" and "opt bootfile FILE" are conceptually the same,
> +# but "boot_file" goes into BOOTP-defined fixed-size field in the packet,
> +# whereas "opt bootfile" goes into DHCP option 0x43.
> +# Same for "sname HOST" and "opt tftp HOST".
> +
>  # Static leases map
>  #static_lease 00:60:08:11:CE:4E 192.168.0.54
> -#static_lease 00:60:08:11:CE:3E 192.168.0.44
> +#static_lease 00:60:08:11:CE:3E 192.168.0.44 optional_hostname
>  
>  # The remainder of options are DHCP options and can be specified with the
>  # keyword 'opt' or 'option'. If an option can take multiple items, such
> @@ -70,46 +75,56 @@ option    domain  local
>  option       lease   864000          # default: 10 days
>  option       msstaticroutes  10.0.0.0/8 10.127.0.1           # single static 
> route
>  option       staticroutes    10.0.0.0/8 10.127.0.1, 10.11.12.0/24 10.11.12.1
> -# Arbitrary option in hex form:
> +# Arbitrary option in hex or string form:
>  option       0x08    01020304        # option 8: "cookie server IP addr: 
> 1.2.3.4"
> +option       14      "dumpfile"
>  
> -# Currently supported options (for more info, see options.c):
> -#opt lease      NUM
> -#opt subnet     IP
> -#opt broadcast  IP
> -#opt router     IP_LIST
> -#opt ipttl      NUM
> -#opt mtu        NUM
> -#opt hostname   STRING               # client's hostname
> -#opt domain     STRING               # client's domain suffix
> -#opt search     STRING_LIST  # search domains
> -#opt nisdomain  STRING
> -#opt timezone   NUM          # (localtime - UTC_time) in seconds. signed
> -#opt tftp       STRING               # tftp server name
> -#opt bootfile   STRING               # tftp file to download (e.g. kernel 
> image)
> -#opt bootsize   NUM          # size of that file
> -#opt rootpath   STRING               # (NFS) path to mount as root fs
> -#opt wpad       STRING
> -#opt serverid   IP           # default: server's IP
> -#opt message    STRING               # error message (udhcpd sends it on 
> success too)
> -#opt vlanid     NUM          # 802.1P VLAN ID
> -#opt vlanpriority NUM                # 802.1Q VLAN priority
> +# Currently supported options [hex option value] (for more info, see 
> common.c):
> +#opt lease      NUM             # [0x33]
> +#opt subnet     IP              # [0x01]
> +#opt broadcast  IP              # [0x1c]
> +#opt router     IP_LIST         # [0x03]
> +#opt ipttl      NUM             # [0x17]
> +#opt mtu        NUM             # [0x1a]
> +#opt hostname   STRING          # [0x0c] client's hostname
> +#opt domain     STRING          # [0x0f] client's domain suffix
> +#opt search     STRING_LIST     # [0x77] search domains
> +#opt nisdomain  STRING          # [0x28]
> +#opt timezone   NUM             # [0x02] (localtime - UTC_time) in seconds. 
> signed
> +#opt tzstr      STRING          # [0x64] RFC 4833. IEEE 1003.1 TZ string
> +#opt tzdbstr    STRING          # [0x65] RFC 4833. Reference to the TZ 
> database string
> +#opt tftp       STRING          # [0x42] tftp server name
> +#opt bootfile   STRING          # [0x43] tftp file to download (e.g. kernel 
> image)
> +#opt bootsize   NUM             # [0x0d] size of that file
> +#opt rootpath   STRING          # [0x11] (NFS) path to mount as root fs
> +#opt wpad       STRING          # [0xfc] Web Proxy Auto Discovery Protocol
> +#opt serverid   IP              # [0x36] default: server's IP
> +#opt message    STRING          # [0x38] error message (if set, udhcpd would 
> send it on success too)
> +#opt vlanid     NUM             # [0x84] 802.1P VLAN ID
> +#opt vlanpriority NUM           # [0x85] 802.1Q VLAN priority
> +#opt vendor     STRING          # [0x3c] client's vendor string, not 
> intended to be sent by DHCP servers
> +# RFC 5071: PXELINUX Options
> +#opt 0xd0       F100747E        # [0xd0] magic needed for other options to 
> be recognized by clients
> +#opt pxeconffile STRING         # [0xd1]
> +#opt pxepathprefix STRING       # [0xd2]
> +#opt reboottime NUM             # [0xd3] bootstrap timeout
>  # Options specifying server(s)
> -#opt dns        IP_LIST
> -#opt wins       IP_LIST
> -#opt nissrv     IP_LIST
> -#opt ntpsrv     IP_LIST
> -#opt lprsrv     IP_LIST
> -#opt swapsrv    IP
> +#opt dns        IP_LIST         # [0x06]
> +#opt wins       IP_LIST         # [0x2c]
> +#opt nissrv     IP_LIST         # [0x29]
> +#opt ntpsrv     IP_LIST         # [0x2a]
> +#opt lprsrv     IP_LIST         # [0x09]
> +#opt swapsrv    IP              # [0x10]
>  # Options specifying routes
> -#opt routes     IP_PAIR_LIST
> -#opt staticroutes   STATIC_ROUTES # RFC 3442 classless static route option
> -#opt msstaticroutes STATIC_ROUTES # same, using MS option number
> +#opt routes     IP_PAIR_LIST    # [0x21]
> +#opt staticroutes   STATIC_ROUTES # [0x79] RFC 3442 classless static route 
> option
> +#opt msstaticroutes STATIC_ROUTES # [0xf9] same, using MS option number
>  # Obsolete options, no longer supported
> -#opt logsrv     IP_LIST      # 704/UDP log server (not syslog!)
> -#opt namesrv    IP_LIST      # IEN 116 name server, obsolete (August 1979!!!)
> -#opt cookiesrv  IP_LIST      # RFC 865 "quote of the day" server, rarely 
> (never?) used
> -#opt timesrv    IP_LIST      # RFC 868 time server, rarely (never?) used
> +#opt logsrv     IP_LIST # [0x07] 704/UDP log server (not syslog!)
> +#opt namesrv    IP_LIST # [0x05] IEN 116 name server, obsolete (August 
> 1979!!!)
> +#opt cookiesrv  IP_LIST # [0x08] RFC 865 "quote of the day" server, rarely 
> (never?) used
> +#opt timesrv    IP_LIST # [0x04] RFC 868 time server, rarely (never?) used
>  # TODO: in development
> -#opt userclass  STRING               # RFC 3004. set of LASCII strings. "I 
> am a printer" etc
> -#opt sipserv    STRING LIST  # RFC 3361. flag byte, then: 0: domain names, 
> 1: IP addrs
> +#opt userclass  STRING          # [0x4d] RFC 3004. set of LASCII strings. "I 
> am a printer" etc
> +#opt sipsrv     STRING LIST     # [0x78] RFC 3361. flag byte, then: 0: 
> domain names, 1: IP addrs
> +#opt ip6rd ....                 # [0xd4] IPv6 rapid deployment

_______________________________________________
ptxdist mailing list
[email protected]
To unsubscribe, send a mail with subject "unsubscribe" to 
[email protected]

Reply via email to