aboutsummaryrefslogtreecommitdiff
path: root/networking
diff options
context:
space:
mode:
authorRon Yorston <rmy@pobox.com>2023-07-13 08:06:26 +0100
committerRon Yorston <rmy@pobox.com>2023-07-13 08:06:26 +0100
commitbd978d0256fd3a67de1a7dd54f1a37f9435be363 (patch)
treecb869384a533ac0d95fe787d75be6c050e1e7c1a /networking
parentb2901ce8efa050da00e0f3a73f3be9bf9402deea (diff)
parentd70256a5c719439cc6fab6a4571c1bb46178e4c7 (diff)
downloadbusybox-w32-bd978d0256fd3a67de1a7dd54f1a37f9435be363.tar.gz
busybox-w32-bd978d0256fd3a67de1a7dd54f1a37f9435be363.tar.bz2
busybox-w32-bd978d0256fd3a67de1a7dd54f1a37f9435be363.zip
Merge branch 'busybox' into merge
Diffstat (limited to 'networking')
-rw-r--r--networking/arping.c2
-rw-r--r--networking/brctl.c2
-rw-r--r--networking/dnsd.c2
-rw-r--r--networking/ether-wake.c2
-rw-r--r--networking/ftpgetput.c4
-rw-r--r--networking/hostname.c4
-rw-r--r--networking/ifplugd.c2
-rw-r--r--networking/inetd.c4
-rw-r--r--networking/ip.c6
-rw-r--r--networking/ipcalc.c2
-rw-r--r--networking/isrv_identd.c2
-rw-r--r--networking/libiproute/iplink.c2
-rw-r--r--networking/libiproute/iproute.c10
-rw-r--r--networking/libiproute/iptunnel.c2
-rw-r--r--networking/nameif.c2
-rw-r--r--networking/nbd-client.c2
-rw-r--r--networking/nslookup.c2
-rw-r--r--networking/ntpd.c6
-rw-r--r--networking/ping.c2
-rw-r--r--networking/pscan.c2
-rw-r--r--networking/route.c2
-rw-r--r--networking/slattach.c4
-rw-r--r--networking/ssl_client.c2
-rw-r--r--networking/telnetd.c4
-rw-r--r--networking/traceroute.c2
-rw-r--r--networking/tunctl.c2
-rw-r--r--networking/udhcp/Config.src11
-rw-r--r--networking/udhcp/common.c10
-rw-r--r--networking/udhcp/common.h14
-rw-r--r--networking/udhcp/dhcpc.c2
-rw-r--r--networking/udhcp/dhcpd.c49
-rw-r--r--networking/udhcp/packet.c9
-rw-r--r--networking/vconfig.c2
-rw-r--r--networking/wget.c2
-rw-r--r--networking/whois.c2
-rw-r--r--networking/zcip.c2
36 files changed, 117 insertions, 64 deletions
diff --git a/networking/arping.c b/networking/arping.c
index 86f0221ed..967f1ac04 100644
--- a/networking/arping.c
+++ b/networking/arping.c
@@ -6,7 +6,7 @@
6 * Busybox port: Nick Fedchik <nick@fedchik.org.ua> 6 * Busybox port: Nick Fedchik <nick@fedchik.org.ua>
7 */ 7 */
8//config:config ARPING 8//config:config ARPING
9//config: bool "arping (9 kb)" 9//config: bool "arping (9.1 kb)"
10//config: default y 10//config: default y
11//config: help 11//config: help
12//config: Ping hosts by ARP packets. 12//config: Ping hosts by ARP packets.
diff --git a/networking/brctl.c b/networking/brctl.c
index 956bd91f3..7b0270b51 100644
--- a/networking/brctl.c
+++ b/networking/brctl.c
@@ -10,7 +10,7 @@
10 * Licensed under GPLv2 or later, see file LICENSE in this source tree. 10 * Licensed under GPLv2 or later, see file LICENSE in this source tree.
11 */ 11 */
12//config:config BRCTL 12//config:config BRCTL
13//config: bool "brctl (4.7 kb)" 13//config: bool "brctl (9.9 kb)"
14//config: default y 14//config: default y
15//config: help 15//config: help
16//config: Manage ethernet bridges. 16//config: Manage ethernet bridges.
diff --git a/networking/dnsd.c b/networking/dnsd.c
index a0f320c6c..a11d83f49 100644
--- a/networking/dnsd.c
+++ b/networking/dnsd.c
@@ -17,7 +17,7 @@
17 * the first porting of oao' scdns to busybox also. 17 * the first porting of oao' scdns to busybox also.
18 */ 18 */
19//config:config DNSD 19//config:config DNSD
20//config: bool "dnsd (9.8 kb)" 20//config: bool "dnsd (10 kb)"
21//config: default y 21//config: default y
22//config: help 22//config: help
23//config: Small and static DNS server daemon. 23//config: Small and static DNS server daemon.
diff --git a/networking/ether-wake.c b/networking/ether-wake.c
index 36e90acfb..68df19361 100644
--- a/networking/ether-wake.c
+++ b/networking/ether-wake.c
@@ -64,7 +64,7 @@
64 * filter. That configuration consumes more power. 64 * filter. That configuration consumes more power.
65 */ 65 */
66//config:config ETHER_WAKE 66//config:config ETHER_WAKE
67//config: bool "ether-wake (4.9 kb)" 67//config: bool "ether-wake (5.2 kb)"
68//config: default y 68//config: default y
69//config: help 69//config: help
70//config: Send a magic packet to wake up sleeping machines. 70//config: Send a magic packet to wake up sleeping machines.
diff --git a/networking/ftpgetput.c b/networking/ftpgetput.c
index ef0973a84..86342769b 100644
--- a/networking/ftpgetput.c
+++ b/networking/ftpgetput.c
@@ -13,13 +13,13 @@
13 * Licensed under GPLv2 or later, see file LICENSE in this source tree. 13 * Licensed under GPLv2 or later, see file LICENSE in this source tree.
14 */ 14 */
15//config:config FTPGET 15//config:config FTPGET
16//config: bool "ftpget (7.8 kb)" 16//config: bool "ftpget (7.9 kb)"
17//config: default y 17//config: default y
18//config: help 18//config: help
19//config: Retrieve a remote file via FTP. 19//config: Retrieve a remote file via FTP.
20//config: 20//config:
21//config:config FTPPUT 21//config:config FTPPUT
22//config: bool "ftpput (7.5 kb)" 22//config: bool "ftpput (7.6 kb)"
23//config: default y 23//config: default y
24//config: help 24//config: help
25//config: Store a remote file via FTP. 25//config: Store a remote file via FTP.
diff --git a/networking/hostname.c b/networking/hostname.c
index 549103485..36cb70866 100644
--- a/networking/hostname.c
+++ b/networking/hostname.c
@@ -10,13 +10,13 @@
10 * Licensed under GPLv2 or later, see file LICENSE in this source tree. 10 * Licensed under GPLv2 or later, see file LICENSE in this source tree.
11 */ 11 */
12//config:config HOSTNAME 12//config:config HOSTNAME
13//config: bool "hostname (5.5 kb)" 13//config: bool "hostname (5.8 kb)"
14//config: default y 14//config: default y
15//config: help 15//config: help
16//config: Show or set the system's host name. 16//config: Show or set the system's host name.
17//config: 17//config:
18//config:config DNSDOMAINNAME 18//config:config DNSDOMAINNAME
19//config: bool "dnsdomainname (3.6 kb)" 19//config: bool "dnsdomainname (3.8 kb)"
20//config: default y 20//config: default y
21//config: help 21//config: help
22//config: Alias to "hostname -d". 22//config: Alias to "hostname -d".
diff --git a/networking/ifplugd.c b/networking/ifplugd.c
index 0b55bf4e5..a776d4121 100644
--- a/networking/ifplugd.c
+++ b/networking/ifplugd.c
@@ -7,7 +7,7 @@
7 * Licensed under GPLv2 or later, see file LICENSE in this source tree. 7 * Licensed under GPLv2 or later, see file LICENSE in this source tree.
8 */ 8 */
9//config:config IFPLUGD 9//config:config IFPLUGD
10//config: bool "ifplugd (10 kb)" 10//config: bool "ifplugd (11 kb)"
11//config: default y 11//config: default y
12//config: help 12//config: help
13//config: Network interface plug detection daemon. 13//config: Network interface plug detection daemon.
diff --git a/networking/inetd.c b/networking/inetd.c
index fb2fbe323..e63edcd9d 100644
--- a/networking/inetd.c
+++ b/networking/inetd.c
@@ -1449,7 +1449,7 @@ int inetd_main(int argc UNUSED_PARAM, char **argv)
1449 else 1449 else
1450 sep->se_builtin->bi_dgram_fn(ctrl, sep); 1450 sep->se_builtin->bi_dgram_fn(ctrl, sep);
1451 if (pid) /* we did fork */ 1451 if (pid) /* we did fork */
1452 _exit(EXIT_FAILURE); 1452 _exit_FAILURE();
1453 maybe_close(accepted_fd); 1453 maybe_close(accepted_fd);
1454 continue; /* -> check next fd in fd set */ 1454 continue; /* -> check next fd in fd set */
1455 } 1455 }
@@ -1530,7 +1530,7 @@ int inetd_main(int argc UNUSED_PARAM, char **argv)
1530 /* eat packet in udp case */ 1530 /* eat packet in udp case */
1531 if (sep->se_socktype != SOCK_STREAM) 1531 if (sep->se_socktype != SOCK_STREAM)
1532 recv(0, line, LINE_SIZE, MSG_DONTWAIT); 1532 recv(0, line, LINE_SIZE, MSG_DONTWAIT);
1533 _exit(EXIT_FAILURE); 1533 _exit_FAILURE();
1534 } /* for (sep = servtab...) */ 1534 } /* for (sep = servtab...) */
1535 } /* for (;;) */ 1535 } /* for (;;) */
1536} 1536}
diff --git a/networking/ip.c b/networking/ip.c
index 7c3208699..36126b747 100644
--- a/networking/ip.c
+++ b/networking/ip.c
@@ -19,7 +19,7 @@
19//config: trying to be portable, it's better to use "ip CMD" forms. 19//config: trying to be portable, it's better to use "ip CMD" forms.
20//config: 20//config:
21//config:config IPADDR 21//config:config IPADDR
22//config: bool "ipaddr (14 kb)" 22//config: bool "ipaddr (15 kb)"
23//config: default y 23//config: default y
24//config: select FEATURE_IP_ADDRESS 24//config: select FEATURE_IP_ADDRESS
25//config: help 25//config: help
@@ -40,7 +40,7 @@
40//config: Short form of "ip route" 40//config: Short form of "ip route"
41//config: 41//config:
42//config:config IPTUNNEL 42//config:config IPTUNNEL
43//config: bool "iptunnel (9.6 kb)" 43//config: bool "iptunnel (9.8 kb)"
44//config: default y 44//config: default y
45//config: select FEATURE_IP_TUNNEL 45//config: select FEATURE_IP_TUNNEL
46//config: help 46//config: help
@@ -54,7 +54,7 @@
54//config: Short form of "ip rule" 54//config: Short form of "ip rule"
55//config: 55//config:
56//config:config IPNEIGH 56//config:config IPNEIGH
57//config: bool "ipneigh (8.3 kb)" 57//config: bool "ipneigh (8.6 kb)"
58//config: default y 58//config: default y
59//config: select FEATURE_IP_NEIGH 59//config: select FEATURE_IP_NEIGH
60//config: help 60//config: help
diff --git a/networking/ipcalc.c b/networking/ipcalc.c
index e82e35dd5..92e7b289d 100644
--- a/networking/ipcalc.c
+++ b/networking/ipcalc.c
@@ -12,7 +12,7 @@
12 * Licensed under GPLv2 or later, see file LICENSE in this source tree. 12 * Licensed under GPLv2 or later, see file LICENSE in this source tree.
13 */ 13 */
14//config:config IPCALC 14//config:config IPCALC
15//config: bool "ipcalc (4.4 kb)" 15//config: bool "ipcalc (4.6 kb)"
16//config: default y 16//config: default y
17//config: help 17//config: help
18//config: ipcalc takes an IP address and netmask and calculates the 18//config: ipcalc takes an IP address and netmask and calculates the
diff --git a/networking/isrv_identd.c b/networking/isrv_identd.c
index f564d604a..a92afc7e1 100644
--- a/networking/isrv_identd.c
+++ b/networking/isrv_identd.c
@@ -7,7 +7,7 @@
7 * Licensed under GPLv2, see file LICENSE in this source tree. 7 * Licensed under GPLv2, see file LICENSE in this source tree.
8 */ 8 */
9//config:config FAKEIDENTD 9//config:config FAKEIDENTD
10//config: bool "fakeidentd (8.7 kb)" 10//config: bool "fakeidentd (9 kb)"
11//config: default y 11//config: default y
12//config: select FEATURE_SYSLOG 12//config: select FEATURE_SYSLOG
13//config: help 13//config: help
diff --git a/networking/libiproute/iplink.c b/networking/libiproute/iplink.c
index 68d199044..9eb0b4f5f 100644
--- a/networking/libiproute/iplink.c
+++ b/networking/libiproute/iplink.c
@@ -215,7 +215,7 @@ static void parse_address(char *dev, int hatype, int halen, char *lla, struct if
215 alen = hatype == 1/*ARPHRD_ETHER*/ ? 14/*ETH_HLEN*/ : 19/*INFINIBAND_HLEN*/; 215 alen = hatype == 1/*ARPHRD_ETHER*/ ? 14/*ETH_HLEN*/ : 19/*INFINIBAND_HLEN*/;
216 alen = ll_addr_a2n((unsigned char *)(ifr->ifr_hwaddr.sa_data), alen, lla); 216 alen = ll_addr_a2n((unsigned char *)(ifr->ifr_hwaddr.sa_data), alen, lla);
217 if (alen < 0) 217 if (alen < 0)
218 exit(EXIT_FAILURE); 218 exit_FAILURE();
219 if (alen != halen) { 219 if (alen != halen) {
220 bb_error_msg_and_die("wrong address (%s) length: expected %d bytes", lla, halen); 220 bb_error_msg_and_die("wrong address (%s) length: expected %d bytes", lla, halen);
221 } 221 }
diff --git a/networking/libiproute/iproute.c b/networking/libiproute/iproute.c
index 5a972f8b2..cd77f642f 100644
--- a/networking/libiproute/iproute.c
+++ b/networking/libiproute/iproute.c
@@ -111,15 +111,7 @@ static int FAST_FUNC print_route(const struct sockaddr_nl *who UNUSED_PARAM,
111 if (r->rtm_flags & RTM_F_CLONED) { 111 if (r->rtm_flags & RTM_F_CLONED) {
112 return 0; 112 return 0;
113 } 113 }
114 if (G_filter.tb == RT_TABLE_LOCAL) { 114 if (G_filter.tb != tid) {
115 if (r->rtm_type != RTN_LOCAL) {
116 return 0;
117 }
118 } else if (G_filter.tb == RT_TABLE_MAIN) {
119 if (r->rtm_type == RTN_LOCAL) {
120 return 0;
121 }
122 } else {
123 return 0; 115 return 0;
124 } 116 }
125 } 117 }
diff --git a/networking/libiproute/iptunnel.c b/networking/libiproute/iptunnel.c
index c9fa632f3..1ec81c635 100644
--- a/networking/libiproute/iptunnel.c
+++ b/networking/libiproute/iptunnel.c
@@ -319,7 +319,7 @@ static void parse_args(char **argv, int cmd, struct ip_tunnel_parm *p)
319 struct ip_tunnel_parm old_p; 319 struct ip_tunnel_parm old_p;
320 memset(&old_p, 0, sizeof(old_p)); 320 memset(&old_p, 0, sizeof(old_p));
321 if (do_get_ioctl(*argv, &old_p)) 321 if (do_get_ioctl(*argv, &old_p))
322 exit(EXIT_FAILURE); 322 exit_FAILURE();
323 *p = old_p; 323 *p = old_p;
324 } 324 }
325 } 325 }
diff --git a/networking/nameif.c b/networking/nameif.c
index 66e042688..461745c70 100644
--- a/networking/nameif.c
+++ b/networking/nameif.c
@@ -10,7 +10,7 @@
10 * Licensed under GPLv2 or later, see file LICENSE in this source tree. 10 * Licensed under GPLv2 or later, see file LICENSE in this source tree.
11 */ 11 */
12//config:config NAMEIF 12//config:config NAMEIF
13//config: bool "nameif (6.6 kb)" 13//config: bool "nameif (6.9 kb)"
14//config: default y 14//config: default y
15//config: select FEATURE_SYSLOG 15//config: select FEATURE_SYSLOG
16//config: help 16//config: help
diff --git a/networking/nbd-client.c b/networking/nbd-client.c
index 755b42ccd..556fa8c97 100644
--- a/networking/nbd-client.c
+++ b/networking/nbd-client.c
@@ -4,7 +4,7 @@
4 * Licensed under GPLv2, see file LICENSE in this source tree. 4 * Licensed under GPLv2, see file LICENSE in this source tree.
5 */ 5 */
6//config:config NBDCLIENT 6//config:config NBDCLIENT
7//config: bool "nbd-client (6 kb)" 7//config: bool "nbd-client (6.3 kb)"
8//config: default y 8//config: default y
9//config: help 9//config: help
10//config: Network block device client 10//config: Network block device client
diff --git a/networking/nslookup.c b/networking/nslookup.c
index 249083e24..b67d354f7 100644
--- a/networking/nslookup.c
+++ b/networking/nslookup.c
@@ -1,7 +1,7 @@
1/* vi: set sw=4 ts=4: */ 1/* vi: set sw=4 ts=4: */
2 2
3//config:config NSLOOKUP 3//config:config NSLOOKUP
4//config: bool "nslookup (9.7 kb)" 4//config: bool "nslookup (10 kb)"
5//config: default y 5//config: default y
6//config: help 6//config: help
7//config: nslookup is a tool to query Internet name servers. 7//config: nslookup is a tool to query Internet name servers.
diff --git a/networking/ntpd.c b/networking/ntpd.c
index c7519b8fb..dcbdb8e60 100644
--- a/networking/ntpd.c
+++ b/networking/ntpd.c
@@ -41,7 +41,7 @@
41 *********************************************************************** 41 ***********************************************************************
42 */ 42 */
43//config:config NTPD 43//config:config NTPD
44//config: bool "ntpd (22 kb)" 44//config: bool "ntpd (23 kb)"
45//config: default y 45//config: default y
46//config: help 46//config: help
47//config: The NTP client/server daemon. 47//config: The NTP client/server daemon.
@@ -1632,7 +1632,7 @@ update_local_clock(peer_t *p)
1632 if (adjtimex(&tmx) < 0) 1632 if (adjtimex(&tmx) < 0)
1633 bb_simple_perror_msg_and_die("adjtimex"); 1633 bb_simple_perror_msg_and_die("adjtimex");
1634 bb_error_msg("p adjtimex freq:%ld offset:%+ld status:0x%x tc:%ld", 1634 bb_error_msg("p adjtimex freq:%ld offset:%+ld status:0x%x tc:%ld",
1635 tmx.freq, tmx.offset, tmx.status, tmx.constant); 1635 (long)tmx.freq, (long)tmx.offset, tmx.status, (long)tmx.constant);
1636 } 1636 }
1637 1637
1638 memset(&tmx, 0, sizeof(tmx)); 1638 memset(&tmx, 0, sizeof(tmx));
@@ -1747,7 +1747,7 @@ update_local_clock(peer_t *p)
1747 * Not sure why. Perhaps it is normal. 1747 * Not sure why. Perhaps it is normal.
1748 */ 1748 */
1749 VERB4 bb_error_msg("adjtimex:%d freq:%ld offset:%+ld status:0x%x", 1749 VERB4 bb_error_msg("adjtimex:%d freq:%ld offset:%+ld status:0x%x",
1750 rc, tmx.freq, tmx.offset, tmx.status); 1750 rc, (long)tmx.freq, (long)tmx.offset, tmx.status);
1751 G.kernel_freq_drift = tmx.freq / 65536; 1751 G.kernel_freq_drift = tmx.freq / 65536;
1752 VERB2 bb_error_msg("update from:%s offset:%+f delay:%f jitter:%f clock drift:%+.3fppm tc:%d", 1752 VERB2 bb_error_msg("update from:%s offset:%+f delay:%f jitter:%f clock drift:%+.3fppm tc:%d",
1753 p->p_dotted, 1753 p->p_dotted,
diff --git a/networking/ping.c b/networking/ping.c
index 9805695a1..b7e6955a9 100644
--- a/networking/ping.c
+++ b/networking/ping.c
@@ -247,7 +247,7 @@ struct globals {
247static void noresp(int ign UNUSED_PARAM) 247static void noresp(int ign UNUSED_PARAM)
248{ 248{
249 printf("No response from %s\n", G.hostname); 249 printf("No response from %s\n", G.hostname);
250 exit(EXIT_FAILURE); 250 exit_FAILURE();
251} 251}
252 252
253static void ping4(len_and_sockaddr *lsa) 253static void ping4(len_and_sockaddr *lsa)
diff --git a/networking/pscan.c b/networking/pscan.c
index 816178bbc..13785deca 100644
--- a/networking/pscan.c
+++ b/networking/pscan.c
@@ -6,7 +6,7 @@
6 * Licensed under GPLv2 or later, see file LICENSE in this source tree. 6 * Licensed under GPLv2 or later, see file LICENSE in this source tree.
7 */ 7 */
8//config:config PSCAN 8//config:config PSCAN
9//config: bool "pscan (6 kb)" 9//config: bool "pscan (6.2 kb)"
10//config: default y 10//config: default y
11//config: help 11//config: help
12//config: Simple network port scanner. 12//config: Simple network port scanner.
diff --git a/networking/route.c b/networking/route.c
index 26146f8e9..6e2d30cfd 100644
--- a/networking/route.c
+++ b/networking/route.c
@@ -25,7 +25,7 @@
25 * remove ridiculous amounts of bloat. 25 * remove ridiculous amounts of bloat.
26 */ 26 */
27//config:config ROUTE 27//config:config ROUTE
28//config: bool "route (8.7 kb)" 28//config: bool "route (9 kb)"
29//config: default y 29//config: default y
30//config: help 30//config: help
31//config: Route displays or manipulates the kernel's IP routing tables. 31//config: Route displays or manipulates the kernel's IP routing tables.
diff --git a/networking/slattach.c b/networking/slattach.c
index 6d2a252fc..2f5cd15ab 100644
--- a/networking/slattach.c
+++ b/networking/slattach.c
@@ -13,7 +13,7 @@
13 * - The -F options allows disabling of RTS/CTS flow control. 13 * - The -F options allows disabling of RTS/CTS flow control.
14 */ 14 */
15//config:config SLATTACH 15//config:config SLATTACH
16//config: bool "slattach (6.2 kb)" 16//config: bool "slattach (6.3 kb)"
17//config: default y 17//config: default y
18//config: help 18//config: help
19//config: slattach configures serial line as SLIP network interface. 19//config: slattach configures serial line as SLIP network interface.
@@ -80,7 +80,7 @@ static void restore_state_and_exit(int exitcode)
80 80
81 /* Restore line status */ 81 /* Restore line status */
82 if (tcsetattr_serial_or_warn(&G.saved_state)) 82 if (tcsetattr_serial_or_warn(&G.saved_state))
83 exit(EXIT_FAILURE); 83 exit_FAILURE();
84 84
85 if (ENABLE_FEATURE_CLEAN_UP) 85 if (ENABLE_FEATURE_CLEAN_UP)
86 close(serial_fd); 86 close(serial_fd);
diff --git a/networking/ssl_client.c b/networking/ssl_client.c
index 27575a2bf..757745896 100644
--- a/networking/ssl_client.c
+++ b/networking/ssl_client.c
@@ -4,7 +4,7 @@
4 * Licensed under GPLv2, see file LICENSE in this source tree. 4 * Licensed under GPLv2, see file LICENSE in this source tree.
5 */ 5 */
6//config:config SSL_CLIENT 6//config:config SSL_CLIENT
7//config: bool "ssl_client (25 kb)" 7//config: bool "ssl_client (28 kb)"
8//config: default y 8//config: default y
9//config: select TLS 9//config: select TLS
10//config: help 10//config: help
diff --git a/networking/telnetd.c b/networking/telnetd.c
index 0805e464f..bfeea1400 100644
--- a/networking/telnetd.c
+++ b/networking/telnetd.c
@@ -21,7 +21,7 @@
21 * Set process group corrections, initial busybox port 21 * Set process group corrections, initial busybox port
22 */ 22 */
23//config:config TELNETD 23//config:config TELNETD
24//config: bool "telnetd (12 kb)" 24//config: bool "telnetd (13 kb)"
25//config: default y 25//config: default y
26//config: select FEATURE_SYSLOG 26//config: select FEATURE_SYSLOG
27//config: help 27//config: help
@@ -571,7 +571,7 @@ make_new_session(
571 BB_EXECVP(G.loginpath, (char **)login_argv); 571 BB_EXECVP(G.loginpath, (char **)login_argv);
572 /* _exit is safer with vfork, and we shouldn't send message 572 /* _exit is safer with vfork, and we shouldn't send message
573 * to remote clients anyway */ 573 * to remote clients anyway */
574 _exit(EXIT_FAILURE); /*bb_perror_msg_and_die("execv %s", G.loginpath);*/ 574 _exit_FAILURE(); /*bb_perror_msg_and_die("execv %s", G.loginpath);*/
575} 575}
576 576
577#if ENABLE_FEATURE_TELNETD_STANDALONE 577#if ENABLE_FEATURE_TELNETD_STANDALONE
diff --git a/networking/traceroute.c b/networking/traceroute.c
index 4bbe1ab8e..767f537ce 100644
--- a/networking/traceroute.c
+++ b/networking/traceroute.c
@@ -216,7 +216,7 @@
216//config: Utility to trace the route of IP packets. 216//config: Utility to trace the route of IP packets.
217//config: 217//config:
218//config:config TRACEROUTE6 218//config:config TRACEROUTE6
219//config: bool "traceroute6 (13 kb)" 219//config: bool "traceroute6 (12 kb)"
220//config: default y 220//config: default y
221//config: depends on FEATURE_IPV6 221//config: depends on FEATURE_IPV6
222//config: help 222//config: help
diff --git a/networking/tunctl.c b/networking/tunctl.c
index 28571ae7f..c17302eac 100644
--- a/networking/tunctl.c
+++ b/networking/tunctl.c
@@ -10,7 +10,7 @@
10 * Licensed under GPLv2, see file LICENSE in this source tree. 10 * Licensed under GPLv2, see file LICENSE in this source tree.
11 */ 11 */
12//config:config TUNCTL 12//config:config TUNCTL
13//config: bool "tunctl (6.2 kb)" 13//config: bool "tunctl (6.4 kb)"
14//config: default y 14//config: default y
15//config: help 15//config: help
16//config: tunctl creates or deletes tun devices. 16//config: tunctl creates or deletes tun devices.
diff --git a/networking/udhcp/Config.src b/networking/udhcp/Config.src
index 7ba7f48fc..4b9259eb8 100644
--- a/networking/udhcp/Config.src
+++ b/networking/udhcp/Config.src
@@ -10,6 +10,13 @@ config UDHCPD
10 udhcpd is a DHCP server geared primarily toward embedded systems, 10 udhcpd is a DHCP server geared primarily toward embedded systems,
11 while striving to be fully functional and RFC compliant. 11 while striving to be fully functional and RFC compliant.
12 12
13config FEATURE_UDHCPD_BOOTP
14 bool "Answer to BOOTP requests as well"
15 default y
16 depends on UDHCPD
17 help
18 Support old BOOTP protocol too.
19
13config FEATURE_UDHCPD_BASE_IP_ON_MAC 20config FEATURE_UDHCPD_BASE_IP_ON_MAC
14 bool "Select IP address based on client MAC" 21 bool "Select IP address based on client MAC"
15 default n 22 default n
@@ -43,7 +50,7 @@ config DHCPD_LEASES_FILE
43 of the file. Normally it is safe to leave it untouched. 50 of the file. Normally it is safe to leave it untouched.
44 51
45config DUMPLEASES 52config DUMPLEASES
46 bool "dumpleases (5.1 kb)" 53 bool "dumpleases (5.3 kb)"
47 default y 54 default y
48 help 55 help
49 dumpleases displays the leases written out by the udhcpd. 56 dumpleases displays the leases written out by the udhcpd.
@@ -51,7 +58,7 @@ config DUMPLEASES
51 by the absolute time that it expires in seconds from epoch. 58 by the absolute time that it expires in seconds from epoch.
52 59
53config DHCPRELAY 60config DHCPRELAY
54 bool "dhcprelay (5.2 kb)" 61 bool "dhcprelay (5.5 kb)"
55 default y 62 default y
56 help 63 help
57 dhcprelay listens for DHCP requests on one or more interfaces 64 dhcprelay listens for DHCP requests on one or more interfaces
diff --git a/networking/udhcp/common.c b/networking/udhcp/common.c
index ae818db05..ad580f38d 100644
--- a/networking/udhcp/common.c
+++ b/networking/udhcp/common.c
@@ -252,6 +252,14 @@ uint8_t* FAST_FUNC udhcp_scan_options(struct dhcp_packet *packet, struct dhcp_sc
252 /* option bytes: [code][len][data1][data2]..[dataLEN] */ 252 /* option bytes: [code][len][data1][data2]..[dataLEN] */
253 while (1) { 253 while (1) {
254 if (scan_state->rem <= 0) { 254 if (scan_state->rem <= 0) {
255 if (ENABLE_FEATURE_UDHCPD_BOOTP && scan_state->rem == 0) {
256 /* DHCP requires END option to be present.
257 * We are here if packet fails this condition
258 * (options[] are zero-padded to the end).
259 * Assume BOOTP packet without further checks.
260 */
261 break; /* return NULL */
262 }
255 complain: 263 complain:
256 bb_simple_error_msg("bad packet, malformed option field"); 264 bb_simple_error_msg("bad packet, malformed option field");
257 return NULL; 265 return NULL;
@@ -278,7 +286,7 @@ uint8_t* FAST_FUNC udhcp_scan_options(struct dhcp_packet *packet, struct dhcp_sc
278 scan_state->rem = sizeof(packet->sname); 286 scan_state->rem = sizeof(packet->sname);
279 continue; 287 continue;
280 } 288 }
281 break; 289 break; /* return NULL */
282 } 290 }
283 291
284 if (scan_state->rem <= OPT_LEN) /* [len] byte exists? */ 292 if (scan_state->rem <= OPT_LEN) /* [len] byte exists? */
diff --git a/networking/udhcp/common.h b/networking/udhcp/common.h
index 49a0b593d..3ef371a7c 100644
--- a/networking/udhcp/common.h
+++ b/networking/udhcp/common.h
@@ -20,8 +20,11 @@ extern const uint8_t MAC_BCAST_ADDR[6] ALIGN2; /* six all-ones */
20 20
21/*** DHCP packet ***/ 21/*** DHCP packet ***/
22 22
23#define RFC1048_MAGIC 0x63825363
24/* RFC 1048 still uses BOOTP's small buffer (4 byte cookie + 60 the rest) */
25#define RFC1048_OPTIONS_BUFSIZE 60
26
23/* DHCP protocol. See RFC 2131 */ 27/* DHCP protocol. See RFC 2131 */
24#define DHCP_MAGIC 0x63825363
25#define DHCP_OPTIONS_BUFSIZE 308 28#define DHCP_OPTIONS_BUFSIZE 308
26#define BOOTREQUEST 1 29#define BOOTREQUEST 1
27#define BOOTREPLY 2 30#define BOOTREPLY 2
@@ -57,8 +60,10 @@ struct dhcp_packet {
57 * such as 'unix' or 'gateway'; this means 'boot the named program 60 * such as 'unix' or 'gateway'; this means 'boot the named program
58 * configured for my machine'" 61 * configured for my machine'"
59 */ 62 */
60 /* BOOTP fields end here, BOOTP says optional uint8_t vend[64] follows */ 63 /* BOOTP fields end here, BOOTP says optional uint8_t vend[64] follows. */
61 uint32_t cookie; /* DHCP magic bytes: 99,130,83,99 decimal */ 64 /* RFC 1048 defined this cookie value and options 0-12 and 255. */
65 /* DHCP extended it and required option 255 (END) to be always present. */
66 uint32_t cookie; /* RFC 1048 magic bytes: 99,130,83,99 decimal */
62 uint8_t options[DHCP_OPTIONS_BUFSIZE + CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS]; 67 uint8_t options[DHCP_OPTIONS_BUFSIZE + CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS];
63}; 68};
64#define DHCP_PKT_SNAME_LEN 64 69#define DHCP_PKT_SNAME_LEN 64
@@ -200,6 +205,9 @@ struct dhcp_scan_state {
200#define SNAME_FIELD 2 205#define SNAME_FIELD 2
201 206
202/* DHCP_MESSAGE_TYPE values */ 207/* DHCP_MESSAGE_TYPE values */
208#if ENABLE_FEATURE_UDHCPD_BOOTP
209#define MSGTYPE_BOOTP 0 /* there was no TYPE option in client's packet, assuming BOOTP */
210#endif
203#define DHCPDISCOVER 1 /* client -> server */ 211#define DHCPDISCOVER 1 /* client -> server */
204#define DHCPOFFER 2 /* client <- server */ 212#define DHCPOFFER 2 /* client <- server */
205#define DHCPREQUEST 3 /* client -> server */ 213#define DHCPREQUEST 3 /* client -> server */
diff --git a/networking/udhcp/dhcpc.c b/networking/udhcp/dhcpc.c
index c757fb37c..200a2fb8a 100644
--- a/networking/udhcp/dhcpc.c
+++ b/networking/udhcp/dhcpc.c
@@ -971,7 +971,7 @@ static NOINLINE int d4_recv_raw_packet(struct dhcp_packet *dhcp_pkt, int fd)
971 } 971 }
972 skip_udp_sum_check: 972 skip_udp_sum_check:
973 973
974 if (packet.data.cookie != htonl(DHCP_MAGIC)) { 974 if (packet.data.cookie != htonl(RFC1048_MAGIC)) {
975 log1s("packet with bad magic, ignoring"); 975 log1s("packet with bad magic, ignoring");
976 return -2; 976 return -2;
977 } 977 }
diff --git a/networking/udhcp/dhcpd.c b/networking/udhcp/dhcpd.c
index 66750e2e6..2904119e5 100644
--- a/networking/udhcp/dhcpd.c
+++ b/networking/udhcp/dhcpd.c
@@ -649,7 +649,8 @@ static void init_packet(struct dhcp_packet *packet, struct dhcp_packet *oldpacke
649 packet->flags = oldpacket->flags; 649 packet->flags = oldpacket->flags;
650 packet->gateway_nip = oldpacket->gateway_nip; 650 packet->gateway_nip = oldpacket->gateway_nip;
651 packet->ciaddr = oldpacket->ciaddr; 651 packet->ciaddr = oldpacket->ciaddr;
652 udhcp_add_simple_option(packet, DHCP_SERVER_ID, server_data.server_nip); 652 IF_FEATURE_UDHCPD_BOOTP(if (type != MSGTYPE_BOOTP))
653 udhcp_add_simple_option(packet, DHCP_SERVER_ID, server_data.server_nip);
653} 654}
654 655
655/* Fill options field, siaddr_nip, and sname and boot_file fields. 656/* Fill options field, siaddr_nip, and sname and boot_file fields.
@@ -725,7 +726,12 @@ static uint32_t select_lease_time(struct dhcp_packet *packet)
725 726
726/* We got a DHCP DISCOVER. Send an OFFER. */ 727/* We got a DHCP DISCOVER. Send an OFFER. */
727/* NOINLINE: limit stack usage in caller */ 728/* NOINLINE: limit stack usage in caller */
728static NOINLINE void send_offer(struct dhcp_packet *oldpacket, 729#if !ENABLE_FEATURE_UDHCPD_BOOTP
730#define send_offer(is_dhcp_client, ...) \
731 send_offer(__VA_ARGS__)
732#endif
733static NOINLINE void send_offer(void *is_dhcp_client,
734 struct dhcp_packet *oldpacket,
729 uint32_t static_lease_nip, 735 uint32_t static_lease_nip,
730 struct dyn_lease *lease, 736 struct dyn_lease *lease,
731 uint32_t requested_nip, 737 uint32_t requested_nip,
@@ -734,7 +740,12 @@ static NOINLINE void send_offer(struct dhcp_packet *oldpacket,
734 struct dhcp_packet packet; 740 struct dhcp_packet packet;
735 uint32_t lease_time_sec; 741 uint32_t lease_time_sec;
736 742
743#if ENABLE_FEATURE_UDHCPD_BOOTP
744 init_packet(&packet, oldpacket, is_dhcp_client ? DHCPOFFER : MSGTYPE_BOOTP);
745#else
746 enum { is_dhcp_client = 1 };
737 init_packet(&packet, oldpacket, DHCPOFFER); 747 init_packet(&packet, oldpacket, DHCPOFFER);
748#endif
738 749
739 /* If it is a static lease, use its IP */ 750 /* If it is a static lease, use its IP */
740 packet.yiaddr = static_lease_nip; 751 packet.yiaddr = static_lease_nip;
@@ -784,9 +795,16 @@ static NOINLINE void send_offer(struct dhcp_packet *oldpacket,
784 } 795 }
785 } 796 }
786 797
787 lease_time_sec = select_lease_time(oldpacket); 798 if (is_dhcp_client) {
788 udhcp_add_simple_option(&packet, DHCP_LEASE_TIME, htonl(lease_time_sec)); 799 lease_time_sec = select_lease_time(oldpacket);
800 udhcp_add_simple_option(&packet, DHCP_LEASE_TIME, htonl(lease_time_sec));
801 }
802/* TODO: pass "is_dhcp_client" to add_server_options(), avoid adding confusing options to BOOTP clients? */
789 add_server_options(&packet); 803 add_server_options(&packet);
804 if (!is_dhcp_client && udhcp_end_option(packet.options) >= RFC1048_OPTIONS_BUFSIZE) {
805 bb_simple_error_msg("BOOTP reply too large, not sending");
806 return;
807 }
790 808
791 /* send_packet emits error message itself if it detects failure */ 809 /* send_packet emits error message itself if it detects failure */
792 send_packet_verbose(&packet, "sending OFFER to %s"); 810 send_packet_verbose(&packet, "sending OFFER to %s");
@@ -1050,8 +1068,12 @@ int udhcpd_main(int argc UNUSED_PARAM, char **argv)
1050 continue; 1068 continue;
1051 } 1069 }
1052 msg_type = udhcp_get_option(&packet, DHCP_MESSAGE_TYPE); 1070 msg_type = udhcp_get_option(&packet, DHCP_MESSAGE_TYPE);
1053 if (!msg_type || msg_type[0] < DHCP_MINTYPE || msg_type[0] > DHCP_MAXTYPE) { 1071 if (
1054 bb_info_msg("no or bad message type option%s", ", ignoring packet"); 1072 IF_FEATURE_UDHCPD_BOOTP( msg_type && )
1073 IF_NOT_FEATURE_UDHCPD_BOOTP( !msg_type || )
1074 (msg_type[0] < DHCP_MINTYPE || msg_type[0] > DHCP_MAXTYPE)
1075 ) {
1076 bb_info_msg("bad message type option%s", ", ignoring packet");
1055 continue; 1077 continue;
1056 } 1078 }
1057 1079
@@ -1086,12 +1108,25 @@ int udhcpd_main(int argc UNUSED_PARAM, char **argv)
1086 move_from_unaligned32(requested_nip, requested_ip_opt); 1108 move_from_unaligned32(requested_nip, requested_ip_opt);
1087 } 1109 }
1088 1110
1111#if ENABLE_FEATURE_UDHCPD_BOOTP
1112 /* Handle old BOOTP clients */
1113 if (!msg_type) {
1114 log1("received %s", "BOOTP BOOTREQUEST");
1115 if (!static_lease_nip) {
1116 bb_info_msg("no static lease for BOOTP client%s", ", ignoring packet");
1117 continue;
1118 }
1119 send_offer(msg_type, &packet, static_lease_nip, lease, requested_nip, arpping_ms);
1120 continue;
1121 }
1122#endif
1123
1089 switch (msg_type[0]) { 1124 switch (msg_type[0]) {
1090 1125
1091 case DHCPDISCOVER: 1126 case DHCPDISCOVER:
1092 log1("received %s", "DISCOVER"); 1127 log1("received %s", "DISCOVER");
1093 1128
1094 send_offer(&packet, static_lease_nip, lease, requested_nip, arpping_ms); 1129 send_offer(msg_type, &packet, static_lease_nip, lease, requested_nip, arpping_ms);
1095 break; 1130 break;
1096 1131
1097 case DHCPREQUEST: 1132 case DHCPREQUEST:
diff --git a/networking/udhcp/packet.c b/networking/udhcp/packet.c
index 529978189..f9dc11d01 100644
--- a/networking/udhcp/packet.c
+++ b/networking/udhcp/packet.c
@@ -18,6 +18,8 @@ void FAST_FUNC udhcp_init_header(struct dhcp_packet *packet, char type)
18 memset(packet, 0, sizeof(*packet)); 18 memset(packet, 0, sizeof(*packet));
19 packet->op = BOOTREQUEST; /* if client to a server */ 19 packet->op = BOOTREQUEST; /* if client to a server */
20 switch (type) { 20 switch (type) {
21 IF_FEATURE_UDHCPD_BOOTP(case MSGTYPE_BOOTP:)
22 /* reply to a BOOTP (not DHCP) client */
21 case DHCPOFFER: 23 case DHCPOFFER:
22 case DHCPACK: 24 case DHCPACK:
23 case DHCPNAK: 25 case DHCPNAK:
@@ -25,10 +27,11 @@ void FAST_FUNC udhcp_init_header(struct dhcp_packet *packet, char type)
25 } 27 }
26 packet->htype = 1; /* ethernet */ 28 packet->htype = 1; /* ethernet */
27 packet->hlen = 6; 29 packet->hlen = 6;
28 packet->cookie = htonl(DHCP_MAGIC); 30 packet->cookie = htonl(RFC1048_MAGIC);
29 if (DHCP_END != 0) 31 if (DHCP_END != 0)
30 packet->options[0] = DHCP_END; 32 packet->options[0] = DHCP_END;
31 udhcp_add_simple_option(packet, DHCP_MESSAGE_TYPE, type); 33 IF_FEATURE_UDHCPD_BOOTP(if (type != MSGTYPE_BOOTP))
34 udhcp_add_simple_option(packet, DHCP_MESSAGE_TYPE, type);
32} 35}
33#endif 36#endif
34 37
@@ -90,7 +93,7 @@ int FAST_FUNC udhcp_recv_kernel_packet(struct dhcp_packet *packet, int fd)
90 } 93 }
91 94
92 if (bytes < offsetof(struct dhcp_packet, options) 95 if (bytes < offsetof(struct dhcp_packet, options)
93 || packet->cookie != htonl(DHCP_MAGIC) 96 || packet->cookie != htonl(RFC1048_MAGIC)
94 ) { 97 ) {
95 bb_simple_info_msg("packet with bad magic, ignoring"); 98 bb_simple_info_msg("packet with bad magic, ignoring");
96 return -2; 99 return -2;
diff --git a/networking/vconfig.c b/networking/vconfig.c
index 7e805be9c..77fbe3a40 100644
--- a/networking/vconfig.c
+++ b/networking/vconfig.c
@@ -7,7 +7,7 @@
7 * Licensed under GPLv2 or later, see file LICENSE in this source tree. 7 * Licensed under GPLv2 or later, see file LICENSE in this source tree.
8 */ 8 */
9//config:config VCONFIG 9//config:config VCONFIG
10//config: bool "vconfig (2.3 kb)" 10//config: bool "vconfig (2.6 kb)"
11//config: default y 11//config: default y
12//config: help 12//config: help
13//config: Creates, removes, and configures VLAN interfaces 13//config: Creates, removes, and configures VLAN interfaces
diff --git a/networking/wget.c b/networking/wget.c
index 5470502aa..e0c66edba 100644
--- a/networking/wget.c
+++ b/networking/wget.c
@@ -9,7 +9,7 @@
9 * Kuhn's copyrights are licensed GPLv2-or-later. File as a whole remains GPLv2. 9 * Kuhn's copyrights are licensed GPLv2-or-later. File as a whole remains GPLv2.
10 */ 10 */
11//config:config WGET 11//config:config WGET
12//config: bool "wget (38 kb)" 12//config: bool "wget (41 kb)"
13//config: default y 13//config: default y
14//config: help 14//config: help
15//config: wget is a utility for non-interactive download of files from HTTP 15//config: wget is a utility for non-interactive download of files from HTTP
diff --git a/networking/whois.c b/networking/whois.c
index caa71ac51..3a1dbd45d 100644
--- a/networking/whois.c
+++ b/networking/whois.c
@@ -10,7 +10,7 @@
10 * Add proxy support 10 * Add proxy support
11 */ 11 */
12//config:config WHOIS 12//config:config WHOIS
13//config: bool "whois (6.3 kb)" 13//config: bool "whois (6.5 kb)"
14//config: default y 14//config: default y
15//config: help 15//config: help
16//config: whois is a client for the whois directory service 16//config: whois is a client for the whois directory service
diff --git a/networking/zcip.c b/networking/zcip.c
index 311dfbe4c..137d46e13 100644
--- a/networking/zcip.c
+++ b/networking/zcip.c
@@ -14,7 +14,7 @@
14 * certainly be used. Its naming is built over multicast DNS. 14 * certainly be used. Its naming is built over multicast DNS.
15 */ 15 */
16//config:config ZCIP 16//config:config ZCIP
17//config: bool "zcip (8.4 kb)" 17//config: bool "zcip (8.7 kb)"
18//config: default y 18//config: default y
19//config: select FEATURE_SYSLOG 19//config: select FEATURE_SYSLOG
20//config: help 20//config: help