aboutsummaryrefslogtreecommitdiff
path: root/networking
AgeCommit message (Collapse)Author
2018-03-10udhcpd: fix "not dying on SIGTERM"Denys Vlasenko
Fixes: commit 52a515d18724bbb34e3ccbbb0218efcc4eccc0a8 "udhcp: use poll() instead of select()" Feb 16 2017 udhcp_sp_read() is meant to check whether signal pipe indeed has some data to read. In the above commit, it was changed as follows: - if (!FD_ISSET(signal_pipe.rd, rfds)) + if (!pfds[0].revents) return 0; The problem is, the check was working for select() purely by accident. Caught signal interrupts select()/poll() syscalls, they return with EINTR (regardless of SA_RESTART flag in sigaction). _Then_ signal handler is invoked. IOW: they can't see any changes to fd state caused by signal haldler (in our case, signal handler makes signal pipe ready to be read). For select(), it means that rfds[] bit array is unmodified, bit of signal pipe's read fd is still set, and the above check "works": it thinks select() says there is data to read. This accident does not work for poll(): .revents stays clear, and we do not try reading signal pipe as we should. In udhcpd, we fall through and block in socket read. Further SIGTERM signals simply cause socket read to be interrupted and then restarted (since SIGTERM handler has SA_RESTART=1). Fixing this as follows: remove the check altogether. Set signal pipe read fd to nonblocking mode. Always read it in udhcp_sp_read(). If read fails, assume it's EAGAIN and return 0 ("no signal seen"). udhcpd avoids reading signal pipe on every recvd packet by looping if EINTR (using safe_poll()) - thus ensuring we have correct .revents for all fds - and calling udhcp_sp_read() only if pfds[0].revents!=0. udhcpc performs much fewer reads (typically it sleeps >99.999% of the time), there is no need to optimize it: can call udhcp_sp_read() after each poll unconditionally. To robustify socket reads, unconditionally set pfds[1].revents=0 in udhcp_sp_fd_set() (which is before poll), and check it before reading network socket in udhcpd. TODO: This might still fail: if pfds[1].revents=POLLIN, socket read may still block. There are rare cases when select/poll indicates that data can be read, but then actual read still blocks (one such case is UDP packets with wrong checksum). General advise is, if you use a poll/select loop, keep all your fds nonblocking. Maybe we should also do that to our network sockets? function old new delta udhcp_sp_setup 55 65 +10 udhcp_sp_fd_set 54 60 +6 udhcp_sp_read 46 36 -10 udhcpd_main 1451 1437 -14 udhcpc_main 2723 2708 -15 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/3 up/down: 16/-39) Total: -23 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-03-08remove stray newline in "iplink --help"Denys Vlasenko
function old new delta packed_usage 32547 32550 +3 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-03-08ip: fix "ip -oneline a"Denys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-03-06use gmtime_r() instead of gmtime()Denys Vlasenko
This avoids pulling in gmtime's static buffer: function old new delta svlogd_main 1401 1412 +11 send_headers 668 678 +10 gmtime 21 - -21 ------------------------------------------------------------------------------ (add/remove: 0/2 grow/shrink: 2/0 up/down: 21/-21) Total: 0 bytes text data bss dec hex filename 920221 555 5804 926580 e2374 busybox_old 920221 555 5740 926516 e2334 busybox_unstripped ^^^^ Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-03-05networking/interface.c: get rid of global dataDenys Vlasenko
These were data/bss: static.proc_read 1 - -1 int_list 4 - -4 int_last 4 - -4 We never call display_interfaces() twice, thus code to not scan /proc twice never triggers. function old new delta do_if_print - 1998 +1998 display_interfaces 145 249 +104 static.proc_read 1 - -1 add_interface 104 103 -1 int_list 4 - -4 int_last 4 - -4 if_readlist_proc 560 542 -18 if_readconf 141 - -141 do_if_fetch 643 - -643 ife_print 1296 - -1296 ------------------------------------------------------------------------------ (add/remove: 1/6 grow/shrink: 1/2 up/down: 2102/-2108) Total: -6 bytes text data bss dec hex filename 933084 473 6844 940401 e5971 busybox_old 933087 473 6836 940396 e596c busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-03-05networking/interface.c: get rid of global "smallint interface_opt_a"Denys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-03-05networking/interface.c: code shrinkDenys Vlasenko
function old new delta ife_print 1293 1296 +3 display_interfaces 145 146 +1 if_readconf 162 141 -21 if_readlist_proc 631 560 -71 do_if_fetch 753 643 -110 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/3 up/down: 4/-202) Total: -198 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-03-05wget: fix fetching of https URLs with http proxyPeter Lloyd
When fetching a https:// URL with HTTP proxy configured (e.g. with environment variable http_proxy=http://your-proxy:3128) busybox was making a https connection to the proxy. This was because the protocol scheme for the target URL was used to determine whether to connect to the proxy over SSL or not. When the proxy is in use, the decision on whether to connect to the proxy over https should based on the proxy URL not on the target URL. function old new delta wget_main 2381 2387 +6 Signed-off-by: Peter Lloyd <l-busybox@pgl22.co.uk> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-02-27tcpudp: shrink per-host rate-limiting codeDenys Vlasenko
function old new delta tcpudpsvd_main 1775 1780 +5 ipsvd_perhost_add 108 107 -1 cclen 4 - -4 cc 4 - -4 ipsvd_perhost_init 30 25 -5 ipsvd_perhost_remove 80 44 -36 ------------------------------------------------------------------------------ (add/remove: 0/2 grow/shrink: 1/3 up/down: 5/-50) Total: -45 bytes text data bss dec hex filename 933358 473 6852 940683 e5a8b busybox_old 933326 473 6844 940643 e5a63 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-02-20iplink: implement support for selecting a master interfaceJan Luebbe
Attaching an interface to a VRF is done by setting the interface's master. Besides VRF, this can also be used for bridges. function old new delta set_master - 142 +142 do_iplink 1262 1357 +95 packed_usage 32546 32539 -7 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 1/1 up/down: 237/-7) Total: 230 bytes Signed-off-by: Jan Luebbe <jluebbe@debian.org> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-02-20ip link: support "add TYPE vrf", improve --helpJan Luebbe
VRF interfaces have a mandatory table parameter, which needs to be specified using a RTNL attribute. function old new delta do_add_or_delete 1150 1254 +104 packed_usage 32444 32546 +102 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/0 up/down: 206/0) Total: 206 bytes Signed-off-by: Jan Luebbe <jluebbe@debian.org> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-02-14tls: remove redundant floor preventionDenys Vlasenko
function old new delta tls_xread_record 499 489 -10 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-02-13ping: don't call monotonic_us twice per sending the pingDenys Vlasenko
function old new delta sendping6 80 85 +5 sendping4 106 111 +5 sendping_tail 209 204 -5 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/1 up/down: 10/-5) Total: 5 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-02-13ping: implement -A "adaptive ping"Denys Vlasenko
function old new delta common_ping_main 1757 1862 +105 packed_usage 32367 32427 +60 sendping_tail 236 209 -27 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/1 up/down: 165/-27) Total: 138 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-02-13inetd,mount: add comment with example of flags to build with libtirpcDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-02-12wget: more thorough sanitization of other side's dataDenys Vlasenko
function old new delta get_sanitized_hdr - 156 +156 fgets_trim_sanitize - 128 +128 ftpcmd 129 133 +4 parse_url 461 454 -7 sanitize_string 14 - -14 wget_main 2431 2381 -50 fgets_and_trim 119 - -119 gethdr 163 - -163 ------------------------------------------------------------------------------ (add/remove: 2/3 grow/shrink: 1/2 up/down: 288/-353) Total: -65 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-02-11arping: code shrinkDenys Vlasenko
function old new delta catcher 310 309 -1 arping_main 1668 1641 -27 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-02-11libbb: introduce and use bb_getsockname()Denys Vlasenko
function old new delta bb_getsockname - 18 +18 xrtnl_open 88 83 -5 do_iplink 1216 1209 -7 arping_main 1686 1668 -18 ------------------------------------------------------------------------------ (add/remove: 2/0 grow/shrink: 0/3 up/down: 18/-30) Total: -12 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-02-11arping: move packet buffer, sigset and struct ifreq to malloced "globals"Denys Vlasenko
This way, we can zero them all in one go. We do malloc() anyway, thus nothing is lost by mallocing "globals" function old new delta arping_main 1683 1686 +3 finish 100 86 -14 catcher 350 310 -40 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/2 up/down: 3/-54) Total: -51 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-02-11arping: fix the case when inherited signal mask masks out ALRMDenys Vlasenko
function old new delta arping_main 1629 1635 +6 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-02-11arping: change a few message strings to be closer to iputils arpingDenys Vlasenko
ARPING 192.168.1.1 from 192.168.1.172 wlan0 Unicast reply from 192.168.1.1 [F4:F2:6D:52:A8:DE] 1.672ms Sent 1 probes (1 broadcast(s)) Received 1 response(s) ARPING 192.168.1.1 from 192.168.1.172 wlan0 Unicast reply from 192.168.1.1 [f4:f2:6d:52:a8:de] 1.152ms Sent 1 probe(s) (1 broadcast(s)) Received 1 response(s) (0 request(s), 0 broadcast(s)) function old new delta finish 120 100 -20 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-02-11arping: code shrinkDenys Vlasenko
Do not clear extra bits on option_mask32, it's not necessary. Move DAD bit to 2, this makes exit logic simpler. function old new delta arping_main 1655 1629 -26 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-02-08ip: fix crash in "ip neigh show"Denys Vlasenko
parse_rtattr() was using tb[] array without initializing it. Based on patch by Balaji Punnuru <balaji_punnuru@cable.comcast.com> function old new delta parse_rtattr 85 107 +22 print_route 1630 1617 -13 print_linkinfo 807 794 -13 iproute_get 835 822 -13 print_rule 680 665 -15 ll_remember_index 263 248 -15 print_addrinfo 1223 1197 -26 ipaddr_list_or_flush 1253 1223 -30 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/7 up/down: 22/-125) Total: -103 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-02-08wget: do not ask for TLS-encrypted downloads on plain ftp:// URLsDenys Vlasenko
function old new delta wget_main 2422 2431 +9 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-02-07udhcp: do not setlinebuf(stdout), we don't print to stdout anymoreDenys Vlasenko
Since bb_info_msg() was eliminated type of buffering on stdout is not important function old new delta udhcpd_main 1463 1451 -12 udhcpc_main 2735 2723 -12 setlinebuf 19 - -19 ------------------------------------------------------------------------------ (add/remove: 0/2 grow/shrink: 0/2 up/down: 0/-43) Total: -43 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-02-06wget: attempt to negotiate encrypted data ftps stream ("PROT P")Denys Vlasenko
function old new delta wget_main 2382 2422 +40 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-02-06fix a thinko in parse_pasv_epsv.cDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-02-06wget: add EPSV supportDenys Vlasenko
function old new delta parse_pasv_epsv - 151 +151 wget_main 2440 2382 -58 xconnect_ftpdata 223 94 -129 ------------------------------------------------------------------------------ (add/remove: 2/0 grow/shrink: 0/2 up/down: 151/-187) Total: -36 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-02-06wget: initial support for ftps://Denys Vlasenko
function old new delta spawn_ssl_client - 185 +185 parse_url 409 461 +52 packed_usage 32259 32278 +19 tls_run_copy_loop 293 306 +13 ssl_client_main 128 138 +10 showmode 330 338 +8 P_FTPS - 5 +5 filter_datapoints 177 179 +2 deflate 907 905 -2 decode_one_format 723 716 -7 wget_main 2591 2440 -151 ------------------------------------------------------------------------------ (add/remove: 2/0 grow/shrink: 6/3 up/down: 294/-160) Total: 134 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-02-06wget: preparations for ftps:// support (block move, no code changes)Denys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-02-06tls: fix hash calculations if client cert is requested and sentDenys Vlasenko
Symptoms: connecting to openssl s_server -cert vsftpd.pem -port 990 -debug -cipher AES128-SHA works, but with "-verify 1" option added it does not. function old new delta tls_xread_record 474 499 +25 tls_handshake 1582 1607 +25 bad_record_die 98 110 +12 tls_run_copy_loop 282 293 +11 tls_xread_handshake_block 58 51 -7 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 4/1 up/down: 73/-7) Total: 66 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-02-05ftpd: handle restarts past 2147483647 bytes. closes 10741Denys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-02-04ftpd: fix aliasing warning from gcc-6.1.1Denys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-02-04ftpgetput: add EPSV support (PASV-like thing for IPv6)Denys Vlasenko
Based on a patch by Kev Kitchens. function old new delta xconnect_ftpdata 149 223 +74 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-02-04ftpgetput: preparations for ESPV support, no code changesDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-02-04ftpd: switch to mallced "globals"Denys Vlasenko
function old new delta cmdio_write_ok 45 49 +4 cmdio_write_error 45 49 +4 handle_dir_common 360 363 +3 handle_cwd 40 43 +3 port_or_pasv_was_seen 37 39 +2 pasv_active 13 15 +2 cmdio_write_raw 34 36 +2 cmdio_write 78 80 +2 get_remote_transfer_fd 94 93 -1 port_pasv_cleanup 50 45 -5 bind_for_passive_mode 124 119 -5 cmdio_get_cmd_and_arg 237 230 -7 timeout_handler 104 93 -11 ftpd_main 2222 2152 -70 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 8/6 up/down: 22/-99) Total: -77 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-02-01udhcpd: use ptr_to_globals for its lone global data (g_leases)Denys Vlasenko
function old new delta udhcpd_main 1461 1463 +2 add_lease 320 318 -2 g_leases 4 - -4 write_leases 223 214 -9 ------------------------------------------------------------------------------ (add/remove: 0/1 grow/shrink: 1/2 up/down: 2/-15) Total: -13 bytes text data bss dec hex filename 933232 481 6856 940569 e5a19 busybox_old 933223 481 6852 940556 e5a0c busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-01-23udhcpc6: additional fix for ppp interface typeDenys Vlasenko
Invent a fictitious MAC only once Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-01-19udhcpc6: fix for ppp interface typeDenys Vlasenko
function old new delta d6_read_interface 454 600 +146 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-01-17udhcpc[6]: remove overzealous timeout clamping codeDenys Vlasenko
function old new delta udhcpc_main 2840 2826 -14 udhcpc6_main 2699 2670 -29 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-01-16udhcpc6: --help fixesDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-01-16udhcpc6: show only short opts in --help textDenys Vlasenko
function old new delta packed_usage 26028 25966 -62 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-01-16udhcpc6: fix lease time staying very small because -d was not specifiedDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-01-16udhcpc6: code shrinkDenys Vlasenko
function old new delta udhcpc6_main 2723 2727 +4 .rodata 128695 128561 -134 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-01-16udhcpc6: add support of prefix delegationDenys Vlasenko
Based on patch by DannyAAM <danny@saru.moe> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-01-16udhcpc6: preparatory patch, no code changesDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-01-16udhcpc6: fix ipv6prefix[_lease] envvar value in script invocationDenys Vlasenko
Based on a patch by DannyAAM <danny@saru.moe>. Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-01-13tc: fix single-applet buildDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-01-08dhcprelay: code shrinkDenys Vlasenko
function old new delta dhcprelay_main 961 958 -3 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-01-04tc: enables this appletDenys Vlasenko
function old new delta tc_main - 946 +946 cbq_print_opt - 517 +517 print_qdisc - 475 +475 print_class - 359 +359 llproto_names - 264 +264 packed_usage 31853 32066 +213 ll_proto_a2n - 112 +112 llproto_ids - 86 +86 print_tc_classid - 82 +82 static.objects - 20 +20 static._q_ - 16 +16 applet_main 1564 1568 +4 print_filter - 3 +3 applet_names 2708 2711 +3 ------------------------------------------------------------------------------ (add/remove: 13/0 grow/shrink: 3/0 up/down: 3100/0) Total: 3100 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>