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 >
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"
# include <sys/stat.h>
# include <sys/socket.h>
# include <sys/un.h>
2001-02-16 23:29:03 +03:00
# if defined(HAVE_SIN6_SCOPE_ID_LINUX)
2012-03-16 15:02:22 +04:00
# define in6_addr in6_addr_libc
# define ipv6_mreq ipv6_mreq_libc
# define sockaddr_in6 sockaddr_in6_libc
2001-02-16 23:29:03 +03:00
# endif
1999-02-19 03:21:36 +03:00
# 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>
2013-02-08 21:49:06 +04:00
# if defined(__GLIBC__)
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
2013-02-08 21:49:06 +04:00
# if defined(__GLIBC__) && defined(HAVE_SIN6_SCOPE_ID_LINUX)
2012-03-16 15:02:22 +04:00
# if defined(HAVE_LINUX_IN6_H)
# if defined(HAVE_SIN6_SCOPE_ID_LINUX)
# undef in6_addr
# undef ipv6_mreq
# undef sockaddr_in6
# define in6_addr in6_addr_kernel
# define ipv6_mreq ipv6_mreq_kernel
# define sockaddr_in6 sockaddr_in6_kernel
# endif
# include <linux / in6.h>
# if defined(HAVE_SIN6_SCOPE_ID_LINUX)
# undef in6_addr
# undef ipv6_mreq
# undef sockaddr_in6
# define in6_addr in6_addr_libc
# define ipv6_mreq ipv6_mreq_libc
# define sockaddr_in6 sockaddr_in6_kernel
# endif
# endif
1999-11-01 22:53:31 +03:00
# endif
1999-11-01 22:39:08 +03:00
1999-11-18 20:09:47 +03:00
# if defined(HAVE_SYS_UIO_H)
2012-03-16 15:02:22 +04:00
# include <sys / uio.h>
1999-11-18 20:09:47 +03:00
# endif
# if defined(HAVE_LINUX_NETLINK_H)
2012-03-16 15:02:22 +04:00
# include <linux / netlink.h>
1999-11-18 20:09:47 +03:00
# endif
# if defined(HAVE_LINUX_IF_PACKET_H)
2012-03-16 15:02:22 +04:00
# include <linux / if_packet.h>
1999-11-18 20:09:47 +03:00
# endif
2000-07-05 20:05:39 +04:00
# if defined(HAVE_LINUX_ICMP_H)
2012-03-16 15:02:22 +04:00
# include <linux / icmp.h>
2000-07-05 20:05:39 +04:00
# endif
1999-02-19 03:21:36 +03:00
# ifndef PF_UNSPEC
2012-03-16 15:02:22 +04:00
# define PF_UNSPEC AF_UNSPEC
1999-02-19 03:21:36 +03:00
# endif
/* Under Linux these are enums so we can't test for them with ifdef. */
# define IPPROTO_EGP IPPROTO_EGP
# define IPPROTO_PUP IPPROTO_PUP
# define IPPROTO_IDP IPPROTO_IDP
# define IPPROTO_IGMP IPPROTO_IGMP
# define IPPROTO_RAW IPPROTO_RAW
# define IPPROTO_MAX IPPROTO_MAX
2004-09-04 07:39:20 +04:00
static const struct xlat domains [ ] = {
2004-06-04 06:24:14 +04:00
# ifdef PF_AAL5
{ PF_AAL5 , " PF_AAL5 " } ,
1999-11-18 20:09:47 +03:00
# endif
2004-06-04 06:24:14 +04:00
# ifdef PF_APPLETALK
{ PF_APPLETALK , " PF_APPLETALK " } ,
1999-11-18 20:09:47 +03:00
# endif
2004-06-04 06:24:14 +04:00
# ifdef PF_ASH
{ PF_ASH , " PF_ASH " } ,
# endif
# ifdef PF_ATMPVC
{ PF_ATMPVC , " PF_ATMPVC " } ,
1999-11-18 20:09:47 +03:00
# endif
# ifdef PF_ATMSVC
2004-06-04 06:24:14 +04:00
{ PF_ATMSVC , " PF_ATMSVC " } ,
# endif
# ifdef PF_AX25
{ PF_AX25 , " PF_AX25 " } ,
# endif
# ifdef PF_BLUETOOTH
{ PF_BLUETOOTH , " PF_BLUETOOTH " } ,
# endif
# ifdef PF_BRIDGE
{ PF_BRIDGE , " PF_BRIDGE " } ,
# endif
# ifdef PF_DECnet
{ PF_DECnet , " PF_DECnet " } ,
# endif
# ifdef PF_DECNET
{ PF_DECNET , " PF_DECNET " } ,
# endif
# ifdef PF_ECONET
{ PF_ECONET , " PF_ECONET " } ,
# endif
# ifdef PF_FILE
{ PF_FILE , " PF_FILE " } ,
# endif
# ifdef PF_IMPLINK
{ PF_IMPLINK , " PF_IMPLINK " } ,
# endif
# ifdef PF_INET
{ PF_INET , " PF_INET " } ,
1999-11-18 20:09:47 +03:00
# endif
# ifdef PF_INET6
{ PF_INET6 , " PF_INET6 " } ,
# endif
2004-06-04 06:24:14 +04:00
# ifdef PF_IPX
{ PF_IPX , " PF_IPX " } ,
# endif
# ifdef PF_IRDA
{ PF_IRDA , " PF_IRDA " } ,
1999-02-19 03:21:36 +03:00
# endif
# ifdef PF_ISO
{ PF_ISO , " PF_ISO " } ,
# endif
2004-06-04 06:24:14 +04:00
# ifdef PF_KEY
{ PF_KEY , " PF_KEY " } ,
1999-02-19 03:21:36 +03:00
# endif
2004-06-04 06:24:14 +04:00
# ifdef PF_UNIX
{ PF_UNIX , " PF_UNIX " } ,
1999-02-19 03:21:36 +03:00
# endif
2004-06-04 06:24:14 +04:00
# ifdef PF_LOCAL
{ PF_LOCAL , " PF_LOCAL " } ,
# endif
# ifdef PF_NETBEUI
{ PF_NETBEUI , " PF_NETBEUI " } ,
# endif
# ifdef PF_NETLINK
{ PF_NETLINK , " PF_NETLINK " } ,
1999-02-19 03:21:36 +03:00
# endif
# ifdef PF_NETROM
{ PF_NETROM , " PF_NETROM " } ,
# endif
2004-06-04 06:24:14 +04:00
# ifdef PF_PACKET
{ PF_PACKET , " PF_PACKET " } ,
1999-02-19 03:21:36 +03:00
# endif
2004-06-04 06:24:14 +04:00
# ifdef PF_PPPOX
{ PF_PPPOX , " PF_PPPOX " } ,
1999-02-19 03:21:36 +03:00
# endif
# ifdef PF_ROSE
{ PF_ROSE , " PF_ROSE " } ,
# endif
2004-06-04 06:24:14 +04:00
# ifdef PF_ROUTE
{ PF_ROUTE , " PF_ROUTE " } ,
1999-02-19 03:21:36 +03:00
# endif
2004-06-04 06:24:14 +04:00
# ifdef PF_SECURITY
{ PF_SECURITY , " PF_SECURITY " } ,
1999-02-19 03:21:36 +03:00
# endif
2004-06-04 06:24:14 +04:00
# ifdef PF_SNA
{ PF_SNA , " PF_SNA " } ,
# endif
# ifdef PF_UNSPEC
{ PF_UNSPEC , " PF_UNSPEC " } ,
# endif
# ifdef PF_WANPIPE
{ PF_WANPIPE , " PF_WANPIPE " } ,
# endif
# ifdef PF_X25
{ PF_X25 , " PF_X25 " } ,
1999-02-19 03:21:36 +03:00
# endif
{ 0 , NULL } ,
} ;
2004-09-04 07:39:20 +04:00
const struct xlat addrfams [ ] = {
2004-06-04 06:24:14 +04:00
# ifdef AF_APPLETALK
{ AF_APPLETALK , " AF_APPLETALK " } ,
# endif
# ifdef AF_ASH
{ AF_ASH , " AF_ASH " } ,
# endif
# ifdef AF_ATMPVC
{ AF_ATMPVC , " AF_ATMPVC " } ,
# endif
# ifdef AF_ATMSVC
{ AF_ATMSVC , " AF_ATMSVC " } ,
# endif
# ifdef AF_AX25
{ AF_AX25 , " AF_AX25 " } ,
# endif
# ifdef AF_BLUETOOTH
{ AF_BLUETOOTH , " AF_BLUETOOTH " } ,
# endif
# ifdef AF_BRIDGE
{ AF_BRIDGE , " AF_BRIDGE " } ,
# endif
# ifdef AF_DECnet
{ AF_DECnet , " AF_DECnet " } ,
# endif
# ifdef AF_ECONET
{ AF_ECONET , " AF_ECONET " } ,
# endif
# ifdef AF_FILE
{ AF_FILE , " AF_FILE " } ,
# endif
# ifdef AF_IMPLINK
{ AF_IMPLINK , " AF_IMPLINK " } ,
# endif
# ifdef AF_INET
1999-11-18 20:09:47 +03:00
{ AF_INET , " AF_INET " } ,
2004-06-04 06:24:14 +04:00
# endif
1999-11-26 12:54:08 +03:00
# ifdef AF_INET6
1999-11-18 20:09:47 +03:00
{ AF_INET6 , " AF_INET6 " } ,
1999-11-26 12:54:08 +03:00
# endif
2004-06-04 06:24:14 +04:00
# ifdef AF_IPX
{ AF_IPX , " AF_IPX " } ,
1999-11-18 20:09:47 +03:00
# endif
2004-06-04 06:24:14 +04:00
# ifdef AF_IRDA
{ AF_IRDA , " AF_IRDA " } ,
# endif
# ifdef AF_ISO
{ AF_ISO , " AF_ISO " } ,
# endif
# ifdef AF_KEY
{ AF_KEY , " AF_KEY " } ,
# endif
# ifdef AF_UNIX
{ AF_UNIX , " AF_UNIX " } ,
# endif
# ifdef AF_LOCAL
{ AF_LOCAL , " AF_LOCAL " } ,
# endif
# ifdef AF_NETBEUI
{ AF_NETBEUI , " AF_NETBEUI " } ,
1999-11-26 12:54:08 +03:00
# endif
# ifdef AF_NETLINK
1999-11-18 20:09:47 +03:00
{ AF_NETLINK , " AF_NETLINK " } ,
1999-11-26 12:54:08 +03:00
# endif
2004-06-04 06:24:14 +04:00
# ifdef AF_NETROM
{ AF_NETROM , " AF_NETROM " } ,
1999-11-18 20:09:47 +03:00
# endif
2004-06-04 06:24:14 +04:00
# ifdef AF_PACKET
{ AF_PACKET , " AF_PACKET " } ,
# endif
# ifdef AF_PPPOX
{ AF_PPPOX , " AF_PPPOX " } ,
# endif
# ifdef AF_ROSE
{ AF_ROSE , " AF_ROSE " } ,
# endif
# ifdef AF_ROUTE
{ AF_ROUTE , " AF_ROUTE " } ,
# endif
# ifdef AF_SECURITY
{ AF_SECURITY , " AF_SECURITY " } ,
# endif
# ifdef AF_SNA
{ AF_SNA , " AF_SNA " } ,
# endif
# ifdef AF_UNSPEC
{ AF_UNSPEC , " AF_UNSPEC " } ,
# endif
# ifdef AF_WANPIPE
{ AF_WANPIPE , " AF_WANPIPE " } ,
# endif
# ifdef AF_X25
{ AF_X25 , " AF_X25 " } ,
1999-11-18 20:09:47 +03:00
# endif
{ 0 , NULL } ,
} ;
2004-09-04 07:39:20 +04:00
static const struct xlat socktypes [ ] = {
1999-02-19 03:21:36 +03:00
{ SOCK_STREAM , " SOCK_STREAM " } ,
{ SOCK_DGRAM , " SOCK_DGRAM " } ,
# ifdef SOCK_RAW
{ SOCK_RAW , " SOCK_RAW " } ,
# endif
2008-11-10 20:21:23 +03:00
# ifdef SOCK_RDM
{ SOCK_RDM , " SOCK_RDM " } ,
# endif
1999-02-19 03:21:36 +03:00
# ifdef SOCK_SEQPACKET
{ SOCK_SEQPACKET , " SOCK_SEQPACKET " } ,
# endif
2008-11-10 20:21:23 +03:00
# ifdef SOCK_DCCP
{ SOCK_DCCP , " SOCK_DCCP " } ,
1999-02-19 03:21:36 +03:00
# endif
# ifdef SOCK_PACKET
{ SOCK_PACKET , " SOCK_PACKET " } ,
# endif
{ 0 , NULL } ,
} ;
2011-03-03 04:02:41 +03:00
static const struct xlat sock_type_flags [ ] = {
2008-11-10 20:21:23 +03:00
# ifdef SOCK_CLOEXEC
{ SOCK_CLOEXEC , " SOCK_CLOEXEC " } ,
# endif
# ifdef SOCK_NONBLOCK
{ SOCK_NONBLOCK , " SOCK_NONBLOCK " } ,
# endif
{ 0 , NULL } ,
} ;
# ifndef SOCK_TYPE_MASK
# define SOCK_TYPE_MASK 0xf
# endif
2004-09-04 07:39:20 +04:00
static const struct xlat socketlayers [ ] = {
2001-03-06 12:25:46 +03:00
# if defined(SOL_IP)
2000-11-26 06:59:21 +03:00
{ SOL_IP , " SOL_IP " } ,
2001-03-06 12:25:46 +03:00
# endif
2000-11-26 06:59:21 +03:00
# if defined(SOL_ICMP)
{ SOL_ICMP , " SOL_ICMP " } ,
# endif
2001-03-06 12:25:46 +03:00
# if defined(SOL_TCP)
2000-11-26 06:59:21 +03:00
{ SOL_TCP , " SOL_TCP " } ,
2001-03-06 12:25:46 +03:00
# endif
# if defined(SOL_UDP)
2000-11-26 06:59:21 +03:00
{ SOL_UDP , " SOL_UDP " } ,
2001-03-06 12:25:46 +03:00
# endif
2000-11-26 06:59:21 +03:00
# if defined(SOL_IPV6)
{ SOL_IPV6 , " SOL_IPV6 " } ,
# endif
# if defined(SOL_ICMPV6)
{ SOL_ICMPV6 , " SOL_ICMPV6 " } ,
# endif
2011-01-14 13:08:11 +03:00
# if defined(SOL_SCTP)
{ SOL_SCTP , " SOL_SCTP " } ,
# endif
# if defined(SOL_UDPLITE)
{ SOL_UDPLITE , " SOL_UDPLITE " } ,
# endif
2000-11-26 06:59:21 +03:00
# if defined(SOL_RAW)
{ SOL_RAW , " SOL_RAW " } ,
# endif
# if defined(SOL_IPX)
{ SOL_IPX , " SOL_IPX " } ,
# endif
# if defined(SOL_AX25)
{ SOL_AX25 , " SOL_AX25 " } ,
# endif
# if defined(SOL_ATALK)
{ SOL_ATALK , " SOL_ATALK " } ,
# endif
# if defined(SOL_NETROM)
{ SOL_NETROM , " SOL_NETROM " } ,
# endif
# if defined(SOL_ROSE)
{ SOL_ROSE , " SOL_ROSE " } ,
# endif
# if defined(SOL_DECNET)
{ SOL_DECNET , " SOL_DECNET " } ,
# endif
# if defined(SOL_X25)
{ SOL_X25 , " SOL_X25 " } ,
# endif
# if defined(SOL_PACKET)
{ SOL_PACKET , " SOL_PACKET " } ,
# endif
# if defined(SOL_ATM)
{ SOL_ATM , " SOL_ATM " } ,
# endif
# if defined(SOL_AAL)
{ SOL_AAL , " SOL_AAL " } ,
# endif
# if defined(SOL_IRDA)
{ SOL_IRDA , " SOL_IRDA " } ,
2011-01-14 13:08:11 +03:00
# endif
# if defined(SOL_NETBEUI)
{ SOL_NETBEUI , " SOL_NETBEUI " } ,
# endif
# if defined(SOL_LLC)
{ SOL_LLC , " SOL_LLC " } ,
# endif
# if defined(SOL_DCCP)
{ SOL_DCCP , " SOL_DCCP " } ,
# endif
# if defined(SOL_NETLINK)
{ SOL_NETLINK , " SOL_NETLINK " } ,
# endif
# if defined(SOL_TIPC)
{ SOL_TIPC , " SOL_TIPC " } ,
# endif
# if defined(SOL_RXRPC)
{ SOL_RXRPC , " SOL_RXRPC " } ,
# endif
# if defined(SOL_PPPOL2TP)
{ SOL_PPPOL2TP , " SOL_PPPOL2TP " } ,
# endif
# if defined(SOL_BLUETOOTH)
{ SOL_BLUETOOTH , " SOL_BLUETOOTH " } ,
# endif
# if defined(SOL_PNPIPE)
{ SOL_PNPIPE , " SOL_PNPIPE " } ,
# endif
# if defined(SOL_RDS)
{ SOL_RDS , " SOL_RDS " } ,
# endif
# if defined(SOL_IUVC)
{ SOL_IUCV , " SOL_IUCV " } ,
# endif
# if defined(SOL_CAIF)
{ SOL_CAIF , " SOL_CAIF " } ,
2000-11-26 06:59:21 +03:00
# endif
2001-03-27 20:47:36 +04:00
{ SOL_SOCKET , " SOL_SOCKET " } , /* Never used! */
2011-03-03 04:02:41 +03:00
/* The SOL_* array should remain not NULL-terminated. */
2000-11-26 06:59:21 +03:00
} ;
2002-05-22 19:46:49 +04:00
/*** WARNING: DANGER WILL ROBINSON: NOTE "socketlayers" array above
falls into " protocols " array below ! ! ! ! This is intended ! ! ! * * */
2004-09-04 07:39:20 +04:00
static const struct xlat protocols [ ] = {
1999-02-19 03:21:36 +03:00
{ IPPROTO_IP , " IPPROTO_IP " } ,
{ IPPROTO_ICMP , " IPPROTO_ICMP " } ,
{ IPPROTO_TCP , " IPPROTO_TCP " } ,
{ IPPROTO_UDP , " IPPROTO_UDP " } ,
2011-01-10 04:14:38 +03:00
# ifdef IPPROTO_IGMP
{ IPPROTO_IGMP , " IPPROTO_IGMP " } ,
# endif
1999-02-19 03:21:36 +03:00
# ifdef IPPROTO_GGP
{ IPPROTO_GGP , " IPPROTO_GGP " } ,
# endif
2011-01-10 04:14:38 +03:00
# ifdef IPPROTO_IPIP
{ IPPROTO_IPIP , " IPPROTO_IPIP " } ,
# endif
1999-02-19 03:21:36 +03:00
# ifdef IPPROTO_EGP
{ IPPROTO_EGP , " IPPROTO_EGP " } ,
# endif
# ifdef IPPROTO_PUP
{ IPPROTO_PUP , " IPPROTO_PUP " } ,
# endif
# ifdef IPPROTO_IDP
{ IPPROTO_IDP , " IPPROTO_IDP " } ,
# endif
2011-01-10 04:14:38 +03:00
# ifdef IPPROTO_TP
{ IPPROTO_TP , " IPPROTO_TP " } ,
# endif
# ifdef IPPROTO_DCCP
{ IPPROTO_DCCP , " IPPROTO_DCCP " } ,
# endif
1999-02-19 03:21:36 +03:00
# ifdef IPPROTO_IPV6
{ IPPROTO_IPV6 , " IPPROTO_IPV6 " } ,
# endif
2011-01-10 04:14:38 +03:00
# ifdef IPPROTO_ROUTING
{ IPPROTO_ROUTING , " IPPROTO_ROUTING " } ,
# endif
# ifdef IPPROTO_FRAGMENT
{ IPPROTO_FRAGMENT , " IPPROTO_FRAGMENT " } ,
# endif
# ifdef IPPROTO_RSVP
{ IPPROTO_RSVP , " IPPROTO_RSVP " } ,
# endif
# ifdef IPPROTO_GRE
{ IPPROTO_GRE , " IPPROTO_GRE " } ,
# endif
# ifdef IPPROTO_ESP
{ IPPROTO_ESP , " IPPROTO_ESP " } ,
# endif
# ifdef IPPROTO_AH
{ IPPROTO_AH , " IPPROTO_AH " } ,
# endif
1999-02-19 03:21:36 +03:00
# ifdef IPPROTO_ICMPV6
2011-01-10 04:14:38 +03:00
{ IPPROTO_ICMPV6 , " IPPROTO_ICMPV6 " } ,
1999-02-19 03:21:36 +03:00
# endif
2011-01-10 04:14:38 +03:00
# ifdef IPPROTO_NONE
{ IPPROTO_NONE , " IPPROTO_NONE " } ,
# endif
# ifdef IPPROTO_DSTOPTS
{ IPPROTO_DSTOPTS , " IPPROTO_DSTOPTS " } ,
1999-02-19 03:21:36 +03:00
# endif
# ifdef IPPROTO_HELLO
2011-01-10 04:14:38 +03:00
{ IPPROTO_HELLO , " IPPROTO_HELLO " } ,
1999-02-19 03:21:36 +03:00
# endif
# ifdef IPPROTO_ND
{ IPPROTO_ND , " IPPROTO_ND " } ,
# endif
2011-01-10 04:14:38 +03:00
# ifdef IPPROTO_MTP
{ IPPROTO_MTP , " IPPROTO_MTP " } ,
1999-02-19 03:21:36 +03:00
# endif
2011-01-10 04:14:38 +03:00
# ifdef IPPROTO_ENCAP
{ IPPROTO_ENCAP , " IPPROTO_ENCAP " } ,
1999-02-19 03:21:36 +03:00
# endif
2011-01-10 04:14:38 +03:00
# ifdef IPPROTO_PIM
{ IPPROTO_PIM , " IPPROTO_PIM " } ,
# endif
# ifdef IPPROTO_COMP
{ IPPROTO_COMP , " IPPROTO_COMP " } ,
# endif
# ifdef IPPROTO_SCTP
{ IPPROTO_SCTP , " IPPROTO_SCTP " } ,
2011-01-07 21:10:41 +03:00
# endif
# ifdef IPPROTO_UDPLITE
{ IPPROTO_UDPLITE , " IPPROTO_UDPLITE " } ,
# endif
2011-01-10 04:14:38 +03:00
# ifdef IPPROTO_RAW
{ IPPROTO_RAW , " IPPROTO_RAW " } ,
2011-01-07 21:10:41 +03:00
# endif
2011-01-10 04:14:38 +03:00
# ifdef IPPROTO_MAX
{ IPPROTO_MAX , " IPPROTO_MAX " } ,
1999-02-19 03:21:36 +03:00
# endif
{ 0 , NULL } ,
} ;
2004-09-04 07:39:20 +04:00
static const struct xlat msg_flags [ ] = {
2007-08-07 05:00:26 +04:00
{ MSG_OOB , " MSG_OOB " } ,
1999-02-19 03:21:36 +03:00
# ifdef MSG_DONTROUTE
2007-08-07 05:00:26 +04:00
{ MSG_DONTROUTE , " MSG_DONTROUTE " } ,
1999-02-19 03:21:36 +03:00
# endif
# ifdef MSG_PEEK
2007-08-07 05:00:26 +04:00
{ MSG_PEEK , " MSG_PEEK " } ,
1999-02-19 03:21:36 +03:00
# endif
# ifdef MSG_CTRUNC
2007-08-07 05:00:26 +04:00
{ MSG_CTRUNC , " MSG_CTRUNC " } ,
1999-02-19 03:21:36 +03:00
# endif
# ifdef MSG_PROXY
2007-08-07 05:00:26 +04:00
{ MSG_PROXY , " MSG_PROXY " } ,
1999-02-19 03:21:36 +03:00
# endif
# ifdef MSG_EOR
2007-08-07 05:00:26 +04:00
{ MSG_EOR , " MSG_EOR " } ,
1999-02-19 03:21:36 +03:00
# endif
# ifdef MSG_WAITALL
2007-08-07 05:00:26 +04:00
{ MSG_WAITALL , " MSG_WAITALL " } ,
1999-11-18 20:09:47 +03:00
# endif
# ifdef MSG_TRUNC
2007-08-07 05:00:26 +04:00
{ MSG_TRUNC , " MSG_TRUNC " } ,
1999-11-18 20:09:47 +03:00
# endif
# ifdef MSG_CTRUNC
2007-08-07 05:00:26 +04:00
{ MSG_CTRUNC , " MSG_CTRUNC " } ,
1999-11-18 20:09:47 +03:00
# endif
# ifdef MSG_ERRQUEUE
2007-08-07 05:00:26 +04:00
{ MSG_ERRQUEUE , " MSG_ERRQUEUE " } ,
1999-11-18 20:09:47 +03:00
# endif
# ifdef MSG_DONTWAIT
2007-08-07 05:00:26 +04:00
{ MSG_DONTWAIT , " MSG_DONTWAIT " } ,
1999-11-18 20:09:47 +03:00
# endif
# ifdef MSG_CONFIRM
2007-08-07 05:00:26 +04:00
{ MSG_CONFIRM , " MSG_CONFIRM " } ,
1999-11-18 20:09:47 +03:00
# endif
# ifdef MSG_PROBE
2007-08-07 05:00:26 +04:00
{ MSG_PROBE , " MSG_PROBE " } ,
2004-04-14 06:53:54 +04:00
# endif
# ifdef MSG_FIN
2007-08-07 05:00:26 +04:00
{ MSG_FIN , " MSG_FIN " } ,
2004-04-14 06:53:54 +04:00
# endif
# ifdef MSG_SYN
2007-08-07 05:00:26 +04:00
{ MSG_SYN , " MSG_SYN " } ,
2004-04-14 06:53:54 +04:00
# endif
# ifdef MSG_RST
2007-08-07 05:00:26 +04:00
{ MSG_RST , " MSG_RST " } ,
2004-04-14 06:53:54 +04:00
# endif
# ifdef MSG_NOSIGNAL
2007-08-07 05:00:26 +04:00
{ MSG_NOSIGNAL , " MSG_NOSIGNAL " } ,
2004-04-14 06:53:54 +04:00
# endif
# ifdef MSG_MORE
2007-08-07 05:00:26 +04:00
{ MSG_MORE , " MSG_MORE " } ,
1999-02-19 03:21:36 +03:00
# endif
2012-03-13 05:26:26 +04:00
# ifdef MSG_WAITFORONE
{ MSG_WAITFORONE , " MSG_WAITFORONE " } ,
# endif
2007-08-07 05:00:26 +04:00
# ifdef MSG_CMSG_CLOEXEC
{ MSG_CMSG_CLOEXEC , " MSG_CMSG_CLOEXEC " } ,
# endif
{ 0 , NULL } ,
1999-02-19 03:21:36 +03:00
} ;
2004-09-04 07:39:20 +04:00
static const struct xlat sockoptions [ ] = {
2004-08-31 11:16:14 +04:00
# ifdef SO_ACCEPTCONN
{ SO_ACCEPTCONN , " SO_ACCEPTCONN " } ,
1999-11-18 20:09:47 +03:00
# endif
2004-08-31 11:16:14 +04:00
# ifdef SO_ALLRAW
{ SO_ALLRAW , " SO_ALLRAW " } ,
# endif
# ifdef SO_ATTACH_FILTER
{ SO_ATTACH_FILTER , " SO_ATTACH_FILTER " } ,
# endif
# ifdef SO_BINDTODEVICE
{ SO_BINDTODEVICE , " SO_BINDTODEVICE " } ,
# endif
# ifdef SO_BROADCAST
{ SO_BROADCAST , " SO_BROADCAST " } ,
# endif
# ifdef SO_BSDCOMPAT
{ SO_BSDCOMPAT , " SO_BSDCOMPAT " } ,
1999-11-18 20:09:47 +03:00
# endif
1999-02-19 03:21:36 +03:00
# ifdef SO_DEBUG
{ SO_DEBUG , " SO_DEBUG " } ,
# endif
2004-08-31 11:16:14 +04:00
# ifdef SO_DETACH_FILTER
{ SO_DETACH_FILTER , " SO_DETACH_FILTER " } ,
1999-02-19 03:21:36 +03:00
# endif
# ifdef SO_DONTROUTE
{ SO_DONTROUTE , " SO_DONTROUTE " } ,
# endif
2004-08-31 11:16:14 +04:00
# ifdef SO_ERROR
{ SO_ERROR , " SO_ERROR " } ,
# endif
# ifdef SO_ICS
{ SO_ICS , " SO_ICS " } ,
# endif
# ifdef SO_IMASOCKET
{ SO_IMASOCKET , " SO_IMASOCKET " } ,
# endif
# ifdef SO_KEEPALIVE
{ SO_KEEPALIVE , " SO_KEEPALIVE " } ,
1999-02-19 03:21:36 +03:00
# endif
# ifdef SO_LINGER
{ SO_LINGER , " SO_LINGER " } ,
# endif
2004-08-31 11:16:14 +04:00
# ifdef SO_LISTENING
{ SO_LISTENING , " SO_LISTENING " } ,
# endif
# ifdef SO_MGMT
{ SO_MGMT , " SO_MGMT " } ,
# endif
# ifdef SO_NO_CHECK
{ SO_NO_CHECK , " SO_NO_CHECK " } ,
# endif
1999-02-19 03:21:36 +03:00
# ifdef SO_OOBINLINE
{ SO_OOBINLINE , " SO_OOBINLINE " } ,
# endif
2004-08-31 11:16:14 +04:00
# ifdef SO_ORDREL
{ SO_ORDREL , " SO_ORDREL " } ,
1999-02-19 03:21:36 +03:00
# endif
2004-08-31 11:16:14 +04:00
# ifdef SO_PARALLELSVR
{ SO_PARALLELSVR , " SO_PARALLELSVR " } ,
1999-02-19 03:21:36 +03:00
# endif
2004-08-31 11:16:14 +04:00
# ifdef SO_PASSCRED
{ SO_PASSCRED , " SO_PASSCRED " } ,
1999-02-19 03:21:36 +03:00
# endif
2004-08-31 11:16:14 +04:00
# ifdef SO_PEERCRED
{ SO_PEERCRED , " SO_PEERCRED " } ,
1999-02-19 03:21:36 +03:00
# endif
2004-08-31 11:16:14 +04:00
# ifdef SO_PEERNAME
{ SO_PEERNAME , " SO_PEERNAME " } ,
# endif
# ifdef SO_PEERSEC
{ SO_PEERSEC , " SO_PEERSEC " } ,
1999-02-19 03:21:36 +03:00
# endif
# ifdef SO_PRIORITY
{ SO_PRIORITY , " SO_PRIORITY " } ,
# endif
2004-08-31 11:16:14 +04:00
# ifdef SO_PROTOTYPE
{ SO_PROTOTYPE , " SO_PROTOTYPE " } ,
1999-02-19 03:21:36 +03:00
# endif
2004-08-31 11:16:14 +04:00
# ifdef SO_RCVBUF
{ SO_RCVBUF , " SO_RCVBUF " } ,
1999-02-19 03:21:36 +03:00
# endif
# ifdef SO_RCVLOWAT
{ SO_RCVLOWAT , " SO_RCVLOWAT " } ,
# endif
# ifdef SO_RCVTIMEO
{ SO_RCVTIMEO , " SO_RCVTIMEO " } ,
# endif
2004-08-31 11:16:14 +04:00
# ifdef SO_RDWR
{ SO_RDWR , " SO_RDWR " } ,
# endif
# ifdef SO_REUSEADDR
{ SO_REUSEADDR , " SO_REUSEADDR " } ,
1999-02-19 03:21:36 +03:00
# endif
# ifdef SO_REUSEPORT
{ SO_REUSEPORT , " SO_REUSEPORT " } ,
# endif
2004-08-31 11:16:14 +04:00
# ifdef SO_SECURITY_AUTHENTICATION
{ SO_SECURITY_AUTHENTICATION , " SO_SECURITY_AUTHENTICATION " } ,
1999-02-19 03:21:36 +03:00
# endif
2004-08-31 11:16:14 +04:00
# ifdef SO_SECURITY_ENCRYPTION_NETWORK
{ SO_SECURITY_ENCRYPTION_NETWORK , " SO_SECURITY_ENCRYPTION_NETWORK " } ,
2002-05-23 15:48:58 +04:00
# endif
2004-08-31 11:16:14 +04:00
# ifdef SO_SECURITY_ENCRYPTION_TRANSPORT
{ SO_SECURITY_ENCRYPTION_TRANSPORT , " SO_SECURITY_ENCRYPTION_TRANSPORT " } ,
2002-05-23 15:48:58 +04:00
# endif
# ifdef SO_SEMA
{ SO_SEMA , " SO_SEMA " } ,
# endif
2004-08-31 11:16:14 +04:00
# ifdef SO_SNDBUF
{ SO_SNDBUF , " SO_SNDBUF " } ,
2002-05-23 15:48:58 +04:00
# endif
2004-08-31 11:16:14 +04:00
# ifdef SO_SNDLOWAT
{ SO_SNDLOWAT , " SO_SNDLOWAT " } ,
2002-05-23 15:48:58 +04:00
# endif
2004-08-31 11:16:14 +04:00
# ifdef SO_SNDTIMEO
{ SO_SNDTIMEO , " SO_SNDTIMEO " } ,
2002-05-23 15:48:58 +04:00
# endif
2004-08-31 11:16:14 +04:00
# ifdef SO_TIMESTAMP
{ SO_TIMESTAMP , " SO_TIMESTAMP " } ,
# endif
# ifdef SO_TYPE
{ SO_TYPE , " SO_TYPE " } ,
# endif
# ifdef SO_USELOOPBACK
{ SO_USELOOPBACK , " SO_USELOOPBACK " } ,
1999-02-19 03:21:36 +03:00
# endif
{ 0 , NULL } ,
} ;
2012-02-25 05:47:15 +04:00
# if !defined(SOL_IP) && defined(IPPROTO_IP)
2002-05-22 19:46:49 +04:00
# define SOL_IP IPPROTO_IP
# endif
1999-02-19 03:21:36 +03:00
# ifdef SOL_IP
2004-09-04 07:39:20 +04:00
static const struct xlat sockipoptions [ ] = {
2002-05-22 19:46:49 +04:00
# ifdef IP_TOS
2000-07-05 20:05:39 +04:00
{ IP_TOS , " IP_TOS " } ,
2002-05-22 19:46:49 +04:00
# endif
# ifdef IP_TTL
2000-07-05 20:05:39 +04:00
{ IP_TTL , " IP_TTL " } ,
2002-05-22 19:46:49 +04:00
# endif
# ifdef IP_HDRINCL
2000-07-05 20:05:39 +04:00
{ IP_HDRINCL , " IP_HDRINCL " } ,
1999-02-19 03:21:36 +03:00
# endif
2002-05-22 19:46:49 +04:00
# ifdef IP_OPTIONS
2000-07-05 20:05:39 +04:00
{ IP_OPTIONS , " IP_OPTIONS " } ,
# endif
2002-05-22 19:46:49 +04:00
# ifdef IP_ROUTER_ALERT
2000-07-05 20:05:39 +04:00
{ IP_ROUTER_ALERT , " IP_ROUTER_ALERT " } ,
2002-05-22 19:46:49 +04:00
# endif
# ifdef IP_RECVOPTIONS
2000-07-05 20:05:39 +04:00
{ IP_RECVOPTIONS , " IP_RECVOPTIONS " } ,
# endif
2002-05-22 19:46:49 +04:00
# ifdef IP_RECVOPTS
{ IP_RECVOPTS , " IP_RECVOPTS " } ,
# endif
# ifdef IP_RECVRETOPTS
{ IP_RECVRETOPTS , " IP_RECVRETOPTS " } ,
# endif
# ifdef IP_RECVDSTADDR
{ IP_RECVDSTADDR , " IP_RECVDSTADDR " } ,
# endif
# ifdef IP_RETOPTS
2000-07-05 20:05:39 +04:00
{ IP_RETOPTS , " IP_RETOPTS " } ,
2002-05-22 19:46:49 +04:00
# endif
# ifdef IP_PKTINFO
2000-07-05 20:05:39 +04:00
{ IP_PKTINFO , " IP_PKTINFO " } ,
2002-05-22 19:46:49 +04:00
# endif
# ifdef IP_PKTOPTIONS
{ IP_PKTOPTIONS , " IP_PKTOPTIONS " } ,
# endif
# ifdef IP_MTU_DISCOVER
2000-07-05 20:05:39 +04:00
{ IP_MTU_DISCOVER , " IP_MTU_DISCOVER " } ,
2002-05-22 19:46:49 +04:00
# endif
# ifdef IP_RECVERR
2000-07-05 20:05:39 +04:00
{ IP_RECVERR , " IP_RECVERR " } ,
2002-05-22 19:46:49 +04:00
# endif
# ifdef IP_RECVTTL
2005-07-05 03:30:27 +04:00
{ IP_RECVTTL , " IP_RECVTTL " } ,
2002-05-22 19:46:49 +04:00
# endif
# ifdef IP_RECVTOS
2005-07-05 03:30:27 +04:00
{ IP_RECVTOS , " IP_RECVTOS " } ,
2002-05-22 19:46:49 +04:00
# endif
# ifdef IP_MTU
2000-07-05 20:05:39 +04:00
{ IP_MTU , " IP_MTU " } ,
# endif
2002-05-22 19:46:49 +04:00
# ifdef IP_MULTICAST_IF
2000-07-05 20:05:39 +04:00
{ IP_MULTICAST_IF , " IP_MULTICAST_IF " } ,
2002-05-22 19:46:49 +04:00
# endif
# ifdef IP_MULTICAST_TTL
2000-07-05 20:05:39 +04:00
{ IP_MULTICAST_TTL , " IP_MULTICAST_TTL " } ,
2002-05-22 19:46:49 +04:00
# endif
# ifdef IP_MULTICAST_LOOP
2000-07-05 20:05:39 +04:00
{ IP_MULTICAST_LOOP , " IP_MULTICAST_LOOP " } ,
2002-05-22 19:46:49 +04:00
# endif
# ifdef IP_ADD_MEMBERSHIP
2000-07-05 20:05:39 +04:00
{ IP_ADD_MEMBERSHIP , " IP_ADD_MEMBERSHIP " } ,
2002-05-22 19:46:49 +04:00
# endif
# ifdef IP_DROP_MEMBERSHIP
2000-07-05 20:05:39 +04:00
{ IP_DROP_MEMBERSHIP , " IP_DROP_MEMBERSHIP " } ,
2002-05-22 19:46:49 +04:00
# endif
# ifdef IP_BROADCAST_IF
{ IP_BROADCAST_IF , " IP_BROADCAST_IF " } ,
# endif
# ifdef IP_RECVIFINDEX
{ IP_RECVIFINDEX , " IP_RECVIFINDEX " } ,
2004-08-31 11:01:26 +04:00
# endif
# ifdef IP_MSFILTER
{ IP_MSFILTER , " IP_MSFILTER " } ,
# endif
# ifdef MCAST_MSFILTER
{ MCAST_MSFILTER , " MCAST_MSFILTER " } ,
# endif
# ifdef IP_FREEBIND
{ IP_FREEBIND , " IP_FREEBIND " } ,
2002-05-22 19:46:49 +04:00
# endif
2000-07-05 20:05:39 +04:00
{ 0 , NULL } ,
1999-02-19 03:21:36 +03:00
} ;
# endif /* SOL_IP */
2004-08-31 11:01:26 +04:00
# ifdef SOL_IPV6
2004-09-04 07:39:20 +04:00
static const struct xlat sockipv6options [ ] = {
2004-08-31 11:01:26 +04:00
# ifdef IPV6_ADDRFORM
{ IPV6_ADDRFORM , " IPV6_ADDRFORM " } ,
# endif
# ifdef MCAST_FILTER
{ MCAST_FILTER , " MCAST_FILTER " } ,
# endif
# ifdef IPV6_PKTOPTIONS
{ IPV6_PKTOPTIONS , " IPV6_PKTOPTIONS " } ,
# endif
# ifdef IPV6_MTU
{ IPV6_MTU , " IPV6_MTU " } ,
# endif
# ifdef IPV6_V6ONLY
{ IPV6_V6ONLY , " IPV6_V6ONLY " } ,
# endif
# ifdef IPV6_PKTINFO
{ IPV6_PKTINFO , " IPV6_PKTINFO " } ,
# endif
# ifdef IPV6_HOPLIMIT
{ IPV6_HOPLIMIT , " IPV6_HOPLIMIT " } ,
# endif
# ifdef IPV6_RTHDR
{ IPV6_RTHDR , " IPV6_RTHDR " } ,
# endif
# ifdef IPV6_HOPOPTS
{ IPV6_HOPOPTS , " IPV6_HOPOPTS " } ,
# endif
# ifdef IPV6_DSTOPTS
{ IPV6_DSTOPTS , " IPV6_DSTOPTS " } ,
# endif
# ifdef IPV6_FLOWINFO
{ IPV6_FLOWINFO , " IPV6_FLOWINFO " } ,
# endif
# ifdef IPV6_UNICAST_HOPS
{ IPV6_UNICAST_HOPS , " IPV6_UNICAST_HOPS " } ,
# endif
# ifdef IPV6_MULTICAST_HOPS
{ IPV6_MULTICAST_HOPS , " IPV6_MULTICAST_HOPS " } ,
# endif
# ifdef IPV6_MULTICAST_LOOP
{ IPV6_MULTICAST_LOOP , " IPV6_MULTICAST_LOOP " } ,
# endif
# ifdef IPV6_MULTICAST_IF
{ IPV6_MULTICAST_IF , " IPV6_MULTICAST_IF " } ,
# endif
# ifdef IPV6_MTU_DISCOVER
{ IPV6_MTU_DISCOVER , " IPV6_MTU_DISCOVER " } ,
# endif
# ifdef IPV6_RECVERR
{ IPV6_RECVERR , " IPV6_RECVERR " } ,
# endif
# ifdef IPV6_FLOWINFO_SEND
{ IPV6_FLOWINFO_SEND , " IPV6_FLOWINFO_SEND " } ,
2005-07-05 03:33:38 +04:00
# endif
# ifdef IPV6_ADD_MEMBERSHIP
{ IPV6_ADD_MEMBERSHIP , " IPV6_ADD_MEMBERSHIP " } ,
# endif
# ifdef IPV6_DROP_MEMBERSHIP
{ IPV6_DROP_MEMBERSHIP , " IPV6_DROP_MEMBERSHIP " } ,
# endif
# ifdef IPV6_ROUTER_ALERT
{ IPV6_ROUTER_ALERT , " IPV6_ROUTER_ALERT " } ,
2004-08-31 11:01:26 +04:00
# endif
{ 0 , NULL } ,
} ;
# endif /* SOL_IPV6 */
1999-02-19 03:21:36 +03:00
# ifdef SOL_IPX
2004-09-04 07:39:20 +04:00
static const struct xlat sockipxoptions [ ] = {
2011-06-07 14:13:24 +04:00
{ IPX_TYPE , " IPX_TYPE " } ,
{ 0 , NULL } ,
1999-02-19 03:21:36 +03:00
} ;
# endif /* SOL_IPX */
2000-07-05 20:05:39 +04:00
# ifdef SOL_RAW
2004-09-04 07:39:20 +04:00
static const struct xlat sockrawoptions [ ] = {
2000-07-05 20:05:39 +04:00
# if defined(ICMP_FILTER)
{ ICMP_FILTER , " ICMP_FILTER " } ,
# endif
{ 0 , NULL } ,
} ;
# endif /* SOL_RAW */
# ifdef SOL_PACKET
2004-09-04 07:39:20 +04:00
static const struct xlat sockpacketoptions [ ] = {
2007-11-02 00:37:33 +03:00
# ifdef PACKET_ADD_MEMBERSHIP
2000-07-05 20:05:39 +04:00
{ PACKET_ADD_MEMBERSHIP , " PACKET_ADD_MEMBERSHIP " } ,
2007-11-02 00:37:33 +03:00
# endif
# ifdef PACKET_DROP_MEMBERSHIP
2000-07-05 20:05:39 +04:00
{ PACKET_DROP_MEMBERSHIP , " PACKET_DROP_MEMBERSHIP " } ,
2007-11-02 00:37:33 +03:00
# endif
2000-07-05 20:05:39 +04:00
# if defined(PACKET_RECV_OUTPUT)
{ PACKET_RECV_OUTPUT , " PACKET_RECV_OUTPUT " } ,
# endif
# if defined(PACKET_RX_RING)
{ PACKET_RX_RING , " PACKET_RX_RING " } ,
# endif
# if defined(PACKET_STATISTICS)
{ PACKET_STATISTICS , " PACKET_STATISTICS " } ,
2009-11-13 15:51:04 +03:00
# endif
# if defined(PACKET_COPY_THRESH)
{ PACKET_COPY_THRESH , " PACKET_COPY_THRESH " } ,
# endif
# if defined(PACKET_AUXDATA)
{ PACKET_AUXDATA , " PACKET_AUXDATA " } ,
# endif
# if defined(PACKET_ORIGDEV)
{ PACKET_ORIGDEV , " PACKET_ORIGDEV " } ,
# endif
# if defined(PACKET_VERSION)
{ PACKET_VERSION , " PACKET_VERSION " } ,
# endif
# if defined(PACKET_HDRLEN)
{ PACKET_HDRLEN , " PACKET_HDRLEN " } ,
# endif
# if defined(PACKET_RESERVE)
{ PACKET_RESERVE , " PACKET_RESERVE " } ,
# endif
# if defined(PACKET_TX_RING)
{ PACKET_TX_RING , " PACKET_TX_RING " } ,
# endif
# if defined(PACKET_LOSS)
{ PACKET_LOSS , " PACKET_LOSS " } ,
2000-07-05 20:05:39 +04:00
# endif
{ 0 , NULL } ,
} ;
# endif /* SOL_PACKET */
2011-01-14 13:08:12 +03:00
# ifdef SOL_SCTP
static const struct xlat socksctpoptions [ ] = {
# if defined(SCTP_RTOINFO)
{ SCTP_RTOINFO , " SCTP_RTOINFO " } ,
# endif
# if defined(SCTP_ASSOCINFO)
{ SCTP_ASSOCINFO , " SCTP_ASSOCINFO " } ,
# endif
# if defined(SCTP_INITMSG)
{ SCTP_INITMSG , " SCTP_INITMSG " } ,
# endif
# if defined(SCTP_NODELAY)
{ SCTP_NODELAY , " SCTP_NODELAY " } ,
# endif
# if defined(SCTP_AUTOCLOSE)
{ SCTP_AUTOCLOSE , " SCTP_AUTOCLOSE " } ,
# endif
# if defined(SCTP_SET_PEER_PRIMARY_ADDR)
{ SCTP_SET_PEER_PRIMARY_ADDR , " SCTP_SET_PEER_PRIMARY_ADDR " } ,
# endif
# if defined(SCTP_PRIMARY_ADDR)
{ SCTP_PRIMARY_ADDR , " SCTP_PRIMARY_ADDR " } ,
# endif
# if defined(SCTP_ADAPTATION_LAYER)
{ SCTP_ADAPTATION_LAYER , " SCTP_ADAPTATION_LAYER " } ,
# endif
# if defined(SCTP_DISABLE_FRAGMENTS)
{ SCTP_DISABLE_FRAGMENTS , " SCTP_DISABLE_FRAGMENTS " } ,
# endif
# if defined(SCTP_PEER_ADDR_PARAMS)
{ SCTP_PEER_ADDR_PARAMS , " SCTP_PEER_ADDR_PARAMS " } ,
# endif
# if defined(SCTP_DEFAULT_SEND_PARAM)
{ SCTP_DEFAULT_SEND_PARAM , " SCTP_DEFAULT_SEND_PARAM " } ,
# endif
# if defined(SCTP_EVENTS)
{ SCTP_EVENTS , " SCTP_EVENTS " } ,
# endif
# if defined(SCTP_I_WANT_MAPPED_V4_ADDR)
{ SCTP_I_WANT_MAPPED_V4_ADDR , " SCTP_I_WANT_MAPPED_V4_ADDR " } ,
# endif
# if defined(SCTP_MAXSEG)
{ SCTP_MAXSEG , " SCTP_MAXSEG " } ,
# endif
# if defined(SCTP_STATUS)
{ SCTP_STATUS , " SCTP_STATUS " } ,
# endif
# if defined(SCTP_GET_PEER_ADDR_INFO)
{ SCTP_GET_PEER_ADDR_INFO , " SCTP_GET_PEER_ADDR_INFO " } ,
# endif
# if defined(SCTP_DELAYED_ACK)
{ SCTP_DELAYED_ACK , " SCTP_DELAYED_ACK " } ,
# endif
# if defined(SCTP_CONTEXT)
{ SCTP_CONTEXT , " SCTP_CONTEXT " } ,
# endif
# if defined(SCTP_FRAGMENT_INTERLEAVE)
{ SCTP_FRAGMENT_INTERLEAVE , " SCTP_FRAGMENT_INTERLEAVE " } ,
# endif
# if defined(SCTP_PARTIAL_DELIVERY_POINT)
{ SCTP_PARTIAL_DELIVERY_POINT , " SCTP_PARTIAL_DELIVERY_POINT " } ,
# endif
# if defined(SCTP_MAX_BURST)
{ SCTP_MAX_BURST , " SCTP_MAX_BURST " } ,
# endif
# if defined(SCTP_AUTH_CHUNK)
{ SCTP_AUTH_CHUNK , " SCTP_AUTH_CHUNK " } ,
# endif
# if defined(SCTP_HMAC_IDENT)
{ SCTP_HMAC_IDENT , " SCTP_HMAC_IDENT " } ,
# endif
# if defined(SCTP_AUTH_KEY)
{ SCTP_AUTH_KEY , " SCTP_AUTH_KEY " } ,
# endif
# if defined(SCTP_AUTH_ACTIVE_KEY)
{ SCTP_AUTH_ACTIVE_KEY , " SCTP_AUTH_ACTIVE_KEY " } ,
# endif
# if defined(SCTP_AUTH_DELETE_KEY)
{ SCTP_AUTH_DELETE_KEY , " SCTP_AUTH_DELETE_KEY " } ,
# endif
# if defined(SCTP_PEER_AUTH_CHUNKS)
{ SCTP_PEER_AUTH_CHUNKS , " SCTP_PEER_AUTH_CHUNKS " } ,
# endif
# if defined(SCTP_LOCAL_AUTH_CHUNKS)
{ SCTP_LOCAL_AUTH_CHUNKS , " SCTP_LOCAL_AUTH_CHUNKS " } ,
# endif
# if defined(SCTP_GET_ASSOC_NUMBER)
{ SCTP_GET_ASSOC_NUMBER , " SCTP_GET_ASSOC_NUMBER " } ,
# endif
/* linux specific things */
# if defined(SCTP_SOCKOPT_BINDX_ADD)
{ SCTP_SOCKOPT_BINDX_ADD , " SCTP_SOCKOPT_BINDX_ADD " } ,
# endif
# if defined(SCTP_SOCKOPT_BINDX_REM)
{ SCTP_SOCKOPT_BINDX_REM , " SCTP_SOCKOPT_BINDX_REM " } ,
# endif
# if defined(SCTP_SOCKOPT_PEELOFF)
{ SCTP_SOCKOPT_PEELOFF , " SCTP_SOCKOPT_PEELOFF " } ,
# endif
# if defined(SCTP_GET_PEER_ADDRS_NUM_OLD)
{ SCTP_GET_PEER_ADDRS_NUM_OLD , " SCTP_GET_PEER_ADDRS_NUM_OLD " } ,
# endif
# if defined(SCTP_GET_PEER_ADDRS_OLD)
{ SCTP_GET_PEER_ADDRS_OLD , " SCTP_GET_PEER_ADDRS_OLD " } ,
# endif
# if defined(SCTP_GET_LOCAL_ADDRS_NUM_OLD)
{ SCTP_GET_LOCAL_ADDRS_NUM_OLD , " SCTP_GET_LOCAL_ADDRS_NUM_OLD " } ,
# endif
# if defined(SCTP_GET_LOCAL_ADDRS_OLD)
{ SCTP_GET_LOCAL_ADDRS_OLD , " SCTP_GET_LOCAL_ADDRS_OLD " } ,
# endif
# if defined(SCTP_SOCKOPT_CONNECTX_OLD)
{ SCTP_SOCKOPT_CONNECTX_OLD , " SCTP_SOCKOPT_CONNECTX_OLD " } ,
# endif
# if defined(SCTP_GET_PEER_ADDRS)
{ SCTP_GET_PEER_ADDRS , " SCTP_GET_PEER_ADDRS " } ,
# endif
# if defined(SCTP_GET_LOCAL_ADDRS)
{ SCTP_GET_LOCAL_ADDRS , " SCTP_GET_LOCAL_ADDRS " } ,
# endif
{ 0 , NULL } ,
} ;
# endif
2012-02-25 05:47:15 +04:00
# if !defined(SOL_TCP) && defined(IPPROTO_TCP)
2002-05-22 19:46:49 +04:00
# define SOL_TCP IPPROTO_TCP
# endif
1999-02-19 03:21:36 +03:00
# ifdef SOL_TCP
2004-09-04 07:39:20 +04:00
static const struct xlat socktcpoptions [ ] = {
2001-12-28 01:27:30 +03:00
{ TCP_NODELAY , " TCP_NODELAY " } ,
{ TCP_MAXSEG , " TCP_MAXSEG " } ,
2000-07-05 20:05:39 +04:00
# if defined(TCP_CORK)
2001-12-28 01:27:30 +03:00
{ TCP_CORK , " TCP_CORK " } ,
2000-07-05 20:05:39 +04:00
# endif
2001-12-28 01:27:30 +03:00
# if defined(TCP_KEEPIDLE)
{ TCP_KEEPIDLE , " TCP_KEEPIDLE " } ,
# endif
# if defined(TCP_KEEPINTVL)
{ TCP_KEEPINTVL , " TCP_KEEPINTVL " } ,
# endif
# if defined(TCP_KEEPCNT)
{ TCP_KEEPCNT , " TCP_KEEPCNT " } ,
# endif
2002-05-23 15:48:58 +04:00
# if defined(TCP_NKEEP)
{ TCP_NKEEP , " TCP_NKEEP " } ,
# endif
2001-12-28 01:27:30 +03:00
# if defined(TCP_SYNCNT)
{ TCP_SYNCNT , " TCP_SYNCNT " } ,
# endif
# if defined(TCP_LINGER2)
{ TCP_LINGER2 , " TCP_LINGER2 " } ,
# endif
# if defined(TCP_DEFER_ACCEPT)
{ TCP_DEFER_ACCEPT , " TCP_DEFER_ACCEPT " } ,
# endif
# if defined(TCP_WINDOW_CLAMP)
{ TCP_WINDOW_CLAMP , " TCP_WINDOW_CLAMP " } ,
# endif
# if defined(TCP_INFO)
{ TCP_INFO , " TCP_INFO " } ,
# endif
# if defined(TCP_QUICKACK)
{ TCP_QUICKACK , " TCP_QUICKACK " } ,
2011-12-02 01:06:00 +04:00
# endif
# if defined(TCP_CONGESTION)
{ TCP_CONGESTION , " TCP_CONGESTION " } ,
# endif
# if defined(TCP_MD5SIG)
{ TCP_MD5SIG , " TCP_MD5SIG " } ,
# endif
# if defined(TCP_COOKIE_TRANSACTIONS)
{ TCP_COOKIE_TRANSACTIONS , " TCP_COOKIE_TRANSACTIONS " } ,
# endif
# if defined(TCP_THIN_LINEAR_TIMEOUTS)
{ TCP_THIN_LINEAR_TIMEOUTS , " TCP_THIN_LINEAR_TIMEOUTS " } ,
# endif
# if defined(TCP_THIN_DUPACK)
{ TCP_THIN_DUPACK , " TCP_THIN_DUPACK " } ,
# endif
# if defined(TCP_USER_TIMEOUT)
{ TCP_USER_TIMEOUT , " TCP_USER_TIMEOUT " } ,
2001-12-28 01:27:30 +03:00
# endif
{ 0 , NULL } ,
1999-02-19 03:21:36 +03:00
} ;
# endif /* SOL_TCP */
2000-07-05 20:05:39 +04:00
# ifdef SOL_RAW
2004-09-04 07:39:20 +04:00
static const struct xlat icmpfilterflags [ ] = {
2000-07-05 20:05:39 +04:00
# if defined(ICMP_ECHOREPLY)
{ ( 1 < < ICMP_ECHOREPLY ) , " ICMP_ECHOREPLY " } ,
# endif
# if defined(ICMP_DEST_UNREACH)
{ ( 1 < < ICMP_DEST_UNREACH ) , " ICMP_DEST_UNREACH " } ,
# endif
# if defined(ICMP_SOURCE_QUENCH)
{ ( 1 < < ICMP_SOURCE_QUENCH ) , " ICMP_SOURCE_QUENCH " } ,
# endif
# if defined(ICMP_REDIRECT)
{ ( 1 < < ICMP_REDIRECT ) , " ICMP_REDIRECT " } ,
# endif
# if defined(ICMP_ECHO)
{ ( 1 < < ICMP_ECHO ) , " ICMP_ECHO " } ,
# endif
# if defined(ICMP_TIME_EXCEEDED)
{ ( 1 < < ICMP_TIME_EXCEEDED ) , " ICMP_TIME_EXCEEDED " } ,
# endif
# if defined(ICMP_PARAMETERPROB)
{ ( 1 < < ICMP_PARAMETERPROB ) , " ICMP_PARAMETERPROB " } ,
# endif
# if defined(ICMP_TIMESTAMP)
{ ( 1 < < ICMP_TIMESTAMP ) , " ICMP_TIMESTAMP " } ,
# endif
# if defined(ICMP_TIMESTAMPREPLY)
{ ( 1 < < ICMP_TIMESTAMPREPLY ) , " ICMP_TIMESTAMPREPLY " } ,
# endif
# if defined(ICMP_INFO_REQUEST)
{ ( 1 < < ICMP_INFO_REQUEST ) , " ICMP_INFO_REQUEST " } ,
# endif
# if defined(ICMP_INFO_REPLY)
{ ( 1 < < ICMP_INFO_REPLY ) , " ICMP_INFO_REPLY " } ,
# endif
# if defined(ICMP_ADDRESS)
{ ( 1 < < ICMP_ADDRESS ) , " ICMP_ADDRESS " } ,
# endif
# if defined(ICMP_ADDRESSREPLY)
{ ( 1 < < ICMP_ADDRESSREPLY ) , " ICMP_ADDRESSREPLY " } ,
# endif
{ 0 , NULL } ,
} ;
# endif /* SOL_RAW */
2002-04-01 16:48:06 +04:00
# if defined(AF_PACKET) /* from e.g. linux/if_packet.h */
2004-09-04 07:39:20 +04:00
static const struct xlat af_packet_types [ ] = {
2002-04-01 16:48:06 +04:00
# if defined(PACKET_HOST)
{ PACKET_HOST , " PACKET_HOST " } ,
# endif
# if defined(PACKET_BROADCAST)
{ PACKET_BROADCAST , " PACKET_BROADCAST " } ,
# endif
# if defined(PACKET_MULTICAST)
{ PACKET_MULTICAST , " PACKET_MULTICAST " } ,
# endif
# if defined(PACKET_OTHERHOST)
{ PACKET_OTHERHOST , " PACKET_OTHERHOST " } ,
# endif
# if defined(PACKET_OUTGOING)
{ PACKET_OUTGOING , " PACKET_OUTGOING " } ,
# endif
# if defined(PACKET_LOOPBACK)
{ PACKET_LOOPBACK , " PACKET_LOOPBACK " } ,
# endif
# if defined(PACKET_FASTROUTE)
{ PACKET_FASTROUTE , " PACKET_FASTROUTE " } ,
# endif
{ 0 , NULL } ,
} ;
# endif /* defined(AF_PACKET) */
1999-02-19 03:21:36 +03:00
void
2007-10-09 03:31:19 +04:00
printsock ( struct tcb * tcp , long addr , int addrlen )
1999-02-19 03:21:36 +03:00
{
1999-11-18 20:09:47 +03:00
union {
char pad [ 128 ] ;
struct sockaddr sa ;
struct sockaddr_in sin ;
struct sockaddr_un sau ;
1999-08-30 03:15:07 +04:00
# ifdef HAVE_INET_NTOP
1999-11-18 20:09:47 +03:00
struct sockaddr_in6 sa6 ;
1999-08-30 03:15:07 +04:00
# endif
2012-02-25 05:38:52 +04:00
# if defined(AF_IPX)
1999-11-18 20:09:47 +03:00
struct sockaddr_ipx sipx ;
# endif
# ifdef AF_PACKET
struct sockaddr_ll ll ;
1999-02-19 03:21:36 +03:00
# endif
1999-11-18 20:09:47 +03:00
# ifdef AF_NETLINK
struct sockaddr_nl nl ;
# endif
} addrbuf ;
char string_addr [ 100 ] ;
1999-02-19 03:21:36 +03:00
if ( addr = = 0 ) {
2011-09-01 12:00:28 +04:00
tprints ( " NULL " ) ;
1999-02-19 03:21:36 +03:00
return ;
}
if ( ! verbose ( tcp ) ) {
tprintf ( " %#lx " , addr ) ;
return ;
}
1999-11-18 20:09:47 +03:00
2007-10-09 03:31:19 +04:00
if ( addrlen < 2 | | addrlen > sizeof ( addrbuf ) )
addrlen = sizeof ( addrbuf ) ;
memset ( & addrbuf , 0 , sizeof ( addrbuf ) ) ;
if ( umoven ( tcp , addr , addrlen , addrbuf . pad ) < 0 ) {
2011-09-01 12:00:28 +04:00
tprints ( " {...} " ) ;
1999-02-19 03:21:36 +03:00
return ;
}
2007-10-09 03:31:19 +04:00
addrbuf . pad [ sizeof ( addrbuf . pad ) - 1 ] = ' \0 ' ;
1999-11-18 20:09:47 +03:00
2011-09-01 12:00:28 +04:00
tprints ( " {sa_family= " ) ;
1999-11-18 20:09:47 +03:00
printxval ( addrfams , addrbuf . sa . sa_family , " AF_??? " ) ;
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
1999-11-18 20:09:47 +03:00
switch ( addrbuf . sa . sa_family ) {
1999-02-19 03:21:36 +03:00
case AF_UNIX :
2007-10-09 03:31:19 +04:00
if ( addrlen = = 2 ) {
2011-09-01 12:00:28 +04:00
tprints ( " NULL " ) ;
1999-11-18 20:09:47 +03:00
} else if ( addrbuf . sau . sun_path [ 0 ] ) {
2012-02-22 04:23:52 +04:00
tprints ( " sun_path= " ) ;
2007-10-14 01:03:17 +04:00
printpathn ( tcp , addr + 2 , strlen ( addrbuf . sau . sun_path ) ) ;
1999-11-18 20:09:47 +03:00
} else {
2012-02-22 04:23:52 +04:00
tprints ( " sun_path=@ " ) ;
2007-10-14 01:03:17 +04:00
printpathn ( tcp , addr + 3 , strlen ( addrbuf . sau . sun_path + 1 ) ) ;
1999-11-18 20:09:47 +03:00
}
1999-02-19 03:21:36 +03:00
break ;
case AF_INET :
2001-09-18 19:56:53 +04:00
tprintf ( " sin_port=htons(%u), sin_addr=inet_addr( \" %s \" ) " ,
1999-11-18 20:09:47 +03:00
ntohs ( addrbuf . sin . sin_port ) , inet_ntoa ( addrbuf . sin . sin_addr ) ) ;
1999-02-19 03:21:36 +03:00
break ;
1999-08-30 03:15:07 +04:00
# ifdef HAVE_INET_NTOP
case AF_INET6 :
1999-11-18 20:09:47 +03:00
inet_ntop ( AF_INET6 , & addrbuf . sa6 . sin6_addr , string_addr , sizeof ( string_addr ) ) ;
2001-02-16 23:29:03 +03:00
tprintf ( " sin6_port=htons(%u), inet_pton(AF_INET6, \" %s \" , &sin6_addr), sin6_flowinfo=%u " ,
ntohs ( addrbuf . sa6 . sin6_port ) , string_addr ,
addrbuf . sa6 . sin6_flowinfo ) ;
2002-12-30 03:51:30 +03:00
# ifdef HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID
2001-02-16 23:29:03 +03:00
{
# if defined(HAVE_IF_INDEXTONAME) && defined(IN6_IS_ADDR_LINKLOCAL) && defined(IN6_IS_ADDR_MC_LINKLOCAL)
2011-06-07 14:13:24 +04:00
int numericscope = 0 ;
if ( IN6_IS_ADDR_LINKLOCAL ( & addrbuf . sa6 . sin6_addr )
| | IN6_IS_ADDR_MC_LINKLOCAL ( & addrbuf . sa6 . sin6_addr ) ) {
char scopebuf [ IFNAMSIZ + 1 ] ;
2002-12-30 03:51:30 +03:00
2011-06-07 14:13:24 +04:00
if ( if_indextoname ( addrbuf . sa6 . sin6_scope_id , scopebuf ) = = NULL )
numericscope + + ;
else
tprintf ( " , sin6_scope_id=if_nametoindex( \" %s \" ) " , scopebuf ) ;
} else
numericscope + + ;
2002-12-30 03:51:30 +03:00
2011-06-07 14:13:24 +04:00
if ( numericscope )
2001-02-16 23:29:03 +03:00
# endif
2011-06-07 14:13:24 +04:00
tprintf ( " , sin6_scope_id=%u " , addrbuf . sa6 . sin6_scope_id ) ;
2001-02-16 23:29:03 +03:00
}
# endif
2011-06-07 14:13:24 +04:00
break ;
1999-08-30 03:15:07 +04:00
# endif
2012-02-25 05:38:52 +04:00
# if defined(AF_IPX)
1999-02-19 03:21:36 +03:00
case AF_IPX :
1999-11-18 20:09:47 +03:00
{
1999-02-19 03:21:36 +03:00
int i ;
2001-09-18 19:56:53 +04:00
tprintf ( " sipx_port=htons(%u), " ,
1999-11-18 20:09:47 +03:00
ntohs ( addrbuf . sipx . sipx_port ) ) ;
1999-02-19 03:21:36 +03:00
/* Yes, I know, this does not look too
* strace - ish , but otherwise the IPX
* addresses just look monstrous . . .
* Anyways , feel free if you don ' t like
2002-12-30 03:51:30 +03:00
* this way . . : )
1999-02-19 03:21:36 +03:00
*/
1999-11-18 20:09:47 +03:00
tprintf ( " %08lx: " , ( unsigned long ) ntohl ( addrbuf . sipx . sipx_network ) ) ;
2011-06-07 14:13:24 +04:00
for ( i = 0 ; i < IPX_NODE_LEN ; i + + )
1999-11-18 20:09:47 +03:00
tprintf ( " %02x " , addrbuf . sipx . sipx_node [ i ] ) ;
tprintf ( " /[%02x] " , addrbuf . sipx . sipx_type ) ;
}
break ;
2012-02-25 05:38:52 +04:00
# endif /* AF_IPX */
1999-11-18 20:09:47 +03:00
# ifdef AF_PACKET
case AF_PACKET :
{
int i ;
2002-04-01 16:48:06 +04:00
tprintf ( " proto=%#04x, if%d, pkttype= " ,
1999-11-18 20:09:47 +03:00
ntohs ( addrbuf . ll . sll_protocol ) ,
2002-04-01 16:48:06 +04:00
addrbuf . ll . sll_ifindex ) ;
printxval ( af_packet_types , addrbuf . ll . sll_pkttype , " ? " ) ;
tprintf ( " , addr(%d)={%d, " ,
1999-11-18 20:09:47 +03:00
addrbuf . ll . sll_halen ,
addrbuf . ll . sll_hatype ) ;
2011-06-07 14:13:24 +04:00
for ( i = 0 ; i < addrbuf . ll . sll_halen ; i + + )
1999-11-18 20:09:47 +03:00
tprintf ( " %02x " , addrbuf . ll . sll_addr [ i ] ) ;
1999-02-19 03:21:36 +03:00
}
break ;
1999-11-18 20:09:47 +03:00
2012-02-25 05:38:52 +04:00
# endif /* AF_PACKET */
2003-11-07 02:41:23 +03:00
# ifdef AF_NETLINK
1999-11-18 20:09:47 +03:00
case AF_NETLINK :
tprintf ( " pid=%d, groups=%08x " , addrbuf . nl . nl_pid , addrbuf . nl . nl_groups ) ;
break ;
# endif /* AF_NETLINK */
1999-02-19 03:21:36 +03:00
/* AF_AX25 AF_APPLETALK AF_NETROM AF_BRIDGE AF_AAL5
1999-11-18 20:09:47 +03:00
AF_X25 AF_ROSE etc . still need to be done */
1999-02-19 03:21:36 +03:00
default :
2011-09-01 12:00:28 +04:00
tprints ( " sa_data= " ) ;
1999-02-19 03:21:36 +03:00
printstr ( tcp , ( long ) & ( ( struct sockaddr * ) addr ) - > sa_data ,
1999-11-18 20:09:47 +03:00
sizeof addrbuf . sa . sa_data ) ;
1999-02-19 03:21:36 +03:00
break ;
}
2011-09-01 12:00:28 +04:00
tprints ( " } " ) ;
1999-02-19 03:21:36 +03:00
}
# if HAVE_SENDMSG
2004-10-07 02:11:51 +04:00
static const struct xlat scmvals [ ] = {
# ifdef SCM_RIGHTS
{ SCM_RIGHTS , " SCM_RIGHTS " } ,
# endif
# ifdef SCM_CREDENTIALS
{ SCM_CREDENTIALS , " SCM_CREDENTIALS " } ,
# endif
{ 0 , NULL }
} ;
static void
2009-03-23 16:12:46 +03:00
printcmsghdr ( struct tcb * tcp , unsigned long addr , unsigned long len )
2004-10-07 02:11:51 +04:00
{
2005-06-01 23:22:06 +04:00
struct cmsghdr * cmsg = len < sizeof ( struct cmsghdr ) ?
NULL : malloc ( len ) ;
if ( cmsg = = NULL | | umoven ( tcp , addr , len , ( char * ) cmsg ) < 0 ) {
2004-10-07 02:11:51 +04:00
tprintf ( " , msg_control=%#lx " , addr ) ;
2005-06-01 23:22:06 +04:00
free ( cmsg ) ;
2004-10-07 02:11:51 +04:00
return ;
}
2009-03-23 16:12:46 +03:00
tprintf ( " , {cmsg_len=%u, cmsg_level= " , ( unsigned ) cmsg - > cmsg_len ) ;
2005-06-01 23:22:06 +04:00
printxval ( socketlayers , cmsg - > cmsg_level , " SOL_??? " ) ;
2011-09-01 12:00:28 +04:00
tprints ( " , cmsg_type= " ) ;
2004-10-07 02:11:51 +04:00
2005-06-01 23:22:06 +04:00
if ( cmsg - > cmsg_level = = SOL_SOCKET ) {
unsigned long cmsg_len ;
printxval ( scmvals , cmsg - > cmsg_type , " SCM_??? " ) ;
cmsg_len = ( len < cmsg - > cmsg_len ) ? len : cmsg - > cmsg_len ;
2005-02-02 06:11:32 +03:00
2005-06-01 23:22:06 +04:00
if ( cmsg - > cmsg_type = = SCM_RIGHTS
& & CMSG_LEN ( sizeof ( int ) ) < = cmsg_len ) {
2011-06-07 14:13:24 +04:00
int * fds = ( int * ) CMSG_DATA ( cmsg ) ;
2004-10-07 02:11:51 +04:00
int first = 1 ;
2005-06-01 23:22:06 +04:00
2011-09-01 12:00:28 +04:00
tprints ( " , { " ) ;
2005-06-01 23:22:06 +04:00
while ( ( char * ) fds < ( ( char * ) cmsg + cmsg_len ) ) {
2004-10-07 02:11:51 +04:00
if ( ! first )
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
2004-10-07 02:11:51 +04:00
tprintf ( " %d " , * fds + + ) ;
first = 0 ;
}
2011-09-01 12:00:28 +04:00
tprints ( " }} " ) ;
2005-06-01 23:22:06 +04:00
free ( cmsg ) ;
2004-10-07 02:11:51 +04:00
return ;
}
2005-06-01 23:22:06 +04:00
if ( cmsg - > cmsg_type = = SCM_CREDENTIALS
& & CMSG_LEN ( sizeof ( struct ucred ) ) < = cmsg_len ) {
2011-06-07 14:13:24 +04:00
struct ucred * uc = ( struct ucred * ) CMSG_DATA ( cmsg ) ;
2005-06-01 23:22:06 +04:00
2004-10-07 02:11:51 +04:00
tprintf ( " {pid=%ld, uid=%ld, gid=%ld}} " ,
( long ) uc - > pid , ( long ) uc - > uid , ( long ) uc - > gid ) ;
2005-06-01 23:22:06 +04:00
free ( cmsg ) ;
2004-10-07 02:11:51 +04:00
return ;
}
}
2005-06-01 23:22:06 +04:00
free ( cmsg ) ;
2011-09-01 12:00:28 +04:00
tprints ( " , ...} " ) ;
2004-10-07 02:11:51 +04:00
}
1999-02-19 03:21:36 +03:00
2010-02-12 23:39:12 +03:00
static void
2012-04-28 16:26:18 +04:00
do_msghdr ( struct tcb * tcp , struct msghdr * msg , unsigned long data_size )
2010-02-12 23:39:12 +03:00
{
tprintf ( " {msg_name(%d)= " , msg - > msg_namelen ) ;
printsock ( tcp , ( long ) msg - > msg_name , msg - > msg_namelen ) ;
tprintf ( " , msg_iov(%lu)= " , ( unsigned long ) msg - > msg_iovlen ) ;
2012-04-28 16:26:18 +04:00
tprint_iov_upto ( tcp , ( unsigned long ) msg - > msg_iovlen ,
( unsigned long ) msg - > msg_iov , 1 , data_size ) ;
2010-02-12 23:39:12 +03:00
# ifdef HAVE_STRUCT_MSGHDR_MSG_CONTROL
tprintf ( " , msg_controllen=%lu " , ( unsigned long ) msg - > msg_controllen ) ;
if ( msg - > msg_controllen )
printcmsghdr ( tcp , ( unsigned long ) msg - > msg_control ,
msg - > msg_controllen ) ;
2011-09-01 12:00:28 +04:00
tprints ( " , msg_flags= " ) ;
2010-02-12 23:39:12 +03:00
printflags ( msg_flags , msg - > msg_flags , " MSG_??? " ) ;
# else /* !HAVE_STRUCT_MSGHDR_MSG_CONTROL */
tprintf ( " msg_accrights=%#lx, msg_accrightslen=%u " ,
( unsigned long ) msg - > msg_accrights , msg - > msg_accrightslen ) ;
# endif /* !HAVE_STRUCT_MSGHDR_MSG_CONTROL */
2011-09-01 12:00:28 +04:00
tprints ( " } " ) ;
2010-02-12 23:39:12 +03:00
}
2013-02-12 14:57:48 +04:00
struct msghdr32 {
uint32_t /* void* */ msg_name ;
uint32_t /* socklen_t */ msg_namelen ;
uint32_t /* iovec* */ msg_iov ;
uint32_t /* size_t */ msg_iovlen ;
uint32_t /* void* */ msg_control ;
uint32_t /* size_t */ msg_controllen ;
uint32_t /* int */ msg_flags ;
} ;
struct mmsghdr32 {
struct msghdr32 msg_hdr ;
uint32_t /* unsigned */ msg_len ;
} ;
1999-02-19 03:21:36 +03:00
static void
2012-04-28 16:26:18 +04:00
printmsghdr ( struct tcb * tcp , long addr , unsigned long data_size )
1999-02-19 03:21:36 +03:00
{
struct msghdr msg ;
2013-02-12 14:57:48 +04:00
# if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4
if ( current_wordsize = = 4 ) {
struct msghdr32 msg32 ;
if ( umove ( tcp , addr , & msg32 ) < 0 ) {
tprintf ( " %#lx " , addr ) ;
return ;
}
msg . msg_name = ( void * ) ( long ) msg32 . msg_name ;
msg . msg_namelen = msg32 . msg_namelen ;
msg . msg_iov = ( void * ) ( long ) msg32 . msg_iov ;
msg . msg_iovlen = msg32 . msg_iovlen ;
msg . msg_control = ( void * ) ( long ) msg32 . msg_control ;
msg . msg_controllen = msg32 . msg_controllen ;
msg . msg_flags = msg32 . msg_flags ;
} else
# endif
1999-05-09 04:29:58 +04:00
if ( umove ( tcp , addr , & msg ) < 0 ) {
tprintf ( " %#lx " , addr ) ;
return ;
}
2012-04-28 16:26:18 +04:00
do_msghdr ( tcp , & msg , data_size ) ;
2010-02-12 23:39:12 +03:00
}
1999-11-18 20:09:47 +03:00
2010-02-12 23:39:12 +03:00
static void
2012-05-02 00:41:40 +04:00
printmmsghdr ( struct tcb * tcp , long addr , unsigned int idx , unsigned long msg_len )
2010-02-12 23:39:12 +03:00
{
struct mmsghdr {
struct msghdr msg_hdr ;
unsigned msg_len ;
} mmsg ;
1999-11-18 20:09:47 +03:00
2013-02-12 14:57:48 +04:00
# if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4
if ( current_wordsize = = 4 ) {
struct mmsghdr32 mmsg32 ;
addr + = sizeof ( mmsg32 ) * idx ;
if ( umove ( tcp , addr , & mmsg32 ) < 0 ) {
tprintf ( " %#lx " , addr ) ;
return ;
}
mmsg . msg_hdr . msg_name = ( void * ) ( long ) mmsg32 . msg_hdr . msg_name ;
mmsg . msg_hdr . msg_namelen = mmsg32 . msg_hdr . msg_namelen ;
mmsg . msg_hdr . msg_iov = ( void * ) ( long ) mmsg32 . msg_hdr . msg_iov ;
mmsg . msg_hdr . msg_iovlen = mmsg32 . msg_hdr . msg_iovlen ;
mmsg . msg_hdr . msg_control = ( void * ) ( long ) mmsg32 . msg_hdr . msg_control ;
mmsg . msg_hdr . msg_controllen = mmsg32 . msg_hdr . msg_controllen ;
mmsg . msg_hdr . msg_flags = mmsg32 . msg_hdr . msg_flags ;
mmsg . msg_len = mmsg32 . msg_len ;
} else
# endif
{
addr + = sizeof ( mmsg ) * idx ;
if ( umove ( tcp , addr , & mmsg ) < 0 ) {
tprintf ( " %#lx " , addr ) ;
return ;
}
2010-02-12 23:39:12 +03:00
}
2011-09-01 12:00:28 +04:00
tprints ( " { " ) ;
2012-05-02 00:41:40 +04:00
do_msghdr ( tcp , & mmsg . msg_hdr , msg_len ? msg_len : mmsg . msg_len ) ;
2010-02-12 23:39:12 +03:00
tprintf ( " , %u} " , mmsg . msg_len ) ;
1999-02-19 03:21:36 +03:00
}
2012-03-12 03:59:29 +04:00
static void
2012-05-02 00:41:40 +04:00
decode_mmsg ( struct tcb * tcp , unsigned long msg_len )
2012-03-12 03:59:29 +04:00
{
/* mmsgvec */
if ( syserror ( tcp ) ) {
tprintf ( " %#lx " , tcp - > u_arg [ 1 ] ) ;
} else {
unsigned int len = tcp - > u_rval ;
unsigned int i ;
tprints ( " { " ) ;
for ( i = 0 ; i < len ; + + i ) {
if ( i )
tprints ( " , " ) ;
2012-05-02 00:41:40 +04:00
printmmsghdr ( tcp , tcp - > u_arg [ 1 ] , i , msg_len ) ;
2012-03-12 03:59:29 +04:00
}
tprints ( " } " ) ;
}
/* vlen */
tprintf ( " , %u, " , ( unsigned int ) tcp - > u_arg [ 2 ] ) ;
/* flags */
printflags ( msg_flags , tcp - > u_arg [ 3 ] , " MSG_??? " ) ;
}
1999-02-19 03:21:36 +03:00
# endif /* HAVE_SENDMSG */
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
tprint_sock_type ( struct tcb * tcp , int flags )
{
const char * str = xlookup ( socktypes , flags & SOCK_TYPE_MASK ) ;
2011-06-22 16:32:43 +04:00
if ( str ) {
2011-09-01 11:55:05 +04:00
tprints ( str ) ;
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_??? " ) ;
}
1999-02-19 03:21:36 +03:00
int
2008-11-10 20:21:23 +03:00
sys_socket ( struct tcb * tcp )
1999-02-19 03:21:36 +03:00
{
if ( entering ( tcp ) ) {
printxval ( domains , tcp - > u_arg [ 0 ] , " PF_??? " ) ;
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
2008-11-10 20:21:23 +03:00
tprint_sock_type ( tcp , tcp - > u_arg [ 1 ] ) ;
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
1999-02-19 03:21:36 +03:00
switch ( tcp - > u_arg [ 0 ] ) {
case PF_INET :
2003-06-24 03:39:59 +04:00
# ifdef PF_INET6
case PF_INET6 :
# endif
1999-02-19 03:21:36 +03:00
printxval ( protocols , tcp - > u_arg [ 2 ] , " IPPROTO_??? " ) ;
break ;
# ifdef PF_IPX
case PF_IPX :
/* BTW: I don't believe this.. */
2011-09-01 12:00:28 +04:00
tprints ( " [ " ) ;
1999-02-19 03:21:36 +03:00
printxval ( domains , tcp - > u_arg [ 2 ] , " PF_??? " ) ;
2011-09-01 12:00:28 +04:00
tprints ( " ] " ) ;
1999-02-19 03:21:36 +03:00
break ;
# endif /* PF_IPX */
default :
tprintf ( " %lu " , tcp - > u_arg [ 2 ] ) ;
break ;
}
}
return 0 ;
}
int
2011-05-30 16:00:14 +04:00
sys_bind ( struct tcb * tcp )
1999-02-19 03:21:36 +03:00
{
if ( entering ( tcp ) ) {
tprintf ( " %ld, " , tcp - > u_arg [ 0 ] ) ;
1999-11-18 20:09:47 +03:00
printsock ( tcp , tcp - > u_arg [ 1 ] , tcp - > u_arg [ 2 ] ) ;
1999-02-19 03:21:36 +03:00
tprintf ( " , %lu " , tcp - > u_arg [ 2 ] ) ;
}
return 0 ;
}
int
2011-05-30 16:00:14 +04:00
sys_connect ( struct tcb * tcp )
1999-02-19 03:21:36 +03:00
{
return sys_bind ( tcp ) ;
}
int
2011-05-30 16:00:14 +04:00
sys_listen ( struct tcb * tcp )
1999-02-19 03:21:36 +03:00
{
if ( entering ( tcp ) ) {
tprintf ( " %ld, %lu " , tcp - > u_arg [ 0 ] , tcp - > u_arg [ 1 ] ) ;
}
return 0 ;
}
2009-08-14 14:34:05 +04:00
static int
do_accept ( struct tcb * tcp , int flags_arg )
1999-02-19 03:21:36 +03:00
{
if ( entering ( tcp ) ) {
tprintf ( " %ld, " , tcp - > u_arg [ 0 ] ) ;
2009-08-14 14:34:05 +04:00
return 0 ;
}
if ( ! tcp - > u_arg [ 2 ] )
1999-02-19 03:21:36 +03:00
tprintf ( " %#lx, NULL " , tcp - > u_arg [ 1 ] ) ;
else {
2009-01-02 01:47:51 +03:00
int len ;
if ( tcp - > u_arg [ 1 ] = = 0 | | syserror ( tcp )
2011-06-07 14:13:24 +04:00
| | umove ( tcp , tcp - > u_arg [ 2 ] , & len ) < 0 ) {
1999-02-19 03:21:36 +03:00
tprintf ( " %#lx " , tcp - > u_arg [ 1 ] ) ;
} else {
2009-01-02 01:47:51 +03:00
printsock ( tcp , tcp - > u_arg [ 1 ] , len ) ;
1999-02-19 03:21:36 +03:00
}
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
2009-01-02 01:47:51 +03:00
printnum_int ( tcp , tcp - > u_arg [ 2 ] , " %u " ) ;
1999-02-19 03:21:36 +03:00
}
2009-08-14 14:34:05 +04:00
if ( flags_arg > = 0 ) {
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
2009-08-14 14:34:05 +04:00
printflags ( sock_type_flags , tcp - > u_arg [ flags_arg ] ,
" SOCK_??? " ) ;
}
1999-02-19 03:21:36 +03:00
return 0 ;
}
2009-08-14 14:34:05 +04:00
int
sys_accept ( struct tcb * tcp )
{
return do_accept ( tcp , - 1 ) ;
}
int
sys_accept4 ( struct tcb * tcp )
{
return do_accept ( tcp , 3 ) ;
}
1999-02-19 03:21:36 +03:00
int
2011-05-30 16:00:14 +04:00
sys_send ( struct tcb * tcp )
1999-02-19 03:21:36 +03:00
{
if ( entering ( tcp ) ) {
tprintf ( " %ld, " , tcp - > u_arg [ 0 ] ) ;
printstr ( tcp , tcp - > u_arg [ 1 ] , tcp - > u_arg [ 2 ] ) ;
tprintf ( " , %lu, " , tcp - > u_arg [ 2 ] ) ;
/* 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_??? " ) ;
1999-02-19 03:21:36 +03:00
}
return 0 ;
}
int
2011-05-30 16:00:14 +04:00
sys_sendto ( struct tcb * tcp )
1999-02-19 03:21:36 +03:00
{
if ( entering ( tcp ) ) {
tprintf ( " %ld, " , tcp - > u_arg [ 0 ] ) ;
printstr ( tcp , tcp - > u_arg [ 1 ] , tcp - > u_arg [ 2 ] ) ;
tprintf ( " , %lu, " , tcp - > u_arg [ 2 ] ) ;
/* 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_??? " ) ;
1999-02-19 03:21:36 +03:00
/* to address */
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
1999-11-18 20:09:47 +03:00
printsock ( tcp , tcp - > u_arg [ 4 ] , tcp - > u_arg [ 5 ] ) ;
1999-02-19 03:21:36 +03:00
/* to length */
tprintf ( " , %lu " , tcp - > u_arg [ 5 ] ) ;
}
return 0 ;
}
# ifdef HAVE_SENDMSG
int
2011-05-30 16:00:14 +04:00
sys_sendmsg ( struct tcb * tcp )
1999-02-19 03:21:36 +03:00
{
if ( entering ( tcp ) ) {
tprintf ( " %ld, " , tcp - > u_arg [ 0 ] ) ;
2012-05-02 00:30:02 +04:00
printmsghdr ( tcp , tcp - > u_arg [ 1 ] , ( unsigned long ) - 1L ) ;
1999-02-19 03:21:36 +03:00
/* flags */
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 ( msg_flags , tcp - > u_arg [ 2 ] , " MSG_??? " ) ;
1999-02-19 03:21:36 +03:00
}
return 0 ;
}
2012-03-12 03:59:29 +04:00
int
sys_sendmmsg ( struct tcb * tcp )
{
if ( entering ( tcp ) ) {
/* sockfd */
tprintf ( " %d, " , ( int ) tcp - > u_arg [ 0 ] ) ;
if ( ! verbose ( tcp ) ) {
tprintf ( " %#lx, %u, " ,
tcp - > u_arg [ 1 ] , ( unsigned int ) tcp - > u_arg [ 2 ] ) ;
printflags ( msg_flags , tcp - > u_arg [ 3 ] , " MSG_??? " ) ;
}
} else {
if ( verbose ( tcp ) )
2012-05-02 00:41:40 +04:00
decode_mmsg ( tcp , ( unsigned long ) - 1L ) ;
2012-03-12 03:59:29 +04:00
}
return 0 ;
}
1999-02-19 03:21:36 +03:00
# endif /* HAVE_SENDMSG */
int
2011-05-30 16:00:14 +04:00
sys_recv ( struct tcb * tcp )
1999-02-19 03:21:36 +03:00
{
if ( entering ( tcp ) ) {
tprintf ( " %ld, " , tcp - > u_arg [ 0 ] ) ;
} else {
if ( syserror ( tcp ) )
tprintf ( " %#lx " , tcp - > u_arg [ 1 ] ) ;
else
printstr ( tcp , tcp - > u_arg [ 1 ] , tcp - > u_rval ) ;
tprintf ( " , %lu, " , 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 ;
}
int
2011-05-30 16:00:14 +04:00
sys_recvfrom ( struct tcb * tcp )
1999-02-19 03:21:36 +03:00
{
int fromlen ;
if ( entering ( tcp ) ) {
tprintf ( " %ld, " , tcp - > u_arg [ 0 ] ) ;
} else {
if ( syserror ( tcp ) ) {
tprintf ( " %#lx, %lu, %lu, %#lx, %#lx " ,
tcp - > u_arg [ 1 ] , tcp - > u_arg [ 2 ] , tcp - > u_arg [ 3 ] ,
tcp - > u_arg [ 4 ] , tcp - > u_arg [ 5 ] ) ;
return 0 ;
}
/* buf */
printstr ( tcp , tcp - > u_arg [ 1 ] , tcp - > u_rval ) ;
/* len */
tprintf ( " , %lu, " , tcp - > u_arg [ 2 ] ) ;
/* 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_??? " ) ;
1999-02-19 03:21:36 +03:00
/* from address, len */
if ( ! tcp - > u_arg [ 4 ] | | ! tcp - > u_arg [ 5 ] ) {
if ( tcp - > u_arg [ 4 ] = = 0 )
2011-09-01 12:00:28 +04:00
tprints ( " , NULL " ) ;
1999-02-19 03:21:36 +03:00
else
tprintf ( " , %#lx " , tcp - > u_arg [ 4 ] ) ;
if ( tcp - > u_arg [ 5 ] = = 0 )
2011-09-01 12:00:28 +04:00
tprints ( " , NULL " ) ;
1999-02-19 03:21:36 +03:00
else
tprintf ( " , %#lx " , tcp - > u_arg [ 5 ] ) ;
return 0 ;
}
if ( umove ( tcp , tcp - > u_arg [ 5 ] , & fromlen ) < 0 ) {
2011-09-01 12:00:28 +04:00
tprints ( " , {...}, [?] " ) ;
1999-02-19 03:21:36 +03:00
return 0 ;
}
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
1999-11-18 20:09:47 +03:00
printsock ( tcp , tcp - > u_arg [ 4 ] , tcp - > u_arg [ 5 ] ) ;
1999-02-19 03:21:36 +03:00
/* from length */
tprintf ( " , [%u] " , fromlen ) ;
}
return 0 ;
}
# ifdef HAVE_SENDMSG
int
2011-05-30 16:00:14 +04:00
sys_recvmsg ( struct tcb * tcp )
1999-02-19 03:21:36 +03:00
{
if ( entering ( tcp ) ) {
tprintf ( " %ld, " , tcp - > u_arg [ 0 ] ) ;
} else {
if ( syserror ( tcp ) | | ! verbose ( tcp ) )
tprintf ( " %#lx " , tcp - > u_arg [ 1 ] ) ;
else
2012-04-28 16:26:18 +04:00
printmsghdr ( tcp , tcp - > u_arg [ 1 ] , tcp - > u_rval ) ;
1999-02-19 03:21:36 +03:00
/* flags */
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 ( msg_flags , tcp - > u_arg [ 2 ] , " MSG_??? " ) ;
1999-02-19 03:21:36 +03:00
}
return 0 ;
}
2010-02-12 23:39:12 +03:00
int
sys_recvmmsg ( struct tcb * tcp )
{
2012-01-20 14:04:04 +04:00
/* +5 chars are for "left " prefix */
static char str [ 5 + TIMESPEC_TEXT_BUFSIZE ] ;
2010-03-29 20:45:48 +04:00
2012-01-20 14:04:04 +04:00
if ( entering ( tcp ) ) {
2010-02-12 23:39:12 +03:00
tprintf ( " %ld, " , tcp - > u_arg [ 0 ] ) ;
2010-03-29 20:45:48 +04:00
if ( verbose ( tcp ) ) {
sprint_timespec ( str , tcp , tcp - > u_arg [ 4 ] ) ;
2012-01-20 14:04:04 +04:00
/* Abusing tcp->auxstr as temp storage.
* Will be used and freed on syscall exit .
*/
2010-03-29 20:45:48 +04:00
tcp - > auxstr = strdup ( str ) ;
} else {
tprintf ( " %#lx, %ld, " , tcp - > u_arg [ 1 ] , tcp - > u_arg [ 2 ] ) ;
printflags ( msg_flags , tcp - > u_arg [ 3 ] , " MSG_??? " ) ;
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
2010-03-29 20:45:48 +04:00
print_timespec ( tcp , tcp - > u_arg [ 4 ] ) ;
}
return 0 ;
} else {
if ( verbose ( tcp ) ) {
2012-05-02 00:41:40 +04:00
decode_mmsg ( tcp , 0 ) ;
2010-03-29 20:45:48 +04:00
/* timeout on entrance */
tprintf ( " , %s " , tcp - > auxstr ? tcp - > auxstr : " {...} " ) ;
free ( ( void * ) tcp - > auxstr ) ;
tcp - > auxstr = NULL ;
}
if ( syserror ( tcp ) )
return 0 ;
if ( tcp - > u_rval = = 0 ) {
tcp - > auxstr = " Timeout " ;
return RVAL_STR ;
}
if ( ! verbose ( tcp ) )
return 0 ;
/* timeout on exit */
2012-01-20 14:04:04 +04:00
sprint_timespec ( stpcpy ( str , " left " ) , tcp , tcp - > u_arg [ 4 ] ) ;
2010-03-29 20:45:48 +04:00
tcp - > auxstr = str ;
return RVAL_STR ;
2010-02-12 23:39:12 +03:00
}
}
1999-02-19 03:21:36 +03:00
# endif /* HAVE_SENDMSG */
2011-03-03 03:12:25 +03:00
static const struct xlat shutdown_modes [ ] = {
2011-06-07 14:13:24 +04:00
{ 0 , " SHUT_RD " } ,
{ 1 , " SHUT_WR " } ,
{ 2 , " SHUT_RDWR " } ,
{ 0 , NULL }
2011-03-03 03:12:25 +03:00
} ;
1999-02-19 03:21:36 +03:00
int
2011-05-30 16:00:14 +04:00
sys_shutdown ( struct tcb * tcp )
1999-02-19 03:21:36 +03:00
{
if ( entering ( tcp ) ) {
2011-03-03 03:12:25 +03:00
tprintf ( " %ld, " , tcp - > u_arg [ 0 ] ) ;
printxval ( shutdown_modes , tcp - > u_arg [ 1 ] , " SHUT_??? " ) ;
1999-02-19 03:21:36 +03:00
}
return 0 ;
}
int
2011-05-30 16:00:14 +04:00
sys_getsockname ( struct tcb * tcp )
1999-02-19 03:21:36 +03:00
{
return sys_accept ( tcp ) ;
}
int
2011-05-30 16:00:14 +04:00
sys_getpeername ( struct tcb * tcp )
1999-02-19 03:21:36 +03:00
{
return sys_accept ( tcp ) ;
}
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 ) ) {
if ( syserror ( tcp ) ) {
tprintf ( " %#lx " , 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
} else {
2012-02-25 05:38:52 +04:00
# if !defined(SPARC) && !defined(SPARC64) && !defined(SH) && !defined(IA64)
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
int fds [ 2 ] ;
if ( umoven ( tcp , tcp - > u_arg [ 0 ] , sizeof fds , ( char * ) fds ) < 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
else
tprintf ( " [%u, %u] " , fds [ 0 ] , fds [ 1 ] ) ;
2012-02-25 05:38:52 +04:00
# elif defined(SPARC) || defined(SPARC64) || defined(SH) || defined(IA64)
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
tprintf ( " [%lu, %lu] " , tcp - > u_rval , getrval2 ( tcp ) ) ;
# else
tprintf ( " %#lx " , tcp - > u_arg [ 0 ] ) ;
1999-02-19 03:21:36 +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
}
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 ;
}
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
int
sys_pipe ( struct tcb * tcp )
{
return do_pipe ( tcp , - 1 ) ;
}
int
sys_pipe2 ( struct tcb * tcp )
{
return do_pipe ( tcp , 1 ) ;
}
1999-02-19 03:21:36 +03:00
int
2008-11-10 20:21:23 +03:00
sys_socketpair ( struct tcb * tcp )
1999-02-19 03:21:36 +03:00
{
int fds [ 2 ] ;
if ( entering ( tcp ) ) {
printxval ( domains , tcp - > u_arg [ 0 ] , " PF_??? " ) ;
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
2008-11-10 20:21:23 +03:00
tprint_sock_type ( tcp , tcp - > u_arg [ 1 ] ) ;
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
1999-02-19 03:21:36 +03:00
switch ( tcp - > u_arg [ 0 ] ) {
case PF_INET :
printxval ( protocols , tcp - > u_arg [ 2 ] , " IPPROTO_??? " ) ;
break ;
# ifdef PF_IPX
case PF_IPX :
/* BTW: I don't believe this.. */
2011-09-01 12:00:28 +04:00
tprints ( " [ " ) ;
1999-02-19 03:21:36 +03:00
printxval ( domains , tcp - > u_arg [ 2 ] , " PF_??? " ) ;
2011-09-01 12:00:28 +04:00
tprints ( " ] " ) ;
1999-02-19 03:21:36 +03:00
break ;
# endif /* PF_IPX */
2002-12-30 03:51:30 +03:00
default :
1999-05-09 04:29:58 +04:00
tprintf ( " %lu " , tcp - > u_arg [ 2 ] ) ;
1999-02-19 03:21:36 +03:00
break ;
}
} else {
if ( syserror ( tcp ) ) {
1999-05-09 04:29:58 +04:00
tprintf ( " , %#lx " , tcp - > u_arg [ 3 ] ) ;
1999-02-19 03:21:36 +03:00
return 0 ;
}
if ( umoven ( tcp , tcp - > u_arg [ 3 ] , sizeof fds , ( char * ) fds ) < 0 )
2011-09-01 12:00:28 +04:00
tprints ( " , [...] " ) ;
1999-02-19 03:21:36 +03:00
else
tprintf ( " , [%u, %u] " , fds [ 0 ] , fds [ 1 ] ) ;
}
return 0 ;
}
int
2009-11-06 21:05:40 +03:00
sys_getsockopt ( struct tcb * tcp )
1999-02-19 03:21:36 +03:00
{
if ( entering ( tcp ) ) {
tprintf ( " %ld, " , tcp - > u_arg [ 0 ] ) ;
2002-05-22 19:46:49 +04:00
printxval ( socketlayers , tcp - > u_arg [ 1 ] , " SOL_??? " ) ;
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
1999-02-19 03:21:36 +03:00
switch ( tcp - > u_arg [ 1 ] ) {
case SOL_SOCKET :
printxval ( sockoptions , tcp - > u_arg [ 2 ] , " SO_??? " ) ;
break ;
# ifdef SOL_IP
case SOL_IP :
printxval ( sockipoptions , tcp - > u_arg [ 2 ] , " IP_??? " ) ;
break ;
# endif
2004-08-31 11:01:26 +04:00
# ifdef SOL_IPV6
case SOL_IPV6 :
printxval ( sockipv6options , tcp - > u_arg [ 2 ] , " IPV6_??? " ) ;
break ;
# endif
1999-02-19 03:21:36 +03:00
# ifdef SOL_IPX
case SOL_IPX :
printxval ( sockipxoptions , tcp - > u_arg [ 2 ] , " IPX_??? " ) ;
break ;
# endif
2000-07-05 20:05:39 +04:00
# ifdef SOL_PACKET
case SOL_PACKET :
printxval ( sockpacketoptions , tcp - > u_arg [ 2 ] , " PACKET_??? " ) ;
break ;
# endif
1999-02-19 03:21:36 +03:00
# ifdef SOL_TCP
case SOL_TCP :
printxval ( socktcpoptions , tcp - > u_arg [ 2 ] , " TCP_??? " ) ;
break ;
# endif
2011-01-14 13:08:12 +03:00
# ifdef SOL_SCTP
case SOL_SCTP :
printxval ( socksctpoptions , tcp - > u_arg [ 2 ] , " SCTP_??? " ) ;
break ;
# endif
1999-02-19 03:21:36 +03:00
/* SOL_AX25 SOL_ROSE SOL_ATALK SOL_NETROM SOL_UDP SOL_DECNET SOL_X25
* etc . still need work */
2002-12-30 03:51:30 +03:00
default :
2002-05-22 19:46:49 +04:00
tprintf ( " %lu " , tcp - > u_arg [ 2 ] ) ;
1999-02-19 03:21:36 +03:00
break ;
}
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
1999-02-19 03:21:36 +03:00
} else {
2005-02-02 05:48:57 +03:00
int len ;
2011-06-07 14:13:24 +04:00
if ( syserror ( tcp ) | | umove ( tcp , tcp - > u_arg [ 4 ] , & len ) < 0 ) {
2009-11-06 21:05:40 +03:00
tprintf ( " %#lx, %#lx " ,
1999-02-19 03:21:36 +03:00
tcp - > u_arg [ 3 ] , tcp - > u_arg [ 4 ] ) ;
return 0 ;
}
2002-05-22 19:46:49 +04:00
switch ( tcp - > u_arg [ 1 ] ) {
case SOL_SOCKET :
switch ( tcp - > u_arg [ 2 ] ) {
# ifdef SO_LINGER
case SO_LINGER :
2011-06-07 14:13:24 +04:00
if ( len = = sizeof ( struct linger ) ) {
2002-05-22 19:46:49 +04:00
struct linger linger ;
2011-06-07 14:13:24 +04:00
if ( umove ( tcp ,
2002-05-22 19:46:49 +04:00
tcp - > u_arg [ 3 ] ,
& linger ) < 0 )
break ;
2009-11-06 21:05:40 +03:00
tprintf ( " {onoff=%d, linger=%d}, "
2005-02-02 06:11:32 +03:00
" [%d] " ,
2002-05-22 19:46:49 +04:00
linger . l_onoff ,
linger . l_linger ,
len ) ;
return 0 ;
}
break ;
2010-12-03 19:54:53 +03:00
# endif
# ifdef SO_PEERCRED
case SO_PEERCRED :
2011-06-07 14:13:24 +04:00
if ( len = = sizeof ( struct ucred ) ) {
2010-12-03 19:54:53 +03:00
struct ucred uc ;
2011-06-07 14:13:24 +04:00
if ( umove ( tcp ,
2010-12-03 19:54:53 +03:00
tcp - > u_arg [ 3 ] ,
& uc ) < 0 )
break ;
tprintf ( " {pid=%ld, uid=%ld, gid=%ld}, "
" [%d] " ,
( long ) uc . pid ,
( long ) uc . uid ,
( long ) uc . gid ,
len ) ;
return 0 ;
}
break ;
2009-11-13 15:51:04 +03:00
# endif
}
break ;
case SOL_PACKET :
switch ( tcp - > u_arg [ 2 ] ) {
# ifdef PACKET_STATISTICS
case PACKET_STATISTICS :
if ( len = = sizeof ( struct tpacket_stats ) ) {
struct tpacket_stats stats ;
2011-06-07 14:13:24 +04:00
if ( umove ( tcp ,
2009-11-13 15:51:04 +03:00
tcp - > u_arg [ 3 ] ,
& stats ) < 0 )
break ;
tprintf ( " {packets=%u, drops=%u}, "
" [%d] " ,
stats . tp_packets ,
stats . tp_drops ,
len ) ;
return 0 ;
}
break ;
2002-05-22 19:46:49 +04:00
# endif
}
break ;
}
2011-06-07 14:13:24 +04:00
if ( len = = sizeof ( int ) ) {
2009-11-06 21:05:40 +03:00
printnum_int ( tcp , tcp - > u_arg [ 3 ] , " %d " ) ;
2002-05-22 19:46:49 +04:00
}
else {
2011-06-07 14:13:24 +04:00
printstr ( tcp , tcp - > u_arg [ 3 ] , len ) ;
2002-05-22 19:46:49 +04:00
}
2005-02-02 05:48:57 +03:00
tprintf ( " , [%d] " , len ) ;
1999-02-19 03:21:36 +03:00
}
return 0 ;
}
2000-07-05 20:05:39 +04:00
# if defined(ICMP_FILTER)
2011-05-30 16:00:14 +04:00
static void printicmpfilter ( struct tcb * tcp , long addr )
2000-07-05 20:05:39 +04:00
{
struct icmp_filter filter ;
if ( ! addr ) {
2011-09-01 12:00:28 +04:00
tprints ( " NULL " ) ;
2000-07-05 20:05:39 +04:00
return ;
}
if ( syserror ( tcp ) | | ! verbose ( tcp ) ) {
tprintf ( " %#lx " , addr ) ;
return ;
}
if ( umove ( tcp , addr , & filter ) < 0 ) {
2011-09-01 12:00:28 +04:00
tprints ( " {...} " ) ;
2000-07-05 20:05:39 +04:00
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
}
# endif /* ICMP_FILTER */
2002-05-23 15:48:58 +04:00
static int
2011-05-30 16:00:14 +04:00
printsockopt ( struct tcb * tcp , int level , int name , long addr , int len )
1999-02-19 03:21:36 +03:00
{
2002-05-23 15:48:58 +04:00
printxval ( socketlayers , level , " SOL_?? " ) ;
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
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
printxval ( sockoptions , name , " SO_??? " ) ;
switch ( name ) {
2002-05-22 19:46:49 +04:00
# if defined(SO_LINGER)
2012-03-17 07:42:07 +04:00
case SO_LINGER :
2011-06-07 14:13:24 +04:00
if ( len = = sizeof ( struct linger ) ) {
2002-05-23 15:48:58 +04:00
struct linger linger ;
2011-06-07 14:13:24 +04:00
if ( umove ( tcp , addr , & linger ) < 0 )
2002-05-23 15:48:58 +04:00
break ;
tprintf ( " , {onoff=%d, linger=%d} " ,
linger . l_onoff ,
linger . l_linger ) ;
return 0 ;
2002-05-22 19:46:49 +04:00
}
1999-02-19 03:21:36 +03:00
break ;
2002-05-23 15:48:58 +04:00
# endif
}
break ;
1999-02-19 03:21:36 +03:00
# ifdef SOL_IP
2012-03-17 07:42:07 +04:00
case SOL_IP :
2002-05-23 15:48:58 +04:00
printxval ( sockipoptions , name , " IP_??? " ) ;
break ;
1999-02-19 03:21:36 +03:00
# endif
2004-08-31 11:01:26 +04:00
# ifdef SOL_IPV6
2012-03-17 07:42:07 +04:00
case SOL_IPV6 :
2004-08-31 11:01:26 +04:00
printxval ( sockipv6options , name , " IPV6_??? " ) ;
break ;
# endif
1999-02-19 03:21:36 +03:00
# ifdef SOL_IPX
2012-03-17 07:42:07 +04:00
case SOL_IPX :
2002-05-23 15:48:58 +04:00
printxval ( sockipxoptions , name , " IPX_??? " ) ;
break ;
2000-07-05 20:05:39 +04:00
# endif
# ifdef SOL_PACKET
2012-03-17 07:42:07 +04:00
case SOL_PACKET :
2002-05-23 15:48:58 +04:00
printxval ( sockpacketoptions , name , " PACKET_??? " ) ;
/* TODO: decode packate_mreq for PACKET_*_MEMBERSHIP */
2009-11-13 15:51:04 +03:00
switch ( name ) {
# ifdef PACKET_RX_RING
2012-03-17 07:42:07 +04:00
case PACKET_RX_RING :
2009-11-13 15:51:04 +03:00
# endif
# ifdef PACKET_TX_RING
2012-03-17 07:42:07 +04:00
case PACKET_TX_RING :
2009-11-13 15:51:04 +03:00
# endif
# if defined(PACKET_RX_RING) || defined(PACKET_TX_RING)
if ( len = = sizeof ( struct tpacket_req ) ) {
struct tpacket_req req ;
if ( umove ( tcp , addr , & req ) < 0 )
break ;
tprintf ( " , {block_size=%u, block_nr=%u, frame_size=%u, frame_nr=%u} " ,
req . tp_block_size ,
req . tp_block_nr ,
req . tp_frame_size ,
req . tp_frame_nr ) ;
return 0 ;
}
break ;
# endif /* PACKET_RX_RING || PACKET_TX_RING */
}
2002-05-23 15:48:58 +04:00
break ;
1999-02-19 03:21:36 +03:00
# endif
# ifdef SOL_TCP
2012-03-17 07:42:07 +04:00
case SOL_TCP :
2002-05-23 15:48:58 +04:00
printxval ( socktcpoptions , name , " TCP_??? " ) ;
break ;
2000-07-05 20:05:39 +04:00
# endif
2011-01-14 13:08:12 +03:00
# ifdef SOL_SCTP
2012-03-17 07:42:07 +04:00
case SOL_SCTP :
2011-01-14 13:08:12 +03:00
printxval ( socksctpoptions , name , " SCTP_??? " ) ;
break ;
# endif
2000-07-05 20:05:39 +04:00
# ifdef SOL_RAW
2012-03-17 07:42:07 +04:00
case SOL_RAW :
2002-05-23 15:48:58 +04:00
printxval ( sockrawoptions , name , " RAW_??? " ) ;
switch ( name ) {
2000-07-05 20:05:39 +04:00
# if defined(ICMP_FILTER)
2012-02-27 16:56:59 +04:00
case ICMP_FILTER :
tprints ( " , " ) ;
printicmpfilter ( tcp , addr ) ;
return 0 ;
2000-07-05 20:05:39 +04:00
# endif
2002-05-23 15:48:58 +04:00
}
break ;
1999-02-19 03:21:36 +03:00
# endif
2002-12-30 03:51:30 +03:00
/* SOL_AX25 SOL_ATALK SOL_NETROM SOL_UDP SOL_DECNET SOL_X25
1999-02-19 03:21:36 +03:00
* etc . still need work */
2002-05-22 19:46:49 +04:00
2012-03-17 07:42:07 +04:00
default :
2002-05-23 15:48:58 +04:00
tprintf ( " %u " , name ) ;
}
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
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
2002-12-30 03:51:30 +03:00
2011-06-07 14:13:24 +04:00
if ( len = = sizeof ( int ) ) {
printnum_int ( tcp , addr , " %d " ) ;
2002-05-23 15:48:58 +04:00
}
else {
2011-06-07 14:13:24 +04:00
printstr ( tcp , addr , len ) ;
2002-05-23 15:48:58 +04:00
}
return 0 ;
}
2003-01-14 10:53:38 +03:00
# ifdef HAVE_STRUCT_OPTHDR
2002-05-23 15:48:58 +04:00
void
2011-05-30 16:00:14 +04:00
print_sock_optmgmt ( struct tcb * tcp , long addr , int len )
2002-05-23 15:48:58 +04:00
{
int c = 0 ;
struct opthdr hdr ;
2002-05-24 14:19:44 +04:00
while ( len > = ( int ) sizeof hdr ) {
2002-05-23 15:48:58 +04:00
if ( umove ( tcp , addr , & hdr ) < 0 ) break ;
if ( c + + ) {
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
1999-02-19 03:21:36 +03:00
}
2002-05-23 15:48:58 +04:00
else if ( len > hdr . len + sizeof hdr ) {
2011-09-01 12:00:28 +04:00
tprints ( " [ " ) ;
2002-05-22 19:46:49 +04:00
}
2011-09-01 12:00:28 +04:00
tprints ( " { " ) ;
2002-05-23 15:48:58 +04:00
addr + = sizeof hdr ;
len - = sizeof hdr ;
2011-06-07 14:13:24 +04:00
printsockopt ( tcp , hdr . level , hdr . name , addr , hdr . len ) ;
2002-05-24 14:19:44 +04:00
if ( hdr . len > 0 ) {
addr + = hdr . len ;
len - = hdr . len ;
}
2011-09-01 12:00:28 +04:00
tprints ( " } " ) ;
2002-05-23 15:48:58 +04:00
}
if ( len > 0 ) {
2011-09-01 12:00:28 +04:00
if ( c + + ) tprints ( " , " ) ;
2011-06-07 14:13:24 +04:00
printstr ( tcp , addr , len ) ;
2002-05-23 15:48:58 +04:00
}
2011-09-01 12:00:28 +04:00
if ( c > 1 ) tprints ( " ] " ) ;
2002-05-23 15:48:58 +04:00
}
# endif
int
2011-05-30 16:00:14 +04:00
sys_setsockopt ( struct tcb * tcp )
2002-05-23 15:48:58 +04:00
{
if ( entering ( tcp ) ) {
tprintf ( " %ld, " , tcp - > u_arg [ 0 ] ) ;
2011-06-07 14:13:24 +04:00
printsockopt ( tcp , tcp - > u_arg [ 1 ] , tcp - > u_arg [ 2 ] ,
2002-05-23 15:48:58 +04:00
tcp - > u_arg [ 3 ] , tcp - > u_arg [ 4 ] ) ;
2002-05-22 19:46:49 +04:00
tprintf ( " , %lu " , tcp - > u_arg [ 4 ] ) ;
1999-02-19 03:21:36 +03:00
}
return 0 ;
}