mailarchive of the ptxdist mailing list
 help / color / mirror / Atom feed
From: Roland Hieber <rhi@pengutronix.de>
To: ptxdist@pengutronix.de
Cc: Roland Hieber <rhi@pengutronix.de>
Subject: [ptxdist] [PATCH] busybox: update udhcp config files
Date: Sun, 20 Jun 2021 19:39:54 +0200	[thread overview]
Message-ID: <20210620173954.5608-1-rhi@pengutronix.de> (raw)

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


             reply	other threads:[~2021-06-20 17:40 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-20 17:39 Roland Hieber [this message]
2021-06-29  5:09 ` [ptxdist] [APPLIED] " Michael Olbrich

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210620173954.5608-1-rhi@pengutronix.de \
    --to=rhi@pengutronix.de \
    --cc=ptxdist@pengutronix.de \
    --subject='Re: [ptxdist] [PATCH] busybox: update udhcp config files' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox