176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman/* 276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl> 376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl> 476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com> 57987cdf192632516d6ba493b0a9943f5a3a7c362Wichert Akkerman * Copyright (c) 1996-2000 Wichert Akkerman <wichert@cistron.nl> 676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * All rights reserved. 776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * 876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * Redistribution and use in source and binary forms, with or without 976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * modification, are permitted provided that the following conditions 1076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * are met: 1176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * 1. Redistributions of source code must retain the above copyright 1276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * notice, this list of conditions and the following disclaimer. 1376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * 2. Redistributions in binary form must reproduce the above copyright 1476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * notice, this list of conditions and the following disclaimer in the 1576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * documentation and/or other materials provided with the distribution. 1676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * 3. The name of the author may not be used to endorse or promote products 1776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * derived from this software without specific prior written permission. 1876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * 1976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 2076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 2176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 2276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 2376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 2476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 2876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman */ 3076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 3176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#include "defs.h" 3276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#include <sys/stat.h> 3376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#include <sys/socket.h> 34b2fa2beedc603a17ed7afaa32b80180e54b901f1Dmitry V. Levin#include <sys/uio.h> 3576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#include <sys/un.h> 3676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#include <netinet/in.h> 378c7122c9519dfd46ea7c8c026eab6f7aed74cf21Wichert Akkerman#ifdef HAVE_NETINET_TCP_H 38a6d91ded3f2d5401e09a9c2fa442aabfbfe593a8Denys Vlasenko# include <netinet/tcp.h> 39bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman#endif 408c7122c9519dfd46ea7c8c026eab6f7aed74cf21Wichert Akkerman#ifdef HAVE_NETINET_UDP_H 41a6d91ded3f2d5401e09a9c2fa442aabfbfe593a8Denys Vlasenko# include <netinet/udp.h> 428c7122c9519dfd46ea7c8c026eab6f7aed74cf21Wichert Akkerman#endif 437fea79b7606644ec4e7c2e0a9fbb070c15cbc589Holger Hans Peter Freyther#ifdef HAVE_NETINET_SCTP_H 44a6d91ded3f2d5401e09a9c2fa442aabfbfe593a8Denys Vlasenko# include <netinet/sctp.h> 457fea79b7606644ec4e7c2e0a9fbb070c15cbc589Holger Hans Peter Freyther#endif 4676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#include <arpa/inet.h> 47f185065a405794eaf6abc0dcf8345d9e6aa882f7Wichert Akkerman#include <net/if.h> 4876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#include <asm/types.h> 4999aa181ebcee3f6ae4f8eb83c719cc64cc5a09ecDenys Vlasenko#if defined(__GLIBC__) 50a6d91ded3f2d5401e09a9c2fa442aabfbfe593a8Denys Vlasenko# include <netipx/ipx.h> 5176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#else 52a6d91ded3f2d5401e09a9c2fa442aabfbfe593a8Denys Vlasenko# include <linux/ipx.h> 5376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif 5476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 55f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#if defined(HAVE_LINUX_NETLINK_H) 56a6d91ded3f2d5401e09a9c2fa442aabfbfe593a8Denys Vlasenko# include <linux/netlink.h> 57f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#endif 58f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#if defined(HAVE_LINUX_IF_PACKET_H) 59a6d91ded3f2d5401e09a9c2fa442aabfbfe593a8Denys Vlasenko# include <linux/if_packet.h> 60f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#endif 617987cdf192632516d6ba493b0a9943f5a3a7c362Wichert Akkerman#if defined(HAVE_LINUX_ICMP_H) 62a6d91ded3f2d5401e09a9c2fa442aabfbfe593a8Denys Vlasenko# include <linux/icmp.h> 637987cdf192632516d6ba493b0a9943f5a3a7c362Wichert Akkerman#endif 64c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel#ifdef HAVE_BLUETOOTH_BLUETOOTH_H 65c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel# include <bluetooth/bluetooth.h> 66c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel# include <bluetooth/hci.h> 67c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel# include <bluetooth/l2cap.h> 68c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel# include <bluetooth/rfcomm.h> 69c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel# include <bluetooth/sco.h> 70c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel#endif 7176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifndef PF_UNSPEC 72a6d91ded3f2d5401e09a9c2fa442aabfbfe593a8Denys Vlasenko# define PF_UNSPEC AF_UNSPEC 7376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif 7476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 750ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/domains.h" 760ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/addrfams.h" 770ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/socktypes.h" 780ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/sock_type_flags.h" 798a550d729d53f963452d10990cd56d1132cb1602Dmitry V. Levin#ifndef SOCK_TYPE_MASK 808a550d729d53f963452d10990cd56d1132cb1602Dmitry V. Levin# define SOCK_TYPE_MASK 0xf 818a550d729d53f963452d10990cd56d1132cb1602Dmitry V. Levin#endif 826d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin 836d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifndef SOL_IP 846d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin# define SOL_IP 0 856d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif 866d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifndef SOL_TCP 876d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin# define SOL_TCP 6 886d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif 896d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifndef SOL_UDP 906d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin# define SOL_UDP 17 916d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif 926d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifndef SOL_IPV6 936d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin# define SOL_IPV6 41 946d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif 956d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifndef SOL_ICMPV6 966d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin# define SOL_ICMPV6 58 976d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif 986d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifndef SOL_SCTP 996d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin# define SOL_SCTP 132 1006d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif 1016d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifndef SOL_UDPLITE 1026d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin# define SOL_UDPLITE 136 1036d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif 1046d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifndef SOL_RAW 1056d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin# define SOL_RAW 255 1066d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif 1076d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifndef SOL_IPX 1086d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin# define SOL_IPX 256 1096d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif 1106d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifndef SOL_AX25 1116d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin# define SOL_AX25 257 1126d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif 1136d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifndef SOL_ATALK 1146d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin# define SOL_ATALK 258 1156d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif 1166d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifndef SOL_NETROM 1176d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin# define SOL_NETROM 259 1186d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif 1196d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifndef SOL_ROSE 1206d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin# define SOL_ROSE 260 1216d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif 1226d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifndef SOL_DECNET 1236d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin# define SOL_DECNET 261 1246d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif 1256d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifndef SOL_X25 1266d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin# define SOL_X25 262 1276d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif 1286d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifndef SOL_PACKET 1296d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin# define SOL_PACKET 263 1306d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif 1316d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifndef SOL_ATM 1326d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin# define SOL_ATM 264 1336d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif 1346d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifndef SOL_AAL 1356d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin# define SOL_AAL 265 1366d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif 1376d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifndef SOL_IRDA 1386d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin# define SOL_IRDA 266 1396d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif 1406d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifndef SOL_NETBEUI 1416d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin# define SOL_NETBEUI 267 1426d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif 1436d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifndef SOL_LLC 1446d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin# define SOL_LLC 268 1456d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif 1466d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifndef SOL_DCCP 1476d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin# define SOL_DCCP 269 1486d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif 1496d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifndef SOL_NETLINK 1506d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin# define SOL_NETLINK 270 1516d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif 1526d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifndef SOL_TIPC 1536d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin# define SOL_TIPC 271 1546d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif 1556d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifndef SOL_RXRPC 1566d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin# define SOL_RXRPC 272 1576d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif 1586d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifndef SOL_PPPOL2TP 1596d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin# define SOL_PPPOL2TP 273 1606d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif 1616d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifndef SOL_BLUETOOTH 1626d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin# define SOL_BLUETOOTH 274 1636d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif 1646d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifndef SOL_PNPIPE 1656d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin# define SOL_PNPIPE 275 1666d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif 1676d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifndef SOL_RDS 1686d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin# define SOL_RDS 276 1696d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif 1706d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifndef SOL_IUCV 1716d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin# define SOL_IUCV 277 1726d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif 1736d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifndef SOL_CAIF 1746d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin# define SOL_CAIF 278 1756d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif 1766d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifndef SOL_ALG 1776d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin# define SOL_ALG 279 1786d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif 1796d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifndef SOL_NFC 1806d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin# define SOL_NFC 280 1816d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif 1820ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/socketlayers.h" 1836d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin 1840ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/inet_protocols.h" 1852394a3d0e5ee5684a42b36218ada2dcf3b4e705fMasatake YAMATO 1862394a3d0e5ee5684a42b36218ada2dcf3b4e705fMasatake YAMATO#ifdef PF_NETLINK 187d9f7e7a4392a5fb38b3c60825fedddb28f30572fDmitry V. Levin# if !defined NETLINK_SOCK_DIAG && defined NETLINK_INET_DIAG 188d9f7e7a4392a5fb38b3c60825fedddb28f30572fDmitry V. Levin# define NETLINK_SOCK_DIAG NETLINK_INET_DIAG 189d9f7e7a4392a5fb38b3c60825fedddb28f30572fDmitry V. Levin# endif 190d9f7e7a4392a5fb38b3c60825fedddb28f30572fDmitry V. Levin# include "xlat/netlink_protocols.h" 1912394a3d0e5ee5684a42b36218ada2dcf3b4e705fMasatake YAMATO#endif 1922394a3d0e5ee5684a42b36218ada2dcf3b4e705fMasatake YAMATO 193c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel#if defined(HAVE_BLUETOOTH_BLUETOOTH_H) 194c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel# include "xlat/bt_protocols.h" 195c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel#endif 196c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel 1970ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/msg_flags.h" 1987987cdf192632516d6ba493b0a9943f5a3a7c362Wichert Akkerman 199b0c598ff8d03a57627a5335448a8a60f0950f4f7Wichert Akkerman#if defined(AF_PACKET) /* from e.g. linux/if_packet.h */ 2006d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin# include "xlat/af_packet_types.h" 2016d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif 202b0c598ff8d03a57627a5335448a8a60f0950f4f7Wichert Akkerman 20376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanvoid 204b6c32f4598b84364472bc3febcb80ff3e475def8Dmitry V. Levinprintsock(struct tcb *tcp, long addr, int addrlen) 20576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 206f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman union { 207f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman char pad[128]; 208f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman struct sockaddr sa; 209f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman struct sockaddr_in sin; 210f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman struct sockaddr_un sau; 2119ce1a63eb20b069607c06f9645ac5a17b418a5f3Wichert Akkerman#ifdef HAVE_INET_NTOP 212f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman struct sockaddr_in6 sa6; 2139ce1a63eb20b069607c06f9645ac5a17b418a5f3Wichert Akkerman#endif 2148470374cba7df0e70653d95c4f336a4082c68d82Denys Vlasenko#if defined(AF_IPX) 215f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman struct sockaddr_ipx sipx; 216f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#endif 217f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#ifdef AF_PACKET 218f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman struct sockaddr_ll ll; 21976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif 220f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#ifdef AF_NETLINK 221f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman struct sockaddr_nl nl; 222f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#endif 223c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel#ifdef HAVE_BLUETOOTH_BLUETOOTH_H 224c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel struct sockaddr_hci hci; 225c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel struct sockaddr_l2 l2; 226c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel struct sockaddr_rc rc; 227c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel struct sockaddr_sco sco; 228c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel#endif 229f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman } addrbuf; 230f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman char string_addr[100]; 23176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 23276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (addr == 0) { 23360fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("NULL"); 23476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return; 23576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 23676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (!verbose(tcp)) { 23776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%#lx", addr); 23876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return; 23976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 240f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman 2413ed5d021837768405d9f9c9e7d2b05dc6a110d94Dmitry V. Levin if (addrlen < 2 || addrlen > (int) sizeof(addrbuf)) 242b6c32f4598b84364472bc3febcb80ff3e475def8Dmitry V. Levin addrlen = sizeof(addrbuf); 243b6c32f4598b84364472bc3febcb80ff3e475def8Dmitry V. Levin 244b6c32f4598b84364472bc3febcb80ff3e475def8Dmitry V. Levin memset(&addrbuf, 0, sizeof(addrbuf)); 245b6c32f4598b84364472bc3febcb80ff3e475def8Dmitry V. Levin if (umoven(tcp, addr, addrlen, addrbuf.pad) < 0) { 24660fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("{...}"); 24776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return; 24876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 249b6c32f4598b84364472bc3febcb80ff3e475def8Dmitry V. Levin addrbuf.pad[sizeof(addrbuf.pad) - 1] = '\0'; 250f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman 25160fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("{sa_family="); 252f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman printxval(addrfams, addrbuf.sa.sa_family, "AF_???"); 25360fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 254f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman 255f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman switch (addrbuf.sa.sa_family) { 25676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case AF_UNIX: 257b6c32f4598b84364472bc3febcb80ff3e475def8Dmitry V. Levin if (addrlen == 2) { 25860fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("NULL"); 259f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman } else if (addrbuf.sau.sun_path[0]) { 260c86340e171ebbb4b11e986d172e9b27535ae1807Dmitry V. Levin tprints("sun_path="); 261d9177dfc12f82a9238bf71e85d07d41346c5e5e8Dmitry V. Levin print_quoted_string(addrbuf.sau.sun_path, 262f57bd11eb0b20de9642c9da7b7b870e6c59fef6eDmitry V. Levin sizeof(addrbuf.sau.sun_path) + 1, 263d9177dfc12f82a9238bf71e85d07d41346c5e5e8Dmitry V. Levin QUOTE_0_TERMINATED); 264f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman } else { 265c86340e171ebbb4b11e986d172e9b27535ae1807Dmitry V. Levin tprints("sun_path=@"); 266d9177dfc12f82a9238bf71e85d07d41346c5e5e8Dmitry V. Levin print_quoted_string(addrbuf.sau.sun_path + 1, 267f57bd11eb0b20de9642c9da7b7b870e6c59fef6eDmitry V. Levin sizeof(addrbuf.sau.sun_path), 268d9177dfc12f82a9238bf71e85d07d41346c5e5e8Dmitry V. Levin QUOTE_0_TERMINATED); 269f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman } 27076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman break; 27176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case AF_INET: 2721fcb1d64ed13836334d100af9412f220efa1bbfaJohn Hughes tprintf("sin_port=htons(%u), sin_addr=inet_addr(\"%s\")", 273f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman ntohs(addrbuf.sin.sin_port), inet_ntoa(addrbuf.sin.sin_addr)); 27476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman break; 2759ce1a63eb20b069607c06f9645ac5a17b418a5f3Wichert Akkerman#ifdef HAVE_INET_NTOP 2769ce1a63eb20b069607c06f9645ac5a17b418a5f3Wichert Akkerman case AF_INET6: 277f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman inet_ntop(AF_INET6, &addrbuf.sa6.sin6_addr, string_addr, sizeof(string_addr)); 278f185065a405794eaf6abc0dcf8345d9e6aa882f7Wichert Akkerman tprintf("sin6_port=htons(%u), inet_pton(AF_INET6, \"%s\", &sin6_addr), sin6_flowinfo=%u", 279f185065a405794eaf6abc0dcf8345d9e6aa882f7Wichert Akkerman ntohs(addrbuf.sa6.sin6_port), string_addr, 280f185065a405794eaf6abc0dcf8345d9e6aa882f7Wichert Akkerman addrbuf.sa6.sin6_flowinfo); 2816d2b34971b33d379c89c36c5ad1b0c6d5d12c453Roland McGrath#ifdef HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID 282f185065a405794eaf6abc0dcf8345d9e6aa882f7Wichert Akkerman { 283f185065a405794eaf6abc0dcf8345d9e6aa882f7Wichert Akkerman#if defined(HAVE_IF_INDEXTONAME) && defined(IN6_IS_ADDR_LINKLOCAL) && defined(IN6_IS_ADDR_MC_LINKLOCAL) 284b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko int numericscope = 0; 285b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko if (IN6_IS_ADDR_LINKLOCAL(&addrbuf.sa6.sin6_addr) 286b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko || IN6_IS_ADDR_MC_LINKLOCAL(&addrbuf.sa6.sin6_addr)) { 287b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko char scopebuf[IFNAMSIZ + 1]; 2886d2b34971b33d379c89c36c5ad1b0c6d5d12c453Roland McGrath 289b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko if (if_indextoname(addrbuf.sa6.sin6_scope_id, scopebuf) == NULL) 290b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko numericscope++; 2910e9d594caa0362d30ab3c39d509da997d051220bDmitry V. Levin else { 2920e9d594caa0362d30ab3c39d509da997d051220bDmitry V. Levin tprints(", sin6_scope_id=if_nametoindex("); 2930e9d594caa0362d30ab3c39d509da997d051220bDmitry V. Levin print_quoted_string(scopebuf, 2940e9d594caa0362d30ab3c39d509da997d051220bDmitry V. Levin sizeof(scopebuf), 2950e9d594caa0362d30ab3c39d509da997d051220bDmitry V. Levin QUOTE_0_TERMINATED); 2960e9d594caa0362d30ab3c39d509da997d051220bDmitry V. Levin tprints(")"); 2970e9d594caa0362d30ab3c39d509da997d051220bDmitry V. Levin } 298b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko } else 299b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko numericscope++; 3006d2b34971b33d379c89c36c5ad1b0c6d5d12c453Roland McGrath 301b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko if (numericscope) 302f185065a405794eaf6abc0dcf8345d9e6aa882f7Wichert Akkerman#endif 303b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko tprintf(", sin6_scope_id=%u", addrbuf.sa6.sin6_scope_id); 304f185065a405794eaf6abc0dcf8345d9e6aa882f7Wichert Akkerman } 305f185065a405794eaf6abc0dcf8345d9e6aa882f7Wichert Akkerman#endif 306b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko break; 3079ce1a63eb20b069607c06f9645ac5a17b418a5f3Wichert Akkerman#endif 3088470374cba7df0e70653d95c4f336a4082c68d82Denys Vlasenko#if defined(AF_IPX) 30976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case AF_IPX: 310f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman { 31176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman int i; 3121fcb1d64ed13836334d100af9412f220efa1bbfaJohn Hughes tprintf("sipx_port=htons(%u), ", 313f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman ntohs(addrbuf.sipx.sipx_port)); 31476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* Yes, I know, this does not look too 31576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * strace-ish, but otherwise the IPX 31676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * addresses just look monstrous... 31776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * Anyways, feel free if you don't like 3186d2b34971b33d379c89c36c5ad1b0c6d5d12c453Roland McGrath * this way.. :) 31976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman */ 320f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman tprintf("%08lx:", (unsigned long)ntohl(addrbuf.sipx.sipx_network)); 321b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko for (i = 0; i < IPX_NODE_LEN; i++) 322f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman tprintf("%02x", addrbuf.sipx.sipx_node[i]); 323f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman tprintf("/[%02x]", addrbuf.sipx.sipx_type); 324f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman } 325f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman break; 3268470374cba7df0e70653d95c4f336a4082c68d82Denys Vlasenko#endif /* AF_IPX */ 327f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#ifdef AF_PACKET 328f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman case AF_PACKET: 329f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman { 330f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman int i; 331b0c598ff8d03a57627a5335448a8a60f0950f4f7Wichert Akkerman tprintf("proto=%#04x, if%d, pkttype=", 332f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman ntohs(addrbuf.ll.sll_protocol), 333b0c598ff8d03a57627a5335448a8a60f0950f4f7Wichert Akkerman addrbuf.ll.sll_ifindex); 334130636529156859aaafbf57278f5dbcceae2c76aDmitry V. Levin printxval(af_packet_types, addrbuf.ll.sll_pkttype, "PACKET_???"); 335b0c598ff8d03a57627a5335448a8a60f0950f4f7Wichert Akkerman tprintf(", addr(%d)={%d, ", 336f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman addrbuf.ll.sll_halen, 337f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman addrbuf.ll.sll_hatype); 338b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko for (i = 0; i < addrbuf.ll.sll_halen; i++) 339f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman tprintf("%02x", addrbuf.ll.sll_addr[i]); 34076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 34176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman break; 342f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman 3438470374cba7df0e70653d95c4f336a4082c68d82Denys Vlasenko#endif /* AF_PACKET */ 34436ef1bc03e291f98eb5f44ba722a49b87c3cb5e5Roland McGrath#ifdef AF_NETLINK 345f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman case AF_NETLINK: 346f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman tprintf("pid=%d, groups=%08x", addrbuf.nl.nl_pid, addrbuf.nl.nl_groups); 347f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman break; 348f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#endif /* AF_NETLINK */ 349c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel#if defined(AF_BLUETOOTH) && defined(HAVE_BLUETOOTH_BLUETOOTH_H) 350c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel case AF_BLUETOOTH: 351c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel tprintf("{sco_bdaddr=%02X:%02X:%02X:%02X:%02X:%02X} or " 352c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel "{rc_bdaddr=%02X:%02X:%02X:%02X:%02X:%02X, rc_channel=%d} or " 353c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel "{l2_psm=htobs(%d), l2_bdaddr=%02X:%02X:%02X:%02X:%02X:%02X, l2_cid=htobs(%d)} or " 354c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel "{hci_dev=htobs(%d)}", 355c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel addrbuf.sco.sco_bdaddr.b[0], addrbuf.sco.sco_bdaddr.b[1], 356c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel addrbuf.sco.sco_bdaddr.b[2], addrbuf.sco.sco_bdaddr.b[3], 357c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel addrbuf.sco.sco_bdaddr.b[4], addrbuf.sco.sco_bdaddr.b[5], 358c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel addrbuf.rc.rc_bdaddr.b[0], addrbuf.rc.rc_bdaddr.b[1], 359c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel addrbuf.rc.rc_bdaddr.b[2], addrbuf.rc.rc_bdaddr.b[3], 360c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel addrbuf.rc.rc_bdaddr.b[4], addrbuf.rc.rc_bdaddr.b[5], 361c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel addrbuf.rc.rc_channel, 362c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel btohs(addrbuf.l2.l2_psm), addrbuf.l2.l2_bdaddr.b[0], 363c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel addrbuf.l2.l2_bdaddr.b[1], addrbuf.l2.l2_bdaddr.b[2], 364c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel addrbuf.l2.l2_bdaddr.b[3], addrbuf.l2.l2_bdaddr.b[4], 365c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel addrbuf.l2.l2_bdaddr.b[5], btohs(addrbuf.l2.l2_cid), 366c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel btohs(addrbuf.hci.hci_dev)); 367c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel break; 368c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel#endif /* AF_BLUETOOTH && HAVE_BLUETOOTH_BLUETOOTH_H */ 36976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* AF_AX25 AF_APPLETALK AF_NETROM AF_BRIDGE AF_AAL5 370f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman AF_X25 AF_ROSE etc. still need to be done */ 37176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 37276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman default: 37360fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("sa_data="); 374d0dceaf0ffdd1ad0e5169777126da8126903dba8Dmitry V. Levin print_quoted_string(addrbuf.sa.sa_data, 375d0dceaf0ffdd1ad0e5169777126da8126903dba8Dmitry V. Levin sizeof(addrbuf.sa.sa_data), 0); 37676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman break; 37776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 37860fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("}"); 37976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 38076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 38176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#if HAVE_SENDMSG 382b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin# ifndef SCM_SECURITY 383b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin# define SCM_SECURITY 0x03 384b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin# endif 385b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin# include "xlat/scmvals.h" 3865077082649babf6dac0cabf5e2dd53dff4d393d0Roland McGrath 38705884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin#if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4 38805884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levinstruct cmsghdr32 { 38905884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin uint32_t cmsg_len; 39005884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin int cmsg_level; 39105884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin int cmsg_type; 39205884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin}; 39305884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin#endif 39405884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin 39505884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levintypedef union { 396b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin char *ptr; 39705884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin struct cmsghdr *cmsg; 39805884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin#if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4 39905884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin struct cmsghdr32 *cmsg32; 40005884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin#endif 40105884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin} union_cmsghdr; 40205884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin 403b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levinstatic bool 404b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levinprint_scm_rights(struct tcb *tcp, size_t cmsg_size, char *ptr, size_t cmsg_len) 4055077082649babf6dac0cabf5e2dd53dff4d393d0Roland McGrath{ 406b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin if (cmsg_size + sizeof(int) > cmsg_len) 407b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin return false; 408b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin 409b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin int *fds = (int *) (ptr + cmsg_size); 410b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin bool seen = false; 411b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin 412b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin tprints(", ["); 413b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin while ((char *) fds < (ptr + cmsg_len)) { 414b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin if (seen) 415b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin tprints(", "); 416b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin else 417b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin seen = true; 418b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin printfd(tcp, *fds++); 419b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin } 420b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin tprints("]}"); 421b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin return true; 422b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin} 423b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin 424b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levinstatic bool 425b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levinprint_scm_creds(struct tcb *tcp, size_t cmsg_size, char *ptr, size_t cmsg_len) 426b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin{ 427b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin if (cmsg_size + sizeof(struct ucred) > cmsg_len) 428b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin return false; 429b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin 430b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin const struct ucred *uc = (void *) (ptr + cmsg_size); 431b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin 432b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin tprintf(", {pid=%u, uid=%u, gid=%u}}", 433b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin (unsigned) uc->pid, (unsigned) uc->uid, (unsigned) uc->gid); 434b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin return true; 435b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin} 436b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin 437b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levinstatic bool 438b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levinprint_scm_security(struct tcb *tcp, size_t cmsg_size, char *ptr, size_t cmsg_len) 439b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin{ 440b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin if (cmsg_size + sizeof(char) > cmsg_len) 441b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin return false; 442b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin 443b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin const char *label = (const char *) (ptr + cmsg_size); 444b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin const size_t label_len = cmsg_len - cmsg_size; 44505884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin 446513e96eb94841734274c0607aae2c9f212411eeeDmitry V. Levin tprints(", "); 447513e96eb94841734274c0607aae2c9f212411eeeDmitry V. Levin print_quoted_string(label, label_len, 0); 448513e96eb94841734274c0607aae2c9f212411eeeDmitry V. Levin tprints("}"); 449b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin 450b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin return true; 451b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin} 452b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin 453b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levinstatic void 454b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levinprintcmsghdr(struct tcb *tcp, unsigned long addr, size_t len) 455b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin{ 456b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin const size_t cmsg_size = 45705884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin#if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4 45805884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin (current_wordsize < sizeof(long)) ? sizeof(struct cmsghdr32) : 45905884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin#endif 46005884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin sizeof(struct cmsghdr); 46105884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin 462b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin char *buf = len < cmsg_size ? NULL : malloc(len); 463b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin if (!buf || umoven(tcp, addr, len, buf) < 0) { 4645077082649babf6dac0cabf5e2dd53dff4d393d0Roland McGrath tprintf(", msg_control=%#lx", addr); 465b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin free(buf); 4665077082649babf6dac0cabf5e2dd53dff4d393d0Roland McGrath return; 4675077082649babf6dac0cabf5e2dd53dff4d393d0Roland McGrath } 4685077082649babf6dac0cabf5e2dd53dff4d393d0Roland McGrath 469b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin union_cmsghdr u = { .ptr = buf }; 470b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin 471b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin tprints(", ["); 472b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin while (len >= cmsg_size) { 473b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin size_t cmsg_len = 47405884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin#if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4 475b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin (current_wordsize < sizeof(long)) ? u.cmsg32->cmsg_len : 47605884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin#endif 477b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin u.cmsg->cmsg_len; 478b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin int cmsg_level = 47905884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin#if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4 480b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin (current_wordsize < sizeof(long)) ? u.cmsg32->cmsg_level : 48105884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin#endif 482b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin u.cmsg->cmsg_level; 483b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin int cmsg_type = 48405884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin#if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4 485b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin (current_wordsize < sizeof(long)) ? u.cmsg32->cmsg_type : 48605884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin#endif 487b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin u.cmsg->cmsg_type; 488b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin 489b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin if (u.ptr != buf) 490b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin tprints(", "); 491b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin tprintf("{cmsg_len=%lu, cmsg_level=", (unsigned long) cmsg_len); 492b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin printxval(socketlayers, cmsg_level, "SOL_???"); 493b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin tprints(", cmsg_type="); 494b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin 495b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin if (cmsg_len > len) 496b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin cmsg_len = len; 497b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin 498b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin if (cmsg_level == SOL_SOCKET) { 499b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin printxval(scmvals, cmsg_type, "SCM_???"); 500b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin switch (cmsg_type) { 501b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin case SCM_RIGHTS: 502b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin if (print_scm_rights(tcp, cmsg_size, u.ptr, cmsg_len)) 503b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin goto next_cmsg; 504b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin break; 505b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin case SCM_CREDENTIALS: 506b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin if (print_scm_creds(tcp, cmsg_size, u.ptr, cmsg_len)) 507b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin goto next_cmsg; 508b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin break; 509b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin case SCM_SECURITY: 510b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin if (print_scm_security(tcp, cmsg_size, u.ptr, cmsg_len)) 511b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin goto next_cmsg; 512b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin break; 5135077082649babf6dac0cabf5e2dd53dff4d393d0Roland McGrath } 514b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin } else { 515b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin tprintf("%u", cmsg_type); 516b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin } 517b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin tprints(", ...}"); 518b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levinnext_cmsg: 519b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin if (cmsg_len < cmsg_size) { 520b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin len -= cmsg_size; 521b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin break; 5225077082649babf6dac0cabf5e2dd53dff4d393d0Roland McGrath } 523b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin cmsg_len = (cmsg_len + current_wordsize - 1) & 524b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin (size_t) ~(current_wordsize - 1); 525b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin if (cmsg_len >= len) { 526b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin len = 0; 527b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin break; 5285077082649babf6dac0cabf5e2dd53dff4d393d0Roland McGrath } 529b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin u.ptr += cmsg_len; 530b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin len -= cmsg_len; 5315077082649babf6dac0cabf5e2dd53dff4d393d0Roland McGrath } 532b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin if (len) 533b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin tprints(", ..."); 534b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin tprints("]"); 535b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin free(buf); 5365077082649babf6dac0cabf5e2dd53dff4d393d0Roland McGrath} 53776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 53876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanstatic void 539e0bc222263cf47a43e1b26d55edb2ffadc8ccbffDenys Vlasenkodo_msghdr(struct tcb *tcp, struct msghdr *msg, unsigned long data_size) 5400873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab{ 5410873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab tprintf("{msg_name(%d)=", msg->msg_namelen); 5420873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab printsock(tcp, (long)msg->msg_name, msg->msg_namelen); 5430873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab 5440873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab tprintf(", msg_iov(%lu)=", (unsigned long)msg->msg_iovlen); 545e0bc222263cf47a43e1b26d55edb2ffadc8ccbffDenys Vlasenko tprint_iov_upto(tcp, (unsigned long)msg->msg_iovlen, 546e0bc222263cf47a43e1b26d55edb2ffadc8ccbffDenys Vlasenko (unsigned long)msg->msg_iov, 1, data_size); 5470873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab 5480873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab#ifdef HAVE_STRUCT_MSGHDR_MSG_CONTROL 5490873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab tprintf(", msg_controllen=%lu", (unsigned long)msg->msg_controllen); 5500873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab if (msg->msg_controllen) 5510873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab printcmsghdr(tcp, (unsigned long) msg->msg_control, 5520873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab msg->msg_controllen); 55360fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", msg_flags="); 5540873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab printflags(msg_flags, msg->msg_flags, "MSG_???"); 5550873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab#else /* !HAVE_STRUCT_MSGHDR_MSG_CONTROL */ 5560873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab tprintf("msg_accrights=%#lx, msg_accrightslen=%u", 5570873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab (unsigned long) msg->msg_accrights, msg->msg_accrightslen); 5580873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab#endif /* !HAVE_STRUCT_MSGHDR_MSG_CONTROL */ 55960fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("}"); 5600873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab} 5610873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab 5623e759d4293076b9358a25bb61d50d3e6fff5b0e2Denys Vlasenkostruct msghdr32 { 5633e759d4293076b9358a25bb61d50d3e6fff5b0e2Denys Vlasenko uint32_t /* void* */ msg_name; 5643e759d4293076b9358a25bb61d50d3e6fff5b0e2Denys Vlasenko uint32_t /* socklen_t */msg_namelen; 5653e759d4293076b9358a25bb61d50d3e6fff5b0e2Denys Vlasenko uint32_t /* iovec* */ msg_iov; 5663e759d4293076b9358a25bb61d50d3e6fff5b0e2Denys Vlasenko uint32_t /* size_t */ msg_iovlen; 5673e759d4293076b9358a25bb61d50d3e6fff5b0e2Denys Vlasenko uint32_t /* void* */ msg_control; 5683e759d4293076b9358a25bb61d50d3e6fff5b0e2Denys Vlasenko uint32_t /* size_t */ msg_controllen; 5693e759d4293076b9358a25bb61d50d3e6fff5b0e2Denys Vlasenko uint32_t /* int */ msg_flags; 5703e759d4293076b9358a25bb61d50d3e6fff5b0e2Denys Vlasenko}; 5713e759d4293076b9358a25bb61d50d3e6fff5b0e2Denys Vlasenkostruct mmsghdr32 { 5723e759d4293076b9358a25bb61d50d3e6fff5b0e2Denys Vlasenko struct msghdr32 msg_hdr; 5733e759d4293076b9358a25bb61d50d3e6fff5b0e2Denys Vlasenko uint32_t /* unsigned */ msg_len; 5743e759d4293076b9358a25bb61d50d3e6fff5b0e2Denys Vlasenko}; 5753e759d4293076b9358a25bb61d50d3e6fff5b0e2Denys Vlasenko 576caf6a438f9d97684c10da8a6453d1e0e151a9613Masatake YAMATO#ifndef HAVE_STRUCT_MMSGHDR 577caf6a438f9d97684c10da8a6453d1e0e151a9613Masatake YAMATOstruct mmsghdr { 578caf6a438f9d97684c10da8a6453d1e0e151a9613Masatake YAMATO struct msghdr msg_hdr; 579caf6a438f9d97684c10da8a6453d1e0e151a9613Masatake YAMATO unsigned msg_len; 580caf6a438f9d97684c10da8a6453d1e0e151a9613Masatake YAMATO}; 581caf6a438f9d97684c10da8a6453d1e0e151a9613Masatake YAMATO#endif 582caf6a438f9d97684c10da8a6453d1e0e151a9613Masatake YAMATO 583b248543be91457a6c0567a4b057ff0acc361efc2Masatake YAMATO#if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4 584b248543be91457a6c0567a4b057ff0acc361efc2Masatake YAMATOstatic void 585b248543be91457a6c0567a4b057ff0acc361efc2Masatake YAMATOcopy_from_msghdr32(struct msghdr *to_msg, struct msghdr32 *from_msg32) 586b248543be91457a6c0567a4b057ff0acc361efc2Masatake YAMATO{ 587b248543be91457a6c0567a4b057ff0acc361efc2Masatake YAMATO to_msg->msg_name = (void*)(long)from_msg32->msg_name; 588b248543be91457a6c0567a4b057ff0acc361efc2Masatake YAMATO to_msg->msg_namelen = from_msg32->msg_namelen; 589b248543be91457a6c0567a4b057ff0acc361efc2Masatake YAMATO to_msg->msg_iov = (void*)(long)from_msg32->msg_iov; 590b248543be91457a6c0567a4b057ff0acc361efc2Masatake YAMATO to_msg->msg_iovlen = from_msg32->msg_iovlen; 591b248543be91457a6c0567a4b057ff0acc361efc2Masatake YAMATO to_msg->msg_control = (void*)(long)from_msg32->msg_control; 592b248543be91457a6c0567a4b057ff0acc361efc2Masatake YAMATO to_msg->msg_controllen = from_msg32->msg_controllen; 593b248543be91457a6c0567a4b057ff0acc361efc2Masatake YAMATO to_msg->msg_flags = from_msg32->msg_flags; 594b248543be91457a6c0567a4b057ff0acc361efc2Masatake YAMATO} 595b248543be91457a6c0567a4b057ff0acc361efc2Masatake YAMATO#endif 596b248543be91457a6c0567a4b057ff0acc361efc2Masatake YAMATO 59702f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATOstatic bool 59802f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATOextractmsghdr(struct tcb *tcp, long addr, struct msghdr *msg) 59976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 6003e759d4293076b9358a25bb61d50d3e6fff5b0e2Denys Vlasenko#if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4 6013e759d4293076b9358a25bb61d50d3e6fff5b0e2Denys Vlasenko if (current_wordsize == 4) { 6023e759d4293076b9358a25bb61d50d3e6fff5b0e2Denys Vlasenko struct msghdr32 msg32; 6033e759d4293076b9358a25bb61d50d3e6fff5b0e2Denys Vlasenko 60402f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATO if (umove(tcp, addr, &msg32) < 0) 60502f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATO return false; 606b248543be91457a6c0567a4b057ff0acc361efc2Masatake YAMATO copy_from_msghdr32(msg, &msg32); 6073e759d4293076b9358a25bb61d50d3e6fff5b0e2Denys Vlasenko } else 6083e759d4293076b9358a25bb61d50d3e6fff5b0e2Denys Vlasenko#endif 60902f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATO if (umove(tcp, addr, msg) < 0) 61002f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATO return false; 61102f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATO return true; 61202f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATO} 61302f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATO 614a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATOstatic bool 615a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATOextractmmsghdr(struct tcb *tcp, long addr, unsigned int idx, struct mmsghdr *mmsg) 616a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO{ 617a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO#if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4 618a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO if (current_wordsize == 4) { 619a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO struct mmsghdr32 mmsg32; 620a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO 621a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO addr += sizeof(struct mmsghdr32) * idx; 622a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO if (umove(tcp, addr, &mmsg32) < 0) 623a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO return false; 624a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO 625a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO copy_from_msghdr32(&mmsg->msg_hdr, &mmsg32.msg_hdr); 626a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO mmsg->msg_len = mmsg32.msg_len; 627a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO } else 628a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO#endif 629a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO { 630a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO addr += sizeof(*mmsg) * idx; 631a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO if (umove(tcp, addr, mmsg) < 0) 632a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO return false; 633a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO } 634a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO return true; 635a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO} 636a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO 63702f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATOstatic void 63802f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATOprintmsghdr(struct tcb *tcp, long addr, unsigned long data_size) 63902f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATO{ 64002f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATO struct msghdr msg; 64102f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATO 64200244b94bbfc3edd2ca17c83e879154b6f6708d4Dmitry V. Levin if (verbose(tcp) && extractmsghdr(tcp, addr, &msg)) 64302f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATO do_msghdr(tcp, &msg, data_size); 64402f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATO else 6452e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman tprintf("%#lx", addr); 64602f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATO} 64702f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATO 64802f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATOvoid 64902f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATOdumpiov_in_msghdr(struct tcb *tcp, long addr) 65002f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATO{ 65102f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATO struct msghdr msg; 65202f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATO 65302f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATO if (extractmsghdr(tcp, addr, &msg)) 65402f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATO dumpiov(tcp, msg.msg_iovlen, (long)msg.msg_iov); 6550873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab} 656f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman 6570873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwabstatic void 6585ea97658e78b6ce9fb768ffdd6a4b682c5df8e90Dmitry V. Levinprintmmsghdr(struct tcb *tcp, long addr, unsigned int idx, unsigned long msg_len) 6590873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab{ 660caf6a438f9d97684c10da8a6453d1e0e151a9613Masatake YAMATO struct mmsghdr mmsg; 661f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman 662a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO if (extractmmsghdr(tcp, addr, idx, &mmsg)) { 663a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO tprints("{"); 664a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO do_msghdr(tcp, &mmsg.msg_hdr, msg_len ? msg_len : mmsg.msg_len); 665a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO tprintf(", %u}", mmsg.msg_len); 6660873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab } 667a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO else 668a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO tprintf("%#lx", addr); 66976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 67076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 6717af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levinstatic void 6725ea97658e78b6ce9fb768ffdd6a4b682c5df8e90Dmitry V. Levindecode_mmsg(struct tcb *tcp, unsigned long msg_len) 6737af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin{ 6747af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin /* mmsgvec */ 6757af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin if (syserror(tcp)) { 6767af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin tprintf("%#lx", tcp->u_arg[1]); 6777af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin } else { 6787af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin unsigned int len = tcp->u_rval; 6797af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin unsigned int i; 6807af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin 6817af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin tprints("{"); 6827af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin for (i = 0; i < len; ++i) { 6837af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin if (i) 6847af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin tprints(", "); 6855ea97658e78b6ce9fb768ffdd6a4b682c5df8e90Dmitry V. Levin printmmsghdr(tcp, tcp->u_arg[1], i, msg_len); 6867af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin } 6877af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin tprints("}"); 6887af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin } 6897af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin /* vlen */ 6907af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin tprintf(", %u, ", (unsigned int) tcp->u_arg[2]); 6917af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin /* flags */ 6927af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin printflags(msg_flags, tcp->u_arg[3], "MSG_???"); 6937af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin} 6947af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin 695a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATOvoid 696a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATOdumpiov_in_mmsghdr(struct tcb *tcp, long addr) 697a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO{ 698a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO unsigned int len = tcp->u_rval; 699a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO unsigned int i; 700a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO struct mmsghdr mmsg; 701a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO 702a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO for (i = 0; i < len; ++i) { 703a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO if (extractmmsghdr(tcp, addr, i, &mmsg)) { 704a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO tprintf(" = %lu buffers in vector %u\n", 705a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO (unsigned long)mmsg.msg_hdr.msg_iovlen, i); 706a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO dumpiov(tcp, mmsg.msg_hdr.msg_iovlen, 707a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO (long)mmsg.msg_hdr.msg_iov); 708a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO } 709a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO } 710a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO} 71176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif /* HAVE_SENDMSG */ 71276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 7138a550d729d53f963452d10990cd56d1132cb1602Dmitry V. Levin/* 7148a550d729d53f963452d10990cd56d1132cb1602Dmitry V. Levin * low bits of the socket type define real socket type, 7158a550d729d53f963452d10990cd56d1132cb1602Dmitry V. Levin * other bits are socket type flags. 7168a550d729d53f963452d10990cd56d1132cb1602Dmitry V. Levin */ 7178a550d729d53f963452d10990cd56d1132cb1602Dmitry V. Levinstatic void 7181e42f2dbe721f7cb1e4bdfc9103bf358b4a443c1Dmitry V. Levintprint_sock_type(int flags) 7198a550d729d53f963452d10990cd56d1132cb1602Dmitry V. Levin{ 7208a550d729d53f963452d10990cd56d1132cb1602Dmitry V. Levin const char *str = xlookup(socktypes, flags & SOCK_TYPE_MASK); 7218a550d729d53f963452d10990cd56d1132cb1602Dmitry V. Levin 7227b609d5ba0852e6c56ba311350ebd4412361777bDenys Vlasenko if (str) { 7235940e6593911dcace424c668a1c0934c71fccb9eDenys Vlasenko tprints(str); 7248a550d729d53f963452d10990cd56d1132cb1602Dmitry V. Levin flags &= ~SOCK_TYPE_MASK; 7258a550d729d53f963452d10990cd56d1132cb1602Dmitry V. Levin if (!flags) 7268a550d729d53f963452d10990cd56d1132cb1602Dmitry V. Levin return; 72760fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("|"); 7288a550d729d53f963452d10990cd56d1132cb1602Dmitry V. Levin } 7298a550d729d53f963452d10990cd56d1132cb1602Dmitry V. Levin printflags(sock_type_flags, flags, "SOCK_???"); 7308a550d729d53f963452d10990cd56d1132cb1602Dmitry V. Levin} 7318a550d729d53f963452d10990cd56d1132cb1602Dmitry V. Levin 732a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(socket) 73376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 73476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 73576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printxval(domains, tcp->u_arg[0], "PF_???"); 73660fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 7371e42f2dbe721f7cb1e4bdfc9103bf358b4a443c1Dmitry V. Levin tprint_sock_type(tcp->u_arg[1]); 73860fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 73976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman switch (tcp->u_arg[0]) { 74076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case PF_INET: 7418758e544d502e54202079b0521ae0a234d644a4aRoland McGrath#ifdef PF_INET6 7428758e544d502e54202079b0521ae0a234d644a4aRoland McGrath case PF_INET6: 7438758e544d502e54202079b0521ae0a234d644a4aRoland McGrath#endif 7442394a3d0e5ee5684a42b36218ada2dcf3b4e705fMasatake YAMATO printxval(inet_protocols, tcp->u_arg[2], "IPPROTO_???"); 74576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman break; 74676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef PF_IPX 74776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case PF_IPX: 74876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* BTW: I don't believe this.. */ 74960fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("["); 75076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printxval(domains, tcp->u_arg[2], "PF_???"); 75160fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("]"); 75276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman break; 75376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif /* PF_IPX */ 7542394a3d0e5ee5684a42b36218ada2dcf3b4e705fMasatake YAMATO#ifdef PF_NETLINK 7552394a3d0e5ee5684a42b36218ada2dcf3b4e705fMasatake YAMATO case PF_NETLINK: 7562394a3d0e5ee5684a42b36218ada2dcf3b4e705fMasatake YAMATO printxval(netlink_protocols, tcp->u_arg[2], "NETLINK_???"); 7572394a3d0e5ee5684a42b36218ada2dcf3b4e705fMasatake YAMATO break; 7582394a3d0e5ee5684a42b36218ada2dcf3b4e705fMasatake YAMATO#endif 759c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel#if defined(PF_BLUETOOTH) && defined(HAVE_BLUETOOTH_BLUETOOTH_H) 760c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel case PF_BLUETOOTH: 761c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel printxval(bt_protocols, tcp->u_arg[2], "BTPROTO_???"); 762c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel break; 763c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel#endif 76476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman default: 76576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%lu", tcp->u_arg[2]); 76676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman break; 76776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 76876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 76976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 77076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 77176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 772a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(bind) 77376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 77476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 775894c7e3858ede412e37a1752c716bed7f30a9605Philippe Ombredanne printfd(tcp, tcp->u_arg[0]); 776894c7e3858ede412e37a1752c716bed7f30a9605Philippe Ombredanne tprints(", "); 777f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman printsock(tcp, tcp->u_arg[1], tcp->u_arg[2]); 77876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", %lu", tcp->u_arg[2]); 77976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 78076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 78176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 78276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 783a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(connect) 78476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 78576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return sys_bind(tcp); 78676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 78776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 788a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(listen) 78976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 79076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 791894c7e3858ede412e37a1752c716bed7f30a9605Philippe Ombredanne printfd(tcp, tcp->u_arg[0]); 792894c7e3858ede412e37a1752c716bed7f30a9605Philippe Ombredanne tprints(", "); 793894c7e3858ede412e37a1752c716bed7f30a9605Philippe Ombredanne tprintf("%lu", tcp->u_arg[1]); 79476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 79576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 79676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 79776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 798705ff10c0b9c07b9b51fc2f2bc6f3e6412f6ed9cPaolo Bonzinistatic int 79915114ec215f889b71fd1f9ed2012b8deeb33a55cDmitry V. Levindo_sockname(struct tcb *tcp, int flags_arg) 80076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 80176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 802894c7e3858ede412e37a1752c716bed7f30a9605Philippe Ombredanne printfd(tcp, tcp->u_arg[0]); 803894c7e3858ede412e37a1752c716bed7f30a9605Philippe Ombredanne tprints(", "); 804705ff10c0b9c07b9b51fc2f2bc6f3e6412f6ed9cPaolo Bonzini return 0; 805705ff10c0b9c07b9b51fc2f2bc6f3e6412f6ed9cPaolo Bonzini } 806705ff10c0b9c07b9b51fc2f2bc6f3e6412f6ed9cPaolo Bonzini if (!tcp->u_arg[2]) 80776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%#lx, NULL", tcp->u_arg[1]); 80876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else { 8092fc6615b9137234af661ed15796e021e98e43bf9Dmitry V. Levin int len; 8102fc6615b9137234af661ed15796e021e98e43bf9Dmitry V. Levin if (tcp->u_arg[1] == 0 || syserror(tcp) 811b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko || umove(tcp, tcp->u_arg[2], &len) < 0) { 81276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%#lx", tcp->u_arg[1]); 81376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } else { 8142fc6615b9137234af661ed15796e021e98e43bf9Dmitry V. Levin printsock(tcp, tcp->u_arg[1], len); 81576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 81660fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 8172fc6615b9137234af661ed15796e021e98e43bf9Dmitry V. Levin printnum_int(tcp, tcp->u_arg[2], "%u"); 81876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 819705ff10c0b9c07b9b51fc2f2bc6f3e6412f6ed9cPaolo Bonzini if (flags_arg >= 0) { 82060fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 821705ff10c0b9c07b9b51fc2f2bc6f3e6412f6ed9cPaolo Bonzini printflags(sock_type_flags, tcp->u_arg[flags_arg], 822705ff10c0b9c07b9b51fc2f2bc6f3e6412f6ed9cPaolo Bonzini "SOCK_???"); 823705ff10c0b9c07b9b51fc2f2bc6f3e6412f6ed9cPaolo Bonzini } 82476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 82576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 82676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 827a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(accept) 828705ff10c0b9c07b9b51fc2f2bc6f3e6412f6ed9cPaolo Bonzini{ 82915114ec215f889b71fd1f9ed2012b8deeb33a55cDmitry V. Levin do_sockname(tcp, -1); 83015114ec215f889b71fd1f9ed2012b8deeb33a55cDmitry V. Levin return RVAL_FD; 831705ff10c0b9c07b9b51fc2f2bc6f3e6412f6ed9cPaolo Bonzini} 832705ff10c0b9c07b9b51fc2f2bc6f3e6412f6ed9cPaolo Bonzini 833a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(accept4) 834705ff10c0b9c07b9b51fc2f2bc6f3e6412f6ed9cPaolo Bonzini{ 83515114ec215f889b71fd1f9ed2012b8deeb33a55cDmitry V. Levin do_sockname(tcp, 3); 83615114ec215f889b71fd1f9ed2012b8deeb33a55cDmitry V. Levin return RVAL_FD; 837705ff10c0b9c07b9b51fc2f2bc6f3e6412f6ed9cPaolo Bonzini} 838705ff10c0b9c07b9b51fc2f2bc6f3e6412f6ed9cPaolo Bonzini 839a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(send) 84076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 84176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 842894c7e3858ede412e37a1752c716bed7f30a9605Philippe Ombredanne printfd(tcp, tcp->u_arg[0]); 843894c7e3858ede412e37a1752c716bed7f30a9605Philippe Ombredanne tprints(", "); 84476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printstr(tcp, tcp->u_arg[1], tcp->u_arg[2]); 84576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", %lu, ", tcp->u_arg[2]); 84676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* flags */ 847b2dee13345a62c80a677f3342cd525d611fbc632Roland McGrath printflags(msg_flags, tcp->u_arg[3], "MSG_???"); 84876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 84976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 85076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 85176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 852a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(sendto) 85376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 85476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 855894c7e3858ede412e37a1752c716bed7f30a9605Philippe Ombredanne printfd(tcp, tcp->u_arg[0]); 856894c7e3858ede412e37a1752c716bed7f30a9605Philippe Ombredanne tprints(", "); 85776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printstr(tcp, tcp->u_arg[1], tcp->u_arg[2]); 85876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", %lu, ", tcp->u_arg[2]); 85976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* flags */ 860b2dee13345a62c80a677f3342cd525d611fbc632Roland McGrath printflags(msg_flags, tcp->u_arg[3], "MSG_???"); 86176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* to address */ 86260fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 863f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman printsock(tcp, tcp->u_arg[4], tcp->u_arg[5]); 86476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* to length */ 86576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", %lu", tcp->u_arg[5]); 86676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 86776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 86876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 86976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 87076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef HAVE_SENDMSG 87176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 872a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(sendmsg) 87376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 87476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 875894c7e3858ede412e37a1752c716bed7f30a9605Philippe Ombredanne printfd(tcp, tcp->u_arg[0]); 876894c7e3858ede412e37a1752c716bed7f30a9605Philippe Ombredanne tprints(", "); 877043b5f81429412cf23d578d1dc2b45107a8352e5Dmitry V. Levin printmsghdr(tcp, tcp->u_arg[1], (unsigned long) -1L); 87876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* flags */ 87960fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 880b2dee13345a62c80a677f3342cd525d611fbc632Roland McGrath printflags(msg_flags, tcp->u_arg[2], "MSG_???"); 88176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 88276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 88376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 88476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 885a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(sendmmsg) 8867af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin{ 8877af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin if (entering(tcp)) { 8887af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin /* sockfd */ 889894c7e3858ede412e37a1752c716bed7f30a9605Philippe Ombredanne printfd(tcp, tcp->u_arg[0]); 890894c7e3858ede412e37a1752c716bed7f30a9605Philippe Ombredanne tprints(", "); 8917af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin if (!verbose(tcp)) { 8927af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin tprintf("%#lx, %u, ", 8937af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin tcp->u_arg[1], (unsigned int) tcp->u_arg[2]); 8947af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin printflags(msg_flags, tcp->u_arg[3], "MSG_???"); 8957af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin } 8967af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin } else { 8977af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin if (verbose(tcp)) 8985ea97658e78b6ce9fb768ffdd6a4b682c5df8e90Dmitry V. Levin decode_mmsg(tcp, (unsigned long) -1L); 8997af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin } 9007af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin return 0; 9017af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin} 9027af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin 90376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif /* HAVE_SENDMSG */ 90476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 905a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(recv) 90676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 90776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 908894c7e3858ede412e37a1752c716bed7f30a9605Philippe Ombredanne printfd(tcp, tcp->u_arg[0]); 909894c7e3858ede412e37a1752c716bed7f30a9605Philippe Ombredanne tprints(", "); 91076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } else { 91176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (syserror(tcp)) 91276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%#lx", tcp->u_arg[1]); 91376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else 91476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printstr(tcp, tcp->u_arg[1], tcp->u_rval); 91576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 91676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", %lu, ", tcp->u_arg[2]); 917b2dee13345a62c80a677f3342cd525d611fbc632Roland McGrath printflags(msg_flags, tcp->u_arg[3], "MSG_???"); 91876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 91976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 92076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 92176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 922a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(recvfrom) 92376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 92476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman int fromlen; 92576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 92676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 927894c7e3858ede412e37a1752c716bed7f30a9605Philippe Ombredanne printfd(tcp, tcp->u_arg[0]); 928894c7e3858ede412e37a1752c716bed7f30a9605Philippe Ombredanne tprints(", "); 92976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } else { 93076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (syserror(tcp)) { 93176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%#lx, %lu, %lu, %#lx, %#lx", 93276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tcp->u_arg[1], tcp->u_arg[2], tcp->u_arg[3], 93376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tcp->u_arg[4], tcp->u_arg[5]); 93476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 93576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 93676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* buf */ 93776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printstr(tcp, tcp->u_arg[1], tcp->u_rval); 93876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* len */ 93976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", %lu, ", tcp->u_arg[2]); 94076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* flags */ 941b2dee13345a62c80a677f3342cd525d611fbc632Roland McGrath printflags(msg_flags, tcp->u_arg[3], "MSG_???"); 94276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* from address, len */ 94376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (!tcp->u_arg[4] || !tcp->u_arg[5]) { 94476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (tcp->u_arg[4] == 0) 94560fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", NULL"); 94676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else 94776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", %#lx", tcp->u_arg[4]); 94876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (tcp->u_arg[5] == 0) 94960fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", NULL"); 95076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else 95176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", %#lx", tcp->u_arg[5]); 95276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 95376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 95476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (umove(tcp, tcp->u_arg[5], &fromlen) < 0) { 95560fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", {...}, [?]"); 95676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 95776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 95860fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 959f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman printsock(tcp, tcp->u_arg[4], tcp->u_arg[5]); 96076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* from length */ 96176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", [%u]", fromlen); 96276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 96376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 96476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 96576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 96676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef HAVE_SENDMSG 96776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 968a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(recvmsg) 96976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 97076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 971894c7e3858ede412e37a1752c716bed7f30a9605Philippe Ombredanne printfd(tcp, tcp->u_arg[0]); 972894c7e3858ede412e37a1752c716bed7f30a9605Philippe Ombredanne tprints(", "); 97376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } else { 97400244b94bbfc3edd2ca17c83e879154b6f6708d4Dmitry V. Levin if (syserror(tcp)) 97576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%#lx", tcp->u_arg[1]); 97676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else 977e0bc222263cf47a43e1b26d55edb2ffadc8ccbffDenys Vlasenko printmsghdr(tcp, tcp->u_arg[1], tcp->u_rval); 97876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* flags */ 97960fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 980b2dee13345a62c80a677f3342cd525d611fbc632Roland McGrath printflags(msg_flags, tcp->u_arg[2], "MSG_???"); 98176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 98276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 98376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 98476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 985a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(recvmmsg) 9860873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab{ 987a1d541ec56e2fb4716f083fcc814b1dedde63d87Denys Vlasenko /* +5 chars are for "left " prefix */ 988a1d541ec56e2fb4716f083fcc814b1dedde63d87Denys Vlasenko static char str[5 + TIMESPEC_TEXT_BUFSIZE]; 989e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin 990a1d541ec56e2fb4716f083fcc814b1dedde63d87Denys Vlasenko if (entering(tcp)) { 991894c7e3858ede412e37a1752c716bed7f30a9605Philippe Ombredanne printfd(tcp, tcp->u_arg[0]); 992894c7e3858ede412e37a1752c716bed7f30a9605Philippe Ombredanne tprints(", "); 993e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin if (verbose(tcp)) { 994e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin sprint_timespec(str, tcp, tcp->u_arg[4]); 995a1d541ec56e2fb4716f083fcc814b1dedde63d87Denys Vlasenko /* Abusing tcp->auxstr as temp storage. 996a1d541ec56e2fb4716f083fcc814b1dedde63d87Denys Vlasenko * Will be used and freed on syscall exit. 997a1d541ec56e2fb4716f083fcc814b1dedde63d87Denys Vlasenko */ 998e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin tcp->auxstr = strdup(str); 999e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin } else { 1000e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin tprintf("%#lx, %ld, ", tcp->u_arg[1], tcp->u_arg[2]); 1001e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin printflags(msg_flags, tcp->u_arg[3], "MSG_???"); 100260fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 1003e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin print_timespec(tcp, tcp->u_arg[4]); 1004e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin } 1005e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin return 0; 1006e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin } else { 1007e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin if (verbose(tcp)) { 10085ea97658e78b6ce9fb768ffdd6a4b682c5df8e90Dmitry V. Levin decode_mmsg(tcp, 0); 1009e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin /* timeout on entrance */ 1010e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin tprintf(", %s", tcp->auxstr ? tcp->auxstr : "{...}"); 1011e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin free((void *) tcp->auxstr); 1012e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin tcp->auxstr = NULL; 1013e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin } 1014e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin if (syserror(tcp)) 1015e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin return 0; 1016e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin if (tcp->u_rval == 0) { 1017e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin tcp->auxstr = "Timeout"; 1018e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin return RVAL_STR; 1019e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin } 1020e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin if (!verbose(tcp)) 1021e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin return 0; 1022e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin /* timeout on exit */ 1023a1d541ec56e2fb4716f083fcc814b1dedde63d87Denys Vlasenko sprint_timespec(stpcpy(str, "left "), tcp, tcp->u_arg[4]); 1024e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin tcp->auxstr = str; 1025e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin return RVAL_STR; 10260873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab } 10270873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab} 10280873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab 102976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif /* HAVE_SENDMSG */ 103076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 10310ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/shutdown_modes.h" 10329cd385010ec1e0d22be70ff5163db194f1f22735Sebastian Pipping 1033a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(shutdown) 103476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 103576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 1036894c7e3858ede412e37a1752c716bed7f30a9605Philippe Ombredanne printfd(tcp, tcp->u_arg[0]); 1037894c7e3858ede412e37a1752c716bed7f30a9605Philippe Ombredanne tprints(", "); 10389cd385010ec1e0d22be70ff5163db194f1f22735Sebastian Pipping printxval(shutdown_modes, tcp->u_arg[1], "SHUT_???"); 103976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 104076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 104176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 104276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 1043a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(getsockname) 104476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 104515114ec215f889b71fd1f9ed2012b8deeb33a55cDmitry V. Levin return do_sockname(tcp, -1); 104676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 104776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 10484371b10b30ceb369942e93105c038519524ba18eDmitry V. Levinstatic int 10494371b10b30ceb369942e93105c038519524ba18eDmitry V. Levindo_pipe(struct tcb *tcp, int flags_arg) 10504371b10b30ceb369942e93105c038519524ba18eDmitry V. Levin{ 105176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (exiting(tcp)) { 105276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (syserror(tcp)) { 105376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%#lx", tcp->u_arg[0]); 10544371b10b30ceb369942e93105c038519524ba18eDmitry V. Levin } else { 105578ed3f3558942b7c042aeb84ee0f4a2dccf64791Dmitry V. Levin#ifdef HAVE_GETRVAL2 105678ed3f3558942b7c042aeb84ee0f4a2dccf64791Dmitry V. Levin if (flags_arg < 0) { 105778ed3f3558942b7c042aeb84ee0f4a2dccf64791Dmitry V. Levin tprintf("[%lu, %lu]", tcp->u_rval, getrval2(tcp)); 105878ed3f3558942b7c042aeb84ee0f4a2dccf64791Dmitry V. Levin } else 105976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif 106078ed3f3558942b7c042aeb84ee0f4a2dccf64791Dmitry V. Levin { 106178ed3f3558942b7c042aeb84ee0f4a2dccf64791Dmitry V. Levin int fds[2]; 106278ed3f3558942b7c042aeb84ee0f4a2dccf64791Dmitry V. Levin 106378ed3f3558942b7c042aeb84ee0f4a2dccf64791Dmitry V. Levin if (umove(tcp, tcp->u_arg[0], &fds) < 0) 106478ed3f3558942b7c042aeb84ee0f4a2dccf64791Dmitry V. Levin tprintf("%#lx", tcp->u_arg[0]); 106578ed3f3558942b7c042aeb84ee0f4a2dccf64791Dmitry V. Levin else 106678ed3f3558942b7c042aeb84ee0f4a2dccf64791Dmitry V. Levin tprintf("[%u, %u]", fds[0], fds[1]); 106778ed3f3558942b7c042aeb84ee0f4a2dccf64791Dmitry V. Levin } 10684371b10b30ceb369942e93105c038519524ba18eDmitry V. Levin } 10694371b10b30ceb369942e93105c038519524ba18eDmitry V. Levin if (flags_arg >= 0) { 107060fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 10714371b10b30ceb369942e93105c038519524ba18eDmitry V. Levin printflags(open_mode_flags, tcp->u_arg[flags_arg], "O_???"); 10724371b10b30ceb369942e93105c038519524ba18eDmitry V. Levin } 10734371b10b30ceb369942e93105c038519524ba18eDmitry V. Levin } 107476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 107576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 107676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 1077a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(pipe) 10784371b10b30ceb369942e93105c038519524ba18eDmitry V. Levin{ 10794371b10b30ceb369942e93105c038519524ba18eDmitry V. Levin return do_pipe(tcp, -1); 10804371b10b30ceb369942e93105c038519524ba18eDmitry V. Levin} 10814371b10b30ceb369942e93105c038519524ba18eDmitry V. Levin 1082a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(pipe2) 10834371b10b30ceb369942e93105c038519524ba18eDmitry V. Levin{ 10844371b10b30ceb369942e93105c038519524ba18eDmitry V. Levin return do_pipe(tcp, 1); 10854371b10b30ceb369942e93105c038519524ba18eDmitry V. Levin} 10864371b10b30ceb369942e93105c038519524ba18eDmitry V. Levin 1087a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(socketpair) 108876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 108976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman int fds[2]; 109076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 109176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 109276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printxval(domains, tcp->u_arg[0], "PF_???"); 109360fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 10941e42f2dbe721f7cb1e4bdfc9103bf358b4a443c1Dmitry V. Levin tprint_sock_type(tcp->u_arg[1]); 1095033fb910a291a26d714d277c748683e67903f44cDmitry V. Levin tprintf(", %lu", tcp->u_arg[2]); 109676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } else { 109776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (syserror(tcp)) { 10982e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman tprintf(", %#lx", tcp->u_arg[3]); 109976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 110076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 11017e69ed98cdd3c8ee0bba783927bc95b895c60160Denys Vlasenko if (umoven(tcp, tcp->u_arg[3], sizeof fds, fds) < 0) 110260fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", [...]"); 110376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else 110476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", [%u, %u]", fds[0], fds[1]); 110576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 110676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 110776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 110876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 11096d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#include "xlat/sockoptions.h" 11106d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#include "xlat/sockipoptions.h" 11116d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#include "xlat/sockipv6options.h" 11126d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#include "xlat/sockipxoptions.h" 11136d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#include "xlat/sockrawoptions.h" 11146d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#include "xlat/sockpacketoptions.h" 11156d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#include "xlat/socksctpoptions.h" 11166d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#include "xlat/socktcpoptions.h" 11176d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin 11180509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levinstatic void 11190509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levinprint_sockopt_fd_level_name(struct tcb *tcp, int fd, int level, int name) 112076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 11210509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin printfd(tcp, fd); 11220509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin tprints(", "); 11230509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin printxval(socketlayers, level, "SOL_??"); 11240509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin tprints(", "); 11250509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin 11260509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin switch (level) { 11270509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin case SOL_SOCKET: 11280509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin printxval(sockoptions, name, "SO_???"); 11290509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin break; 11300509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin case SOL_IP: 11310509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin printxval(sockipoptions, name, "IP_???"); 11320509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin break; 11330509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin case SOL_IPV6: 11340509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin printxval(sockipv6options, name, "IPV6_???"); 11350509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin break; 11360509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin case SOL_IPX: 11370509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin printxval(sockipxoptions, name, "IPX_???"); 11380509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin break; 11390509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin case SOL_PACKET: 11400509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin printxval(sockpacketoptions, name, "PACKET_???"); 11410509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin break; 11420509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin case SOL_TCP: 11430509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin printxval(socktcpoptions, name, "TCP_???"); 11440509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin break; 11450509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin case SOL_SCTP: 11460509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin printxval(socksctpoptions, name, "SCTP_???"); 11470509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin break; 11480509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin case SOL_RAW: 11490509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin printxval(sockrawoptions, name, "RAW_???"); 11500509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin break; 115176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 11520509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin /* Other SOL_* protocol levels still need work. */ 11530509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin 11540509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin default: 11550509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin tprintf("%u", name); 11560509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } 11570509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin 11580509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin tprints(", "); 11590509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin} 116093f7fccaa60735509fd75ad22c8a97a8cd52f6bbJohn Hughes 116193f7fccaa60735509fd75ad22c8a97a8cd52f6bbJohn Hughes#ifdef SO_LINGER 11620509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levinstatic void 11630509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levinprint_linger(struct tcb *tcp, long addr, int len) 11640509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin{ 11650509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin struct linger linger; 11660509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin 11670509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin if (len != sizeof(linger) || 11680509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin umove(tcp, addr, &linger) < 0) { 11690509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin tprintf("%#lx", addr); 11700509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin return; 11710509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } 11720509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin 11730509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin tprintf("{onoff=%d, linger=%d}", 11740509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin linger.l_onoff, 11750509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin linger.l_linger); 11760509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin} 11770509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin#endif /* SO_LINGER */ 11780509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin 11790ddd8addef9e9b0c7af00f70b97b3e464205ad1dDmitry V. Levin#ifdef SO_PEERCRED 11800509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levinstatic void 11810509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levinprint_ucred(struct tcb *tcp, long addr, int len) 11820509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin{ 11830509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin struct ucred uc; 11840509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin 11850509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin if (len != sizeof(uc) || 11860509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin umove(tcp, addr, &uc) < 0) { 11870509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin tprintf("%#lx", addr); 11880509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } else { 11890509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin tprintf("{pid=%u, uid=%u, gid=%u}", 11900509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin (unsigned) uc.pid, 11910509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin (unsigned) uc.uid, 11920509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin (unsigned) uc.gid); 11930509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } 11940509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin} 11950509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin#endif /* SO_PEERCRED */ 11960509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin 1197ca75bd6dffc01e4d95e85d3af82d446cd80afbb5Dmitry V. Levin#ifdef PACKET_STATISTICS 11980509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levinstatic void 11990509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levinprint_tpacket_stats(struct tcb *tcp, long addr, int len) 12000509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin{ 12010509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin struct tpacket_stats stats; 120293f7fccaa60735509fd75ad22c8a97a8cd52f6bbJohn Hughes 12030509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin if (len != sizeof(stats) || 12040509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin umove(tcp, addr, &stats) < 0) { 12050509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin tprintf("%#lx", addr); 12060509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } else { 12070509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin tprintf("{packets=%u, drops=%u}", 12080509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin stats.tp_packets, 12090509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin stats.tp_drops); 121076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 121176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 12120509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin#endif /* PACKET_STATISTICS */ 121376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 12140509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin#ifdef ICMP_FILTER 12156d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin# include "xlat/icmpfilterflags.h" 12166d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin 12170509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levinstatic void 12180509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levinprint_icmp_filter(struct tcb *tcp, long addr, int len) 12197987cdf192632516d6ba493b0a9943f5a3a7c362Wichert Akkerman{ 12207987cdf192632516d6ba493b0a9943f5a3a7c362Wichert Akkerman struct icmp_filter filter; 12217987cdf192632516d6ba493b0a9943f5a3a7c362Wichert Akkerman 12220509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin if (len != sizeof(filter) || 12230509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin umove(tcp, addr, &filter) < 0) { 12247987cdf192632516d6ba493b0a9943f5a3a7c362Wichert Akkerman tprintf("%#lx", addr); 12257987cdf192632516d6ba493b0a9943f5a3a7c362Wichert Akkerman return; 12267987cdf192632516d6ba493b0a9943f5a3a7c362Wichert Akkerman } 12277987cdf192632516d6ba493b0a9943f5a3a7c362Wichert Akkerman 122860fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("~("); 1229b2dee13345a62c80a677f3342cd525d611fbc632Roland McGrath printflags(icmpfilterflags, ~filter.data, "ICMP_???"); 123060fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(")"); 12317987cdf192632516d6ba493b0a9943f5a3a7c362Wichert Akkerman} 12327987cdf192632516d6ba493b0a9943f5a3a7c362Wichert Akkerman#endif /* ICMP_FILTER */ 12337987cdf192632516d6ba493b0a9943f5a3a7c362Wichert Akkerman 12340509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levinstatic void 12350509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levinprint_getsockopt(struct tcb *tcp, int level, int name, long addr, int len) 123676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 12370509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin if (addr && verbose(tcp)) 123838ae88d332acd9f86a30d58158e306d795d98977John Hughes switch (level) { 1239989ebc91395600c21b4242aee27df9190b2166b3Denys Vlasenko case SOL_SOCKET: 124038ae88d332acd9f86a30d58158e306d795d98977John Hughes switch (name) { 12410509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin#ifdef SO_LINGER 1242989ebc91395600c21b4242aee27df9190b2166b3Denys Vlasenko case SO_LINGER: 12430509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin print_linger(tcp, addr, len); 12440509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin goto done; 12450509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin#endif 12460509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin#ifdef SO_PEERCRED 12470509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin case SO_PEERCRED: 12480509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin print_ucred(tcp, addr, len); 12490509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin goto done; 125038ae88d332acd9f86a30d58158e306d795d98977John Hughes#endif 125138ae88d332acd9f86a30d58158e306d795d98977John Hughes } 125238ae88d332acd9f86a30d58158e306d795d98977John Hughes break; 12530509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin 12540509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin case SOL_PACKET: 12550509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin switch (name) { 12566d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifdef PACKET_STATISTICS 12570509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin case PACKET_STATISTICS: 12580509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin print_tpacket_stats(tcp, addr, len); 12590509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin goto done; 12606d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif 12610509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } 126238ae88d332acd9f86a30d58158e306d795d98977John Hughes break; 12630509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin 12640509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin case SOL_RAW: 12650509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin switch (name) { 12666d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifdef ICMP_FILTER 12670509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin case ICMP_FILTER: 12680509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin print_icmp_filter(tcp, addr, len); 12690509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin goto done; 12706d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif 12710509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } 12724f6ba69d99a8b6933707abdeb0151f98c28172c9Roland McGrath break; 12730509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } 12740509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin 12750509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin /* default arg printing */ 12760509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin 12770509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin if (verbose(tcp)) { 12780509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin if (len == sizeof(int)) { 12790509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin printnum_int(tcp, addr, "%d"); 12800509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } else { 12810509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin printstr(tcp, addr, len); 12820509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } 12830509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } else { 12840509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin tprintf("%#lx", addr); 12850509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } 12860509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levindone: 12870509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin tprintf(", [%d]", len); 12880509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin} 12890509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin 1290a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(getsockopt) 12910509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin{ 12920509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin if (entering(tcp)) { 12930509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin print_sockopt_fd_level_name(tcp, tcp->u_arg[0], 12940509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin tcp->u_arg[1], tcp->u_arg[2]); 12950509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } else { 12960509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin int len; 12970509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin 12980509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin if (syserror(tcp) || umove(tcp, tcp->u_arg[4], &len) < 0) { 12990509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin tprintf("%#lx, %#lx", 13000509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin tcp->u_arg[3], tcp->u_arg[4]); 13010509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } else { 13020509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin print_getsockopt(tcp, tcp->u_arg[1], tcp->u_arg[2], 13030509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin tcp->u_arg[3], len); 13040509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } 13050509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } 13060509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin return 0; 13070509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin} 13080509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin 1309a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin#ifdef MCAST_JOIN_GROUP 1310a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levinstatic void 1311a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levinprint_group_req(struct tcb *tcp, long addr, int len) 1312a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin{ 1313a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin struct group_req greq; 1314a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin 1315a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin if (len != sizeof(greq) || 1316a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin umove(tcp, addr, &greq) < 0) { 1317a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin tprintf("%#lx", addr); 1318a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin return; 1319a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin } 1320a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin 1321a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin union { 1322a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin struct sockaddr *sa; 1323a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin struct sockaddr_in *sin; 1324a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin#ifdef HAVE_INET_NTOP 1325a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin struct sockaddr_in6 *sin6; 1326a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin#endif 1327a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin } a = { .sa = (struct sockaddr *) &greq.gr_group }; 1328a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin#ifdef HAVE_INET_NTOP 1329a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin char str[INET6_ADDRSTRLEN]; 1330a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin#endif 1331a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin 1332a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin tprintf("{gr_interface=%u, gr_group={sa_family=", greq.gr_interface); 1333a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin printxval(addrfams, a.sa->sa_family, "AF_???"); 1334a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin 1335a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin switch (a.sa->sa_family) { 1336a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin case AF_INET: 1337a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin tprintf(", sin_port=htons(%u), sin_addr=inet_addr(\"%s\")}}", 1338a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin ntohs(a.sin->sin_port), 1339a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin inet_ntoa(a.sin->sin_addr)); 1340a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin return; 1341a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin#ifdef HAVE_INET_NTOP 1342a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin case AF_INET6: 1343a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin if (!inet_ntop(AF_INET6, &a.sin6->sin6_addr, str, sizeof(str))) 1344a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin break; 1345a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin tprintf(", sin6_port=htons(%u)" 1346a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin ", inet_pton(AF_INET6, \"%s\", &sin6_addr)}}", 1347a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin ntohs(a.sin6->sin6_port), str); 1348a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin return; 1349a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin#endif /* HAVE_INET_NTOP */ 1350a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin } 1351a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin 1352a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin tprints(", sa_data="); 1353a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin print_quoted_string(a.sa->sa_data, sizeof(a.sa->sa_data), 0); 1354a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin tprintf("}}"); 1355a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin 1356a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin} 1357a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin#endif /* MCAST_JOIN_GROUP */ 1358a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin 13590509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin#ifdef PACKET_RX_RING 13600509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levinstatic void 13610509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levinprint_tpacket_req(struct tcb *tcp, long addr, int len) 13620509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin{ 13630509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin struct tpacket_req req; 13640509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin 13650509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin if (len != sizeof(req) || 13660509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin umove(tcp, addr, &req) < 0) { 13670509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin tprintf("%#lx", addr); 13680509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } else { 13690509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin tprintf("{block_size=%u, block_nr=%u, " 13700509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin "frame_size=%u, frame_nr=%u}", 13710509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin req.tp_block_size, 13720509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin req.tp_block_nr, 13730509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin req.tp_frame_size, 13740509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin req.tp_frame_nr); 13750509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } 13760509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin} 13770509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin#endif /* PACKET_RX_RING */ 13780509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin 137902f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin#ifdef PACKET_ADD_MEMBERSHIP 138002f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin# include "xlat/packet_mreq_type.h" 138102f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin 138202f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levinstatic void 138302f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levinprint_packet_mreq(struct tcb *tcp, long addr, int len) 138402f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin{ 138502f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin struct packet_mreq mreq; 138602f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin 138702f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin if (len != sizeof(mreq) || 138802f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin umove(tcp, addr, &mreq) < 0) { 138902f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin tprintf("%#lx", addr); 139002f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin } else { 139102f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin unsigned int i; 139202f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin 139302f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin tprintf("{mr_ifindex=%u, mr_type=", mreq.mr_ifindex); 139402f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin printxval(packet_mreq_type, mreq.mr_type, "PACKET_MR_???"); 139502f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin tprintf(", mr_alen=%u, mr_address=", mreq.mr_alen); 139602f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin if (mreq.mr_alen > ARRAY_SIZE(mreq.mr_address)) 139702f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin mreq.mr_alen = ARRAY_SIZE(mreq.mr_address); 139802f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin for (i = 0; i < mreq.mr_alen; ++i) 139902f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin tprintf("%02x", mreq.mr_address[i]); 140002f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin tprints("}"); 140102f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin } 140202f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin} 140302f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin#endif /* PACKET_ADD_MEMBERSHIP */ 140402f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin 14050509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levinstatic void 14060509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levinprint_setsockopt(struct tcb *tcp, int level, int name, long addr, int len) 14070509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin{ 14080509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin if (addr && verbose(tcp)) 14090509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin switch (level) { 14100509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin case SOL_SOCKET: 14110509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin switch (name) { 14120509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin#ifdef SO_LINGER 14130509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin case SO_LINGER: 14140509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin print_linger(tcp, addr, len); 14150509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin goto done; 14164f6ba69d99a8b6933707abdeb0151f98c28172c9Roland McGrath#endif 14170509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } 141838ae88d332acd9f86a30d58158e306d795d98977John Hughes break; 14190509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin 1420a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin case SOL_IP: 1421a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin switch (name) { 1422a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin#ifdef MCAST_JOIN_GROUP 1423a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin case MCAST_JOIN_GROUP: 1424a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin case MCAST_LEAVE_GROUP: 1425a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin print_group_req(tcp, addr, len); 1426a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin goto done; 1427a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin#endif /* MCAST_JOIN_GROUP */ 1428a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin } 14293910d0f67caccf421c72a19026d89115000ebefdDmitry V. Levin break; 1430a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin 1431989ebc91395600c21b4242aee27df9190b2166b3Denys Vlasenko case SOL_PACKET: 1432ca75bd6dffc01e4d95e85d3af82d446cd80afbb5Dmitry V. Levin switch (name) { 14336d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifdef PACKET_RX_RING 1434989ebc91395600c21b4242aee27df9190b2166b3Denys Vlasenko case PACKET_RX_RING: 14356d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin# ifdef PACKET_TX_RING 1436989ebc91395600c21b4242aee27df9190b2166b3Denys Vlasenko case PACKET_TX_RING: 14376d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin# endif 14380509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin print_tpacket_req(tcp, addr, len); 14390509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin goto done; 14406d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif /* PACKET_RX_RING */ 14416d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifdef PACKET_ADD_MEMBERSHIP 144202f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin case PACKET_ADD_MEMBERSHIP: 144302f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin case PACKET_DROP_MEMBERSHIP: 144402f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin print_packet_mreq(tcp, addr, len); 144502f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin goto done; 14466d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif /* PACKET_ADD_MEMBERSHIP */ 1447ca75bd6dffc01e4d95e85d3af82d446cd80afbb5Dmitry V. Levin } 144838ae88d332acd9f86a30d58158e306d795d98977John Hughes break; 14490509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin 1450989ebc91395600c21b4242aee27df9190b2166b3Denys Vlasenko case SOL_RAW: 145138ae88d332acd9f86a30d58158e306d795d98977John Hughes switch (name) { 14526d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifdef ICMP_FILTER 14530509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin case ICMP_FILTER: 14540509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin print_icmp_filter(tcp, addr, len); 14550509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin goto done; 14566d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif 145738ae88d332acd9f86a30d58158e306d795d98977John Hughes } 145838ae88d332acd9f86a30d58158e306d795d98977John Hughes break; 145938ae88d332acd9f86a30d58158e306d795d98977John Hughes } 146093f7fccaa60735509fd75ad22c8a97a8cd52f6bbJohn Hughes 146138ae88d332acd9f86a30d58158e306d795d98977John Hughes /* default arg printing */ 146293f7fccaa60735509fd75ad22c8a97a8cd52f6bbJohn Hughes 14630509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin if (verbose(tcp)) { 14640509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin if (len == sizeof(int)) { 14650509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin printnum_int(tcp, addr, "%d"); 14660509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } else { 14670509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin printstr(tcp, addr, len); 14680509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } 14690509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } else { 14700509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin tprintf("%#lx", addr); 147138ae88d332acd9f86a30d58158e306d795d98977John Hughes } 14720509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levindone: 14730509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin tprintf(", %d", len); 147438ae88d332acd9f86a30d58158e306d795d98977John Hughes} 147538ae88d332acd9f86a30d58158e306d795d98977John Hughes 1476a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(setsockopt) 147738ae88d332acd9f86a30d58158e306d795d98977John Hughes{ 147838ae88d332acd9f86a30d58158e306d795d98977John Hughes if (entering(tcp)) { 14790509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin print_sockopt_fd_level_name(tcp, tcp->u_arg[0], 14800509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin tcp->u_arg[1], tcp->u_arg[2]); 14810509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin print_setsockopt(tcp, tcp->u_arg[1], tcp->u_arg[2], 14820509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin tcp->u_arg[3], tcp->u_arg[4]); 148376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 148476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 148576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 1486