* [ptxdist] [PATCH] busybox: update udhcp config files
@ 2021-06-20 17:39 Roland Hieber
2021-06-29 5:09 ` [ptxdist] [APPLIED] " Michael Olbrich
0 siblings, 1 reply; 2+ messages in thread
From: Roland Hieber @ 2021-06-20 17:39 UTC (permalink / raw)
To: ptxdist; +Cc: Roland Hieber
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 <rhi@pengutronix.de>
---
projectroot/etc/udhcpc.script | 60 +++++++++++++++++-----
projectroot/etc/udhcpd.conf | 93 ++++++++++++++++++++---------------
2 files changed, 102 insertions(+), 51 deletions(-)
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 <Tim@Rikers.org>
-# $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
--
2.29.2
_______________________________________________
ptxdist mailing list
ptxdist@pengutronix.de
To unsubscribe, send a mail with subject "unsubscribe" to ptxdist-request@pengutronix.de
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [ptxdist] [APPLIED] busybox: update udhcp config files
2021-06-20 17:39 [ptxdist] [PATCH] busybox: update udhcp config files Roland Hieber
@ 2021-06-29 5:09 ` Michael Olbrich
0 siblings, 0 replies; 2+ messages in thread
From: Michael Olbrich @ 2021-06-29 5:09 UTC (permalink / raw)
To: ptxdist; +Cc: Roland Hieber
Thanks, applied as 320816c70b01e6376ddf450fa55028ef2ff6fb06.
Michael
[sent from post-receive hook]
On Tue, 29 Jun 2021 07:09:26 +0200, Roland Hieber <rhi@pengutronix.de> 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 <rhi@pengutronix.de>
> Message-Id: <20210620173954.5608-1-rhi@pengutronix.de>
> Signed-off-by: Michael Olbrich <m.olbrich@pengutronix.de>
>
> 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 <Tim@Rikers.org>
>
> -# $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
ptxdist@pengutronix.de
To unsubscribe, send a mail with subject "unsubscribe" to ptxdist-request@pengutronix.de
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2021-06-29 5:12 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-20 17:39 [ptxdist] [PATCH] busybox: update udhcp config files Roland Hieber
2021-06-29 5:09 ` [ptxdist] [APPLIED] " Michael Olbrich
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox