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:
Denys Vlasenko 2015-08-24 19:48:03 +02:00
parent 2db782bc7b
commit c52cbea2bb
16 changed files with 75 additions and 61 deletions

View File

@ -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) */

View File

@ -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;

View File

@ -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
} }

View File

@ -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

View File

@ -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);

View File

@ -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);

View File

@ -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 */

View File

@ -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);

View File

@ -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

View File

@ -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)) {

View File

@ -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;

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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");
} }

View File

@ -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);