libbb: add setsockopt_foo helpers
function old new delta setsockopt_int - 23 +23 do_load 918 934 +16 setsockopt_SOL_SOCKET_int - 14 +14 setsockopt_keepalive - 10 +10 setsockopt_SOL_SOCKET_1 - 10 +10 buffer_fill_and_print 169 178 +9 setsockopt_1 - 8 +8 nfsmount 3560 3566 +6 redirect 1277 1282 +5 tcpudpsvd_main 1782 1786 +4 d6_send_kernel_packet 272 275 +3 i2cget_main 380 382 +2 ed_main 2544 2545 +1 scan_recursive 380 378 -2 nbdclient_main 492 490 -2 hash_find 235 233 -2 cmdputs 334 332 -2 parse_command 1443 1440 -3 static.two 4 - -4 ntpd_main 1039 1035 -4 const_int_1 4 - -4 const_IPTOS_LOWDELAY 4 - -4 RCVBUF 4 - -4 ntp_init 474 469 -5 change_listen_mode 316 310 -6 uevent_main 416 409 -7 arping_main 1697 1690 -7 telnet_main 1612 1603 -9 socket_want_pktinfo 42 33 -9 setsockopt_reuseaddr 21 10 -11 setsockopt_broadcast 21 10 -11 httpd_main 772 757 -15 get_remote_transfer_fd 109 94 -15 make_new_session 503 487 -16 ftpd_main 2177 2160 -17 read_bunzip 1896 1866 -30 common_traceroute_main 4099 4058 -41 common_ping_main 1836 1783 -53 ------------------------------------------------------------------------------ (add/remove: 5/4 grow/shrink: 8/21 up/down: 111/-283) Total: -172 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
2db782bc7b
commit
c52cbea2bb
@ -561,6 +561,11 @@ void xlisten(int s, int backlog) FAST_FUNC;
|
|||||||
void xconnect(int s, const struct sockaddr *s_addr, socklen_t addrlen) FAST_FUNC;
|
void xconnect(int s, const struct sockaddr *s_addr, socklen_t addrlen) FAST_FUNC;
|
||||||
ssize_t xsendto(int s, const void *buf, size_t len, const struct sockaddr *to,
|
ssize_t xsendto(int s, const void *buf, size_t len, const struct sockaddr *to,
|
||||||
socklen_t tolen) FAST_FUNC;
|
socklen_t tolen) FAST_FUNC;
|
||||||
|
|
||||||
|
int setsockopt_int(int fd, int level, int optname, int optval) FAST_FUNC;
|
||||||
|
int setsockopt_1(int fd, int level, int optname) FAST_FUNC;
|
||||||
|
int setsockopt_SOL_SOCKET_int(int fd, int optname, int optval) FAST_FUNC;
|
||||||
|
int setsockopt_SOL_SOCKET_1(int fd, int optname) FAST_FUNC;
|
||||||
/* SO_REUSEADDR allows a server to rebind to an address that is already
|
/* SO_REUSEADDR allows a server to rebind to an address that is already
|
||||||
* "in use" by old connections to e.g. previous server instance which is
|
* "in use" by old connections to e.g. previous server instance which is
|
||||||
* killed or crashed. Without it bind will fail until all such connections
|
* killed or crashed. Without it bind will fail until all such connections
|
||||||
@ -568,6 +573,7 @@ ssize_t xsendto(int s, const void *buf, size_t len, const struct sockaddr *to,
|
|||||||
* regardless of SO_REUSEADDR (unlike some other flavors of Unix).
|
* regardless of SO_REUSEADDR (unlike some other flavors of Unix).
|
||||||
* Turn it on before you call bind(). */
|
* Turn it on before you call bind(). */
|
||||||
void setsockopt_reuseaddr(int fd) FAST_FUNC; /* On Linux this never fails. */
|
void setsockopt_reuseaddr(int fd) FAST_FUNC; /* On Linux this never fails. */
|
||||||
|
int setsockopt_keepalive(int fd) FAST_FUNC;
|
||||||
int setsockopt_broadcast(int fd) FAST_FUNC;
|
int setsockopt_broadcast(int fd) FAST_FUNC;
|
||||||
int setsockopt_bindtodevice(int fd, const char *iface) FAST_FUNC;
|
int setsockopt_bindtodevice(int fd, const char *iface) FAST_FUNC;
|
||||||
/* NB: returns port in host byte order */
|
/* NB: returns port in host byte order */
|
||||||
@ -1807,7 +1813,7 @@ extern const char bb_PATH_root_path[] ALIGN1; /* "PATH=/sbin:/usr/sbin:/bin:/usr
|
|||||||
#define bb_default_path (bb_PATH_root_path + sizeof("PATH=/sbin:/usr/sbin"))
|
#define bb_default_path (bb_PATH_root_path + sizeof("PATH=/sbin:/usr/sbin"))
|
||||||
|
|
||||||
extern const int const_int_0;
|
extern const int const_int_0;
|
||||||
extern const int const_int_1;
|
//extern const int const_int_1;
|
||||||
|
|
||||||
|
|
||||||
/* Providing hard guarantee on minimum size (think of BUFSIZ == 128) */
|
/* Providing hard guarantee on minimum size (think of BUFSIZ == 128) */
|
||||||
|
@ -43,7 +43,7 @@ const char bb_PATH_root_path[] ALIGN1 =
|
|||||||
"PATH=/sbin:/usr/sbin:/bin:/usr/bin" BB_ADDITIONAL_PATH;
|
"PATH=/sbin:/usr/sbin:/bin:/usr/bin" BB_ADDITIONAL_PATH;
|
||||||
|
|
||||||
|
|
||||||
const int const_int_1 = 1;
|
//const int const_int_1 = 1;
|
||||||
/* explicitly = 0, otherwise gcc may make it a common variable
|
/* explicitly = 0, otherwise gcc may make it a common variable
|
||||||
* and it will end up in bss */
|
* and it will end up in bss */
|
||||||
const int const_int_0 = 0;
|
const int const_int_0 = 0;
|
||||||
|
@ -16,10 +16,10 @@ void FAST_FUNC
|
|||||||
socket_want_pktinfo(int fd UNUSED_PARAM)
|
socket_want_pktinfo(int fd UNUSED_PARAM)
|
||||||
{
|
{
|
||||||
#ifdef IP_PKTINFO
|
#ifdef IP_PKTINFO
|
||||||
setsockopt(fd, IPPROTO_IP, IP_PKTINFO, &const_int_1, sizeof(int));
|
setsockopt_1(fd, IPPROTO_IP, IP_PKTINFO);
|
||||||
#endif
|
#endif
|
||||||
#if ENABLE_FEATURE_IPV6 && defined(IPV6_PKTINFO)
|
#if ENABLE_FEATURE_IPV6 && defined(IPV6_PKTINFO)
|
||||||
setsockopt(fd, IPPROTO_IPV6, IPV6_PKTINFO, &const_int_1, sizeof(int));
|
setsockopt_1(fd, IPPROTO_IPV6, IPV6_PKTINFO);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,13 +14,34 @@
|
|||||||
#include <sys/un.h>
|
#include <sys/un.h>
|
||||||
#include "libbb.h"
|
#include "libbb.h"
|
||||||
|
|
||||||
|
int FAST_FUNC setsockopt_int(int fd, int level, int optname, int optval)
|
||||||
|
{
|
||||||
|
return setsockopt(fd, level, optname, &optval, sizeof(int));
|
||||||
|
}
|
||||||
|
int FAST_FUNC setsockopt_1(int fd, int level, int optname)
|
||||||
|
{
|
||||||
|
return setsockopt_int(fd, level, optname, 1);
|
||||||
|
}
|
||||||
|
int FAST_FUNC setsockopt_SOL_SOCKET_int(int fd, int optname, int optval)
|
||||||
|
{
|
||||||
|
return setsockopt_int(fd, SOL_SOCKET, optname, optval);
|
||||||
|
}
|
||||||
|
int FAST_FUNC setsockopt_SOL_SOCKET_1(int fd, int optname)
|
||||||
|
{
|
||||||
|
return setsockopt_SOL_SOCKET_int(fd, optname, 1);
|
||||||
|
}
|
||||||
|
|
||||||
void FAST_FUNC setsockopt_reuseaddr(int fd)
|
void FAST_FUNC setsockopt_reuseaddr(int fd)
|
||||||
{
|
{
|
||||||
setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &const_int_1, sizeof(const_int_1));
|
setsockopt_SOL_SOCKET_1(fd, SO_REUSEADDR);
|
||||||
}
|
}
|
||||||
int FAST_FUNC setsockopt_broadcast(int fd)
|
int FAST_FUNC setsockopt_broadcast(int fd)
|
||||||
{
|
{
|
||||||
return setsockopt(fd, SOL_SOCKET, SO_BROADCAST, &const_int_1, sizeof(const_int_1));
|
return setsockopt_SOL_SOCKET_1(fd, SO_BROADCAST);
|
||||||
|
}
|
||||||
|
int FAST_FUNC setsockopt_keepalive(int fd)
|
||||||
|
{
|
||||||
|
return setsockopt_SOL_SOCKET_1(fd, SO_KEEPALIVE);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef SO_BINDTODEVICE
|
#ifdef SO_BINDTODEVICE
|
||||||
|
@ -357,7 +357,7 @@ int arping_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
saddr.sin_port = htons(1025);
|
saddr.sin_port = htons(1025);
|
||||||
saddr.sin_addr = dst;
|
saddr.sin_addr = dst;
|
||||||
|
|
||||||
if (setsockopt(probe_fd, SOL_SOCKET, SO_DONTROUTE, &const_int_1, sizeof(const_int_1)) == -1)
|
if (setsockopt_SOL_SOCKET_1(probe_fd, SO_DONTROUTE) != 0)
|
||||||
bb_perror_msg("setsockopt(%s)", "SO_DONTROUTE");
|
bb_perror_msg("setsockopt(%s)", "SO_DONTROUTE");
|
||||||
xconnect(probe_fd, (struct sockaddr *) &saddr, sizeof(saddr));
|
xconnect(probe_fd, (struct sockaddr *) &saddr, sizeof(saddr));
|
||||||
getsockname(probe_fd, (struct sockaddr *) &saddr, &alen);
|
getsockname(probe_fd, (struct sockaddr *) &saddr, &alen);
|
||||||
|
@ -377,7 +377,7 @@ ftpdataio_get_pasv_fd(void)
|
|||||||
return remote_fd;
|
return remote_fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
setsockopt(remote_fd, SOL_SOCKET, SO_KEEPALIVE, &const_int_1, sizeof(const_int_1));
|
setsockopt_keepalive(remote_fd);
|
||||||
return remote_fd;
|
return remote_fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1186,11 +1186,11 @@ int ftpd_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
, SIG_IGN);
|
, SIG_IGN);
|
||||||
|
|
||||||
/* Set up options on the command socket (do we need these all? why?) */
|
/* Set up options on the command socket (do we need these all? why?) */
|
||||||
setsockopt(STDIN_FILENO, IPPROTO_TCP, TCP_NODELAY, &const_int_1, sizeof(const_int_1));
|
setsockopt_1(STDIN_FILENO, IPPROTO_TCP, TCP_NODELAY);
|
||||||
setsockopt(STDIN_FILENO, SOL_SOCKET, SO_KEEPALIVE, &const_int_1, sizeof(const_int_1));
|
setsockopt_keepalive(STDIN_FILENO);
|
||||||
/* Telnet protocol over command link may send "urgent" data,
|
/* Telnet protocol over command link may send "urgent" data,
|
||||||
* we prefer it to be received in the "normal" data stream: */
|
* we prefer it to be received in the "normal" data stream: */
|
||||||
setsockopt(STDIN_FILENO, SOL_SOCKET, SO_OOBINLINE, &const_int_1, sizeof(const_int_1));
|
setsockopt_1(STDIN_FILENO, SOL_SOCKET, SO_OOBINLINE);
|
||||||
|
|
||||||
WRITE_OK(FTP_GREET);
|
WRITE_OK(FTP_GREET);
|
||||||
signal(SIGALRM, timeout_handler);
|
signal(SIGALRM, timeout_handler);
|
||||||
|
@ -2352,7 +2352,7 @@ static void mini_httpd(int server_socket)
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* set the KEEPALIVE option to cull dead connections */
|
/* set the KEEPALIVE option to cull dead connections */
|
||||||
setsockopt(n, SOL_SOCKET, SO_KEEPALIVE, &const_int_1, sizeof(const_int_1));
|
setsockopt_keepalive(n);
|
||||||
|
|
||||||
if (fork() == 0) {
|
if (fork() == 0) {
|
||||||
/* child */
|
/* child */
|
||||||
@ -2395,7 +2395,7 @@ static void mini_httpd_nommu(int server_socket, int argc, char **argv)
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* set the KEEPALIVE option to cull dead connections */
|
/* set the KEEPALIVE option to cull dead connections */
|
||||||
setsockopt(n, SOL_SOCKET, SO_KEEPALIVE, &const_int_1, sizeof(const_int_1));
|
setsockopt_keepalive(n);
|
||||||
|
|
||||||
if (vfork() == 0) {
|
if (vfork() == 0) {
|
||||||
/* child */
|
/* child */
|
||||||
|
@ -83,7 +83,7 @@ int nbdclient_main(int argc, char **argv)
|
|||||||
|
|
||||||
// Find and connect to server
|
// Find and connect to server
|
||||||
sock = create_and_connect_stream_or_die(host, xatou16(port));
|
sock = create_and_connect_stream_or_die(host, xatou16(port));
|
||||||
setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, &const_int_1, sizeof(const_int_1));
|
setsockopt_1(sock, IPPROTO_TCP, TCP_NODELAY);
|
||||||
|
|
||||||
// Log on to the server
|
// Log on to the server
|
||||||
xread(sock, &nbd_header, 8+8+8+4 + 124);
|
xread(sock, &nbd_header, 8+8+8+4 + 124);
|
||||||
|
@ -863,8 +863,8 @@ int nc_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
xbind(netfd, &ouraddr->u.sa, ouraddr->len);
|
xbind(netfd, &ouraddr->u.sa, ouraddr->len);
|
||||||
}
|
}
|
||||||
#if 0
|
#if 0
|
||||||
setsockopt(netfd, SOL_SOCKET, SO_RCVBUF, &o_rcvbuf, sizeof o_rcvbuf);
|
setsockopt_SOL_SOCKET_int(netfd, SO_RCVBUF, o_rcvbuf);
|
||||||
setsockopt(netfd, SOL_SOCKET, SO_SNDBUF, &o_sndbuf, sizeof o_sndbuf);
|
setsockopt_SOL_SOCKET_int(netfd, SO_SNDBUF, o_sndbuf);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef BLOAT
|
#ifdef BLOAT
|
||||||
|
@ -405,8 +405,6 @@ struct globals {
|
|||||||
};
|
};
|
||||||
#define G (*ptr_to_globals)
|
#define G (*ptr_to_globals)
|
||||||
|
|
||||||
static const int const_IPTOS_LOWDELAY = IPTOS_LOWDELAY;
|
|
||||||
|
|
||||||
|
|
||||||
#define VERB1 if (MAX_VERBOSE && G.verbose)
|
#define VERB1 if (MAX_VERBOSE && G.verbose)
|
||||||
#define VERB2 if (MAX_VERBOSE >= 2 && G.verbose >= 2)
|
#define VERB2 if (MAX_VERBOSE >= 2 && G.verbose >= 2)
|
||||||
@ -837,7 +835,7 @@ send_query_to_peer(peer_t *p)
|
|||||||
#if ENABLE_FEATURE_IPV6
|
#if ENABLE_FEATURE_IPV6
|
||||||
if (family == AF_INET)
|
if (family == AF_INET)
|
||||||
#endif
|
#endif
|
||||||
setsockopt(fd, IPPROTO_IP, IP_TOS, &const_IPTOS_LOWDELAY, sizeof(const_IPTOS_LOWDELAY));
|
setsockopt_int(fd, IPPROTO_IP, IP_TOS, IPTOS_LOWDELAY);
|
||||||
free(local_lsa);
|
free(local_lsa);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2186,7 +2184,7 @@ static NOINLINE void ntp_init(char **argv)
|
|||||||
xfunc_die();
|
xfunc_die();
|
||||||
}
|
}
|
||||||
socket_want_pktinfo(G_listen_fd);
|
socket_want_pktinfo(G_listen_fd);
|
||||||
setsockopt(G_listen_fd, IPPROTO_IP, IP_TOS, &const_IPTOS_LOWDELAY, sizeof(const_IPTOS_LOWDELAY));
|
setsockopt_int(G_listen_fd, IPPROTO_IP, IP_TOS, IPTOS_LOWDELAY);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (!(opts & OPT_n)) {
|
if (!(opts & OPT_n)) {
|
||||||
|
@ -247,7 +247,7 @@ static void ping6(len_and_sockaddr *lsa)
|
|||||||
pkt->icmp6_type = ICMP6_ECHO_REQUEST;
|
pkt->icmp6_type = ICMP6_ECHO_REQUEST;
|
||||||
|
|
||||||
sockopt = offsetof(struct icmp6_hdr, icmp6_cksum);
|
sockopt = offsetof(struct icmp6_hdr, icmp6_cksum);
|
||||||
setsockopt(pingsock, SOL_RAW, IPV6_CHECKSUM, &sockopt, sizeof(sockopt));
|
setsockopt_int(pingsock, SOL_RAW, IPV6_CHECKSUM, sockopt);
|
||||||
|
|
||||||
xsendto(pingsock, G.packet, DEFDATALEN + sizeof(struct icmp6_hdr), &lsa->u.sa, lsa->len);
|
xsendto(pingsock, G.packet, DEFDATALEN + sizeof(struct icmp6_hdr), &lsa->u.sa, lsa->len);
|
||||||
|
|
||||||
@ -700,12 +700,12 @@ static void ping4(len_and_sockaddr *lsa)
|
|||||||
/* set recv buf (needed if we can get lots of responses: flood ping,
|
/* set recv buf (needed if we can get lots of responses: flood ping,
|
||||||
* broadcast ping etc) */
|
* broadcast ping etc) */
|
||||||
sockopt = (datalen * 2) + 7 * 1024; /* giving it a bit of extra room */
|
sockopt = (datalen * 2) + 7 * 1024; /* giving it a bit of extra room */
|
||||||
setsockopt(pingsock, SOL_SOCKET, SO_RCVBUF, &sockopt, sizeof(sockopt));
|
setsockopt_SOL_SOCKET_int(pingsock, SO_RCVBUF, sockopt);
|
||||||
|
|
||||||
if (opt_ttl != 0) {
|
if (opt_ttl != 0) {
|
||||||
setsockopt(pingsock, IPPROTO_IP, IP_TTL, &opt_ttl, sizeof(opt_ttl));
|
setsockopt_int(pingsock, IPPROTO_IP, IP_TTL, opt_ttl);
|
||||||
/* above doesnt affect packets sent to bcast IP, so... */
|
/* above doesnt affect packets sent to bcast IP, so... */
|
||||||
setsockopt(pingsock, IPPROTO_IP, IP_MULTICAST_TTL, &opt_ttl, sizeof(opt_ttl));
|
setsockopt_int(pingsock, IPPROTO_IP, IP_MULTICAST_TTL, opt_ttl);
|
||||||
}
|
}
|
||||||
|
|
||||||
signal(SIGINT, print_stats_and_exit);
|
signal(SIGINT, print_stats_and_exit);
|
||||||
@ -766,15 +766,15 @@ static void ping6(len_and_sockaddr *lsa)
|
|||||||
/* set recv buf (needed if we can get lots of responses: flood ping,
|
/* set recv buf (needed if we can get lots of responses: flood ping,
|
||||||
* broadcast ping etc) */
|
* broadcast ping etc) */
|
||||||
sockopt = (datalen * 2) + 7 * 1024; /* giving it a bit of extra room */
|
sockopt = (datalen * 2) + 7 * 1024; /* giving it a bit of extra room */
|
||||||
setsockopt(pingsock, SOL_SOCKET, SO_RCVBUF, &sockopt, sizeof(sockopt));
|
setsockopt_SOL_SOCKET_int(pingsock, SO_RCVBUF, sockopt);
|
||||||
|
|
||||||
sockopt = offsetof(struct icmp6_hdr, icmp6_cksum);
|
sockopt = offsetof(struct icmp6_hdr, icmp6_cksum);
|
||||||
if (offsetof(struct icmp6_hdr, icmp6_cksum) != 2)
|
if (sockopt != 2)
|
||||||
BUG_bad_offsetof_icmp6_cksum();
|
BUG_bad_offsetof_icmp6_cksum();
|
||||||
setsockopt(pingsock, SOL_RAW, IPV6_CHECKSUM, &sockopt, sizeof(sockopt));
|
setsockopt_int(pingsock, SOL_RAW, IPV6_CHECKSUM, sockopt);
|
||||||
|
|
||||||
/* request ttl info to be returned in ancillary data */
|
/* request ttl info to be returned in ancillary data */
|
||||||
setsockopt(pingsock, SOL_IPV6, IPV6_HOPLIMIT, &const_int_1, sizeof(const_int_1));
|
setsockopt_1(pingsock, SOL_IPV6, IPV6_HOPLIMIT);
|
||||||
|
|
||||||
if (if_index)
|
if (if_index)
|
||||||
pingaddr.sin6.sin6_scope_id = if_index;
|
pingaddr.sin6.sin6_scope_id = if_index;
|
||||||
|
@ -623,7 +623,7 @@ int telnet_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
|
|
||||||
xmove_fd(create_and_connect_stream_or_die(host, port), netfd);
|
xmove_fd(create_and_connect_stream_or_die(host, port), netfd);
|
||||||
|
|
||||||
setsockopt(netfd, SOL_SOCKET, SO_KEEPALIVE, &const_int_1, sizeof(const_int_1));
|
setsockopt_keepalive(netfd);
|
||||||
|
|
||||||
signal(SIGINT, record_signo);
|
signal(SIGINT, record_signo);
|
||||||
|
|
||||||
|
@ -265,7 +265,7 @@ make_new_session(
|
|||||||
close_on_exec_on(fd);
|
close_on_exec_on(fd);
|
||||||
|
|
||||||
/* SO_KEEPALIVE by popular demand */
|
/* SO_KEEPALIVE by popular demand */
|
||||||
setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, &const_int_1, sizeof(const_int_1));
|
setsockopt_keepalive(sock);
|
||||||
#if ENABLE_FEATURE_TELNETD_STANDALONE
|
#if ENABLE_FEATURE_TELNETD_STANDALONE
|
||||||
ts->sockfd_read = sock;
|
ts->sockfd_read = sock;
|
||||||
ndelay_on(sock);
|
ndelay_on(sock);
|
||||||
|
@ -473,8 +473,8 @@ send_probe(int seq, int ttl)
|
|||||||
|
|
||||||
#if ENABLE_TRACEROUTE6
|
#if ENABLE_TRACEROUTE6
|
||||||
if (dest_lsa->u.sa.sa_family == AF_INET6) {
|
if (dest_lsa->u.sa.sa_family == AF_INET6) {
|
||||||
res = setsockopt(sndsock, SOL_IPV6, IPV6_UNICAST_HOPS, &ttl, sizeof(ttl));
|
res = setsockopt_int(sndsock, SOL_IPV6, IPV6_UNICAST_HOPS, ttl);
|
||||||
if (res < 0)
|
if (res != 0)
|
||||||
bb_perror_msg_and_die("setsockopt(%s) %d", "UNICAST_HOPS", ttl);
|
bb_perror_msg_and_die("setsockopt(%s) %d", "UNICAST_HOPS", ttl);
|
||||||
out = outip;
|
out = outip;
|
||||||
len = packlen;
|
len = packlen;
|
||||||
@ -482,8 +482,8 @@ send_probe(int seq, int ttl)
|
|||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
#if defined IP_TTL
|
#if defined IP_TTL
|
||||||
res = setsockopt(sndsock, IPPROTO_IP, IP_TTL, &ttl, sizeof(ttl));
|
res = setsockopt_int(sndsock, IPPROTO_IP, IP_TTL, ttl);
|
||||||
if (res < 0)
|
if (res != 0)
|
||||||
bb_perror_msg_and_die("setsockopt(%s) %d", "TTL", ttl);
|
bb_perror_msg_and_die("setsockopt(%s) %d", "TTL", ttl);
|
||||||
#endif
|
#endif
|
||||||
out = outicmp;
|
out = outicmp;
|
||||||
@ -902,13 +902,10 @@ common_traceroute_main(int op, char **argv)
|
|||||||
if (af == AF_INET6) {
|
if (af == AF_INET6) {
|
||||||
xmove_fd(xsocket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6), rcvsock);
|
xmove_fd(xsocket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6), rcvsock);
|
||||||
# ifdef IPV6_RECVPKTINFO
|
# ifdef IPV6_RECVPKTINFO
|
||||||
setsockopt(rcvsock, SOL_IPV6, IPV6_RECVPKTINFO,
|
setsockopt_1(rcvsock, SOL_IPV6, IPV6_RECVPKTINFO);
|
||||||
&const_int_1, sizeof(const_int_1));
|
setsockopt_1(rcvsock, SOL_IPV6, IPV6_2292PKTINFO);
|
||||||
setsockopt(rcvsock, SOL_IPV6, IPV6_2292PKTINFO,
|
|
||||||
&const_int_1, sizeof(const_int_1));
|
|
||||||
# else
|
# else
|
||||||
setsockopt(rcvsock, SOL_IPV6, IPV6_PKTINFO,
|
setsockopt_1(rcvsock, SOL_IPV6, IPV6_PKTINFO);
|
||||||
&const_int_1, sizeof(const_int_1));
|
|
||||||
# endif
|
# endif
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
@ -918,17 +915,14 @@ common_traceroute_main(int op, char **argv)
|
|||||||
|
|
||||||
#if TRACEROUTE_SO_DEBUG
|
#if TRACEROUTE_SO_DEBUG
|
||||||
if (op & OPT_DEBUG)
|
if (op & OPT_DEBUG)
|
||||||
setsockopt(rcvsock, SOL_SOCKET, SO_DEBUG,
|
setsockopt_SOL_SOCKET_1(rcvsock, SO_DEBUG);
|
||||||
&const_int_1, sizeof(const_int_1));
|
|
||||||
#endif
|
#endif
|
||||||
if (op & OPT_BYPASS_ROUTE)
|
if (op & OPT_BYPASS_ROUTE)
|
||||||
setsockopt(rcvsock, SOL_SOCKET, SO_DONTROUTE,
|
setsockopt_SOL_SOCKET_1(rcvsock, SO_DONTROUTE);
|
||||||
&const_int_1, sizeof(const_int_1));
|
|
||||||
|
|
||||||
#if ENABLE_TRACEROUTE6
|
#if ENABLE_TRACEROUTE6
|
||||||
if (af == AF_INET6) {
|
if (af == AF_INET6) {
|
||||||
static const int two = 2;
|
if (setsockopt_int(rcvsock, SOL_RAW, IPV6_CHECKSUM, 2) != 0)
|
||||||
if (setsockopt(rcvsock, SOL_RAW, IPV6_CHECKSUM, &two, sizeof(two)) < 0)
|
|
||||||
bb_perror_msg_and_die("setsockopt(%s)", "IPV6_CHECKSUM");
|
bb_perror_msg_and_die("setsockopt(%s)", "IPV6_CHECKSUM");
|
||||||
xmove_fd(xsocket(af, SOCK_DGRAM, 0), sndsock);
|
xmove_fd(xsocket(af, SOCK_DGRAM, 0), sndsock);
|
||||||
} else
|
} else
|
||||||
@ -966,28 +960,25 @@ common_traceroute_main(int op, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef SO_SNDBUF
|
#ifdef SO_SNDBUF
|
||||||
if (setsockopt(sndsock, SOL_SOCKET, SO_SNDBUF, &packlen, sizeof(packlen)) < 0) {
|
if (setsockopt_SOL_SOCKET_int(sndsock, SO_SNDBUF, packlen) != 0) {
|
||||||
bb_perror_msg_and_die("SO_SNDBUF");
|
bb_perror_msg_and_die("setsockopt(%s)", "SO_SNDBUF");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef IP_TOS
|
#ifdef IP_TOS
|
||||||
if ((op & OPT_TOS) && setsockopt(sndsock, IPPROTO_IP, IP_TOS, &tos, sizeof(tos)) < 0) {
|
if ((op & OPT_TOS) && setsockopt_int(sndsock, IPPROTO_IP, IP_TOS, tos) != 0) {
|
||||||
bb_perror_msg_and_die("setsockopt(%s) %d", "TOS", tos);
|
bb_perror_msg_and_die("setsockopt(%s) %d", "TOS", tos);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef IP_DONTFRAG
|
#ifdef IP_DONTFRAG
|
||||||
if (op & OPT_DONT_FRAGMNT)
|
if (op & OPT_DONT_FRAGMNT)
|
||||||
setsockopt(sndsock, IPPROTO_IP, IP_DONTFRAG,
|
setsockopt_1(sndsock, IPPROTO_IP, IP_DONTFRAG);
|
||||||
&const_int_1, sizeof(const_int_1));
|
|
||||||
#endif
|
#endif
|
||||||
#if TRACEROUTE_SO_DEBUG
|
#if TRACEROUTE_SO_DEBUG
|
||||||
if (op & OPT_DEBUG)
|
if (op & OPT_DEBUG)
|
||||||
setsockopt(sndsock, SOL_SOCKET, SO_DEBUG,
|
setsockopt_SOL_SOCKET_1(sndsock, SO_DEBUG);
|
||||||
&const_int_1, sizeof(const_int_1));
|
|
||||||
#endif
|
#endif
|
||||||
if (op & OPT_BYPASS_ROUTE)
|
if (op & OPT_BYPASS_ROUTE)
|
||||||
setsockopt(sndsock, SOL_SOCKET, SO_DONTROUTE,
|
setsockopt_SOL_SOCKET_1(sndsock, SO_DONTROUTE);
|
||||||
&const_int_1, sizeof(const_int_1));
|
|
||||||
|
|
||||||
outip = xzalloc(packlen);
|
outip = xzalloc(packlen);
|
||||||
|
|
||||||
|
@ -1043,9 +1043,7 @@ static int udhcp_raw_socket(int ifindex)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (setsockopt(fd, SOL_PACKET, PACKET_AUXDATA,
|
if (setsockopt_1(fd, SOL_PACKET, PACKET_AUXDATA) != 0) {
|
||||||
&const_int_1, sizeof(int)) < 0
|
|
||||||
) {
|
|
||||||
if (errno != ENOPROTOOPT)
|
if (errno != ENOPROTOOPT)
|
||||||
log1("Can't set PACKET_AUXDATA on raw socket");
|
log1("Can't set PACKET_AUXDATA on raw socket");
|
||||||
}
|
}
|
||||||
|
@ -37,7 +37,7 @@ enum {
|
|||||||
#ifndef SO_RCVBUFFORCE
|
#ifndef SO_RCVBUFFORCE
|
||||||
#define SO_RCVBUFFORCE 33
|
#define SO_RCVBUFFORCE 33
|
||||||
#endif
|
#endif
|
||||||
static const int RCVBUF = 2 * 1024 * 1024;
|
enum { RCVBUF = 2 * 1024 * 1024 };
|
||||||
|
|
||||||
int uevent_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
|
int uevent_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
|
||||||
int uevent_main(int argc UNUSED_PARAM, char **argv)
|
int uevent_main(int argc UNUSED_PARAM, char **argv)
|
||||||
@ -63,8 +63,8 @@ int uevent_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
// find /sys -name uevent -exec sh -c 'echo add >"{}"' ';'
|
// find /sys -name uevent -exec sh -c 'echo add >"{}"' ';'
|
||||||
//
|
//
|
||||||
// SO_RCVBUFFORCE (root only) can go above net.core.rmem_max sysctl
|
// SO_RCVBUFFORCE (root only) can go above net.core.rmem_max sysctl
|
||||||
setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &RCVBUF, sizeof(RCVBUF));
|
setsockopt_SOL_SOCKET_int(fd, SO_RCVBUF, RCVBUF);
|
||||||
setsockopt(fd, SOL_SOCKET, SO_RCVBUFFORCE, &RCVBUF, sizeof(RCVBUF));
|
setsockopt_SOL_SOCKET_int(fd, SO_RCVBUFFORCE, RCVBUF);
|
||||||
if (0) {
|
if (0) {
|
||||||
int z;
|
int z;
|
||||||
socklen_t zl = sizeof(z);
|
socklen_t zl = sizeof(z);
|
||||||
|
Loading…
Reference in New Issue
Block a user