busybox/networking
Denys Vlasenko 8f0e4c42c6 udhcpd: optional BOOTP support
from Adam Goldman <adamg@pobox.com>

This patch makes udhcpd respond correctly to queries from BOOTP clients.

It contains the following changes:

The end field, or DHCP_END option, is required in DHCP requests but
optional in BOOTP requests. However, we still send an end
field in all replies, because some BOOTP clients expect one in replies
even if they didn't send one in the request.

Requests without a DHCP_MESSAGE_TYPE are recognized as BOOTP requests
and handled appropriately, instead of being discarded. We still require
an RFC 1048 options field, but we allow it to be empty.

Since a BOOTP client will keep using the assigned IP forever, we only
send a BOOTP reply if a static lease exists for that client.

BOOTP replies shouldn't contain DHCP_* options, so we omit them if there
was no DHCP_MESSAGE_TYPE in the request. Options other than DHCP_*
options are still sent.

The options field of a BOOTP reply must be exactly 64 bytes. If we
construct a reply with more than 64 bytes of options, we give up and log
an error instead of sending it. udhcp_send_raw_packet already pads the
options field to 64 bytes if it is too short.

This implementation has been tested against an HP PA-RISC client.

function                                             old     new   delta
.rodata                                           105247  105321     +74
udhcpd_main                                         1520    1591     +71
send_offer                                           419     470     +51
init_packet                                           81      97     +16
udhcp_init_header                                     75      88     +13
udhcp_scan_options                                   192     203     +11
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 6/0 up/down: 236/0)             Total: 236 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2023-06-12 13:22:47 +02:00
..
libiproute ip: code shrink 2023-04-23 12:37:46 +02:00
ssl_helper networking/ssl_helper: experimental matrixssl-based ssl helper 2014-02-23 23:31:13 +01:00
ssl_helper-wolfssl Update information on building httpd and wget helpers 2016-12-22 15:13:37 +01:00
udhcp udhcpd: optional BOOTP support 2023-06-12 13:22:47 +02:00
arp.c Remove "select PLATFORM_LINUX" 2022-11-29 14:14:06 +01:00
arping.c Remove "select PLATFORM_LINUX" 2022-11-29 14:14:06 +01:00
brctl.c Remove "select PLATFORM_LINUX" 2022-11-29 14:14:06 +01:00
Config.src config system: move some options closer to relevalnt tool subdirectories 2021-10-12 13:23:29 +02:00
dnsd.c dnsd: check that we don't read past packet 2021-02-22 15:36:07 +01:00
ether-wake.c build system: drop PLATFORM_LINUX 2020-08-13 17:12:56 +02:00
ftpd.c *: more --help tweaks 2021-06-16 14:24:27 +02:00
ftpgetput.c libbb: make bb_lookup_port() abort on bad port names 2021-09-09 22:00:44 +02:00
hostname.c more --help text tweaks 2020-12-13 19:18:28 +01:00
httpd.c libbb: consolidate NOMMU fix of restoring high bit in argv[0][0] 2023-04-06 21:20:28 +02:00
httpd_helpers.sh Update information on building httpd and wget helpers 2016-12-22 15:13:37 +01:00
httpd_indexcgi.c style fix 2022-05-01 17:06:00 +02:00
httpd_post_upload.cgi httpd_post_upload.cgi: use mktemp to avoid $RANDOM 2021-06-06 13:44:08 +02:00
httpd_ssi.c style fix 2022-05-01 17:06:00 +02:00
ifconfig.c Remove "select PLATFORM_LINUX" 2022-11-29 14:14:06 +01:00
ifenslave.c build system: drop PLATFORM_LINUX 2020-08-13 17:12:56 +02:00
ifplugd.c Remove "select PLATFORM_LINUX" 2022-11-29 14:14:06 +01:00
ifupdown.c *: slap on a few ALIGN* where appropriate 2022-02-06 19:53:10 +01:00
inetd.c *: slap on a few ALIGN_PTR where appropriate 2022-02-06 20:07:12 +01:00
interface.c *: slap on a few ALIGN* where appropriate 2022-02-06 19:53:10 +01:00
ip.c Remove "select PLATFORM_LINUX" 2022-11-29 14:14:06 +01:00
ipcalc.c help text: replace [OPTIONS] with actual options (if not too long) 2020-12-13 22:34:05 +01:00
isrv.c libbb: reduce the overhead of single parameter bb_error_msg() calls 2019-07-02 11:35:03 +02:00
isrv.h fixlet for the previous commit #2 2014-01-09 20:09:43 +01:00
isrv_identd.c config: update size information 2018-12-28 03:20:17 +01:00
Kbuild.src Convert all networking/* applets to "new style" applet definitions 2016-11-23 09:05:14 +01:00
nameif.c Remove "select PLATFORM_LINUX" 2022-11-29 14:14:06 +01:00
nbd-client.c libbb: introduce and use sleep1() 2020-11-29 11:37:34 +01:00
nc.c libbb: code shrink: introduce and use [_]exit_SUCCESS() 2022-01-05 22:16:06 +01:00
nc_bloaty.c libbb: make bb_lookup_port() abort on bad port names 2021-09-09 22:00:44 +02:00
netstat.c decrease padding: gcc-9.3.1 slaps 32-byte alignment on arrays willy-nilly 2020-11-30 14:58:02 +01:00
nslookup.c nslookup: code shrink 2023-05-09 19:32:29 +02:00
ntpd.c ntpd: correct comment: 2^-20 is ~1 microsecond (confused with 10^-20) 2023-01-18 18:04:22 +01:00
ntpd.diff ntpd: add experimental patch 2016-03-04 07:36:04 +01:00
parse_pasv_epsv.c networking: support ftp PASV responses not ending with ')' 2020-07-19 20:59:35 +02:00
ping.c ping: fix typo in --help text 2022-08-02 14:34:38 +02:00
pscan.c help text tweaks, mainly expanding one for route 2020-12-18 23:33:19 +01:00
route.c Remove "select PLATFORM_LINUX" 2022-11-29 14:14:06 +01:00
slattach.c libbb: introduce and use sleep1() 2020-11-29 11:37:34 +01:00
ssl_client.c config: update size information 2018-12-28 03:20:17 +01:00
tc.c Remove "select PLATFORM_LINUX" 2022-11-29 14:14:06 +01:00
tcpudp.c tcp/udpsvd: robustify SIGCHLD handling 2021-06-05 15:24:04 +02:00
tcpudp_perhost.c tcpudp: shrink per-host rate-limiting code 2018-02-27 13:03:44 +01:00
tcpudp_perhost.h tcpudp: shrink per-host rate-limiting code 2018-02-27 13:03:44 +01:00
telnet.c randomconfig fixes 2020-12-29 16:53:11 +01:00
telnetd.c libbb: code shrink: introduce and use [_]exit_SUCCESS() 2022-01-05 22:16:06 +01:00
telnetd.ctrlSQ.patch *: slap on a few ALIGN1/2s where appropriate 2016-04-22 18:09:21 +02:00
telnetd.IAC_test.sh telnetd: fix corner case of input processing of 0xff bytes 2016-10-12 19:13:46 +02:00
tftp.c telnetd: give inetd.conf example in --help 2021-06-16 10:49:18 +02:00
tls.c tls: move definitions around, no code changes 2022-09-08 16:56:54 +02:00
tls.h tls: remove unused tls_symmetric.h (was used by old "big" AES code) 2021-10-11 13:46:30 +02:00
tls_aes.c tls: code shrink in AES code 2020-12-15 18:47:25 +01:00
tls_aes.h tls: in AES-CBC code, do not set key for every record - do it once 2018-11-23 18:02:44 +01:00
tls_aesgcm.c suppress a few "unused function" warnings 2019-10-25 13:05:15 +02:00
tls_aesgcm.h tls: in AES-GCM decoding, avoid memmove 2018-11-24 13:51:46 +01:00
tls_fe.c tls: x25519: code shrink by factoring out common code 2021-12-01 15:09:44 +01:00
tls_pstm.c tls: whitespace fixes 2021-04-27 00:40:40 +02:00
tls_pstm.h whitespace fix 2021-10-11 19:11:06 +02:00
tls_pstm_montgomery_reduce.c tls: further reduce register pressure in i386 assembly 2021-04-20 19:03:55 +02:00
tls_pstm_mul_comba.c networking: cc is not a register 2019-05-17 22:56:47 +02:00
tls_pstm_sqr_comba.c networking: cc is not a register 2019-05-17 22:56:47 +02:00
tls_rsa.c tls: whitespace fixes 2021-04-27 00:40:40 +02:00
tls_rsa.h tls: do not leak RSA key 2018-11-25 16:17:26 +01:00
tls_sp_c32.c tls: P256: remove NOP macro sp_256_norm_8() 2022-07-13 16:11:17 +02:00
traceroute.c Remove "select PLATFORM_LINUX" 2022-11-29 14:14:06 +01:00
tunctl.c tunctl: code shrink 2023-05-29 14:47:10 +02:00
vconfig.c *: --help tweaks 2021-06-13 01:08:48 +02:00
wget.c wget: allow end-users to customize Content-Type for --post-data and --post-file 2021-12-12 03:22:43 +01:00
whois.c whois: limit total length of response to 32+2 kb 2019-12-03 14:52:17 +01:00
zcip.c build system: drop PLATFORM_LINUX 2020-08-13 17:12:56 +02:00