1999-02-19 03:21:36 +03:00
/*
* Copyright ( c ) 1991 , 1992 Paul Kranenburg < pk @ cs . few . eur . nl >
* Copyright ( c ) 1993 Branko Lankester < branko @ hacktic . nl >
* Copyright ( c ) 1993 , 1994 , 1995 , 1996 Rick Sladkey < jrs @ world . std . com >
2000-07-05 20:05:39 +04:00
* Copyright ( c ) 1996 - 2000 Wichert Akkerman < wichert @ cistron . nl >
2018-02-14 01:00:00 +03:00
* Copyright ( c ) 1999 - 2018 The strace developers .
1999-02-19 03:21:36 +03:00
* All rights reserved .
*
* Redistribution and use in source and binary forms , with or without
* modification , are permitted provided that the following conditions
* are met :
* 1. Redistributions of source code must retain the above copyright
* notice , this list of conditions and the following disclaimer .
* 2. Redistributions in binary form must reproduce the above copyright
* notice , this list of conditions and the following disclaimer in the
* documentation and / or other materials provided with the distribution .
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission .
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ` ` AS IS ' ' AND ANY EXPRESS OR
* IMPLIED WARRANTIES , INCLUDING , BUT NOT LIMITED TO , THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED .
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT , INDIRECT ,
* INCIDENTAL , SPECIAL , EXEMPLARY , OR CONSEQUENTIAL DAMAGES ( INCLUDING , BUT
* NOT LIMITED TO , PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES ; LOSS OF USE ,
* DATA , OR PROFITS ; OR BUSINESS INTERRUPTION ) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY , WHETHER IN CONTRACT , STRICT LIABILITY , OR TORT
* ( INCLUDING NEGLIGENCE OR OTHERWISE ) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE , EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE .
*/
# include "defs.h"
2017-07-08 17:57:44 +03:00
# include "print_fields.h"
1999-02-19 03:21:36 +03:00
# include <sys/stat.h>
# include <sys/socket.h>
2014-11-21 23:46:16 +03:00
# include <sys/uio.h>
1999-02-19 03:21:36 +03:00
# include <sys/un.h>
# include <netinet/in.h>
2001-02-16 22:59:55 +03:00
# ifdef HAVE_NETINET_TCP_H
2012-03-16 15:02:22 +04:00
# include <netinet / tcp.h>
2000-09-02 01:03:06 +04:00
# endif
2001-02-16 22:59:55 +03:00
# ifdef HAVE_NETINET_UDP_H
2012-03-16 15:02:22 +04:00
# include <netinet / udp.h>
2001-02-16 22:59:55 +03:00
# endif
2011-01-14 13:08:12 +03:00
# ifdef HAVE_NETINET_SCTP_H
2012-03-16 15:02:22 +04:00
# include <netinet / sctp.h>
2011-01-14 13:08:12 +03:00
# endif
1999-02-19 03:21:36 +03:00
# include <arpa/inet.h>
2001-02-16 23:29:03 +03:00
# include <net/if.h>
1999-02-19 03:21:36 +03:00
# include <asm/types.h>
2016-06-20 01:02:45 +03:00
# ifdef HAVE_NETIPX_IPX_H
2012-03-16 15:02:22 +04:00
# include <netipx / ipx.h>
1999-02-19 03:21:36 +03:00
# else
2012-03-16 15:02:22 +04:00
# include <linux / ipx.h>
1999-02-19 03:21:36 +03:00
# endif
decode extend getsockopt/setsockopt options
Currently the code assumes the set of valid options between getsockopt
and setsockopt are exactly the same and thus maintains one list. The
kernel unfortunately does not do this -- it allows for different opts
between the get and set functions. See the {g,s}et_opt{min,max} fields
in the various netfilter subcores.
To support this, extend the printxval function to take multiple sets of
xlats as varargs. Then we add the new get/set lists, and pass them down
in the net code when decoding things.
A simple example is iptables; before:
getsockopt(4, SOL_IP, 0x40 /* IP_??? */, ...) = 0
getsockopt(4, SOL_IP, 0x41 /* IP_??? */, ...) = 0
after:
getsockopt(4, SOL_IP, IPT_SO_GET_INFO, ...) = 0
getsockopt(4, SOL_IP, IPT_SO_GET_ENTRIES, ...) = 0
If these were setsockopt calls, then 0x40 & 0x41 would be
IPT_SO_SET_REPLACE & IPT_SO_SET_ADD_COUNTERS.
* configure.ac: Check for netfilter headers.
* defs.h (printxvals): New prototype.
(printxval): Change to a define.
* net.c: Include netfilter headers and new sockopts headers.
(print_sockopt_fd_level_name): Add a is_getsockopt argument. Change SOL_IP
and SOL_IPV6 decoding to use printxvals, and use is_getsockopt to pass more
xlats down.
(getsockopt): Call print_sockopt_fd_level_name with is_getsockopt as true.
(setsockopt): Call print_sockopt_fd_level_name with is_getsockopt as false.
* util.c (printxval): Rename to ...
(printxvals): ... this. Rewrite to be varargs based.
* xlat/getsockipoptions.in: New xlat list.
* xlat/getsockipv6options.in, xlat/setsockipoptions.in,
xlat/setsockipv6options.in: Likewise.
2015-08-19 20:29:27 +03:00
# if defined(HAVE_LINUX_IP_VS_H)
# include <linux / ip_vs.h>
# endif
2017-06-25 03:40:29 +03:00
# include "netlink.h"
decode extend getsockopt/setsockopt options
Currently the code assumes the set of valid options between getsockopt
and setsockopt are exactly the same and thus maintains one list. The
kernel unfortunately does not do this -- it allows for different opts
between the get and set functions. See the {g,s}et_opt{min,max} fields
in the various netfilter subcores.
To support this, extend the printxval function to take multiple sets of
xlats as varargs. Then we add the new get/set lists, and pass them down
in the net code when decoding things.
A simple example is iptables; before:
getsockopt(4, SOL_IP, 0x40 /* IP_??? */, ...) = 0
getsockopt(4, SOL_IP, 0x41 /* IP_??? */, ...) = 0
after:
getsockopt(4, SOL_IP, IPT_SO_GET_INFO, ...) = 0
getsockopt(4, SOL_IP, IPT_SO_GET_ENTRIES, ...) = 0
If these were setsockopt calls, then 0x40 & 0x41 would be
IPT_SO_SET_REPLACE & IPT_SO_SET_ADD_COUNTERS.
* configure.ac: Check for netfilter headers.
* defs.h (printxvals): New prototype.
(printxval): Change to a define.
* net.c: Include netfilter headers and new sockopts headers.
(print_sockopt_fd_level_name): Add a is_getsockopt argument. Change SOL_IP
and SOL_IPV6 decoding to use printxvals, and use is_getsockopt to pass more
xlats down.
(getsockopt): Call print_sockopt_fd_level_name with is_getsockopt as true.
(setsockopt): Call print_sockopt_fd_level_name with is_getsockopt as false.
* util.c (printxval): Rename to ...
(printxvals): ... this. Rewrite to be varargs based.
* xlat/getsockipoptions.in: New xlat list.
* xlat/getsockipv6options.in, xlat/setsockipoptions.in,
xlat/setsockipv6options.in: Likewise.
2015-08-19 20:29:27 +03:00
# if defined(HAVE_LINUX_NETFILTER_ARP_ARP_TABLES_H)
# include <linux / netfilter_arp / arp_tables.h>
# endif
# if defined(HAVE_LINUX_NETFILTER_BRIDGE_EBTABLES_H)
# include <linux / netfilter_bridge / ebtables.h>
# endif
# if defined(HAVE_LINUX_NETFILTER_IPV4_IP_TABLES_H)
# include <linux / netfilter_ipv4 / ip_tables.h>
# endif
# if defined(HAVE_LINUX_NETFILTER_IPV6_IP6_TABLES_H)
# include <linux / netfilter_ipv6 / ip6_tables.h>
# endif
2016-06-16 00:35:48 +03:00
# include <linux/if_packet.h>
2016-06-16 00:27:41 +03:00
# include <linux/icmp.h>
1999-02-19 03:21:36 +03:00
2014-04-26 03:30:54 +04:00
# include "xlat/socktypes.h"
# include "xlat/sock_type_flags.h"
2008-11-10 20:21:23 +03:00
# ifndef SOCK_TYPE_MASK
# define SOCK_TYPE_MASK 0xf
# endif
2015-01-29 07:42:37 +03:00
2014-04-26 03:30:54 +04:00
# include "xlat/socketlayers.h"
2015-01-29 07:42:37 +03:00
2014-04-26 03:30:54 +04:00
# include "xlat/inet_protocols.h"
2014-03-11 18:37:37 +04:00
2018-05-07 09:10:41 +03:00
# define XLAT_MACROS_ONLY
# include "xlat / addrfams.h"
# undef XLAT_MACROS_ONLY
net: decode more AF_* protocol names
* xlat/caif_protocols.in: New file.
* xlat/can_protocols.in: Likewise.
* xlat/irda_protocols.in: Likewise.
* xlat/isdn_protocols.in: Likewise.
* xlat/kcm_protocols.in: Likewise.
* xlat/nfc_protocols.in: Likewise.
* xlat/phonet_protocols.in: Likewise.
* xlat/smc_protocols.in: Likewise.
* net.c: Include "xlat/irda_protocols.h", "xlat/can_protocols.h",
"xlat/isdn_protocols.h", "xlat/phonet_protocols.h",
"xlat/caif_protocols.h", "xlat/nfc_protocols.h",
"xlat/kcm_protocols.h", and "xlat/smc_protocols.h".
(SYS_FUNC(socket)): Decode AF_IRDA, AF_CAN, AF_RXRPC, AF_ISDN,
AF_PHONET, AF_CAIF, AF_NFC, AF_KCM, and AF_SMC protocol names.
Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
2018-05-07 09:10:41 +03:00
# include "xlat/irda_protocols.h"
# include "xlat/can_protocols.h"
2018-04-11 14:53:54 +03:00
# include "xlat/bt_protocols.h"
net: decode more AF_* protocol names
* xlat/caif_protocols.in: New file.
* xlat/can_protocols.in: Likewise.
* xlat/irda_protocols.in: Likewise.
* xlat/isdn_protocols.in: Likewise.
* xlat/kcm_protocols.in: Likewise.
* xlat/nfc_protocols.in: Likewise.
* xlat/phonet_protocols.in: Likewise.
* xlat/smc_protocols.in: Likewise.
* net.c: Include "xlat/irda_protocols.h", "xlat/can_protocols.h",
"xlat/isdn_protocols.h", "xlat/phonet_protocols.h",
"xlat/caif_protocols.h", "xlat/nfc_protocols.h",
"xlat/kcm_protocols.h", and "xlat/smc_protocols.h".
(SYS_FUNC(socket)): Decode AF_IRDA, AF_CAN, AF_RXRPC, AF_ISDN,
AF_PHONET, AF_CAIF, AF_NFC, AF_KCM, and AF_SMC protocol names.
Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
2018-05-07 09:10:41 +03:00
# include "xlat/isdn_protocols.h"
# include "xlat/phonet_protocols.h"
# include "xlat/caif_protocols.h"
# include "xlat/nfc_protocols.h"
# include "xlat/kcm_protocols.h"
# include "xlat/smc_protocols.h"
2014-10-03 13:40:28 +04:00
2016-07-06 18:49:22 +03:00
static void
2016-12-26 13:26:03 +03:00
decode_sockbuf ( struct tcb * const tcp , const int fd , const kernel_ulong_t addr ,
const kernel_ulong_t addrlen )
2016-07-06 18:49:22 +03:00
{
switch ( verbose ( tcp ) ? getfdproto ( tcp , fd ) : SOCK_PROTO_UNKNOWN ) {
case SOCK_PROTO_NETLINK :
2016-07-11 15:54:59 +03:00
decode_netlink ( tcp , fd , addr , addrlen ) ;
2016-07-06 18:49:22 +03:00
break ;
default :
2016-12-20 19:43:26 +03:00
printstrn ( tcp , addr , addrlen ) ;
2016-07-06 18:49:22 +03:00
}
}
2008-11-10 20:21:23 +03:00
/*
* low bits of the socket type define real socket type ,
* other bits are socket type flags .
*/
static void
2016-05-15 00:46:05 +03:00
tprint_sock_type ( unsigned int flags )
2008-11-10 20:21:23 +03:00
{
const char * str = xlookup ( socktypes , flags & SOCK_TYPE_MASK ) ;
2011-06-22 16:32:43 +04:00
if ( str ) {
2018-04-04 15:38:22 +03:00
print_xlat_ex ( flags & SOCK_TYPE_MASK , str , XLAT_STYLE_DEFAULT ) ;
2008-11-10 20:21:23 +03:00
flags & = ~ SOCK_TYPE_MASK ;
if ( ! flags )
return ;
2011-09-01 12:00:28 +04:00
tprints ( " | " ) ;
2008-11-10 20:21:23 +03:00
}
printflags ( sock_type_flags , flags , " SOCK_??? " ) ;
}
2015-04-07 04:36:50 +03:00
SYS_FUNC ( socket )
1999-02-19 03:21:36 +03:00
{
2016-04-04 04:35:28 +03:00
printxval ( addrfams , tcp - > u_arg [ 0 ] , " AF_??? " ) ;
2015-07-20 01:52:47 +03:00
tprints ( " , " ) ;
tprint_sock_type ( tcp - > u_arg [ 1 ] ) ;
tprints ( " , " ) ;
switch ( tcp - > u_arg [ 0 ] ) {
2016-04-04 04:35:28 +03:00
case AF_INET :
case AF_INET6 :
2015-07-20 01:52:47 +03:00
printxval ( inet_protocols , tcp - > u_arg [ 2 ] , " IPPROTO_??? " ) ;
break ;
2016-06-20 01:02:45 +03:00
2016-04-04 04:35:28 +03:00
case AF_NETLINK :
2015-07-20 01:52:47 +03:00
printxval ( netlink_protocols , tcp - > u_arg [ 2 ] , " NETLINK_??? " ) ;
break ;
2016-06-20 01:02:45 +03:00
net: decode more AF_* protocol names
* xlat/caif_protocols.in: New file.
* xlat/can_protocols.in: Likewise.
* xlat/irda_protocols.in: Likewise.
* xlat/isdn_protocols.in: Likewise.
* xlat/kcm_protocols.in: Likewise.
* xlat/nfc_protocols.in: Likewise.
* xlat/phonet_protocols.in: Likewise.
* xlat/smc_protocols.in: Likewise.
* net.c: Include "xlat/irda_protocols.h", "xlat/can_protocols.h",
"xlat/isdn_protocols.h", "xlat/phonet_protocols.h",
"xlat/caif_protocols.h", "xlat/nfc_protocols.h",
"xlat/kcm_protocols.h", and "xlat/smc_protocols.h".
(SYS_FUNC(socket)): Decode AF_IRDA, AF_CAN, AF_RXRPC, AF_ISDN,
AF_PHONET, AF_CAIF, AF_NFC, AF_KCM, and AF_SMC protocol names.
Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
2018-05-07 09:10:41 +03:00
case AF_IRDA :
printxval_index ( can_protocols , tcp - > u_arg [ 2 ] , " IRDAPROTO_??? " ) ;
break ;
case AF_CAN :
printxval_index ( can_protocols , tcp - > u_arg [ 2 ] , " CAN_??? " ) ;
break ;
2016-04-04 04:35:28 +03:00
case AF_BLUETOOTH :
2018-04-11 14:53:54 +03:00
printxval_index ( bt_protocols , tcp - > u_arg [ 2 ] , " BTPROTO_??? " ) ;
2015-07-20 01:52:47 +03:00
break ;
2016-06-20 01:02:45 +03:00
net: decode more AF_* protocol names
* xlat/caif_protocols.in: New file.
* xlat/can_protocols.in: Likewise.
* xlat/irda_protocols.in: Likewise.
* xlat/isdn_protocols.in: Likewise.
* xlat/kcm_protocols.in: Likewise.
* xlat/nfc_protocols.in: Likewise.
* xlat/phonet_protocols.in: Likewise.
* xlat/smc_protocols.in: Likewise.
* net.c: Include "xlat/irda_protocols.h", "xlat/can_protocols.h",
"xlat/isdn_protocols.h", "xlat/phonet_protocols.h",
"xlat/caif_protocols.h", "xlat/nfc_protocols.h",
"xlat/kcm_protocols.h", and "xlat/smc_protocols.h".
(SYS_FUNC(socket)): Decode AF_IRDA, AF_CAN, AF_RXRPC, AF_ISDN,
AF_PHONET, AF_CAIF, AF_NFC, AF_KCM, and AF_SMC protocol names.
Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
2018-05-07 09:10:41 +03:00
case AF_RXRPC :
printxval ( addrfams , tcp - > u_arg [ 2 ] , " AF_??? " ) ;
break ;
case AF_ISDN :
printxval ( isdn_protocols , tcp - > u_arg [ 2 ] , " ISDN_P_??? " ) ;
break ;
case AF_PHONET :
printxval_index ( phonet_protocols , tcp - > u_arg [ 2 ] , " PN_PROTO_??? " ) ;
break ;
case AF_CAIF :
printxval_index ( caif_protocols , tcp - > u_arg [ 2 ] , " CAIFPROTO_??? " ) ;
break ;
case AF_NFC :
printxval_index ( nfc_protocols , tcp - > u_arg [ 2 ] ,
" NFC_SOCKPROTO_??? " ) ;
break ;
case AF_KCM :
printxval_index ( kcm_protocols , tcp - > u_arg [ 2 ] , " KCMPROTO_??? " ) ;
break ;
case AF_SMC :
printxval_index ( smc_protocols , tcp - > u_arg [ 2 ] , " SMCPROTO_??? " ) ;
break ;
2015-07-20 01:52:47 +03:00
default :
2016-12-26 13:16:35 +03:00
tprintf ( " % " PRI_klu , tcp - > u_arg [ 2 ] ) ;
2015-07-20 01:52:47 +03:00
break ;
1999-02-19 03:21:36 +03:00
}
2015-07-20 01:52:47 +03:00
2015-08-02 04:41:26 +03:00
return RVAL_DECODED | RVAL_FD ;
1999-02-19 03:21:36 +03:00
}
2016-07-10 00:52:43 +03:00
static bool
2016-12-23 13:47:36 +03:00
fetch_socklen ( struct tcb * const tcp , int * const plen ,
2016-12-26 13:26:03 +03:00
const kernel_ulong_t sockaddr , const kernel_ulong_t socklen )
2016-07-10 00:52:43 +03:00
{
return verbose ( tcp ) & & sockaddr & & socklen
& & umove ( tcp , socklen , plen ) = = 0 ;
}
2009-08-14 14:34:05 +04:00
static int
2016-07-10 00:52:34 +03:00
decode_sockname ( struct tcb * tcp )
1999-02-19 03:21:36 +03:00
{
2016-07-10 00:52:43 +03:00
int ulen , rlen ;
1999-02-19 03:21:36 +03:00
if ( entering ( tcp ) ) {
Add decoding of sockets descriptor 'paths' for network calls
* net.c (sys_bind, sys_listen, do_accept, sys_send, sys_sendto,
sys_sendmsg, sys_sendmmsg, sys_recv, sys_recvfrom, sys_recvmsg,
sys_recvmmsg, sys_shutdown, sys_getsockopt, sys_setsockopt): Decode
socket descriptor arguments using printfd.
* pathtrace.c (pathtrace_match): Also check TRACE_NETWORK syscalls
that take socket descriptor arguments.
* tests/net-fd.test: New test for socket descriptor arguments decoding.
* tests/Makefile.am (TESTS): Add net-fd.test.
(net-fd.log): New dependency on net.log.
Signed-off-by: Philippe Ombredanne <pombredanne@nexb.com>
Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>
2014-02-01 21:57:45 +04:00
printfd ( tcp , tcp - > u_arg [ 0 ] ) ;
tprints ( " , " ) ;
2016-07-10 00:52:43 +03:00
if ( fetch_socklen ( tcp , & ulen , tcp - > u_arg [ 1 ] , tcp - > u_arg [ 2 ] ) ) {
2016-07-15 19:08:19 +03:00
set_tcb_priv_ulong ( tcp , ulen ) ;
2016-07-10 00:52:43 +03:00
return 0 ;
} else {
printaddr ( tcp - > u_arg [ 1 ] ) ;
tprints ( " , " ) ;
printaddr ( tcp - > u_arg [ 2 ] ) ;
return RVAL_DECODED ;
}
2009-08-14 14:34:05 +04:00
}
net.c: use printaddr and umove_or_printaddr
* net.c (printsock): Use printaddr and umove_or_printaddr.
(printcmsghdr, printmsghdr, printmmsghdr, decode_mmsg, do_sockname,
sys_recv, sys_recvfrom, sys_recvmsg, do_pipe, print_linger, print_ucred,
print_tpacket_stats, print_icmp_filter, print_getsockopt,
print_group_req, print_tpacket_req, print_packet_mreq,
print_setsockopt): Use printaddr.
(print_mreq, print_mreq6): Use umove_or_printaddr.
2015-07-20 01:36:46 +03:00
2016-07-15 19:08:19 +03:00
ulen = get_tcb_priv_ulong ( tcp ) ;
2016-07-10 00:52:43 +03:00
if ( syserror ( tcp ) | | umove ( tcp , tcp - > u_arg [ 2 ] , & rlen ) < 0 ) {
net.c: use printaddr and umove_or_printaddr
* net.c (printsock): Use printaddr and umove_or_printaddr.
(printcmsghdr, printmsghdr, printmmsghdr, decode_mmsg, do_sockname,
sys_recv, sys_recvfrom, sys_recvmsg, do_pipe, print_linger, print_ucred,
print_tpacket_stats, print_icmp_filter, print_getsockopt,
print_group_req, print_tpacket_req, print_packet_mreq,
print_setsockopt): Use printaddr.
(print_mreq, print_mreq6): Use umove_or_printaddr.
2015-07-20 01:36:46 +03:00
printaddr ( tcp - > u_arg [ 1 ] ) ;
2016-07-10 00:52:43 +03:00
tprintf ( " , [%d] " , ulen ) ;
net.c: use printaddr and umove_or_printaddr
* net.c (printsock): Use printaddr and umove_or_printaddr.
(printcmsghdr, printmsghdr, printmmsghdr, decode_mmsg, do_sockname,
sys_recv, sys_recvfrom, sys_recvmsg, do_pipe, print_linger, print_ucred,
print_tpacket_stats, print_icmp_filter, print_getsockopt,
print_group_req, print_tpacket_req, print_packet_mreq,
print_setsockopt): Use printaddr.
(print_mreq, print_mreq6): Use umove_or_printaddr.
2015-07-20 01:36:46 +03:00
} else {
2016-07-10 00:52:43 +03:00
decode_sockaddr ( tcp , tcp - > u_arg [ 1 ] , ulen > rlen ? rlen : ulen ) ;
2016-07-10 00:52:58 +03:00
if ( ulen ! = rlen )
2016-07-10 00:52:51 +03:00
tprintf ( " , [%d->%d] " , ulen , rlen ) ;
else
tprintf ( " , [%d] " , rlen ) ;
1999-02-19 03:21:36 +03:00
}
net.c: use printaddr and umove_or_printaddr
* net.c (printsock): Use printaddr and umove_or_printaddr.
(printcmsghdr, printmsghdr, printmmsghdr, decode_mmsg, do_sockname,
sys_recv, sys_recvfrom, sys_recvmsg, do_pipe, print_linger, print_ucred,
print_tpacket_stats, print_icmp_filter, print_getsockopt,
print_group_req, print_tpacket_req, print_packet_mreq,
print_setsockopt): Use printaddr.
(print_mreq, print_mreq6): Use umove_or_printaddr.
2015-07-20 01:36:46 +03:00
2016-07-10 00:52:34 +03:00
return RVAL_DECODED ;
1999-02-19 03:21:36 +03:00
}
2015-04-07 04:36:50 +03:00
SYS_FUNC ( accept )
2009-08-14 14:34:05 +04:00
{
2016-07-10 00:52:34 +03:00
return decode_sockname ( tcp ) | RVAL_FD ;
2009-08-14 14:34:05 +04:00
}
2015-04-07 04:36:50 +03:00
SYS_FUNC ( accept4 )
2009-08-14 14:34:05 +04:00
{
2016-07-10 00:52:34 +03:00
int rc = decode_sockname ( tcp ) ;
if ( rc & RVAL_DECODED ) {
tprints ( " , " ) ;
printflags ( sock_type_flags , tcp - > u_arg [ 3 ] , " SOCK_??? " ) ;
}
return rc | RVAL_FD ;
2009-08-14 14:34:05 +04:00
}
2015-04-07 04:36:50 +03:00
SYS_FUNC ( send )
1999-02-19 03:21:36 +03:00
{
2015-07-20 01:52:47 +03:00
printfd ( tcp , tcp - > u_arg [ 0 ] ) ;
tprints ( " , " ) ;
2016-07-06 18:49:22 +03:00
decode_sockbuf ( tcp , tcp - > u_arg [ 0 ] , tcp - > u_arg [ 1 ] , tcp - > u_arg [ 2 ] ) ;
2016-12-26 13:16:35 +03:00
tprintf ( " , % " PRI_klu " , " , tcp - > u_arg [ 2 ] ) ;
2015-07-20 01:52:47 +03:00
/* flags */
printflags ( msg_flags , tcp - > u_arg [ 3 ] , " MSG_??? " ) ;
return RVAL_DECODED ;
1999-02-19 03:21:36 +03:00
}
2015-04-07 04:36:50 +03:00
SYS_FUNC ( sendto )
1999-02-19 03:21:36 +03:00
{
2015-07-20 01:52:47 +03:00
printfd ( tcp , tcp - > u_arg [ 0 ] ) ;
tprints ( " , " ) ;
2016-07-06 18:49:22 +03:00
decode_sockbuf ( tcp , tcp - > u_arg [ 0 ] , tcp - > u_arg [ 1 ] , tcp - > u_arg [ 2 ] ) ;
2016-12-26 13:16:35 +03:00
tprintf ( " , % " PRI_klu " , " , tcp - > u_arg [ 2 ] ) ;
2015-07-20 01:52:47 +03:00
/* flags */
printflags ( msg_flags , tcp - > u_arg [ 3 ] , " MSG_??? " ) ;
/* to address */
2016-07-12 12:17:30 +03:00
const int addrlen = tcp - > u_arg [ 5 ] ;
2015-07-20 01:52:47 +03:00
tprints ( " , " ) ;
2016-07-12 12:17:30 +03:00
decode_sockaddr ( tcp , tcp - > u_arg [ 4 ] , addrlen ) ;
2015-07-20 01:52:47 +03:00
/* to length */
2016-07-12 12:17:30 +03:00
tprintf ( " , %d " , addrlen ) ;
2015-07-20 01:52:47 +03:00
return RVAL_DECODED ;
1999-02-19 03:21:36 +03:00
}
2015-04-07 04:36:50 +03:00
SYS_FUNC ( recv )
1999-02-19 03:21:36 +03:00
{
if ( entering ( tcp ) ) {
Add decoding of sockets descriptor 'paths' for network calls
* net.c (sys_bind, sys_listen, do_accept, sys_send, sys_sendto,
sys_sendmsg, sys_sendmmsg, sys_recv, sys_recvfrom, sys_recvmsg,
sys_recvmmsg, sys_shutdown, sys_getsockopt, sys_setsockopt): Decode
socket descriptor arguments using printfd.
* pathtrace.c (pathtrace_match): Also check TRACE_NETWORK syscalls
that take socket descriptor arguments.
* tests/net-fd.test: New test for socket descriptor arguments decoding.
* tests/Makefile.am (TESTS): Add net-fd.test.
(net-fd.log): New dependency on net.log.
Signed-off-by: Philippe Ombredanne <pombredanne@nexb.com>
Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>
2014-02-01 21:57:45 +04:00
printfd ( tcp , tcp - > u_arg [ 0 ] ) ;
tprints ( " , " ) ;
1999-02-19 03:21:36 +03:00
} else {
2016-07-06 18:49:22 +03:00
if ( syserror ( tcp ) ) {
net.c: use printaddr and umove_or_printaddr
* net.c (printsock): Use printaddr and umove_or_printaddr.
(printcmsghdr, printmsghdr, printmmsghdr, decode_mmsg, do_sockname,
sys_recv, sys_recvfrom, sys_recvmsg, do_pipe, print_linger, print_ucred,
print_tpacket_stats, print_icmp_filter, print_getsockopt,
print_group_req, print_tpacket_req, print_packet_mreq,
print_setsockopt): Use printaddr.
(print_mreq, print_mreq6): Use umove_or_printaddr.
2015-07-20 01:36:46 +03:00
printaddr ( tcp - > u_arg [ 1 ] ) ;
2016-07-06 18:49:22 +03:00
} else {
decode_sockbuf ( tcp , tcp - > u_arg [ 0 ] , tcp - > u_arg [ 1 ] ,
tcp - > u_rval ) ;
}
1999-02-19 03:21:36 +03:00
2016-12-26 13:16:35 +03:00
tprintf ( " , % " PRI_klu " , " , tcp - > u_arg [ 2 ] ) ;
2005-05-31 Dmitry V. Levin <ldv@altlinux.org>
* util.c (printxval): Change third argument from "char *" to
"const char *".
(printflags): Add third argument, "const char *", with similar
meaning to the third argument of printxval().
* defs.h (printxval): Change third argument from "char *" to
"const char *".
(printflags): Add third argument.
* bjm.c (sys_query_module) [LINUX]: Pass third argument to
printflags().
* desc.c (sys_fcntl): Likewise.
(sys_flock) [LOCK_SH]: Likewise.
(print_epoll_event) [HAVE_SYS_EPOLL_H]: Likewise.
* file.c (sys_open): Likewise.
(solaris_open) [LINUXSPARC]: Likewise.
(sys_access): Likewise.
(sys_chflags, sys_fchflags) [FREEBSD]: Likewise.
(realprintstat) [HAVE_LONG_LONG_OFF_T &&
HAVE_STRUCT_STAT_ST_FLAGS]: Likewise.
(printstat64) [HAVE_STAT64 &&
HAVE_STRUCT_STAT_ST_FLAGS]: Likewise.
(sys_setxattr, sys_fsetxattr): Likewise.
* ipc.c (sys_msgget, sys_msgsnd, sys_msgrcv, sys_semget,
sys_shmget, sys_shmat) [LINUX || SUNOS4 || FREEBSD]: Likewise.
(sys_mq_open) [LINUX]: Likewise.
(printmqattr) [HAVE_MQUEUE_H]: Likewise.
* mem.c (print_mmap) [!HAVE_LONG_LONG_OFF_T]: Likewise.
(sys_mmap64) [_LFS64_LARGEFILE || HAVE_LONG_LONG_OFF_T]: Likewise.
(sys_mprotect): Likewise.
(sys_mremap, sys_madvise, sys_mlockall) [LINUX]: Likewise.
(sys_msync) [MS_ASYNC]: Likewise.
(sys_mctl) [MC_SYNC]: Likewise.
(sys_remap_file_pages, sys_mbind, sys_get_mempolicy) [LINUX]:
Likewise.
* net.c (printmsghdr) [HAVE_STRUCT_MSGHDR_MSG_CONTROL]: Likewise.
(sys_send, sys_sendto): Likewise.
(sys_sendmsg) [HAVE_SENDMSG]: Likewise.
(sys_recv, sys_recvfrom): Likewise.
(sys_recvmsg) [HAVE_SENDMSG]: Likewise.
(printicmpfilter) [ICMP_FILTER]: Likewise.
* proc.c (proc_ioctl) [SVR4 && !HAVE_MP_PROCFS || FREEBSD]: Likewise.
* process.c (sys_clone) [LINUX]: Likewise.
(printwaitn): Likewise.
(sys_waitid) [SVR4 || LINUX]: Likewise.
* signal.c (sys_sigvec) [SUNOS4 || FREEBSD]: Likewise.
(sys_sigaction): Likewise.
(printcontext) [SVR4]: Likewise.
(print_stack_t) [LINUX) || FREEBSD]: Likewise.
(sys_rt_sigaction) [LINUX]: Likewise.
* sock.c (sock_ioctl) [LINUX]: Likewise.
* stream.c (sys_putmsg, sys_getmsg): Likewise.
(sys_putpmsg) [SYS_putpmsg]: Likewise.
(sys_getpmsg) [SYS_getpmsg]: Likewise.
(sys_poll): Likewise.
(print_transport_message) [TI_BIND]: Likewise.
(stream_ioctl): Likewise.
* system.c (sys_mount, sys_reboot): Likewise.
(sys_cacheflush) [LINUX && M68K]: Likewise.
(sys_capget, sys_capset) [SYS_capget]: Likewise.
* term.c (term_ioctl) [TIOCMGET]: Likewise.
* time.c (sys_clock_nanosleep, sys_timer_settime) [LINUX]:
Likewise.
Fixes RH#159310.
2005-06-01 23:02:36 +04:00
printflags ( msg_flags , tcp - > u_arg [ 3 ] , " MSG_??? " ) ;
1999-02-19 03:21:36 +03:00
}
return 0 ;
}
2015-04-07 04:36:50 +03:00
SYS_FUNC ( recvfrom )
1999-02-19 03:21:36 +03:00
{
2016-07-12 10:46:19 +03:00
int ulen , rlen ;
1999-02-19 03:21:36 +03:00
if ( entering ( tcp ) ) {
Add decoding of sockets descriptor 'paths' for network calls
* net.c (sys_bind, sys_listen, do_accept, sys_send, sys_sendto,
sys_sendmsg, sys_sendmmsg, sys_recv, sys_recvfrom, sys_recvmsg,
sys_recvmmsg, sys_shutdown, sys_getsockopt, sys_setsockopt): Decode
socket descriptor arguments using printfd.
* pathtrace.c (pathtrace_match): Also check TRACE_NETWORK syscalls
that take socket descriptor arguments.
* tests/net-fd.test: New test for socket descriptor arguments decoding.
* tests/Makefile.am (TESTS): Add net-fd.test.
(net-fd.log): New dependency on net.log.
Signed-off-by: Philippe Ombredanne <pombredanne@nexb.com>
Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>
2014-02-01 21:57:45 +04:00
printfd ( tcp , tcp - > u_arg [ 0 ] ) ;
tprints ( " , " ) ;
2016-07-12 10:46:19 +03:00
if ( fetch_socklen ( tcp , & ulen , tcp - > u_arg [ 4 ] , tcp - > u_arg [ 5 ] ) ) {
2016-07-15 19:08:19 +03:00
set_tcb_priv_ulong ( tcp , ulen ) ;
2016-07-12 10:46:19 +03:00
}
1999-02-19 03:21:36 +03:00
} else {
net.c: recvfrom fixes
This change fixes these three problems (before/after is shown):
On interrupted syscall, flags are not decoded:
-recvfrom(3, 0x7fff0a41e306, 10, 2, 0, 0) = ? ERESTARTSYS
+recvfrom(3, 0x7fff0a41e306, 10, MSG_PEEK, 0, 0) = ? ERESTARTSYS
If peer address is unavalable (example: anon sockets from socketpair()),
kernel returns socklen of 0, but we ignore that and show bogus sockaddr data:
-recvfrom(3, "123456789\0", 10, MSG_PEEK, {sa_family=0x7777 /* AF_??? */, sa_data="wwwwwwwwwwwwww"}, [0]) = 10
+recvfrom(3, "123456789\0", 10, MSG_PEEK, 0x7ffde6edf760, [0]) = 10
SYS_FUNC(recvfrom) passes address of fromlen, not fromlen, to printsock():
- printsock(tcp, tcp->u_arg[4], tcp->u_arg[5]);
+ printsock(tcp, tcp->u_arg[4], fromlen);
Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
2015-07-30 14:29:20 +03:00
/* buf */
1999-02-19 03:21:36 +03:00
if ( syserror ( tcp ) ) {
2015-07-30 16:53:42 +03:00
printaddr ( tcp - > u_arg [ 1 ] ) ;
net.c: recvfrom fixes
This change fixes these three problems (before/after is shown):
On interrupted syscall, flags are not decoded:
-recvfrom(3, 0x7fff0a41e306, 10, 2, 0, 0) = ? ERESTARTSYS
+recvfrom(3, 0x7fff0a41e306, 10, MSG_PEEK, 0, 0) = ? ERESTARTSYS
If peer address is unavalable (example: anon sockets from socketpair()),
kernel returns socklen of 0, but we ignore that and show bogus sockaddr data:
-recvfrom(3, "123456789\0", 10, MSG_PEEK, {sa_family=0x7777 /* AF_??? */, sa_data="wwwwwwwwwwwwww"}, [0]) = 10
+recvfrom(3, "123456789\0", 10, MSG_PEEK, 0x7ffde6edf760, [0]) = 10
SYS_FUNC(recvfrom) passes address of fromlen, not fromlen, to printsock():
- printsock(tcp, tcp->u_arg[4], tcp->u_arg[5]);
+ printsock(tcp, tcp->u_arg[4], fromlen);
Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
2015-07-30 14:29:20 +03:00
} else {
2016-07-06 18:49:22 +03:00
decode_sockbuf ( tcp , tcp - > u_arg [ 0 ] , tcp - > u_arg [ 1 ] ,
tcp - > u_rval ) ;
1999-02-19 03:21:36 +03:00
}
2016-07-12 10:46:19 +03:00
/* size */
2016-12-26 13:16:35 +03:00
tprintf ( " , % " PRI_klu " , " , tcp - > u_arg [ 2 ] ) ;
1999-02-19 03:21:36 +03:00
/* flags */
2005-05-31 Dmitry V. Levin <ldv@altlinux.org>
* util.c (printxval): Change third argument from "char *" to
"const char *".
(printflags): Add third argument, "const char *", with similar
meaning to the third argument of printxval().
* defs.h (printxval): Change third argument from "char *" to
"const char *".
(printflags): Add third argument.
* bjm.c (sys_query_module) [LINUX]: Pass third argument to
printflags().
* desc.c (sys_fcntl): Likewise.
(sys_flock) [LOCK_SH]: Likewise.
(print_epoll_event) [HAVE_SYS_EPOLL_H]: Likewise.
* file.c (sys_open): Likewise.
(solaris_open) [LINUXSPARC]: Likewise.
(sys_access): Likewise.
(sys_chflags, sys_fchflags) [FREEBSD]: Likewise.
(realprintstat) [HAVE_LONG_LONG_OFF_T &&
HAVE_STRUCT_STAT_ST_FLAGS]: Likewise.
(printstat64) [HAVE_STAT64 &&
HAVE_STRUCT_STAT_ST_FLAGS]: Likewise.
(sys_setxattr, sys_fsetxattr): Likewise.
* ipc.c (sys_msgget, sys_msgsnd, sys_msgrcv, sys_semget,
sys_shmget, sys_shmat) [LINUX || SUNOS4 || FREEBSD]: Likewise.
(sys_mq_open) [LINUX]: Likewise.
(printmqattr) [HAVE_MQUEUE_H]: Likewise.
* mem.c (print_mmap) [!HAVE_LONG_LONG_OFF_T]: Likewise.
(sys_mmap64) [_LFS64_LARGEFILE || HAVE_LONG_LONG_OFF_T]: Likewise.
(sys_mprotect): Likewise.
(sys_mremap, sys_madvise, sys_mlockall) [LINUX]: Likewise.
(sys_msync) [MS_ASYNC]: Likewise.
(sys_mctl) [MC_SYNC]: Likewise.
(sys_remap_file_pages, sys_mbind, sys_get_mempolicy) [LINUX]:
Likewise.
* net.c (printmsghdr) [HAVE_STRUCT_MSGHDR_MSG_CONTROL]: Likewise.
(sys_send, sys_sendto): Likewise.
(sys_sendmsg) [HAVE_SENDMSG]: Likewise.
(sys_recv, sys_recvfrom): Likewise.
(sys_recvmsg) [HAVE_SENDMSG]: Likewise.
(printicmpfilter) [ICMP_FILTER]: Likewise.
* proc.c (proc_ioctl) [SVR4 && !HAVE_MP_PROCFS || FREEBSD]: Likewise.
* process.c (sys_clone) [LINUX]: Likewise.
(printwaitn): Likewise.
(sys_waitid) [SVR4 || LINUX]: Likewise.
* signal.c (sys_sigvec) [SUNOS4 || FREEBSD]: Likewise.
(sys_sigaction): Likewise.
(printcontext) [SVR4]: Likewise.
(print_stack_t) [LINUX) || FREEBSD]: Likewise.
(sys_rt_sigaction) [LINUX]: Likewise.
* sock.c (sock_ioctl) [LINUX]: Likewise.
* stream.c (sys_putmsg, sys_getmsg): Likewise.
(sys_putpmsg) [SYS_putpmsg]: Likewise.
(sys_getpmsg) [SYS_getpmsg]: Likewise.
(sys_poll): Likewise.
(print_transport_message) [TI_BIND]: Likewise.
(stream_ioctl): Likewise.
* system.c (sys_mount, sys_reboot): Likewise.
(sys_cacheflush) [LINUX && M68K]: Likewise.
(sys_capget, sys_capset) [SYS_capget]: Likewise.
* term.c (term_ioctl) [TIOCMGET]: Likewise.
* time.c (sys_clock_nanosleep, sys_timer_settime) [LINUX]:
Likewise.
Fixes RH#159310.
2005-06-01 23:02:36 +04:00
printflags ( msg_flags , tcp - > u_arg [ 3 ] , " MSG_??? " ) ;
net.c: use printaddr and umove_or_printaddr
* net.c (printsock): Use printaddr and umove_or_printaddr.
(printcmsghdr, printmsghdr, printmmsghdr, decode_mmsg, do_sockname,
sys_recv, sys_recvfrom, sys_recvmsg, do_pipe, print_linger, print_ucred,
print_tpacket_stats, print_icmp_filter, print_getsockopt,
print_group_req, print_tpacket_req, print_packet_mreq,
print_setsockopt): Use printaddr.
(print_mreq, print_mreq6): Use umove_or_printaddr.
2015-07-20 01:36:46 +03:00
tprints ( " , " ) ;
2016-07-12 10:46:19 +03:00
2016-07-15 19:08:19 +03:00
ulen = get_tcb_priv_ulong ( tcp ) ;
2016-07-12 10:46:19 +03:00
if ( ! fetch_socklen ( tcp , & rlen , tcp - > u_arg [ 4 ] , tcp - > u_arg [ 5 ] ) ) {
/* from address */
net.c: use printaddr and umove_or_printaddr
* net.c (printsock): Use printaddr and umove_or_printaddr.
(printcmsghdr, printmsghdr, printmmsghdr, decode_mmsg, do_sockname,
sys_recv, sys_recvfrom, sys_recvmsg, do_pipe, print_linger, print_ucred,
print_tpacket_stats, print_icmp_filter, print_getsockopt,
print_group_req, print_tpacket_req, print_packet_mreq,
print_setsockopt): Use printaddr.
(print_mreq, print_mreq6): Use umove_or_printaddr.
2015-07-20 01:36:46 +03:00
printaddr ( tcp - > u_arg [ 4 ] ) ;
tprints ( " , " ) ;
2016-07-12 10:46:19 +03:00
/* from length */
net.c: use printaddr and umove_or_printaddr
* net.c (printsock): Use printaddr and umove_or_printaddr.
(printcmsghdr, printmsghdr, printmmsghdr, decode_mmsg, do_sockname,
sys_recv, sys_recvfrom, sys_recvmsg, do_pipe, print_linger, print_ucred,
print_tpacket_stats, print_icmp_filter, print_getsockopt,
print_group_req, print_tpacket_req, print_packet_mreq,
print_setsockopt): Use printaddr.
(print_mreq, print_mreq6): Use umove_or_printaddr.
2015-07-20 01:36:46 +03:00
printaddr ( tcp - > u_arg [ 5 ] ) ;
1999-02-19 03:21:36 +03:00
return 0 ;
}
2016-07-12 10:46:19 +03:00
if ( syserror ( tcp ) ) {
/* from address */
printaddr ( tcp - > u_arg [ 4 ] ) ;
/* from length */
tprintf ( " , [%d] " , ulen ) ;
return 0 ;
}
net.c: recvfrom fixes
This change fixes these three problems (before/after is shown):
On interrupted syscall, flags are not decoded:
-recvfrom(3, 0x7fff0a41e306, 10, 2, 0, 0) = ? ERESTARTSYS
+recvfrom(3, 0x7fff0a41e306, 10, MSG_PEEK, 0, 0) = ? ERESTARTSYS
If peer address is unavalable (example: anon sockets from socketpair()),
kernel returns socklen of 0, but we ignore that and show bogus sockaddr data:
-recvfrom(3, "123456789\0", 10, MSG_PEEK, {sa_family=0x7777 /* AF_??? */, sa_data="wwwwwwwwwwwwww"}, [0]) = 10
+recvfrom(3, "123456789\0", 10, MSG_PEEK, 0x7ffde6edf760, [0]) = 10
SYS_FUNC(recvfrom) passes address of fromlen, not fromlen, to printsock():
- printsock(tcp, tcp->u_arg[4], tcp->u_arg[5]);
+ printsock(tcp, tcp->u_arg[4], fromlen);
Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
2015-07-30 14:29:20 +03:00
/* from address */
2016-07-12 10:46:19 +03:00
decode_sockaddr ( tcp , tcp - > u_arg [ 4 ] , ulen > rlen ? rlen : ulen ) ;
1999-02-19 03:21:36 +03:00
/* from length */
2016-07-12 10:46:19 +03:00
if ( ulen ! = rlen )
tprintf ( " , [%d->%d] " , ulen , rlen ) ;
else
tprintf ( " , [%d] " , rlen ) ;
1999-02-19 03:21:36 +03:00
}
return 0 ;
}
2015-04-07 04:36:50 +03:00
SYS_FUNC ( getsockname )
1999-02-19 03:21:36 +03:00
{
2016-07-10 00:52:34 +03:00
return decode_sockname ( tcp ) ;
1999-02-19 03:21:36 +03:00
}
2015-08-02 04:54:48 +03:00
static void
printpair_fd ( struct tcb * tcp , const int i0 , const int i1 )
{
tprints ( " [ " ) ;
printfd ( tcp , i0 ) ;
tprints ( " , " ) ;
printfd ( tcp , i1 ) ;
tprints ( " ] " ) ;
}
static void
2016-12-26 13:26:03 +03:00
decode_pair_fd ( struct tcb * const tcp , const kernel_ulong_t addr )
2015-08-02 04:54:48 +03:00
{
int pair [ 2 ] ;
if ( umove_or_printaddr ( tcp , addr , & pair ) )
return ;
printpair_fd ( tcp , pair [ 0 ] , pair [ 1 ] ) ;
}
2008-10-23 Dmitry V. Levin <ldv@altlinux.org>
Implement parsers for new linux syscalls.
* desc.c (do_dup2, [LINUX] sys_dup3): New functions.
(sys_dup2): Use do_dup2.
[LINUX] (sys_epoll_create1): New function.
[LINUX] (do_eventfd, sys_eventfd2): New functions.
[LINUX] (sys_eventfd): Use do_eventfd.
* net.c (do_pipe, [LINUX] sys_pipe2): New functions.
(sys_pipe): Use do_pipe.
* signal.c [LINUX] (do_signalfd, sys_signalfd4): New functions.
[LINUX] (sys_signalfd): Use do_signalfd.
* linux/syscall.h: Declare new sys_* functions.
* linux/syscallent.h: Hook up signalfd4, eventfd2, epoll_create1,
dup3, pipe2, inotify_init1.
* linux/x86_64/syscallent.h: Hook up paccept, signalfd4, eventfd2,
epoll_create1, dup3, pipe2, inotify_init1.
2008-11-11 01:53:02 +03:00
static int
do_pipe ( struct tcb * tcp , int flags_arg )
{
1999-02-19 03:21:36 +03:00
if ( exiting ( tcp ) ) {
2016-02-12 19:37:31 +03:00
decode_pair_fd ( tcp , tcp - > u_arg [ 0 ] ) ;
2008-10-23 Dmitry V. Levin <ldv@altlinux.org>
Implement parsers for new linux syscalls.
* desc.c (do_dup2, [LINUX] sys_dup3): New functions.
(sys_dup2): Use do_dup2.
[LINUX] (sys_epoll_create1): New function.
[LINUX] (do_eventfd, sys_eventfd2): New functions.
[LINUX] (sys_eventfd): Use do_eventfd.
* net.c (do_pipe, [LINUX] sys_pipe2): New functions.
(sys_pipe): Use do_pipe.
* signal.c [LINUX] (do_signalfd, sys_signalfd4): New functions.
[LINUX] (sys_signalfd): Use do_signalfd.
* linux/syscall.h: Declare new sys_* functions.
* linux/syscallent.h: Hook up signalfd4, eventfd2, epoll_create1,
dup3, pipe2, inotify_init1.
* linux/x86_64/syscallent.h: Hook up paccept, signalfd4, eventfd2,
epoll_create1, dup3, pipe2, inotify_init1.
2008-11-11 01:53:02 +03:00
if ( flags_arg > = 0 ) {
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
2008-10-23 Dmitry V. Levin <ldv@altlinux.org>
Implement parsers for new linux syscalls.
* desc.c (do_dup2, [LINUX] sys_dup3): New functions.
(sys_dup2): Use do_dup2.
[LINUX] (sys_epoll_create1): New function.
[LINUX] (do_eventfd, sys_eventfd2): New functions.
[LINUX] (sys_eventfd): Use do_eventfd.
* net.c (do_pipe, [LINUX] sys_pipe2): New functions.
(sys_pipe): Use do_pipe.
* signal.c [LINUX] (do_signalfd, sys_signalfd4): New functions.
[LINUX] (sys_signalfd): Use do_signalfd.
* linux/syscall.h: Declare new sys_* functions.
* linux/syscallent.h: Hook up signalfd4, eventfd2, epoll_create1,
dup3, pipe2, inotify_init1.
* linux/x86_64/syscallent.h: Hook up paccept, signalfd4, eventfd2,
epoll_create1, dup3, pipe2, inotify_init1.
2008-11-11 01:53:02 +03:00
printflags ( open_mode_flags , tcp - > u_arg [ flags_arg ] , " O_??? " ) ;
}
}
1999-02-19 03:21:36 +03:00
return 0 ;
}
2015-04-07 04:36:50 +03:00
SYS_FUNC ( pipe )
2008-10-23 Dmitry V. Levin <ldv@altlinux.org>
Implement parsers for new linux syscalls.
* desc.c (do_dup2, [LINUX] sys_dup3): New functions.
(sys_dup2): Use do_dup2.
[LINUX] (sys_epoll_create1): New function.
[LINUX] (do_eventfd, sys_eventfd2): New functions.
[LINUX] (sys_eventfd): Use do_eventfd.
* net.c (do_pipe, [LINUX] sys_pipe2): New functions.
(sys_pipe): Use do_pipe.
* signal.c [LINUX] (do_signalfd, sys_signalfd4): New functions.
[LINUX] (sys_signalfd): Use do_signalfd.
* linux/syscall.h: Declare new sys_* functions.
* linux/syscallent.h: Hook up signalfd4, eventfd2, epoll_create1,
dup3, pipe2, inotify_init1.
* linux/x86_64/syscallent.h: Hook up paccept, signalfd4, eventfd2,
epoll_create1, dup3, pipe2, inotify_init1.
2008-11-11 01:53:02 +03:00
{
2018-01-20 03:02:57 +03:00
# if HAVE_ARCH_GETRVAL2
2016-02-12 19:37:31 +03:00
if ( exiting ( tcp ) & & ! syserror ( tcp ) )
printpair_fd ( tcp , tcp - > u_rval , getrval2 ( tcp ) ) ;
return 0 ;
# else
2008-10-23 Dmitry V. Levin <ldv@altlinux.org>
Implement parsers for new linux syscalls.
* desc.c (do_dup2, [LINUX] sys_dup3): New functions.
(sys_dup2): Use do_dup2.
[LINUX] (sys_epoll_create1): New function.
[LINUX] (do_eventfd, sys_eventfd2): New functions.
[LINUX] (sys_eventfd): Use do_eventfd.
* net.c (do_pipe, [LINUX] sys_pipe2): New functions.
(sys_pipe): Use do_pipe.
* signal.c [LINUX] (do_signalfd, sys_signalfd4): New functions.
[LINUX] (sys_signalfd): Use do_signalfd.
* linux/syscall.h: Declare new sys_* functions.
* linux/syscallent.h: Hook up signalfd4, eventfd2, epoll_create1,
dup3, pipe2, inotify_init1.
* linux/x86_64/syscallent.h: Hook up paccept, signalfd4, eventfd2,
epoll_create1, dup3, pipe2, inotify_init1.
2008-11-11 01:53:02 +03:00
return do_pipe ( tcp , - 1 ) ;
2016-02-12 19:37:31 +03:00
# endif
2008-10-23 Dmitry V. Levin <ldv@altlinux.org>
Implement parsers for new linux syscalls.
* desc.c (do_dup2, [LINUX] sys_dup3): New functions.
(sys_dup2): Use do_dup2.
[LINUX] (sys_epoll_create1): New function.
[LINUX] (do_eventfd, sys_eventfd2): New functions.
[LINUX] (sys_eventfd): Use do_eventfd.
* net.c (do_pipe, [LINUX] sys_pipe2): New functions.
(sys_pipe): Use do_pipe.
* signal.c [LINUX] (do_signalfd, sys_signalfd4): New functions.
[LINUX] (sys_signalfd): Use do_signalfd.
* linux/syscall.h: Declare new sys_* functions.
* linux/syscallent.h: Hook up signalfd4, eventfd2, epoll_create1,
dup3, pipe2, inotify_init1.
* linux/x86_64/syscallent.h: Hook up paccept, signalfd4, eventfd2,
epoll_create1, dup3, pipe2, inotify_init1.
2008-11-11 01:53:02 +03:00
}
2015-04-07 04:36:50 +03:00
SYS_FUNC ( pipe2 )
2008-10-23 Dmitry V. Levin <ldv@altlinux.org>
Implement parsers for new linux syscalls.
* desc.c (do_dup2, [LINUX] sys_dup3): New functions.
(sys_dup2): Use do_dup2.
[LINUX] (sys_epoll_create1): New function.
[LINUX] (do_eventfd, sys_eventfd2): New functions.
[LINUX] (sys_eventfd): Use do_eventfd.
* net.c (do_pipe, [LINUX] sys_pipe2): New functions.
(sys_pipe): Use do_pipe.
* signal.c [LINUX] (do_signalfd, sys_signalfd4): New functions.
[LINUX] (sys_signalfd): Use do_signalfd.
* linux/syscall.h: Declare new sys_* functions.
* linux/syscallent.h: Hook up signalfd4, eventfd2, epoll_create1,
dup3, pipe2, inotify_init1.
* linux/x86_64/syscallent.h: Hook up paccept, signalfd4, eventfd2,
epoll_create1, dup3, pipe2, inotify_init1.
2008-11-11 01:53:02 +03:00
{
return do_pipe ( tcp , 1 ) ;
}
2015-04-07 04:36:50 +03:00
SYS_FUNC ( socketpair )
1999-02-19 03:21:36 +03:00
{
if ( entering ( tcp ) ) {
2016-04-04 04:35:28 +03:00
printxval ( addrfams , tcp - > u_arg [ 0 ] , " AF_??? " ) ;
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
2014-09-10 21:48:28 +04:00
tprint_sock_type ( tcp - > u_arg [ 1 ] ) ;
2016-12-26 13:16:35 +03:00
tprintf ( " , % " PRI_klu , tcp - > u_arg [ 2 ] ) ;
1999-02-19 03:21:36 +03:00
} else {
2015-07-07 01:33:39 +03:00
tprints ( " , " ) ;
2015-08-02 04:54:48 +03:00
decode_pair_fd ( tcp , tcp - > u_arg [ 3 ] ) ;
1999-02-19 03:21:36 +03:00
}
return 0 ;
}
2018-05-08 23:59:20 +03:00
# include "xlat/sock_options.h"
2018-05-09 15:44:28 +03:00
# include "xlat/getsock_options.h"
# include "xlat/setsock_options.h"
2018-05-08 23:59:20 +03:00
# include "xlat/sock_ip_options.h"
# include "xlat/getsock_ip_options.h"
# include "xlat/setsock_ip_options.h"
# include "xlat/sock_ipv6_options.h"
# include "xlat/getsock_ipv6_options.h"
# include "xlat/setsock_ipv6_options.h"
# include "xlat/sock_ipx_options.h"
# include "xlat/sock_netlink_options.h"
# include "xlat/sock_packet_options.h"
# include "xlat/sock_raw_options.h"
# include "xlat/sock_sctp_options.h"
# include "xlat/sock_tcp_options.h"
# include "xlat/sock_udp_options.h"
# include "xlat/sock_irda_options.h"
# include "xlat/sock_llc_options.h"
# include "xlat/sock_dccp_options.h"
# include "xlat/sock_tipc_options.h"
# include "xlat/sock_rxrpc_options.h"
# include "xlat/sock_pppol2tp_options.h"
# include "xlat/sock_bluetooth_options.h"
# include "xlat/sock_pnp_options.h"
# include "xlat/sock_rds_options.h"
# include "xlat/sock_iucv_options.h"
# include "xlat/sock_caif_options.h"
# include "xlat/sock_alg_options.h"
# include "xlat/sock_nfcllcp_options.h"
# include "xlat/sock_kcm_options.h"
# include "xlat/sock_tls_options.h"
2015-01-29 07:42:37 +03:00
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
static void
2016-04-01 04:03:20 +03:00
print_sockopt_fd_level_name ( struct tcb * tcp , int fd , unsigned int level ,
unsigned int name , bool is_getsockopt )
1999-02-19 03:21:36 +03:00
{
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
printfd ( tcp , fd ) ;
tprints ( " , " ) ;
2018-04-11 17:32:30 +03:00
printxval_search ( socketlayers , level , " SOL_?? " ) ;
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
tprints ( " , " ) ;
switch ( level ) {
case SOL_SOCKET :
2018-05-09 15:44:28 +03:00
printxvals ( name , " SO_??? " , sock_options ,
is_getsockopt ? getsock_options :
setsock_options , NULL ) ;
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
break ;
case SOL_IP :
2018-05-08 23:59:20 +03:00
printxvals ( name , " IP_??? " , sock_ip_options ,
is_getsockopt ? getsock_ip_options :
setsock_ip_options , NULL ) ;
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
break ;
case SOL_IPV6 :
2018-05-08 23:59:20 +03:00
printxvals ( name , " IPV6_??? " , sock_ipv6_options ,
is_getsockopt ? getsock_ipv6_options :
setsock_ipv6_options , NULL ) ;
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
break ;
case SOL_IPX :
2018-05-08 23:59:20 +03:00
printxval ( sock_ipx_options , name , " IPX_??? " ) ;
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
break ;
case SOL_PACKET :
2018-05-08 23:59:20 +03:00
printxval ( sock_packet_options , name , " PACKET_??? " ) ;
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
break ;
case SOL_TCP :
2018-05-08 23:59:20 +03:00
printxval ( sock_tcp_options , name , " TCP_??? " ) ;
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
break ;
case SOL_SCTP :
2018-05-08 23:59:20 +03:00
printxval ( sock_sctp_options , name , " SCTP_??? " ) ;
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
break ;
case SOL_RAW :
2018-05-08 23:59:20 +03:00
printxval ( sock_raw_options , name , " RAW_??? " ) ;
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
break ;
2017-11-15 19:36:21 +03:00
case SOL_NETLINK :
2018-05-08 23:59:20 +03:00
printxval ( sock_netlink_options , name , " NETLINK_??? " ) ;
2017-11-15 19:36:21 +03:00
break ;
net: decode more SOL_* socket options
* xlat/sockalgoptions.in: New file.
* xlat/sockbluetoothoptions.in: Likewise.
* xlat/sockcaifoptions.in: Likewise.
* xlat/sockdccpoptions.in: Likewise.
* xlat/sockiucvoptions.in: Likewise.
* xlat/sockkcmoptions.in: Likewise.
* xlat/sockllcoptions.in: Likewise.
* xlat/socknfcllcpoptions.in: Likewise.
* xlat/sockpnpoptions.in: Likewise.
* xlat/sockpppol2tpoptions.in: Likewise.
* xlat/sockrdsoptions.in: Likewises.
* xlat/sockrxrpcoptions.in: Likewise.
* xlat/socktipcoptions.in: Likewise.
* xlat/socktlsoptions.in: Likewise.
* xlat/sockudpoptions.in: Likewise.
* net.c: Include "xlat/sockalgoptions.h", "xlat/sockbluetoothoptions.h",
"xlat/sockcaifoptions.h", "xlat/sockdccpoptions.h",
"xlat/sockiucvoptions.h", "xlat/sockkcmoptions.h",
"xlat/sockllcoptions.h", "xlat/socknfcllcpoptions.h",
"xlat/sockpnpoptions.h", "xlat/sockpppol2tpoptions.h",
"xlat/sockrdsoptions.h", "xlat/sockrxrpcoptions.h",
"xlat/socktipcoptions.h", "xlat/socktlsoptions.h",
and "xlat/sockudpoptions.h".
(print_sockopt_fd_level_name): Decode SOL_UDP, SOL_IRDA, SOL_LLC,
SOL_DCCP, SOL_TIPC, SOL_RXRPC, SOL_PPPOL2TP, SOL_BLUETOOTH, SOL_PNPIPE,
SOL_RDS, SOL_IUCV, SOL_CAIF, SOL_ALG, SOL_NFC, SOL_KCM, and SOL_TLS
socket option names.
Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
2018-05-07 09:10:41 +03:00
case SOL_UDP :
2018-05-08 23:59:20 +03:00
printxval ( sock_udp_options , name , " UDP_??? " ) ;
net: decode more SOL_* socket options
* xlat/sockalgoptions.in: New file.
* xlat/sockbluetoothoptions.in: Likewise.
* xlat/sockcaifoptions.in: Likewise.
* xlat/sockdccpoptions.in: Likewise.
* xlat/sockiucvoptions.in: Likewise.
* xlat/sockkcmoptions.in: Likewise.
* xlat/sockllcoptions.in: Likewise.
* xlat/socknfcllcpoptions.in: Likewise.
* xlat/sockpnpoptions.in: Likewise.
* xlat/sockpppol2tpoptions.in: Likewise.
* xlat/sockrdsoptions.in: Likewises.
* xlat/sockrxrpcoptions.in: Likewise.
* xlat/socktipcoptions.in: Likewise.
* xlat/socktlsoptions.in: Likewise.
* xlat/sockudpoptions.in: Likewise.
* net.c: Include "xlat/sockalgoptions.h", "xlat/sockbluetoothoptions.h",
"xlat/sockcaifoptions.h", "xlat/sockdccpoptions.h",
"xlat/sockiucvoptions.h", "xlat/sockkcmoptions.h",
"xlat/sockllcoptions.h", "xlat/socknfcllcpoptions.h",
"xlat/sockpnpoptions.h", "xlat/sockpppol2tpoptions.h",
"xlat/sockrdsoptions.h", "xlat/sockrxrpcoptions.h",
"xlat/socktipcoptions.h", "xlat/socktlsoptions.h",
and "xlat/sockudpoptions.h".
(print_sockopt_fd_level_name): Decode SOL_UDP, SOL_IRDA, SOL_LLC,
SOL_DCCP, SOL_TIPC, SOL_RXRPC, SOL_PPPOL2TP, SOL_BLUETOOTH, SOL_PNPIPE,
SOL_RDS, SOL_IUCV, SOL_CAIF, SOL_ALG, SOL_NFC, SOL_KCM, and SOL_TLS
socket option names.
Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
2018-05-07 09:10:41 +03:00
break ;
case SOL_IRDA :
2018-05-08 23:59:20 +03:00
printxval_index ( sock_irda_options , name , " IRLMP_??? " ) ;
net: decode more SOL_* socket options
* xlat/sockalgoptions.in: New file.
* xlat/sockbluetoothoptions.in: Likewise.
* xlat/sockcaifoptions.in: Likewise.
* xlat/sockdccpoptions.in: Likewise.
* xlat/sockiucvoptions.in: Likewise.
* xlat/sockkcmoptions.in: Likewise.
* xlat/sockllcoptions.in: Likewise.
* xlat/socknfcllcpoptions.in: Likewise.
* xlat/sockpnpoptions.in: Likewise.
* xlat/sockpppol2tpoptions.in: Likewise.
* xlat/sockrdsoptions.in: Likewises.
* xlat/sockrxrpcoptions.in: Likewise.
* xlat/socktipcoptions.in: Likewise.
* xlat/socktlsoptions.in: Likewise.
* xlat/sockudpoptions.in: Likewise.
* net.c: Include "xlat/sockalgoptions.h", "xlat/sockbluetoothoptions.h",
"xlat/sockcaifoptions.h", "xlat/sockdccpoptions.h",
"xlat/sockiucvoptions.h", "xlat/sockkcmoptions.h",
"xlat/sockllcoptions.h", "xlat/socknfcllcpoptions.h",
"xlat/sockpnpoptions.h", "xlat/sockpppol2tpoptions.h",
"xlat/sockrdsoptions.h", "xlat/sockrxrpcoptions.h",
"xlat/socktipcoptions.h", "xlat/socktlsoptions.h",
and "xlat/sockudpoptions.h".
(print_sockopt_fd_level_name): Decode SOL_UDP, SOL_IRDA, SOL_LLC,
SOL_DCCP, SOL_TIPC, SOL_RXRPC, SOL_PPPOL2TP, SOL_BLUETOOTH, SOL_PNPIPE,
SOL_RDS, SOL_IUCV, SOL_CAIF, SOL_ALG, SOL_NFC, SOL_KCM, and SOL_TLS
socket option names.
Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
2018-05-07 09:10:41 +03:00
break ;
case SOL_LLC :
2018-05-08 23:59:20 +03:00
printxval_index ( sock_llc_options , name , " LLC_OPT_??? " ) ;
net: decode more SOL_* socket options
* xlat/sockalgoptions.in: New file.
* xlat/sockbluetoothoptions.in: Likewise.
* xlat/sockcaifoptions.in: Likewise.
* xlat/sockdccpoptions.in: Likewise.
* xlat/sockiucvoptions.in: Likewise.
* xlat/sockkcmoptions.in: Likewise.
* xlat/sockllcoptions.in: Likewise.
* xlat/socknfcllcpoptions.in: Likewise.
* xlat/sockpnpoptions.in: Likewise.
* xlat/sockpppol2tpoptions.in: Likewise.
* xlat/sockrdsoptions.in: Likewises.
* xlat/sockrxrpcoptions.in: Likewise.
* xlat/socktipcoptions.in: Likewise.
* xlat/socktlsoptions.in: Likewise.
* xlat/sockudpoptions.in: Likewise.
* net.c: Include "xlat/sockalgoptions.h", "xlat/sockbluetoothoptions.h",
"xlat/sockcaifoptions.h", "xlat/sockdccpoptions.h",
"xlat/sockiucvoptions.h", "xlat/sockkcmoptions.h",
"xlat/sockllcoptions.h", "xlat/socknfcllcpoptions.h",
"xlat/sockpnpoptions.h", "xlat/sockpppol2tpoptions.h",
"xlat/sockrdsoptions.h", "xlat/sockrxrpcoptions.h",
"xlat/socktipcoptions.h", "xlat/socktlsoptions.h",
and "xlat/sockudpoptions.h".
(print_sockopt_fd_level_name): Decode SOL_UDP, SOL_IRDA, SOL_LLC,
SOL_DCCP, SOL_TIPC, SOL_RXRPC, SOL_PPPOL2TP, SOL_BLUETOOTH, SOL_PNPIPE,
SOL_RDS, SOL_IUCV, SOL_CAIF, SOL_ALG, SOL_NFC, SOL_KCM, and SOL_TLS
socket option names.
Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
2018-05-07 09:10:41 +03:00
break ;
case SOL_DCCP :
2018-05-08 23:59:20 +03:00
printxval_search ( sock_dccp_options , name , " DCCP_SOCKOPT_??? " ) ;
net: decode more SOL_* socket options
* xlat/sockalgoptions.in: New file.
* xlat/sockbluetoothoptions.in: Likewise.
* xlat/sockcaifoptions.in: Likewise.
* xlat/sockdccpoptions.in: Likewise.
* xlat/sockiucvoptions.in: Likewise.
* xlat/sockkcmoptions.in: Likewise.
* xlat/sockllcoptions.in: Likewise.
* xlat/socknfcllcpoptions.in: Likewise.
* xlat/sockpnpoptions.in: Likewise.
* xlat/sockpppol2tpoptions.in: Likewise.
* xlat/sockrdsoptions.in: Likewises.
* xlat/sockrxrpcoptions.in: Likewise.
* xlat/socktipcoptions.in: Likewise.
* xlat/socktlsoptions.in: Likewise.
* xlat/sockudpoptions.in: Likewise.
* net.c: Include "xlat/sockalgoptions.h", "xlat/sockbluetoothoptions.h",
"xlat/sockcaifoptions.h", "xlat/sockdccpoptions.h",
"xlat/sockiucvoptions.h", "xlat/sockkcmoptions.h",
"xlat/sockllcoptions.h", "xlat/socknfcllcpoptions.h",
"xlat/sockpnpoptions.h", "xlat/sockpppol2tpoptions.h",
"xlat/sockrdsoptions.h", "xlat/sockrxrpcoptions.h",
"xlat/socktipcoptions.h", "xlat/socktlsoptions.h",
and "xlat/sockudpoptions.h".
(print_sockopt_fd_level_name): Decode SOL_UDP, SOL_IRDA, SOL_LLC,
SOL_DCCP, SOL_TIPC, SOL_RXRPC, SOL_PPPOL2TP, SOL_BLUETOOTH, SOL_PNPIPE,
SOL_RDS, SOL_IUCV, SOL_CAIF, SOL_ALG, SOL_NFC, SOL_KCM, and SOL_TLS
socket option names.
Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
2018-05-07 09:10:41 +03:00
break ;
case SOL_TIPC :
2018-05-08 23:59:20 +03:00
printxval_search ( sock_tipc_options , name , " TIPC_??? " ) ;
net: decode more SOL_* socket options
* xlat/sockalgoptions.in: New file.
* xlat/sockbluetoothoptions.in: Likewise.
* xlat/sockcaifoptions.in: Likewise.
* xlat/sockdccpoptions.in: Likewise.
* xlat/sockiucvoptions.in: Likewise.
* xlat/sockkcmoptions.in: Likewise.
* xlat/sockllcoptions.in: Likewise.
* xlat/socknfcllcpoptions.in: Likewise.
* xlat/sockpnpoptions.in: Likewise.
* xlat/sockpppol2tpoptions.in: Likewise.
* xlat/sockrdsoptions.in: Likewises.
* xlat/sockrxrpcoptions.in: Likewise.
* xlat/socktipcoptions.in: Likewise.
* xlat/socktlsoptions.in: Likewise.
* xlat/sockudpoptions.in: Likewise.
* net.c: Include "xlat/sockalgoptions.h", "xlat/sockbluetoothoptions.h",
"xlat/sockcaifoptions.h", "xlat/sockdccpoptions.h",
"xlat/sockiucvoptions.h", "xlat/sockkcmoptions.h",
"xlat/sockllcoptions.h", "xlat/socknfcllcpoptions.h",
"xlat/sockpnpoptions.h", "xlat/sockpppol2tpoptions.h",
"xlat/sockrdsoptions.h", "xlat/sockrxrpcoptions.h",
"xlat/socktipcoptions.h", "xlat/socktlsoptions.h",
and "xlat/sockudpoptions.h".
(print_sockopt_fd_level_name): Decode SOL_UDP, SOL_IRDA, SOL_LLC,
SOL_DCCP, SOL_TIPC, SOL_RXRPC, SOL_PPPOL2TP, SOL_BLUETOOTH, SOL_PNPIPE,
SOL_RDS, SOL_IUCV, SOL_CAIF, SOL_ALG, SOL_NFC, SOL_KCM, and SOL_TLS
socket option names.
Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
2018-05-07 09:10:41 +03:00
break ;
case SOL_RXRPC :
2018-05-08 23:59:20 +03:00
printxval_index ( sock_rxrpc_options , name , " RXRPC_??? " ) ;
net: decode more SOL_* socket options
* xlat/sockalgoptions.in: New file.
* xlat/sockbluetoothoptions.in: Likewise.
* xlat/sockcaifoptions.in: Likewise.
* xlat/sockdccpoptions.in: Likewise.
* xlat/sockiucvoptions.in: Likewise.
* xlat/sockkcmoptions.in: Likewise.
* xlat/sockllcoptions.in: Likewise.
* xlat/socknfcllcpoptions.in: Likewise.
* xlat/sockpnpoptions.in: Likewise.
* xlat/sockpppol2tpoptions.in: Likewise.
* xlat/sockrdsoptions.in: Likewises.
* xlat/sockrxrpcoptions.in: Likewise.
* xlat/socktipcoptions.in: Likewise.
* xlat/socktlsoptions.in: Likewise.
* xlat/sockudpoptions.in: Likewise.
* net.c: Include "xlat/sockalgoptions.h", "xlat/sockbluetoothoptions.h",
"xlat/sockcaifoptions.h", "xlat/sockdccpoptions.h",
"xlat/sockiucvoptions.h", "xlat/sockkcmoptions.h",
"xlat/sockllcoptions.h", "xlat/socknfcllcpoptions.h",
"xlat/sockpnpoptions.h", "xlat/sockpppol2tpoptions.h",
"xlat/sockrdsoptions.h", "xlat/sockrxrpcoptions.h",
"xlat/socktipcoptions.h", "xlat/socktlsoptions.h",
and "xlat/sockudpoptions.h".
(print_sockopt_fd_level_name): Decode SOL_UDP, SOL_IRDA, SOL_LLC,
SOL_DCCP, SOL_TIPC, SOL_RXRPC, SOL_PPPOL2TP, SOL_BLUETOOTH, SOL_PNPIPE,
SOL_RDS, SOL_IUCV, SOL_CAIF, SOL_ALG, SOL_NFC, SOL_KCM, and SOL_TLS
socket option names.
Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
2018-05-07 09:10:41 +03:00
break ;
case SOL_PPPOL2TP :
2018-05-08 23:59:20 +03:00
printxval_index ( sock_pppol2tp_options , name , " PPPOL2TP_SO_??? " ) ;
net: decode more SOL_* socket options
* xlat/sockalgoptions.in: New file.
* xlat/sockbluetoothoptions.in: Likewise.
* xlat/sockcaifoptions.in: Likewise.
* xlat/sockdccpoptions.in: Likewise.
* xlat/sockiucvoptions.in: Likewise.
* xlat/sockkcmoptions.in: Likewise.
* xlat/sockllcoptions.in: Likewise.
* xlat/socknfcllcpoptions.in: Likewise.
* xlat/sockpnpoptions.in: Likewise.
* xlat/sockpppol2tpoptions.in: Likewise.
* xlat/sockrdsoptions.in: Likewises.
* xlat/sockrxrpcoptions.in: Likewise.
* xlat/socktipcoptions.in: Likewise.
* xlat/socktlsoptions.in: Likewise.
* xlat/sockudpoptions.in: Likewise.
* net.c: Include "xlat/sockalgoptions.h", "xlat/sockbluetoothoptions.h",
"xlat/sockcaifoptions.h", "xlat/sockdccpoptions.h",
"xlat/sockiucvoptions.h", "xlat/sockkcmoptions.h",
"xlat/sockllcoptions.h", "xlat/socknfcllcpoptions.h",
"xlat/sockpnpoptions.h", "xlat/sockpppol2tpoptions.h",
"xlat/sockrdsoptions.h", "xlat/sockrxrpcoptions.h",
"xlat/socktipcoptions.h", "xlat/socktlsoptions.h",
and "xlat/sockudpoptions.h".
(print_sockopt_fd_level_name): Decode SOL_UDP, SOL_IRDA, SOL_LLC,
SOL_DCCP, SOL_TIPC, SOL_RXRPC, SOL_PPPOL2TP, SOL_BLUETOOTH, SOL_PNPIPE,
SOL_RDS, SOL_IUCV, SOL_CAIF, SOL_ALG, SOL_NFC, SOL_KCM, and SOL_TLS
socket option names.
Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
2018-05-07 09:10:41 +03:00
break ;
case SOL_BLUETOOTH :
2018-05-08 23:59:20 +03:00
printxval_search ( sock_bluetooth_options , name , " BT_??? " ) ;
net: decode more SOL_* socket options
* xlat/sockalgoptions.in: New file.
* xlat/sockbluetoothoptions.in: Likewise.
* xlat/sockcaifoptions.in: Likewise.
* xlat/sockdccpoptions.in: Likewise.
* xlat/sockiucvoptions.in: Likewise.
* xlat/sockkcmoptions.in: Likewise.
* xlat/sockllcoptions.in: Likewise.
* xlat/socknfcllcpoptions.in: Likewise.
* xlat/sockpnpoptions.in: Likewise.
* xlat/sockpppol2tpoptions.in: Likewise.
* xlat/sockrdsoptions.in: Likewises.
* xlat/sockrxrpcoptions.in: Likewise.
* xlat/socktipcoptions.in: Likewise.
* xlat/socktlsoptions.in: Likewise.
* xlat/sockudpoptions.in: Likewise.
* net.c: Include "xlat/sockalgoptions.h", "xlat/sockbluetoothoptions.h",
"xlat/sockcaifoptions.h", "xlat/sockdccpoptions.h",
"xlat/sockiucvoptions.h", "xlat/sockkcmoptions.h",
"xlat/sockllcoptions.h", "xlat/socknfcllcpoptions.h",
"xlat/sockpnpoptions.h", "xlat/sockpppol2tpoptions.h",
"xlat/sockrdsoptions.h", "xlat/sockrxrpcoptions.h",
"xlat/socktipcoptions.h", "xlat/socktlsoptions.h",
and "xlat/sockudpoptions.h".
(print_sockopt_fd_level_name): Decode SOL_UDP, SOL_IRDA, SOL_LLC,
SOL_DCCP, SOL_TIPC, SOL_RXRPC, SOL_PPPOL2TP, SOL_BLUETOOTH, SOL_PNPIPE,
SOL_RDS, SOL_IUCV, SOL_CAIF, SOL_ALG, SOL_NFC, SOL_KCM, and SOL_TLS
socket option names.
Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
2018-05-07 09:10:41 +03:00
break ;
case SOL_PNPIPE :
2018-05-08 23:59:20 +03:00
printxval ( sock_pnp_options , name , " PNPIPE_??? " ) ;
net: decode more SOL_* socket options
* xlat/sockalgoptions.in: New file.
* xlat/sockbluetoothoptions.in: Likewise.
* xlat/sockcaifoptions.in: Likewise.
* xlat/sockdccpoptions.in: Likewise.
* xlat/sockiucvoptions.in: Likewise.
* xlat/sockkcmoptions.in: Likewise.
* xlat/sockllcoptions.in: Likewise.
* xlat/socknfcllcpoptions.in: Likewise.
* xlat/sockpnpoptions.in: Likewise.
* xlat/sockpppol2tpoptions.in: Likewise.
* xlat/sockrdsoptions.in: Likewises.
* xlat/sockrxrpcoptions.in: Likewise.
* xlat/socktipcoptions.in: Likewise.
* xlat/socktlsoptions.in: Likewise.
* xlat/sockudpoptions.in: Likewise.
* net.c: Include "xlat/sockalgoptions.h", "xlat/sockbluetoothoptions.h",
"xlat/sockcaifoptions.h", "xlat/sockdccpoptions.h",
"xlat/sockiucvoptions.h", "xlat/sockkcmoptions.h",
"xlat/sockllcoptions.h", "xlat/socknfcllcpoptions.h",
"xlat/sockpnpoptions.h", "xlat/sockpppol2tpoptions.h",
"xlat/sockrdsoptions.h", "xlat/sockrxrpcoptions.h",
"xlat/socktipcoptions.h", "xlat/socktlsoptions.h",
and "xlat/sockudpoptions.h".
(print_sockopt_fd_level_name): Decode SOL_UDP, SOL_IRDA, SOL_LLC,
SOL_DCCP, SOL_TIPC, SOL_RXRPC, SOL_PPPOL2TP, SOL_BLUETOOTH, SOL_PNPIPE,
SOL_RDS, SOL_IUCV, SOL_CAIF, SOL_ALG, SOL_NFC, SOL_KCM, and SOL_TLS
socket option names.
Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
2018-05-07 09:10:41 +03:00
break ;
case SOL_RDS :
2018-05-09 15:04:43 +03:00
printxval_search ( sock_rds_options , name , " RDS_??? " ) ;
net: decode more SOL_* socket options
* xlat/sockalgoptions.in: New file.
* xlat/sockbluetoothoptions.in: Likewise.
* xlat/sockcaifoptions.in: Likewise.
* xlat/sockdccpoptions.in: Likewise.
* xlat/sockiucvoptions.in: Likewise.
* xlat/sockkcmoptions.in: Likewise.
* xlat/sockllcoptions.in: Likewise.
* xlat/socknfcllcpoptions.in: Likewise.
* xlat/sockpnpoptions.in: Likewise.
* xlat/sockpppol2tpoptions.in: Likewise.
* xlat/sockrdsoptions.in: Likewises.
* xlat/sockrxrpcoptions.in: Likewise.
* xlat/socktipcoptions.in: Likewise.
* xlat/socktlsoptions.in: Likewise.
* xlat/sockudpoptions.in: Likewise.
* net.c: Include "xlat/sockalgoptions.h", "xlat/sockbluetoothoptions.h",
"xlat/sockcaifoptions.h", "xlat/sockdccpoptions.h",
"xlat/sockiucvoptions.h", "xlat/sockkcmoptions.h",
"xlat/sockllcoptions.h", "xlat/socknfcllcpoptions.h",
"xlat/sockpnpoptions.h", "xlat/sockpppol2tpoptions.h",
"xlat/sockrdsoptions.h", "xlat/sockrxrpcoptions.h",
"xlat/socktipcoptions.h", "xlat/socktlsoptions.h",
and "xlat/sockudpoptions.h".
(print_sockopt_fd_level_name): Decode SOL_UDP, SOL_IRDA, SOL_LLC,
SOL_DCCP, SOL_TIPC, SOL_RXRPC, SOL_PPPOL2TP, SOL_BLUETOOTH, SOL_PNPIPE,
SOL_RDS, SOL_IUCV, SOL_CAIF, SOL_ALG, SOL_NFC, SOL_KCM, and SOL_TLS
socket option names.
Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
2018-05-07 09:10:41 +03:00
break ;
case SOL_IUCV :
2018-05-08 23:59:20 +03:00
printxval ( sock_iucv_options , name , " SO_??? " ) ;
net: decode more SOL_* socket options
* xlat/sockalgoptions.in: New file.
* xlat/sockbluetoothoptions.in: Likewise.
* xlat/sockcaifoptions.in: Likewise.
* xlat/sockdccpoptions.in: Likewise.
* xlat/sockiucvoptions.in: Likewise.
* xlat/sockkcmoptions.in: Likewise.
* xlat/sockllcoptions.in: Likewise.
* xlat/socknfcllcpoptions.in: Likewise.
* xlat/sockpnpoptions.in: Likewise.
* xlat/sockpppol2tpoptions.in: Likewise.
* xlat/sockrdsoptions.in: Likewises.
* xlat/sockrxrpcoptions.in: Likewise.
* xlat/socktipcoptions.in: Likewise.
* xlat/socktlsoptions.in: Likewise.
* xlat/sockudpoptions.in: Likewise.
* net.c: Include "xlat/sockalgoptions.h", "xlat/sockbluetoothoptions.h",
"xlat/sockcaifoptions.h", "xlat/sockdccpoptions.h",
"xlat/sockiucvoptions.h", "xlat/sockkcmoptions.h",
"xlat/sockllcoptions.h", "xlat/socknfcllcpoptions.h",
"xlat/sockpnpoptions.h", "xlat/sockpppol2tpoptions.h",
"xlat/sockrdsoptions.h", "xlat/sockrxrpcoptions.h",
"xlat/socktipcoptions.h", "xlat/socktlsoptions.h",
and "xlat/sockudpoptions.h".
(print_sockopt_fd_level_name): Decode SOL_UDP, SOL_IRDA, SOL_LLC,
SOL_DCCP, SOL_TIPC, SOL_RXRPC, SOL_PPPOL2TP, SOL_BLUETOOTH, SOL_PNPIPE,
SOL_RDS, SOL_IUCV, SOL_CAIF, SOL_ALG, SOL_NFC, SOL_KCM, and SOL_TLS
socket option names.
Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
2018-05-07 09:10:41 +03:00
break ;
case SOL_CAIF :
2018-05-08 23:59:20 +03:00
printxval ( sock_caif_options , name , " CAIFSO_??? " ) ;
net: decode more SOL_* socket options
* xlat/sockalgoptions.in: New file.
* xlat/sockbluetoothoptions.in: Likewise.
* xlat/sockcaifoptions.in: Likewise.
* xlat/sockdccpoptions.in: Likewise.
* xlat/sockiucvoptions.in: Likewise.
* xlat/sockkcmoptions.in: Likewise.
* xlat/sockllcoptions.in: Likewise.
* xlat/socknfcllcpoptions.in: Likewise.
* xlat/sockpnpoptions.in: Likewise.
* xlat/sockpppol2tpoptions.in: Likewise.
* xlat/sockrdsoptions.in: Likewises.
* xlat/sockrxrpcoptions.in: Likewise.
* xlat/socktipcoptions.in: Likewise.
* xlat/socktlsoptions.in: Likewise.
* xlat/sockudpoptions.in: Likewise.
* net.c: Include "xlat/sockalgoptions.h", "xlat/sockbluetoothoptions.h",
"xlat/sockcaifoptions.h", "xlat/sockdccpoptions.h",
"xlat/sockiucvoptions.h", "xlat/sockkcmoptions.h",
"xlat/sockllcoptions.h", "xlat/socknfcllcpoptions.h",
"xlat/sockpnpoptions.h", "xlat/sockpppol2tpoptions.h",
"xlat/sockrdsoptions.h", "xlat/sockrxrpcoptions.h",
"xlat/socktipcoptions.h", "xlat/socktlsoptions.h",
and "xlat/sockudpoptions.h".
(print_sockopt_fd_level_name): Decode SOL_UDP, SOL_IRDA, SOL_LLC,
SOL_DCCP, SOL_TIPC, SOL_RXRPC, SOL_PPPOL2TP, SOL_BLUETOOTH, SOL_PNPIPE,
SOL_RDS, SOL_IUCV, SOL_CAIF, SOL_ALG, SOL_NFC, SOL_KCM, and SOL_TLS
socket option names.
Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
2018-05-07 09:10:41 +03:00
break ;
case SOL_ALG :
2018-05-08 23:59:20 +03:00
printxval_index ( sock_alg_options , name , " ALG_??? " ) ;
net: decode more SOL_* socket options
* xlat/sockalgoptions.in: New file.
* xlat/sockbluetoothoptions.in: Likewise.
* xlat/sockcaifoptions.in: Likewise.
* xlat/sockdccpoptions.in: Likewise.
* xlat/sockiucvoptions.in: Likewise.
* xlat/sockkcmoptions.in: Likewise.
* xlat/sockllcoptions.in: Likewise.
* xlat/socknfcllcpoptions.in: Likewise.
* xlat/sockpnpoptions.in: Likewise.
* xlat/sockpppol2tpoptions.in: Likewise.
* xlat/sockrdsoptions.in: Likewises.
* xlat/sockrxrpcoptions.in: Likewise.
* xlat/socktipcoptions.in: Likewise.
* xlat/socktlsoptions.in: Likewise.
* xlat/sockudpoptions.in: Likewise.
* net.c: Include "xlat/sockalgoptions.h", "xlat/sockbluetoothoptions.h",
"xlat/sockcaifoptions.h", "xlat/sockdccpoptions.h",
"xlat/sockiucvoptions.h", "xlat/sockkcmoptions.h",
"xlat/sockllcoptions.h", "xlat/socknfcllcpoptions.h",
"xlat/sockpnpoptions.h", "xlat/sockpppol2tpoptions.h",
"xlat/sockrdsoptions.h", "xlat/sockrxrpcoptions.h",
"xlat/socktipcoptions.h", "xlat/socktlsoptions.h",
and "xlat/sockudpoptions.h".
(print_sockopt_fd_level_name): Decode SOL_UDP, SOL_IRDA, SOL_LLC,
SOL_DCCP, SOL_TIPC, SOL_RXRPC, SOL_PPPOL2TP, SOL_BLUETOOTH, SOL_PNPIPE,
SOL_RDS, SOL_IUCV, SOL_CAIF, SOL_ALG, SOL_NFC, SOL_KCM, and SOL_TLS
socket option names.
Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
2018-05-07 09:10:41 +03:00
break ;
case SOL_NFC :
2018-05-08 23:59:20 +03:00
printxval_index ( sock_nfcllcp_options , name , " NFC_LLCP_??? " ) ;
net: decode more SOL_* socket options
* xlat/sockalgoptions.in: New file.
* xlat/sockbluetoothoptions.in: Likewise.
* xlat/sockcaifoptions.in: Likewise.
* xlat/sockdccpoptions.in: Likewise.
* xlat/sockiucvoptions.in: Likewise.
* xlat/sockkcmoptions.in: Likewise.
* xlat/sockllcoptions.in: Likewise.
* xlat/socknfcllcpoptions.in: Likewise.
* xlat/sockpnpoptions.in: Likewise.
* xlat/sockpppol2tpoptions.in: Likewise.
* xlat/sockrdsoptions.in: Likewises.
* xlat/sockrxrpcoptions.in: Likewise.
* xlat/socktipcoptions.in: Likewise.
* xlat/socktlsoptions.in: Likewise.
* xlat/sockudpoptions.in: Likewise.
* net.c: Include "xlat/sockalgoptions.h", "xlat/sockbluetoothoptions.h",
"xlat/sockcaifoptions.h", "xlat/sockdccpoptions.h",
"xlat/sockiucvoptions.h", "xlat/sockkcmoptions.h",
"xlat/sockllcoptions.h", "xlat/socknfcllcpoptions.h",
"xlat/sockpnpoptions.h", "xlat/sockpppol2tpoptions.h",
"xlat/sockrdsoptions.h", "xlat/sockrxrpcoptions.h",
"xlat/socktipcoptions.h", "xlat/socktlsoptions.h",
and "xlat/sockudpoptions.h".
(print_sockopt_fd_level_name): Decode SOL_UDP, SOL_IRDA, SOL_LLC,
SOL_DCCP, SOL_TIPC, SOL_RXRPC, SOL_PPPOL2TP, SOL_BLUETOOTH, SOL_PNPIPE,
SOL_RDS, SOL_IUCV, SOL_CAIF, SOL_ALG, SOL_NFC, SOL_KCM, and SOL_TLS
socket option names.
Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
2018-05-07 09:10:41 +03:00
break ;
case SOL_KCM :
2018-05-08 23:59:20 +03:00
printxval ( sock_kcm_options , name , " KCM_??? " ) ;
net: decode more SOL_* socket options
* xlat/sockalgoptions.in: New file.
* xlat/sockbluetoothoptions.in: Likewise.
* xlat/sockcaifoptions.in: Likewise.
* xlat/sockdccpoptions.in: Likewise.
* xlat/sockiucvoptions.in: Likewise.
* xlat/sockkcmoptions.in: Likewise.
* xlat/sockllcoptions.in: Likewise.
* xlat/socknfcllcpoptions.in: Likewise.
* xlat/sockpnpoptions.in: Likewise.
* xlat/sockpppol2tpoptions.in: Likewise.
* xlat/sockrdsoptions.in: Likewises.
* xlat/sockrxrpcoptions.in: Likewise.
* xlat/socktipcoptions.in: Likewise.
* xlat/socktlsoptions.in: Likewise.
* xlat/sockudpoptions.in: Likewise.
* net.c: Include "xlat/sockalgoptions.h", "xlat/sockbluetoothoptions.h",
"xlat/sockcaifoptions.h", "xlat/sockdccpoptions.h",
"xlat/sockiucvoptions.h", "xlat/sockkcmoptions.h",
"xlat/sockllcoptions.h", "xlat/socknfcllcpoptions.h",
"xlat/sockpnpoptions.h", "xlat/sockpppol2tpoptions.h",
"xlat/sockrdsoptions.h", "xlat/sockrxrpcoptions.h",
"xlat/socktipcoptions.h", "xlat/socktlsoptions.h",
and "xlat/sockudpoptions.h".
(print_sockopt_fd_level_name): Decode SOL_UDP, SOL_IRDA, SOL_LLC,
SOL_DCCP, SOL_TIPC, SOL_RXRPC, SOL_PPPOL2TP, SOL_BLUETOOTH, SOL_PNPIPE,
SOL_RDS, SOL_IUCV, SOL_CAIF, SOL_ALG, SOL_NFC, SOL_KCM, and SOL_TLS
socket option names.
Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
2018-05-07 09:10:41 +03:00
break ;
case SOL_TLS :
2018-05-08 23:59:20 +03:00
printxval ( sock_tls_options , name , " TLS_??? " ) ;
net: decode more SOL_* socket options
* xlat/sockalgoptions.in: New file.
* xlat/sockbluetoothoptions.in: Likewise.
* xlat/sockcaifoptions.in: Likewise.
* xlat/sockdccpoptions.in: Likewise.
* xlat/sockiucvoptions.in: Likewise.
* xlat/sockkcmoptions.in: Likewise.
* xlat/sockllcoptions.in: Likewise.
* xlat/socknfcllcpoptions.in: Likewise.
* xlat/sockpnpoptions.in: Likewise.
* xlat/sockpppol2tpoptions.in: Likewise.
* xlat/sockrdsoptions.in: Likewises.
* xlat/sockrxrpcoptions.in: Likewise.
* xlat/socktipcoptions.in: Likewise.
* xlat/socktlsoptions.in: Likewise.
* xlat/sockudpoptions.in: Likewise.
* net.c: Include "xlat/sockalgoptions.h", "xlat/sockbluetoothoptions.h",
"xlat/sockcaifoptions.h", "xlat/sockdccpoptions.h",
"xlat/sockiucvoptions.h", "xlat/sockkcmoptions.h",
"xlat/sockllcoptions.h", "xlat/socknfcllcpoptions.h",
"xlat/sockpnpoptions.h", "xlat/sockpppol2tpoptions.h",
"xlat/sockrdsoptions.h", "xlat/sockrxrpcoptions.h",
"xlat/socktipcoptions.h", "xlat/socktlsoptions.h",
and "xlat/sockudpoptions.h".
(print_sockopt_fd_level_name): Decode SOL_UDP, SOL_IRDA, SOL_LLC,
SOL_DCCP, SOL_TIPC, SOL_RXRPC, SOL_PPPOL2TP, SOL_BLUETOOTH, SOL_PNPIPE,
SOL_RDS, SOL_IUCV, SOL_CAIF, SOL_ALG, SOL_NFC, SOL_KCM, and SOL_TLS
socket option names.
Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
2018-05-07 09:10:41 +03:00
break ;
1999-02-19 03:21:36 +03:00
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
/* Other SOL_* protocol levels still need work. */
default :
tprintf ( " %u " , name ) ;
}
tprints ( " , " ) ;
}
2002-05-22 19:46:49 +04:00
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
static void
2017-07-08 17:57:44 +03:00
print_set_linger ( struct tcb * const tcp , const kernel_ulong_t addr ,
2017-07-09 21:43:34 +03:00
const int len )
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
{
struct linger linger ;
2017-07-09 21:43:34 +03:00
if ( len < ( int ) sizeof ( linger ) ) {
net.c: use printaddr and umove_or_printaddr
* net.c (printsock): Use printaddr and umove_or_printaddr.
(printcmsghdr, printmsghdr, printmmsghdr, decode_mmsg, do_sockname,
sys_recv, sys_recvfrom, sys_recvmsg, do_pipe, print_linger, print_ucred,
print_tpacket_stats, print_icmp_filter, print_getsockopt,
print_group_req, print_tpacket_req, print_packet_mreq,
print_setsockopt): Use printaddr.
(print_mreq, print_mreq6): Use umove_or_printaddr.
2015-07-20 01:36:46 +03:00
printaddr ( addr ) ;
2017-07-09 21:43:34 +03:00
} else if ( ! umove_or_printaddr ( tcp , addr , & linger ) ) {
PRINT_FIELD_D ( " { " , linger , l_onoff ) ;
PRINT_FIELD_D ( " , " , linger , l_linger ) ;
tprints ( " } " ) ;
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
}
}
2017-07-08 17:57:44 +03:00
static void
print_get_linger ( struct tcb * const tcp , const kernel_ulong_t addr ,
unsigned int len )
{
struct linger linger ;
if ( len < sizeof ( linger ) ) {
if ( len ! = sizeof ( linger . l_onoff ) ) {
printstr_ex ( tcp , addr , len , QUOTE_FORCE_HEX ) ;
return ;
}
} else {
len = sizeof ( linger ) ;
}
if ( umoven ( tcp , addr , len , & linger ) < 0 ) {
printaddr ( addr ) ;
return ;
}
PRINT_FIELD_D ( " { " , linger , l_onoff ) ;
if ( len = = sizeof ( linger ) )
PRINT_FIELD_D ( " , " , linger , l_linger ) ;
tprints ( " } " ) ;
}
2010-12-03 19:54:53 +03:00
# ifdef SO_PEERCRED
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
static void
2017-07-08 22:27:26 +03:00
print_ucred ( struct tcb * const tcp , const kernel_ulong_t addr , unsigned int len )
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
{
struct ucred uc ;
2017-07-08 22:27:26 +03:00
if ( len < sizeof ( uc ) ) {
if ( len ! = sizeof ( uc . pid )
& & len ! = offsetofend ( struct ucred , uid ) ) {
printstr_ex ( tcp , addr , len , QUOTE_FORCE_HEX ) ;
return ;
}
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
} else {
2017-07-08 22:27:26 +03:00
len = sizeof ( uc ) ;
}
if ( umoven ( tcp , addr , len , & uc ) < 0 ) {
printaddr ( addr ) ;
return ;
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
}
2017-07-08 22:27:26 +03:00
PRINT_FIELD_D ( " { " , uc , pid ) ;
if ( len > sizeof ( uc . pid ) )
PRINT_FIELD_UID ( " , " , uc , uid ) ;
if ( len = = sizeof ( uc ) )
PRINT_FIELD_UID ( " , " , uc , gid ) ;
tprints ( " } " ) ;
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
}
# endif /* SO_PEERCRED */
2009-11-13 15:51:04 +03:00
# ifdef PACKET_STATISTICS
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
static void
2016-12-26 13:26:03 +03:00
print_tpacket_stats ( struct tcb * const tcp , const kernel_ulong_t addr ,
net: change address argument type from long to kernel_ureg_t
* net.c (decode_sockbuf, decode_pair_fd, print_linger, print_ucred,
print_tpacket_stats, print_icmp_filter, print_getsockopt, print_mreq,
print_mreq6, print_group_req, print_tpacket_req, print_packet_mreq,
print_setsockopt): Change address argument type from long
to kernel_ureg_t.
2016-12-23 13:50:10 +03:00
const int len )
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
{
struct tpacket_stats stats ;
2002-05-22 19:46:49 +04:00
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
if ( len ! = sizeof ( stats ) | |
umove ( tcp , addr , & stats ) < 0 ) {
net.c: use printaddr and umove_or_printaddr
* net.c (printsock): Use printaddr and umove_or_printaddr.
(printcmsghdr, printmsghdr, printmmsghdr, decode_mmsg, do_sockname,
sys_recv, sys_recvfrom, sys_recvmsg, do_pipe, print_linger, print_ucred,
print_tpacket_stats, print_icmp_filter, print_getsockopt,
print_group_req, print_tpacket_req, print_packet_mreq,
print_setsockopt): Use printaddr.
(print_mreq, print_mreq6): Use umove_or_printaddr.
2015-07-20 01:36:46 +03:00
printaddr ( addr ) ;
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
} else {
2017-07-09 16:54:01 +03:00
PRINT_FIELD_U ( " { " , stats , tp_packets ) ;
PRINT_FIELD_U ( " { " , stats , tp_drops ) ;
tprints ( " } " ) ;
1999-02-19 03:21:36 +03:00
}
}
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
# endif /* PACKET_STATISTICS */
1999-02-19 03:21:36 +03:00
2016-06-16 00:29:07 +03:00
# include "xlat/icmpfilterflags.h"
2015-01-29 07:42:37 +03:00
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
static void
2016-12-26 13:26:03 +03:00
print_icmp_filter ( struct tcb * const tcp , const kernel_ulong_t addr , int len )
2000-07-05 20:05:39 +04:00
{
2016-05-06 03:06:15 +03:00
struct icmp_filter filter = { } ;
2000-07-05 20:05:39 +04:00
2016-05-06 03:06:15 +03:00
if ( len > ( int ) sizeof ( filter ) )
len = sizeof ( filter ) ;
else if ( len < = 0 ) {
net.c: use printaddr and umove_or_printaddr
* net.c (printsock): Use printaddr and umove_or_printaddr.
(printcmsghdr, printmsghdr, printmmsghdr, decode_mmsg, do_sockname,
sys_recv, sys_recvfrom, sys_recvmsg, do_pipe, print_linger, print_ucred,
print_tpacket_stats, print_icmp_filter, print_getsockopt,
print_group_req, print_tpacket_req, print_packet_mreq,
print_setsockopt): Use printaddr.
(print_mreq, print_mreq6): Use umove_or_printaddr.
2015-07-20 01:36:46 +03:00
printaddr ( addr ) ;
2000-07-05 20:05:39 +04:00
return ;
}
2016-05-06 03:06:15 +03:00
if ( umoven_or_printaddr ( tcp , addr , len , & filter ) )
return ;
2011-09-01 12:00:28 +04:00
tprints ( " ~( " ) ;
2005-05-31 Dmitry V. Levin <ldv@altlinux.org>
* util.c (printxval): Change third argument from "char *" to
"const char *".
(printflags): Add third argument, "const char *", with similar
meaning to the third argument of printxval().
* defs.h (printxval): Change third argument from "char *" to
"const char *".
(printflags): Add third argument.
* bjm.c (sys_query_module) [LINUX]: Pass third argument to
printflags().
* desc.c (sys_fcntl): Likewise.
(sys_flock) [LOCK_SH]: Likewise.
(print_epoll_event) [HAVE_SYS_EPOLL_H]: Likewise.
* file.c (sys_open): Likewise.
(solaris_open) [LINUXSPARC]: Likewise.
(sys_access): Likewise.
(sys_chflags, sys_fchflags) [FREEBSD]: Likewise.
(realprintstat) [HAVE_LONG_LONG_OFF_T &&
HAVE_STRUCT_STAT_ST_FLAGS]: Likewise.
(printstat64) [HAVE_STAT64 &&
HAVE_STRUCT_STAT_ST_FLAGS]: Likewise.
(sys_setxattr, sys_fsetxattr): Likewise.
* ipc.c (sys_msgget, sys_msgsnd, sys_msgrcv, sys_semget,
sys_shmget, sys_shmat) [LINUX || SUNOS4 || FREEBSD]: Likewise.
(sys_mq_open) [LINUX]: Likewise.
(printmqattr) [HAVE_MQUEUE_H]: Likewise.
* mem.c (print_mmap) [!HAVE_LONG_LONG_OFF_T]: Likewise.
(sys_mmap64) [_LFS64_LARGEFILE || HAVE_LONG_LONG_OFF_T]: Likewise.
(sys_mprotect): Likewise.
(sys_mremap, sys_madvise, sys_mlockall) [LINUX]: Likewise.
(sys_msync) [MS_ASYNC]: Likewise.
(sys_mctl) [MC_SYNC]: Likewise.
(sys_remap_file_pages, sys_mbind, sys_get_mempolicy) [LINUX]:
Likewise.
* net.c (printmsghdr) [HAVE_STRUCT_MSGHDR_MSG_CONTROL]: Likewise.
(sys_send, sys_sendto): Likewise.
(sys_sendmsg) [HAVE_SENDMSG]: Likewise.
(sys_recv, sys_recvfrom): Likewise.
(sys_recvmsg) [HAVE_SENDMSG]: Likewise.
(printicmpfilter) [ICMP_FILTER]: Likewise.
* proc.c (proc_ioctl) [SVR4 && !HAVE_MP_PROCFS || FREEBSD]: Likewise.
* process.c (sys_clone) [LINUX]: Likewise.
(printwaitn): Likewise.
(sys_waitid) [SVR4 || LINUX]: Likewise.
* signal.c (sys_sigvec) [SUNOS4 || FREEBSD]: Likewise.
(sys_sigaction): Likewise.
(printcontext) [SVR4]: Likewise.
(print_stack_t) [LINUX) || FREEBSD]: Likewise.
(sys_rt_sigaction) [LINUX]: Likewise.
* sock.c (sock_ioctl) [LINUX]: Likewise.
* stream.c (sys_putmsg, sys_getmsg): Likewise.
(sys_putpmsg) [SYS_putpmsg]: Likewise.
(sys_getpmsg) [SYS_getpmsg]: Likewise.
(sys_poll): Likewise.
(print_transport_message) [TI_BIND]: Likewise.
(stream_ioctl): Likewise.
* system.c (sys_mount, sys_reboot): Likewise.
(sys_cacheflush) [LINUX && M68K]: Likewise.
(sys_capget, sys_capset) [SYS_capget]: Likewise.
* term.c (term_ioctl) [TIOCMGET]: Likewise.
* time.c (sys_clock_nanosleep, sys_timer_settime) [LINUX]:
Likewise.
Fixes RH#159310.
2005-06-01 23:02:36 +04:00
printflags ( icmpfilterflags , ~ filter . data , " ICMP_??? " ) ;
2011-09-01 12:00:28 +04:00
tprints ( " ) " ) ;
2000-07-05 20:05:39 +04:00
}
2017-11-16 05:27:40 +03:00
static bool
print_uint32 ( struct tcb * tcp , void * elem_buf , size_t elem_size , void * data )
{
tprintf ( " %u " , * ( uint32_t * ) elem_buf ) ;
return true ;
}
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
static void
net: change address argument type from long to kernel_ureg_t
* net.c (decode_sockbuf, decode_pair_fd, print_linger, print_ucred,
print_tpacket_stats, print_icmp_filter, print_getsockopt, print_mreq,
print_mreq6, print_group_req, print_tpacket_req, print_packet_mreq,
print_setsockopt): Change address argument type from long
to kernel_ureg_t.
2016-12-23 13:50:10 +03:00
print_getsockopt ( struct tcb * const tcp , const unsigned int level ,
2016-12-26 13:26:03 +03:00
const unsigned int name , const kernel_ulong_t addr ,
2017-11-16 05:27:40 +03:00
const int ulen , const int rlen )
1999-02-19 03:21:36 +03:00
{
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
if ( addr & & verbose ( tcp ) )
2002-05-23 15:48:58 +04:00
switch ( level ) {
2012-03-17 07:42:07 +04:00
case SOL_SOCKET :
2002-05-23 15:48:58 +04:00
switch ( name ) {
2012-03-17 07:42:07 +04:00
case SO_LINGER :
2017-11-16 05:27:40 +03:00
print_get_linger ( tcp , addr , rlen ) ;
2017-07-08 17:57:44 +03:00
return ;
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
# ifdef SO_PEERCRED
case SO_PEERCRED :
2017-11-16 05:27:40 +03:00
print_ucred ( tcp , addr , rlen ) ;
2017-07-08 17:57:44 +03:00
return ;
2002-05-23 15:48:58 +04:00
# endif
2017-07-08 17:57:44 +03:00
# ifdef SO_ATTACH_FILTER
case SO_ATTACH_FILTER :
2017-11-16 05:27:40 +03:00
if ( rlen & & ( unsigned short ) rlen = = ( unsigned int ) rlen )
print_sock_fprog ( tcp , addr , rlen ) ;
2017-07-08 17:57:44 +03:00
else
printaddr ( addr ) ;
return ;
# endif /* SO_ATTACH_FILTER */
2002-05-23 15:48:58 +04:00
}
break ;
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
case SOL_PACKET :
switch ( name ) {
2015-01-29 07:42:37 +03:00
# ifdef PACKET_STATISTICS
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
case PACKET_STATISTICS :
2017-11-16 05:27:40 +03:00
print_tpacket_stats ( tcp , addr , rlen ) ;
2017-07-08 17:57:44 +03:00
return ;
2015-01-29 07:42:37 +03:00
# endif
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
}
2002-05-23 15:48:58 +04:00
break ;
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
case SOL_RAW :
switch ( name ) {
case ICMP_FILTER :
2017-11-16 05:27:40 +03:00
print_icmp_filter ( tcp , addr , rlen ) ;
2017-07-08 17:57:44 +03:00
return ;
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
}
2004-08-31 11:01:26 +04:00
break ;
2017-11-16 03:12:46 +03:00
case SOL_NETLINK :
2017-11-16 05:27:40 +03:00
if ( ulen < 0 | | rlen < 0 ) {
/*
* As the kernel neither accepts nor returns a negative
* length , in case of successful getsockopt syscall
* invocation these negative values must have come
* from userspace .
*/
printaddr ( addr ) ;
return ;
}
switch ( name ) {
case NETLINK_LIST_MEMBERSHIPS : {
uint32_t buf ;
print_array ( tcp , addr , MIN ( ulen , rlen ) / sizeof ( buf ) ,
& buf , sizeof ( buf ) ,
print_array: enhance printing of unfetchable object addresses
When umoven_func invocation fails to fetch data, it prints the faulty
address. If this happens to a subsequent umoven_func invocation,
the printed address may be undistinguishable from a valid data printed
by print_func, e.g. when the data is printed in a numeric form like
[0x1, 0x2, 0x3, 0xdefaced].
Fix this source of confusion by moving the printing of the faulty
address from umoven_func to print_array itself. This change renames
umoven_func to tfetch_mem_func and changes its semantics, so that
- tfetch_mem_func never prints anything;
- tfetch_mem_func returns true if the fetch succeeded,
and false otherwise.
* defs.h (print_array): Replace umoven_func argument with
tfetch_mem_func.
* util.c (print_array): Replace umoven_func argument with
tfetch_mem_func, document expected tfetch_mem_func return value
semantics. When tfetch_mem_func returns false, print either addr
or "... /* addr */" depending on the context (inside the array or not).
* bpf.c (print_ebpf_prog, print_bpf_prog_info,
BEGIN_BPF_CMD_DECODER(BPF_PROG_QUERY)): Replace umoven_or_printaddr
argument of print_array with tfetch_mem.
* bpf_filter.c (print_bpf_fprog): Likewise.
* btrfs.c (btrfs_print_logical_ino_container,
btrfs_print_ino_path_container, btrfs_print_qgroup_inherit,
btrfs_ioctl): Likewise.
* dm.c (dm_decode_dm_target_deps): Likewise.
* epoll.c (epoll_wait_common): Likewise.
* file_ioctl.c (file_ioctl): Likewise.
* ipc_sem.c (tprint_sembuf_array): Likewise.
* kexec.c (print_kexec_segments): Likewise.
* mem.c (SYS_FUNC(subpage_prot)): Likewise.
* net.c (print_getsockopt): Likewise.
* netlink.c (decode_nlmsgerr_attr_cookie): Likewise.
* netlink_netlink_diag.c (decode_netlink_diag_groups): Likewise.
* netlink_packet_diag.c (decode_packet_diag_mclist): Likewise.
* netlink_unix_diag.c (decode_unix_diag_inode): Likewise.
* nlattr.c (decode_nla_meminfo): Likewise.
* numa.c (print_nodemask, SYS_FUNC(move_pages),
* perf_ioctl.c (perf_ioctl_query_bpf): Likewise.
* poll.c (decode_poll_entering): Likewise.
* printsiginfo.c (print_siginfo_array): Likewise.
* rtnl_tc.c (decode_tca_stab_data): Likewise.
* sock.c (decode_ifconf): Likewise.
* uid.c (print_groups): Likewise.
* io.c (SYS_FUNC(io_submit), SYS_FUNC(io_getevents)): Replace
umoven_or_printaddr argument of print_array with tfetch_mem.
(tprint_iov_upto): Replace umoven_or_printaddr_ignore_syserror
with tfetch_mem_ignore_syserror.
* v4l2.c (print_v4l2_format_fmt): Replace umoven_or_printaddr argument
of print_array with tfetch_mem.
(print_v4l2_ext_controls): Replace umoven_or_printaddr_ignore_syserror
with tfetch_mem_ignore_syserror.
* mmsghdr.c (fetch_struct_mmsghdr_or_printaddr): Rename
to fetch_struct_mmsghdr_for_print, do not print address, return bool.
(decode_mmsgvec): Replace fetch_struct_mmsghdr_or_printaddr
with fetch_struct_mmsghdr_for_print.
* tests/aio.c (main): Update expected output.
* tests/bpf.c (print_BPF_PROG_QUERY_attr5): Likewise.
* tests/ioctl_perf-success.c (main): Likewise.
* tests/ioctl_v4l2.c (main): Update expected output.
* tests/kexec_load.c (main): Likewise.
* tests/mmsg_name.c (test_mmsg_name): Update expected output.
* tests/move_pages.c (print_page_array, print_node_array): Likewise.
* tests/poll.c (print_pollfd_array_entering): Likewise.
* tests/preadv-pwritev.c (main): Likewise.
* tests/preadv2-pwritev2.c (dumpio): Likewise.
* tests/process_vm_readv_writev.c (print_iov): Likewise.
* tests/pwritev.c (print_iovec): Likewise.
* tests/readv.c (main): Likewise.
* tests/seccomp-filter-v.c
* tests/semop.c (main): Likewise.
* tests/set_mempolicy.c (print_nodes): Likewise.
* tests/setgroups.c (main): Likewise.
* tests/test_nlattr.h (print_nlattr) Likewise.
Co-Authored-by: Eugene Syromyatnikov <evgsyr@gmail.com>
2018-05-29 04:15:19 +03:00
tfetch_mem , print_uint32 , 0 ) ;
2017-11-16 05:27:40 +03:00
break ;
}
default :
2017-11-16 03:12:46 +03:00
printnum_int ( tcp , addr , " %d " ) ;
2017-11-16 05:27:40 +03:00
break ;
}
2017-11-16 03:12:46 +03:00
return ;
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
}
/* default arg printing */
if ( verbose ( tcp ) ) {
2017-11-16 05:27:40 +03:00
if ( rlen = = sizeof ( int ) ) {
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
printnum_int ( tcp , addr , " %d " ) ;
} else {
2017-11-16 05:27:40 +03:00
printstrn ( tcp , addr , rlen ) ;
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
}
} else {
net.c: use printaddr and umove_or_printaddr
* net.c (printsock): Use printaddr and umove_or_printaddr.
(printcmsghdr, printmsghdr, printmmsghdr, decode_mmsg, do_sockname,
sys_recv, sys_recvfrom, sys_recvmsg, do_pipe, print_linger, print_ucred,
print_tpacket_stats, print_icmp_filter, print_getsockopt,
print_group_req, print_tpacket_req, print_packet_mreq,
print_setsockopt): Use printaddr.
(print_mreq, print_mreq6): Use umove_or_printaddr.
2015-07-20 01:36:46 +03:00
printaddr ( addr ) ;
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
}
}
2015-04-07 04:36:50 +03:00
SYS_FUNC ( getsockopt )
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
{
2017-07-08 17:57:44 +03:00
int ulen , rlen ;
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
if ( entering ( tcp ) ) {
print_sockopt_fd_level_name ( tcp , tcp - > u_arg [ 0 ] ,
decode extend getsockopt/setsockopt options
Currently the code assumes the set of valid options between getsockopt
and setsockopt are exactly the same and thus maintains one list. The
kernel unfortunately does not do this -- it allows for different opts
between the get and set functions. See the {g,s}et_opt{min,max} fields
in the various netfilter subcores.
To support this, extend the printxval function to take multiple sets of
xlats as varargs. Then we add the new get/set lists, and pass them down
in the net code when decoding things.
A simple example is iptables; before:
getsockopt(4, SOL_IP, 0x40 /* IP_??? */, ...) = 0
getsockopt(4, SOL_IP, 0x41 /* IP_??? */, ...) = 0
after:
getsockopt(4, SOL_IP, IPT_SO_GET_INFO, ...) = 0
getsockopt(4, SOL_IP, IPT_SO_GET_ENTRIES, ...) = 0
If these were setsockopt calls, then 0x40 & 0x41 would be
IPT_SO_SET_REPLACE & IPT_SO_SET_ADD_COUNTERS.
* configure.ac: Check for netfilter headers.
* defs.h (printxvals): New prototype.
(printxval): Change to a define.
* net.c: Include netfilter headers and new sockopts headers.
(print_sockopt_fd_level_name): Add a is_getsockopt argument. Change SOL_IP
and SOL_IPV6 decoding to use printxvals, and use is_getsockopt to pass more
xlats down.
(getsockopt): Call print_sockopt_fd_level_name with is_getsockopt as true.
(setsockopt): Call print_sockopt_fd_level_name with is_getsockopt as false.
* util.c (printxval): Rename to ...
(printxvals): ... this. Rewrite to be varargs based.
* xlat/getsockipoptions.in: New xlat list.
* xlat/getsockipv6options.in, xlat/setsockipoptions.in,
xlat/setsockipv6options.in: Likewise.
2015-08-19 20:29:27 +03:00
tcp - > u_arg [ 1 ] , tcp - > u_arg [ 2 ] , true ) ;
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
2017-07-08 17:57:44 +03:00
if ( verbose ( tcp ) & & tcp - > u_arg [ 4 ]
& & umove ( tcp , tcp - > u_arg [ 4 ] , & ulen ) = = 0 ) {
set_tcb_priv_ulong ( tcp , ulen ) ;
return 0 ;
} else {
2016-06-11 04:28:21 +03:00
printaddr ( tcp - > u_arg [ 3 ] ) ;
tprints ( " , " ) ;
printaddr ( tcp - > u_arg [ 4 ] ) ;
2017-07-08 17:57:44 +03:00
return RVAL_DECODED ;
}
} else {
ulen = get_tcb_priv_ulong ( tcp ) ;
if ( syserror ( tcp ) | | umove ( tcp , tcp - > u_arg [ 4 ] , & rlen ) < 0 ) {
printaddr ( tcp - > u_arg [ 3 ] ) ;
tprintf ( " , [%d] " , ulen ) ;
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
} else {
print_getsockopt ( tcp , tcp - > u_arg [ 1 ] , tcp - > u_arg [ 2 ] ,
2017-11-16 05:27:40 +03:00
tcp - > u_arg [ 3 ] , ulen , rlen ) ;
2017-07-08 17:57:44 +03:00
if ( ulen ! = rlen )
tprintf ( " , [%d->%d] " , ulen , rlen ) ;
else
tprintf ( " , [%d] " , rlen ) ;
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
}
}
return 0 ;
}
2015-06-08 17:19:46 +03:00
# ifdef IP_ADD_MEMBERSHIP
static void
2016-12-26 13:26:03 +03:00
print_mreq ( struct tcb * const tcp , const kernel_ulong_t addr ,
2017-07-09 21:43:34 +03:00
const int len )
2015-06-08 17:19:46 +03:00
{
struct ip_mreq mreq ;
2017-07-09 21:43:34 +03:00
if ( len < ( int ) sizeof ( mreq ) ) {
printaddr ( addr ) ;
} else if ( ! umove_or_printaddr ( tcp , addr , & mreq ) ) {
PRINT_FIELD_INET4_ADDR ( " { " , mreq , imr_multiaddr ) ;
PRINT_FIELD_INET4_ADDR ( " , " , mreq , imr_interface ) ;
tprints ( " } " ) ;
2015-06-08 17:19:46 +03:00
}
}
# endif /* IP_ADD_MEMBERSHIP */
# ifdef IPV6_ADD_MEMBERSHIP
static void
2016-12-26 13:26:03 +03:00
print_mreq6 ( struct tcb * const tcp , const kernel_ulong_t addr ,
2017-07-09 21:43:34 +03:00
const int len )
2015-06-08 17:19:46 +03:00
{
struct ipv6_mreq mreq ;
2017-07-09 21:43:34 +03:00
if ( len < ( int ) sizeof ( mreq ) ) {
printaddr ( addr ) ;
} else if ( ! umove_or_printaddr ( tcp , addr , & mreq ) ) {
PRINT_FIELD_INET_ADDR ( " { " , mreq , ipv6mr_multiaddr , AF_INET6 ) ;
PRINT_FIELD_IFINDEX ( " , " , mreq , ipv6mr_interface ) ;
tprints ( " } " ) ;
2017-06-16 00:02:14 +03:00
}
2015-06-08 17:19:46 +03:00
}
# endif /* IPV6_ADD_MEMBERSHIP */
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
# ifdef PACKET_RX_RING
static void
2016-12-26 13:26:03 +03:00
print_tpacket_req ( struct tcb * const tcp , const kernel_ulong_t addr , const int len )
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
{
struct tpacket_req req ;
if ( len ! = sizeof ( req ) | |
umove ( tcp , addr , & req ) < 0 ) {
net.c: use printaddr and umove_or_printaddr
* net.c (printsock): Use printaddr and umove_or_printaddr.
(printcmsghdr, printmsghdr, printmmsghdr, decode_mmsg, do_sockname,
sys_recv, sys_recvfrom, sys_recvmsg, do_pipe, print_linger, print_ucred,
print_tpacket_stats, print_icmp_filter, print_getsockopt,
print_group_req, print_tpacket_req, print_packet_mreq,
print_setsockopt): Use printaddr.
(print_mreq, print_mreq6): Use umove_or_printaddr.
2015-07-20 01:36:46 +03:00
printaddr ( addr ) ;
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
} else {
2017-07-09 16:54:01 +03:00
PRINT_FIELD_U ( " { " , req , tp_block_size ) ;
PRINT_FIELD_U ( " , " , req , tp_block_nr ) ;
PRINT_FIELD_U ( " , " , req , tp_frame_size ) ;
PRINT_FIELD_U ( " , " , req , tp_frame_nr ) ;
tprints ( " } " ) ;
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
}
}
# endif /* PACKET_RX_RING */
2015-01-29 06:26:53 +03:00
# ifdef PACKET_ADD_MEMBERSHIP
# include "xlat / packet_mreq_type.h"
static void
2016-12-26 13:26:03 +03:00
print_packet_mreq ( struct tcb * const tcp , const kernel_ulong_t addr , const int len )
2015-01-29 06:26:53 +03:00
{
struct packet_mreq mreq ;
if ( len ! = sizeof ( mreq ) | |
umove ( tcp , addr , & mreq ) < 0 ) {
net.c: use printaddr and umove_or_printaddr
* net.c (printsock): Use printaddr and umove_or_printaddr.
(printcmsghdr, printmsghdr, printmmsghdr, decode_mmsg, do_sockname,
sys_recv, sys_recvfrom, sys_recvmsg, do_pipe, print_linger, print_ucred,
print_tpacket_stats, print_icmp_filter, print_getsockopt,
print_group_req, print_tpacket_req, print_packet_mreq,
print_setsockopt): Use printaddr.
(print_mreq, print_mreq6): Use umove_or_printaddr.
2015-07-20 01:36:46 +03:00
printaddr ( addr ) ;
2015-01-29 06:26:53 +03:00
} else {
unsigned int i ;
2017-07-09 16:54:01 +03:00
PRINT_FIELD_IFINDEX ( " { " , mreq , mr_ifindex ) ;
PRINT_FIELD_XVAL ( " , " , mreq , mr_type , packet_mreq_type ,
" PACKET_MR_??? " ) ;
PRINT_FIELD_U ( " , " , mreq , mr_alen ) ;
tprints ( " , mr_address= " ) ;
2015-01-29 06:26:53 +03:00
if ( mreq . mr_alen > ARRAY_SIZE ( mreq . mr_address ) )
mreq . mr_alen = ARRAY_SIZE ( mreq . mr_address ) ;
for ( i = 0 ; i < mreq . mr_alen ; + + i )
tprintf ( " %02x " , mreq . mr_address [ i ] ) ;
tprints ( " } " ) ;
}
}
# endif /* PACKET_ADD_MEMBERSHIP */
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
static void
net: change address argument type from long to kernel_ureg_t
* net.c (decode_sockbuf, decode_pair_fd, print_linger, print_ucred,
print_tpacket_stats, print_icmp_filter, print_getsockopt, print_mreq,
print_mreq6, print_group_req, print_tpacket_req, print_packet_mreq,
print_setsockopt): Change address argument type from long
to kernel_ureg_t.
2016-12-23 13:50:10 +03:00
print_setsockopt ( struct tcb * const tcp , const unsigned int level ,
2016-12-26 13:26:03 +03:00
const unsigned int name , const kernel_ulong_t addr ,
net: change address argument type from long to kernel_ureg_t
* net.c (decode_sockbuf, decode_pair_fd, print_linger, print_ucred,
print_tpacket_stats, print_icmp_filter, print_getsockopt, print_mreq,
print_mreq6, print_group_req, print_tpacket_req, print_packet_mreq,
print_setsockopt): Change address argument type from long
to kernel_ureg_t.
2016-12-23 13:50:10 +03:00
const int len )
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
{
if ( addr & & verbose ( tcp ) )
switch ( level ) {
case SOL_SOCKET :
switch ( name ) {
case SO_LINGER :
2017-07-08 17:57:44 +03:00
print_set_linger ( tcp , addr , len ) ;
2017-07-08 17:57:44 +03:00
return ;
2017-07-08 17:57:44 +03:00
# ifdef SO_ATTACH_FILTER
case SO_ATTACH_FILTER :
# ifdef SO_ATTACH_REUSEPORT_CBPF
case SO_ATTACH_REUSEPORT_CBPF :
# endif
if ( ( unsigned int ) len = = get_sock_fprog_size ( ) )
decode_sock_fprog ( tcp , addr ) ;
else
printaddr ( addr ) ;
return ;
# endif /* SO_ATTACH_FILTER */
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
}
2002-05-23 15:48:58 +04:00
break ;
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
2015-01-30 04:55:20 +03:00
case SOL_IP :
switch ( name ) {
2015-06-08 17:19:46 +03:00
# ifdef IP_ADD_MEMBERSHIP
case IP_ADD_MEMBERSHIP :
case IP_DROP_MEMBERSHIP :
print_mreq ( tcp , addr , len ) ;
2017-07-08 17:57:44 +03:00
return ;
2015-06-08 17:19:46 +03:00
# endif /* IP_ADD_MEMBERSHIP */
2015-01-30 04:55:20 +03:00
# ifdef MCAST_JOIN_GROUP
case MCAST_JOIN_GROUP :
case MCAST_LEAVE_GROUP :
print_group_req ( tcp , addr , len ) ;
2017-07-08 17:57:44 +03:00
return ;
2015-01-30 04:55:20 +03:00
# endif /* MCAST_JOIN_GROUP */
}
2015-02-08 04:19:06 +03:00
break ;
2015-06-08 17:19:46 +03:00
case SOL_IPV6 :
switch ( name ) {
# ifdef IPV6_ADD_MEMBERSHIP
case IPV6_ADD_MEMBERSHIP :
case IPV6_DROP_MEMBERSHIP :
# ifdef IPV6_JOIN_ANYCAST
case IPV6_JOIN_ANYCAST :
# endif
# ifdef IPV6_LEAVE_ANYCAST
case IPV6_LEAVE_ANYCAST :
# endif
print_mreq6 ( tcp , addr , len ) ;
2017-07-08 17:57:44 +03:00
return ;
2015-06-08 17:19:46 +03:00
# endif /* IPV6_ADD_MEMBERSHIP */
2017-07-09 21:43:34 +03:00
# ifdef MCAST_JOIN_GROUP
case MCAST_JOIN_GROUP :
case MCAST_LEAVE_GROUP :
print_group_req ( tcp , addr , len ) ;
return ;
# endif /* MCAST_JOIN_GROUP */
2015-06-08 17:19:46 +03:00
}
break ;
2015-01-30 04:55:20 +03:00
2012-03-17 07:42:07 +04:00
case SOL_PACKET :
2009-11-13 15:51:04 +03:00
switch ( name ) {
2015-01-29 07:42:37 +03:00
# ifdef PACKET_RX_RING
2012-03-17 07:42:07 +04:00
case PACKET_RX_RING :
2015-01-29 07:42:37 +03:00
# ifdef PACKET_TX_RING
2012-03-17 07:42:07 +04:00
case PACKET_TX_RING :
2015-01-29 07:42:37 +03:00
# endif
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
print_tpacket_req ( tcp , addr , len ) ;
2017-07-08 17:57:44 +03:00
return ;
2015-01-29 07:42:37 +03:00
# endif /* PACKET_RX_RING */
# ifdef PACKET_ADD_MEMBERSHIP
2015-01-29 06:26:53 +03:00
case PACKET_ADD_MEMBERSHIP :
case PACKET_DROP_MEMBERSHIP :
print_packet_mreq ( tcp , addr , len ) ;
2017-07-08 17:57:44 +03:00
return ;
2015-01-29 07:42:37 +03:00
# endif /* PACKET_ADD_MEMBERSHIP */
2009-11-13 15:51:04 +03:00
}
2002-05-23 15:48:58 +04:00
break ;
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
2012-03-17 07:42:07 +04:00
case SOL_RAW :
2002-05-23 15:48:58 +04:00
switch ( name ) {
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
case ICMP_FILTER :
print_icmp_filter ( tcp , addr , len ) ;
2017-07-08 17:57:44 +03:00
return ;
2002-05-23 15:48:58 +04:00
}
break ;
2017-11-16 03:12:46 +03:00
case SOL_NETLINK :
if ( len < ( int ) sizeof ( int ) )
printaddr ( addr ) ;
else
printnum_int ( tcp , addr , " %d " ) ;
return ;
2002-05-23 15:48:58 +04:00
}
2002-05-22 19:46:49 +04:00
2002-05-23 15:48:58 +04:00
/* default arg printing */
2002-05-22 19:46:49 +04:00
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
if ( verbose ( tcp ) ) {
if ( len = = sizeof ( int ) ) {
printnum_int ( tcp , addr , " %d " ) ;
} else {
2016-12-20 19:43:26 +03:00
printstrn ( tcp , addr , len ) ;
getsockopt, setsockopt: do not decode structures in non-verbose mode
Move the code that is common between getsockopt and setsockopt parsers
to a separate function.
Move printers specific to getsockopt and setsockopt to separate
functions, choose appropriate parsers depending on verbose mode.
Move parsers of specific socket options to separate functions.
* net.c (printicmpfilter): Rename to print_icmp_filter.
(printsockopt): Remove.
(print_sockopt_fd_level_name, print_linger, print_ucred,
print_tpacket_stats, print_getsockopt, print_tpacket_req,
print_packet_mreq, print_setsockopt): New functions.
(sys_getsockopt, sys_setsockopt): Use them.
2015-01-29 06:11:41 +03:00
}
} else {
net.c: use printaddr and umove_or_printaddr
* net.c (printsock): Use printaddr and umove_or_printaddr.
(printcmsghdr, printmsghdr, printmmsghdr, decode_mmsg, do_sockname,
sys_recv, sys_recvfrom, sys_recvmsg, do_pipe, print_linger, print_ucred,
print_tpacket_stats, print_icmp_filter, print_getsockopt,
print_group_req, print_tpacket_req, print_packet_mreq,
print_setsockopt): Use printaddr.
(print_mreq, print_mreq6): Use umove_or_printaddr.
2015-07-20 01:36:46 +03:00
printaddr ( addr ) ;
2002-05-23 15:48:58 +04:00
}
}
2015-04-07 04:36:50 +03:00
SYS_FUNC ( setsockopt )
2002-05-23 15:48:58 +04:00
{
2015-07-20 01:52:47 +03:00
print_sockopt_fd_level_name ( tcp , tcp - > u_arg [ 0 ] ,
decode extend getsockopt/setsockopt options
Currently the code assumes the set of valid options between getsockopt
and setsockopt are exactly the same and thus maintains one list. The
kernel unfortunately does not do this -- it allows for different opts
between the get and set functions. See the {g,s}et_opt{min,max} fields
in the various netfilter subcores.
To support this, extend the printxval function to take multiple sets of
xlats as varargs. Then we add the new get/set lists, and pass them down
in the net code when decoding things.
A simple example is iptables; before:
getsockopt(4, SOL_IP, 0x40 /* IP_??? */, ...) = 0
getsockopt(4, SOL_IP, 0x41 /* IP_??? */, ...) = 0
after:
getsockopt(4, SOL_IP, IPT_SO_GET_INFO, ...) = 0
getsockopt(4, SOL_IP, IPT_SO_GET_ENTRIES, ...) = 0
If these were setsockopt calls, then 0x40 & 0x41 would be
IPT_SO_SET_REPLACE & IPT_SO_SET_ADD_COUNTERS.
* configure.ac: Check for netfilter headers.
* defs.h (printxvals): New prototype.
(printxval): Change to a define.
* net.c: Include netfilter headers and new sockopts headers.
(print_sockopt_fd_level_name): Add a is_getsockopt argument. Change SOL_IP
and SOL_IPV6 decoding to use printxvals, and use is_getsockopt to pass more
xlats down.
(getsockopt): Call print_sockopt_fd_level_name with is_getsockopt as true.
(setsockopt): Call print_sockopt_fd_level_name with is_getsockopt as false.
* util.c (printxval): Rename to ...
(printxvals): ... this. Rewrite to be varargs based.
* xlat/getsockipoptions.in: New xlat list.
* xlat/getsockipv6options.in, xlat/setsockipoptions.in,
xlat/setsockipv6options.in: Likewise.
2015-08-19 20:29:27 +03:00
tcp - > u_arg [ 1 ] , tcp - > u_arg [ 2 ] , false ) ;
2015-07-20 01:52:47 +03:00
print_setsockopt ( tcp , tcp - > u_arg [ 1 ] , tcp - > u_arg [ 2 ] ,
tcp - > u_arg [ 3 ] , tcp - > u_arg [ 4 ] ) ;
2017-07-08 17:57:44 +03:00
tprintf ( " , %d " , ( int ) tcp - > u_arg [ 4 ] ) ;
2015-07-20 01:52:47 +03:00
return RVAL_DECODED ;
1999-02-19 03:21:36 +03:00
}