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 5554646b8e057443f0b76afe9a231eae63afbf5d5aMike Frysinger#if defined(HAVE_LINUX_IP_VS_H) 5654646b8e057443f0b76afe9a231eae63afbf5d5aMike Frysinger# include <linux/ip_vs.h> 5754646b8e057443f0b76afe9a231eae63afbf5d5aMike Frysinger#endif 58f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#if defined(HAVE_LINUX_NETLINK_H) 59a6d91ded3f2d5401e09a9c2fa442aabfbfe593a8Denys Vlasenko# include <linux/netlink.h> 60f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#endif 6154646b8e057443f0b76afe9a231eae63afbf5d5aMike Frysinger#if defined(HAVE_LINUX_NETFILTER_ARP_ARP_TABLES_H) 6254646b8e057443f0b76afe9a231eae63afbf5d5aMike Frysinger# include <linux/netfilter_arp/arp_tables.h> 6354646b8e057443f0b76afe9a231eae63afbf5d5aMike Frysinger#endif 6454646b8e057443f0b76afe9a231eae63afbf5d5aMike Frysinger#if defined(HAVE_LINUX_NETFILTER_BRIDGE_EBTABLES_H) 6554646b8e057443f0b76afe9a231eae63afbf5d5aMike Frysinger# include <linux/netfilter_bridge/ebtables.h> 6654646b8e057443f0b76afe9a231eae63afbf5d5aMike Frysinger#endif 6754646b8e057443f0b76afe9a231eae63afbf5d5aMike Frysinger#if defined(HAVE_LINUX_NETFILTER_IPV4_IP_TABLES_H) 6854646b8e057443f0b76afe9a231eae63afbf5d5aMike Frysinger# include <linux/netfilter_ipv4/ip_tables.h> 6954646b8e057443f0b76afe9a231eae63afbf5d5aMike Frysinger#endif 7054646b8e057443f0b76afe9a231eae63afbf5d5aMike Frysinger#if defined(HAVE_LINUX_NETFILTER_IPV6_IP6_TABLES_H) 7154646b8e057443f0b76afe9a231eae63afbf5d5aMike Frysinger# include <linux/netfilter_ipv6/ip6_tables.h> 7254646b8e057443f0b76afe9a231eae63afbf5d5aMike Frysinger#endif 73f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#if defined(HAVE_LINUX_IF_PACKET_H) 74a6d91ded3f2d5401e09a9c2fa442aabfbfe593a8Denys Vlasenko# include <linux/if_packet.h> 75f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#endif 767987cdf192632516d6ba493b0a9943f5a3a7c362Wichert Akkerman#if defined(HAVE_LINUX_ICMP_H) 77a6d91ded3f2d5401e09a9c2fa442aabfbfe593a8Denys Vlasenko# include <linux/icmp.h> 787987cdf192632516d6ba493b0a9943f5a3a7c362Wichert Akkerman#endif 79c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel#ifdef HAVE_BLUETOOTH_BLUETOOTH_H 80c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel# include <bluetooth/bluetooth.h> 81c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel# include <bluetooth/hci.h> 82c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel# include <bluetooth/l2cap.h> 83c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel# include <bluetooth/rfcomm.h> 84c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel# include <bluetooth/sco.h> 85c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel#endif 8676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifndef PF_UNSPEC 87a6d91ded3f2d5401e09a9c2fa442aabfbfe593a8Denys Vlasenko# define PF_UNSPEC AF_UNSPEC 8876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif 8976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 900ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/domains.h" 910ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/addrfams.h" 920ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/socktypes.h" 930ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/sock_type_flags.h" 948a550d729d53f963452d10990cd56d1132cb1602Dmitry V. Levin#ifndef SOCK_TYPE_MASK 958a550d729d53f963452d10990cd56d1132cb1602Dmitry V. Levin# define SOCK_TYPE_MASK 0xf 968a550d729d53f963452d10990cd56d1132cb1602Dmitry V. Levin#endif 976d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin 980ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/socketlayers.h" 996d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin 1000ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/inet_protocols.h" 1012394a3d0e5ee5684a42b36218ada2dcf3b4e705fMasatake YAMATO 1022394a3d0e5ee5684a42b36218ada2dcf3b4e705fMasatake YAMATO#ifdef PF_NETLINK 103d9f7e7a4392a5fb38b3c60825fedddb28f30572fDmitry V. Levin# if !defined NETLINK_SOCK_DIAG && defined NETLINK_INET_DIAG 104d9f7e7a4392a5fb38b3c60825fedddb28f30572fDmitry V. Levin# define NETLINK_SOCK_DIAG NETLINK_INET_DIAG 105d9f7e7a4392a5fb38b3c60825fedddb28f30572fDmitry V. Levin# endif 106d9f7e7a4392a5fb38b3c60825fedddb28f30572fDmitry V. Levin# include "xlat/netlink_protocols.h" 1072394a3d0e5ee5684a42b36218ada2dcf3b4e705fMasatake YAMATO#endif 1082394a3d0e5ee5684a42b36218ada2dcf3b4e705fMasatake YAMATO 109c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel#if defined(HAVE_BLUETOOTH_BLUETOOTH_H) 110c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel# include "xlat/bt_protocols.h" 111c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel#endif 112c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel 1130ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/msg_flags.h" 1147987cdf192632516d6ba493b0a9943f5a3a7c362Wichert Akkerman 115b0c598ff8d03a57627a5335448a8a60f0950f4f7Wichert Akkerman#if defined(AF_PACKET) /* from e.g. linux/if_packet.h */ 1166d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin# include "xlat/af_packet_types.h" 1176d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif 118b0c598ff8d03a57627a5335448a8a60f0950f4f7Wichert Akkerman 119ae28093c650f8ee4709c1a22ff365201e2fe809aDmitry V. Levinstatic void 120ae28093c650f8ee4709c1a22ff365201e2fe809aDmitry V. Levinprint_ifindex(unsigned int ifindex) 121ae28093c650f8ee4709c1a22ff365201e2fe809aDmitry V. Levin{ 122ae28093c650f8ee4709c1a22ff365201e2fe809aDmitry V. Levin#ifdef HAVE_IF_INDEXTONAME 123ae28093c650f8ee4709c1a22ff365201e2fe809aDmitry V. Levin char buf[IFNAMSIZ + 1]; 124ae28093c650f8ee4709c1a22ff365201e2fe809aDmitry V. Levin 125ae28093c650f8ee4709c1a22ff365201e2fe809aDmitry V. Levin if (if_indextoname(ifindex, buf)) { 126ae28093c650f8ee4709c1a22ff365201e2fe809aDmitry V. Levin tprints("if_nametoindex("); 127ae28093c650f8ee4709c1a22ff365201e2fe809aDmitry V. Levin print_quoted_string(buf, sizeof(buf), QUOTE_0_TERMINATED); 128ae28093c650f8ee4709c1a22ff365201e2fe809aDmitry V. Levin tprints(")"); 129ae28093c650f8ee4709c1a22ff365201e2fe809aDmitry V. Levin return; 130ae28093c650f8ee4709c1a22ff365201e2fe809aDmitry V. Levin } 131ae28093c650f8ee4709c1a22ff365201e2fe809aDmitry V. Levin#endif 132ae28093c650f8ee4709c1a22ff365201e2fe809aDmitry V. Levin tprintf("%u", ifindex); 133ae28093c650f8ee4709c1a22ff365201e2fe809aDmitry V. Levin} 134ae28093c650f8ee4709c1a22ff365201e2fe809aDmitry V. Levin 1351019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levintypedef union { 1361019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin char pad[128]; 1371019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin struct sockaddr sa; 1381019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin struct sockaddr_in sin; 1391019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin struct sockaddr_un sau; 1409ce1a63eb20b069607c06f9645ac5a17b418a5f3Wichert Akkerman#ifdef HAVE_INET_NTOP 1411019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin struct sockaddr_in6 sa6; 1429ce1a63eb20b069607c06f9645ac5a17b418a5f3Wichert Akkerman#endif 1438470374cba7df0e70653d95c4f336a4082c68d82Denys Vlasenko#if defined(AF_IPX) 1441019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin struct sockaddr_ipx sipx; 145f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#endif 146f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#ifdef AF_PACKET 1471019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin struct sockaddr_ll ll; 14876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif 149f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#ifdef AF_NETLINK 1501019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin struct sockaddr_nl nl; 151f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#endif 152c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel#ifdef HAVE_BLUETOOTH_BLUETOOTH_H 1531019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin struct sockaddr_hci hci; 1541019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin struct sockaddr_l2 l2; 1551019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin struct sockaddr_rc rc; 1561019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin struct sockaddr_sco sco; 157c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel#endif 1581019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin} sockaddr_buf_t; 159f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman 1601019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levinstatic void 1611019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levinprint_sockaddr(struct tcb *tcp, const sockaddr_buf_t *addr, const int addrlen) 1621019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin{ 16360fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("{sa_family="); 1641019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin printxval(addrfams, addr->sa.sa_family, "AF_???"); 16560fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 166f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman 1671019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin switch (addr->sa.sa_family) { 16876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case AF_UNIX: 169b6c32f4598b84364472bc3febcb80ff3e475def8Dmitry V. Levin if (addrlen == 2) { 17060fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("NULL"); 1711019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin } else if (addr->sau.sun_path[0]) { 172c86340e171ebbb4b11e986d172e9b27535ae1807Dmitry V. Levin tprints("sun_path="); 1731019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin print_quoted_string(addr->sau.sun_path, 1741019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin sizeof(addr->sau.sun_path) + 1, 175d9177dfc12f82a9238bf71e85d07d41346c5e5e8Dmitry V. Levin QUOTE_0_TERMINATED); 176f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman } else { 177c86340e171ebbb4b11e986d172e9b27535ae1807Dmitry V. Levin tprints("sun_path=@"); 1781019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin print_quoted_string(addr->sau.sun_path + 1, 1791019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin sizeof(addr->sau.sun_path), 180d9177dfc12f82a9238bf71e85d07d41346c5e5e8Dmitry V. Levin QUOTE_0_TERMINATED); 181f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman } 18276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman break; 18376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case AF_INET: 1841fcb1d64ed13836334d100af9412f220efa1bbfaJohn Hughes tprintf("sin_port=htons(%u), sin_addr=inet_addr(\"%s\")", 1851019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin ntohs(addr->sin.sin_port), inet_ntoa(addr->sin.sin_addr)); 18676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman break; 1879ce1a63eb20b069607c06f9645ac5a17b418a5f3Wichert Akkerman#ifdef HAVE_INET_NTOP 1889ce1a63eb20b069607c06f9645ac5a17b418a5f3Wichert Akkerman case AF_INET6: 1891019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin { 1901019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin char string_addr[100]; 1911019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin inet_ntop(AF_INET6, &addr->sa6.sin6_addr, 1921019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin string_addr, sizeof(string_addr)); 1931019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin tprintf("sin6_port=htons(%u), inet_pton(AF_INET6" 1941019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin ", \"%s\", &sin6_addr), sin6_flowinfo=%u", 1951019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin ntohs(addr->sa6.sin6_port), string_addr, 1961019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin addr->sa6.sin6_flowinfo); 1971019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin# ifdef HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID 1981019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin tprints(", sin6_scope_id="); 1991019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin# if defined IN6_IS_ADDR_LINKLOCAL && defined IN6_IS_ADDR_MC_LINKLOCAL 2001019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin if (IN6_IS_ADDR_LINKLOCAL(&addr->sa6.sin6_addr) 2011019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin || IN6_IS_ADDR_MC_LINKLOCAL(&addr->sa6.sin6_addr)) 2021019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin print_ifindex(addr->sa6.sin6_scope_id); 2031019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin else 2041019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin# endif 2051019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin tprintf("%u", addr->sa6.sin6_scope_id); 2061019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin# endif /* HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID */ 2071019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin } 208b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko break; 2099ce1a63eb20b069607c06f9645ac5a17b418a5f3Wichert Akkerman#endif 2108470374cba7df0e70653d95c4f336a4082c68d82Denys Vlasenko#if defined(AF_IPX) 21176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case AF_IPX: 212f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman { 21376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman int i; 2141fcb1d64ed13836334d100af9412f220efa1bbfaJohn Hughes tprintf("sipx_port=htons(%u), ", 2151019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin ntohs(addr->sipx.sipx_port)); 21676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* Yes, I know, this does not look too 21776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * strace-ish, but otherwise the IPX 21876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * addresses just look monstrous... 21976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * Anyways, feel free if you don't like 2206d2b34971b33d379c89c36c5ad1b0c6d5d12c453Roland McGrath * this way.. :) 22176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman */ 2221019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin tprintf("%08lx:", (unsigned long)ntohl(addr->sipx.sipx_network)); 223b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko for (i = 0; i < IPX_NODE_LEN; i++) 2241019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin tprintf("%02x", addr->sipx.sipx_node[i]); 2251019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin tprintf("/[%02x]", addr->sipx.sipx_type); 226f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman } 227f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman break; 2288470374cba7df0e70653d95c4f336a4082c68d82Denys Vlasenko#endif /* AF_IPX */ 229f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#ifdef AF_PACKET 230f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman case AF_PACKET: 231f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman { 232f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman int i; 233b0c598ff8d03a57627a5335448a8a60f0950f4f7Wichert Akkerman tprintf("proto=%#04x, if%d, pkttype=", 2341019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin ntohs(addr->ll.sll_protocol), 2351019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin addr->ll.sll_ifindex); 2361019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin printxval(af_packet_types, addr->ll.sll_pkttype, "PACKET_???"); 237b0c598ff8d03a57627a5335448a8a60f0950f4f7Wichert Akkerman tprintf(", addr(%d)={%d, ", 2381019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin addr->ll.sll_halen, 2391019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin addr->ll.sll_hatype); 2401019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin for (i = 0; i < addr->ll.sll_halen; i++) 2411019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin tprintf("%02x", addr->ll.sll_addr[i]); 24276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 24376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman break; 244f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman 2458470374cba7df0e70653d95c4f336a4082c68d82Denys Vlasenko#endif /* AF_PACKET */ 24636ef1bc03e291f98eb5f44ba722a49b87c3cb5e5Roland McGrath#ifdef AF_NETLINK 247f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman case AF_NETLINK: 2481019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin tprintf("pid=%d, groups=%08x", addr->nl.nl_pid, addr->nl.nl_groups); 249f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman break; 250f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#endif /* AF_NETLINK */ 251c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel#if defined(AF_BLUETOOTH) && defined(HAVE_BLUETOOTH_BLUETOOTH_H) 252c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel case AF_BLUETOOTH: 253c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel tprintf("{sco_bdaddr=%02X:%02X:%02X:%02X:%02X:%02X} or " 254c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel "{rc_bdaddr=%02X:%02X:%02X:%02X:%02X:%02X, rc_channel=%d} or " 255c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel "{l2_psm=htobs(%d), l2_bdaddr=%02X:%02X:%02X:%02X:%02X:%02X, l2_cid=htobs(%d)} or " 256c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel "{hci_dev=htobs(%d)}", 2571019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin addr->sco.sco_bdaddr.b[0], addr->sco.sco_bdaddr.b[1], 2581019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin addr->sco.sco_bdaddr.b[2], addr->sco.sco_bdaddr.b[3], 2591019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin addr->sco.sco_bdaddr.b[4], addr->sco.sco_bdaddr.b[5], 2601019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin addr->rc.rc_bdaddr.b[0], addr->rc.rc_bdaddr.b[1], 2611019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin addr->rc.rc_bdaddr.b[2], addr->rc.rc_bdaddr.b[3], 2621019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin addr->rc.rc_bdaddr.b[4], addr->rc.rc_bdaddr.b[5], 2631019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin addr->rc.rc_channel, 2641019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin btohs(addr->l2.l2_psm), addr->l2.l2_bdaddr.b[0], 2651019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin addr->l2.l2_bdaddr.b[1], addr->l2.l2_bdaddr.b[2], 2661019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin addr->l2.l2_bdaddr.b[3], addr->l2.l2_bdaddr.b[4], 2671019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin addr->l2.l2_bdaddr.b[5], btohs(addr->l2.l2_cid), 2681019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin btohs(addr->hci.hci_dev)); 269c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel break; 270c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel#endif /* AF_BLUETOOTH && HAVE_BLUETOOTH_BLUETOOTH_H */ 27176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* AF_AX25 AF_APPLETALK AF_NETROM AF_BRIDGE AF_AAL5 272f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman AF_X25 AF_ROSE etc. still need to be done */ 27376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 27476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman default: 27560fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("sa_data="); 2761019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin print_quoted_string(addr->sa.sa_data, 2771019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin sizeof(addr->sa.sa_data), 0); 27876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman break; 27976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 28060fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("}"); 28176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 28276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 2831019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levinvoid 2841019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levinprintsock(struct tcb *tcp, long addr, int addrlen) 2851019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin{ 2861019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin sockaddr_buf_t addrbuf; 2871019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin 2881019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin if (addrlen < 2) { 2891019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin printaddr(addr); 2901019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin return; 2911019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin } 2921019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin 2931019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin if (addrlen > (int) sizeof(addrbuf)) 2941019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin addrlen = sizeof(addrbuf); 2951019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin 2961019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin memset(&addrbuf, 0, sizeof(addrbuf)); 2971019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin if (umoven_or_printaddr(tcp, addr, addrlen, addrbuf.pad)) 2981019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin return; 2991019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin addrbuf.pad[sizeof(addrbuf.pad) - 1] = '\0'; 3001019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin 3011019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin print_sockaddr(tcp, &addrbuf, addrlen); 3021019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin} 3031019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin 304b36d132907088b878fe77c25a7e8a9c85bf379f0Dmitry V. Levin#include "xlat/scmvals.h" 3051f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin#include "xlat/ip_cmsg_types.h" 3065077082649babf6dac0cabf5e2dd53dff4d393d0Roland McGrath 30705884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin#if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4 30805884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levinstruct cmsghdr32 { 30905884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin uint32_t cmsg_len; 31005884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin int cmsg_level; 31105884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin int cmsg_type; 31205884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin}; 31305884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin#endif 31405884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin 31505884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levintypedef union { 316b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin char *ptr; 31705884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin struct cmsghdr *cmsg; 31805884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin#if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4 31905884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin struct cmsghdr32 *cmsg32; 32005884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin#endif 32105884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin} union_cmsghdr; 32205884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin 323f54cb96f7fdca4e1fa1c371e7874d7bba3bfc0efDmitry V. Levinstatic void 3241103b4ee8603fb43b73d468d838ff18cbf1c514fDmitry V. Levinprint_scm_rights(struct tcb *tcp, const void *cmsg_data, 3251103b4ee8603fb43b73d468d838ff18cbf1c514fDmitry V. Levin const size_t data_len) 3265077082649babf6dac0cabf5e2dd53dff4d393d0Roland McGrath{ 3271103b4ee8603fb43b73d468d838ff18cbf1c514fDmitry V. Levin const int *fds = cmsg_data; 3281103b4ee8603fb43b73d468d838ff18cbf1c514fDmitry V. Levin const char *end = (const char *) cmsg_data + data_len; 329b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin bool seen = false; 330b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin 3311103b4ee8603fb43b73d468d838ff18cbf1c514fDmitry V. Levin if (sizeof(*fds) > data_len) 3321103b4ee8603fb43b73d468d838ff18cbf1c514fDmitry V. Levin return; 3331103b4ee8603fb43b73d468d838ff18cbf1c514fDmitry V. Levin 334b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin tprints(", ["); 3351103b4ee8603fb43b73d468d838ff18cbf1c514fDmitry V. Levin while ((const char *) fds < end) { 336b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin if (seen) 337b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin tprints(", "); 338b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin else 339b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin seen = true; 340b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin printfd(tcp, *fds++); 341b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin } 342f54cb96f7fdca4e1fa1c371e7874d7bba3bfc0efDmitry V. Levin tprints("]"); 343b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin} 344b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin 345f54cb96f7fdca4e1fa1c371e7874d7bba3bfc0efDmitry V. Levinstatic void 3461103b4ee8603fb43b73d468d838ff18cbf1c514fDmitry V. Levinprint_scm_creds(struct tcb *tcp, const void *cmsg_data, 3471103b4ee8603fb43b73d468d838ff18cbf1c514fDmitry V. Levin const size_t data_len) 348b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin{ 3491103b4ee8603fb43b73d468d838ff18cbf1c514fDmitry V. Levin const struct ucred *uc = cmsg_data; 350b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin 3511103b4ee8603fb43b73d468d838ff18cbf1c514fDmitry V. Levin if (sizeof(*uc) > data_len) 3521103b4ee8603fb43b73d468d838ff18cbf1c514fDmitry V. Levin return; 353b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin 354f54cb96f7fdca4e1fa1c371e7874d7bba3bfc0efDmitry V. Levin tprintf(", {pid=%u, uid=%u, gid=%u}", 355b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin (unsigned) uc->pid, (unsigned) uc->uid, (unsigned) uc->gid); 356b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin} 357b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin 358f54cb96f7fdca4e1fa1c371e7874d7bba3bfc0efDmitry V. Levinstatic void 3591103b4ee8603fb43b73d468d838ff18cbf1c514fDmitry V. Levinprint_scm_security(struct tcb *tcp, const void *cmsg_data, 3601103b4ee8603fb43b73d468d838ff18cbf1c514fDmitry V. Levin const size_t data_len) 361b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin{ 3621103b4ee8603fb43b73d468d838ff18cbf1c514fDmitry V. Levin if (!data_len) 363f54cb96f7fdca4e1fa1c371e7874d7bba3bfc0efDmitry V. Levin return; 364b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin 365513e96eb94841734274c0607aae2c9f212411eeeDmitry V. Levin tprints(", "); 3661103b4ee8603fb43b73d468d838ff18cbf1c514fDmitry V. Levin print_quoted_string(cmsg_data, data_len, 0); 367f54cb96f7fdca4e1fa1c371e7874d7bba3bfc0efDmitry V. Levin} 368b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin 369f54cb96f7fdca4e1fa1c371e7874d7bba3bfc0efDmitry V. Levinstatic void 3701f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levinprint_cmsg_ip_pktinfo(struct tcb *tcp, const void *cmsg_data, 3711f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin const size_t data_len) 3721f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin{ 3731f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin const struct in_pktinfo *info = cmsg_data; 3741f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin 3751f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin if (sizeof(*info) > data_len) 3761f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin return; 3771f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin 3781f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin tprints(", {ipi_ifindex="); 3791f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin print_ifindex(info->ipi_ifindex); 3801f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin tprintf(", ipi_spec_dst=inet_addr(\"%s\"), ipi_addr=inet_addr(\"%s\")}", 3811f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin inet_ntoa(info->ipi_spec_dst), inet_ntoa(info->ipi_addr)); 3821f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin} 3831f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin 3841f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levinstatic void 3851f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levinprint_cmsg_ip_ttl(struct tcb *tcp, const void *cmsg_data, 3861f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin const size_t data_len) 3871f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin{ 3881f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin const unsigned int *ttl = cmsg_data; 3891f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin 3901f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin if (sizeof(*ttl) > data_len) 3911f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin return; 3921f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin 3931f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin tprintf(", {ttl=%u}", *ttl); 3941f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin} 3951f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin 3961f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levinstatic void 3971f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levinprint_cmsg_ip_tos(struct tcb *tcp, const void *cmsg_data, 3981f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin const size_t data_len) 3991f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin{ 4001f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin const uint8_t *tos = cmsg_data; 4011f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin 4021f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin if (sizeof(*tos) > data_len) 4031f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin return; 4041f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin 4051f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin tprintf(", {tos=%x}", *tos); 4061f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin} 4071f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin 4081f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levinstatic void 4091f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levinprint_cmsg_ip_checksum(struct tcb *tcp, const void *cmsg_data, 4101f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin const size_t data_len) 4111f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin{ 4121f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin const uint32_t *csum = cmsg_data; 4131f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin 4141f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin if (sizeof(*csum) > data_len) 4151f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin return; 4161f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin 4171f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin tprintf(", {csum=%u}", *csum); 4181f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin} 4191f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin 4201f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levinstatic void 4211f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levinprint_cmsg_ip_opts(struct tcb *tcp, const void *cmsg_data, 4221f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin const size_t data_len) 4231f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin{ 424a17f593e508ccab2e92032ef9ee5518d79379641Dmitry V. Levin const unsigned char *opts = cmsg_data; 4251f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin size_t i; 4261f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin 4271f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin if (!data_len) 4281f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin return; 4291f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin 4301f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin tprints(", {opts=0x"); 4311f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin for (i = 0; i < data_len; ++i) 4321f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin tprintf("%02x", opts[i]); 4331f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin tprints("}"); 4341f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin} 4351f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin 4361f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levinstatic void 4371f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levinprint_cmsg_ip_recverr(struct tcb *tcp, const void *cmsg_data, 4381f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin const size_t data_len) 4391f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin{ 4401f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin const struct { 4411f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin uint32_t ee_errno; 4421f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin uint8_t ee_origin; 4431f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin uint8_t ee_type; 4441f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin uint8_t ee_code; 4451f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin uint8_t ee_pad; 4461f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin uint32_t ee_info; 4471f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin uint32_t ee_data; 4481f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin struct sockaddr_in offender; 4491f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin } *err = cmsg_data; 4501f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin 4511f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin if (sizeof(*err) > data_len) 4521f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin return; 4531f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin 4541f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin tprintf(", {ee_errno=%u, ee_origin=%u, ee_type=%u, ee_code=%u" 4551f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin ", ee_info=%u, ee_data=%u, offender=", 4561f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin err->ee_errno, err->ee_origin, err->ee_type, 4571f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin err->ee_code, err->ee_info, err->ee_data); 4581f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin print_sockaddr(tcp, (const void *) &err->offender, 4591f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin sizeof(err->offender)); 4601f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin tprints("}"); 4611f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin} 4621f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin 4631f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levinstatic void 4641f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levinprint_cmsg_ip_origdstaddr(struct tcb *tcp, const void *cmsg_data, 4651f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin const size_t data_len) 4661f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin{ 4671f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin if (sizeof(struct sockaddr_in) > data_len) 4681f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin return; 4691f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin 4701f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin tprints(", "); 4711f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin print_sockaddr(tcp, cmsg_data, data_len); 4721f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin} 4731f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin 4741f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levinstatic void 475f54cb96f7fdca4e1fa1c371e7874d7bba3bfc0efDmitry V. Levinprint_cmsg_type_data(struct tcb *tcp, const int cmsg_level, const int cmsg_type, 4761103b4ee8603fb43b73d468d838ff18cbf1c514fDmitry V. Levin const void *cmsg_data, const size_t data_len) 477f54cb96f7fdca4e1fa1c371e7874d7bba3bfc0efDmitry V. Levin{ 478f54cb96f7fdca4e1fa1c371e7874d7bba3bfc0efDmitry V. Levin switch (cmsg_level) { 479f54cb96f7fdca4e1fa1c371e7874d7bba3bfc0efDmitry V. Levin case SOL_SOCKET: 480f54cb96f7fdca4e1fa1c371e7874d7bba3bfc0efDmitry V. Levin printxval(scmvals, cmsg_type, "SCM_???"); 481f54cb96f7fdca4e1fa1c371e7874d7bba3bfc0efDmitry V. Levin switch (cmsg_type) { 482f54cb96f7fdca4e1fa1c371e7874d7bba3bfc0efDmitry V. Levin case SCM_RIGHTS: 4831103b4ee8603fb43b73d468d838ff18cbf1c514fDmitry V. Levin print_scm_rights(tcp, cmsg_data, data_len); 484f54cb96f7fdca4e1fa1c371e7874d7bba3bfc0efDmitry V. Levin break; 485f54cb96f7fdca4e1fa1c371e7874d7bba3bfc0efDmitry V. Levin case SCM_CREDENTIALS: 4861103b4ee8603fb43b73d468d838ff18cbf1c514fDmitry V. Levin print_scm_creds(tcp, cmsg_data, data_len); 487f54cb96f7fdca4e1fa1c371e7874d7bba3bfc0efDmitry V. Levin break; 488f54cb96f7fdca4e1fa1c371e7874d7bba3bfc0efDmitry V. Levin case SCM_SECURITY: 4891103b4ee8603fb43b73d468d838ff18cbf1c514fDmitry V. Levin print_scm_security(tcp, cmsg_data, data_len); 490f54cb96f7fdca4e1fa1c371e7874d7bba3bfc0efDmitry V. Levin break; 491f54cb96f7fdca4e1fa1c371e7874d7bba3bfc0efDmitry V. Levin } 492f54cb96f7fdca4e1fa1c371e7874d7bba3bfc0efDmitry V. Levin break; 4931f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin case SOL_IP: 4941f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin printxval(ip_cmsg_types, cmsg_type, "IP_???"); 4951f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin switch (cmsg_type) { 4961f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin case IP_PKTINFO: 4971f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin print_cmsg_ip_pktinfo(tcp, cmsg_data, data_len); 4981f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin break; 4991f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin case IP_TTL: 5001f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin print_cmsg_ip_ttl(tcp, cmsg_data, data_len); 5011f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin break; 5021f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin case IP_TOS: 5031f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin print_cmsg_ip_tos(tcp, cmsg_data, data_len); 5041f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin break; 5051f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin case IP_RECVOPTS: 5061f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin case IP_RETOPTS: 5071f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin print_cmsg_ip_opts(tcp, cmsg_data, data_len); 5081f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin break; 5091f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin case IP_RECVERR: 5101f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin print_cmsg_ip_recverr(tcp, cmsg_data, data_len); 5111f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin break; 5121f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin case IP_ORIGDSTADDR: 5131f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin print_cmsg_ip_origdstaddr(tcp, cmsg_data, data_len); 5141f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin break; 5151f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin case IP_CHECKSUM: 5161f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin print_cmsg_ip_checksum(tcp, cmsg_data, data_len); 5171f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin break; 5181f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin case SCM_SECURITY: 5191f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin print_scm_security(tcp, cmsg_data, data_len); 5201f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin break; 5211f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin } 5221f111cff5a09e7c78fb4daaf6dada0abe22185c9Dmitry V. Levin break; 523f54cb96f7fdca4e1fa1c371e7874d7bba3bfc0efDmitry V. Levin default: 524f54cb96f7fdca4e1fa1c371e7874d7bba3bfc0efDmitry V. Levin tprintf("%u", cmsg_type); 525f54cb96f7fdca4e1fa1c371e7874d7bba3bfc0efDmitry V. Levin } 526b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin} 527b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin 528b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levinstatic void 529b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levinprintcmsghdr(struct tcb *tcp, unsigned long addr, size_t len) 530b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin{ 531b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin const size_t cmsg_size = 53205884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin#if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4 53305884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin (current_wordsize < sizeof(long)) ? sizeof(struct cmsghdr32) : 53405884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin#endif 53505884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin sizeof(struct cmsghdr); 53605884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin 537b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin char *buf = len < cmsg_size ? NULL : malloc(len); 538b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin if (!buf || umoven(tcp, addr, len, buf) < 0) { 5396c277da20558fcae086c7a7a26cd63f4e553a84dDmitry V. Levin tprints(", msg_control="); 5406c277da20558fcae086c7a7a26cd63f4e553a84dDmitry V. Levin printaddr(addr); 541b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin free(buf); 5425077082649babf6dac0cabf5e2dd53dff4d393d0Roland McGrath return; 5435077082649babf6dac0cabf5e2dd53dff4d393d0Roland McGrath } 5445077082649babf6dac0cabf5e2dd53dff4d393d0Roland McGrath 545b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin union_cmsghdr u = { .ptr = buf }; 546b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin 547b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin tprints(", ["); 548b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin while (len >= cmsg_size) { 549b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin size_t cmsg_len = 55005884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin#if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4 551b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin (current_wordsize < sizeof(long)) ? u.cmsg32->cmsg_len : 55205884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin#endif 553b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin u.cmsg->cmsg_len; 554b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin int cmsg_level = 55505884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin#if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4 556b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin (current_wordsize < sizeof(long)) ? u.cmsg32->cmsg_level : 55705884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin#endif 558b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin u.cmsg->cmsg_level; 559b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin int cmsg_type = 56005884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin#if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4 561b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin (current_wordsize < sizeof(long)) ? u.cmsg32->cmsg_type : 56205884d866c1d108fbc83bb8161051c156aacfde6Dmitry V. Levin#endif 563b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin u.cmsg->cmsg_type; 564b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin 565b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin if (u.ptr != buf) 566b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin tprints(", "); 567b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin tprintf("{cmsg_len=%lu, cmsg_level=", (unsigned long) cmsg_len); 568b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin printxval(socketlayers, cmsg_level, "SOL_???"); 569b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin tprints(", cmsg_type="); 570b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin 571b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin if (cmsg_len > len) 572b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin cmsg_len = len; 573b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin 574f54cb96f7fdca4e1fa1c371e7874d7bba3bfc0efDmitry V. Levin print_cmsg_type_data(tcp, cmsg_level, cmsg_type, 5751103b4ee8603fb43b73d468d838ff18cbf1c514fDmitry V. Levin (const void *) (u.ptr + cmsg_size), 5761103b4ee8603fb43b73d468d838ff18cbf1c514fDmitry V. Levin cmsg_len > cmsg_size ? cmsg_len - cmsg_size: 0); 577f54cb96f7fdca4e1fa1c371e7874d7bba3bfc0efDmitry V. Levin tprints("}"); 578f54cb96f7fdca4e1fa1c371e7874d7bba3bfc0efDmitry V. Levin 579b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin if (cmsg_len < cmsg_size) { 580b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin len -= cmsg_size; 581b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin break; 5825077082649babf6dac0cabf5e2dd53dff4d393d0Roland McGrath } 583b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin cmsg_len = (cmsg_len + current_wordsize - 1) & 584b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin (size_t) ~(current_wordsize - 1); 585b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin if (cmsg_len >= len) { 586b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin len = 0; 587b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin break; 5885077082649babf6dac0cabf5e2dd53dff4d393d0Roland McGrath } 589b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin u.ptr += cmsg_len; 590b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin len -= cmsg_len; 5915077082649babf6dac0cabf5e2dd53dff4d393d0Roland McGrath } 592b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin if (len) 593b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin tprints(", ..."); 594b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin tprints("]"); 595b85a7f3b9525a3b4cd84f301b2c7b100348242feDmitry V. Levin free(buf); 5965077082649babf6dac0cabf5e2dd53dff4d393d0Roland McGrath} 59776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 59876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanstatic void 599e0bc222263cf47a43e1b26d55edb2ffadc8ccbffDenys Vlasenkodo_msghdr(struct tcb *tcp, struct msghdr *msg, unsigned long data_size) 6000873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab{ 6010873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab tprintf("{msg_name(%d)=", msg->msg_namelen); 6020873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab printsock(tcp, (long)msg->msg_name, msg->msg_namelen); 6030873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab 6040873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab tprintf(", msg_iov(%lu)=", (unsigned long)msg->msg_iovlen); 605e0bc222263cf47a43e1b26d55edb2ffadc8ccbffDenys Vlasenko tprint_iov_upto(tcp, (unsigned long)msg->msg_iovlen, 606e0bc222263cf47a43e1b26d55edb2ffadc8ccbffDenys Vlasenko (unsigned long)msg->msg_iov, 1, data_size); 6070873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab 6080873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab#ifdef HAVE_STRUCT_MSGHDR_MSG_CONTROL 6090873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab tprintf(", msg_controllen=%lu", (unsigned long)msg->msg_controllen); 6100873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab if (msg->msg_controllen) 6110873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab printcmsghdr(tcp, (unsigned long) msg->msg_control, 6120873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab msg->msg_controllen); 61360fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", msg_flags="); 6140873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab printflags(msg_flags, msg->msg_flags, "MSG_???"); 6150873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab#else /* !HAVE_STRUCT_MSGHDR_MSG_CONTROL */ 6160873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab tprintf("msg_accrights=%#lx, msg_accrightslen=%u", 6170873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab (unsigned long) msg->msg_accrights, msg->msg_accrightslen); 6180873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab#endif /* !HAVE_STRUCT_MSGHDR_MSG_CONTROL */ 61960fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("}"); 6200873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab} 6210873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab 6223e759d4293076b9358a25bb61d50d3e6fff5b0e2Denys Vlasenkostruct msghdr32 { 6233e759d4293076b9358a25bb61d50d3e6fff5b0e2Denys Vlasenko uint32_t /* void* */ msg_name; 6243e759d4293076b9358a25bb61d50d3e6fff5b0e2Denys Vlasenko uint32_t /* socklen_t */msg_namelen; 6253e759d4293076b9358a25bb61d50d3e6fff5b0e2Denys Vlasenko uint32_t /* iovec* */ msg_iov; 6263e759d4293076b9358a25bb61d50d3e6fff5b0e2Denys Vlasenko uint32_t /* size_t */ msg_iovlen; 6273e759d4293076b9358a25bb61d50d3e6fff5b0e2Denys Vlasenko uint32_t /* void* */ msg_control; 6283e759d4293076b9358a25bb61d50d3e6fff5b0e2Denys Vlasenko uint32_t /* size_t */ msg_controllen; 6293e759d4293076b9358a25bb61d50d3e6fff5b0e2Denys Vlasenko uint32_t /* int */ msg_flags; 6303e759d4293076b9358a25bb61d50d3e6fff5b0e2Denys Vlasenko}; 6313e759d4293076b9358a25bb61d50d3e6fff5b0e2Denys Vlasenkostruct mmsghdr32 { 6323e759d4293076b9358a25bb61d50d3e6fff5b0e2Denys Vlasenko struct msghdr32 msg_hdr; 6333e759d4293076b9358a25bb61d50d3e6fff5b0e2Denys Vlasenko uint32_t /* unsigned */ msg_len; 6343e759d4293076b9358a25bb61d50d3e6fff5b0e2Denys Vlasenko}; 6353e759d4293076b9358a25bb61d50d3e6fff5b0e2Denys Vlasenko 636caf6a438f9d97684c10da8a6453d1e0e151a9613Masatake YAMATO#ifndef HAVE_STRUCT_MMSGHDR 637caf6a438f9d97684c10da8a6453d1e0e151a9613Masatake YAMATOstruct mmsghdr { 638caf6a438f9d97684c10da8a6453d1e0e151a9613Masatake YAMATO struct msghdr msg_hdr; 639caf6a438f9d97684c10da8a6453d1e0e151a9613Masatake YAMATO unsigned msg_len; 640caf6a438f9d97684c10da8a6453d1e0e151a9613Masatake YAMATO}; 641caf6a438f9d97684c10da8a6453d1e0e151a9613Masatake YAMATO#endif 642caf6a438f9d97684c10da8a6453d1e0e151a9613Masatake YAMATO 643b248543be91457a6c0567a4b057ff0acc361efc2Masatake YAMATO#if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4 644b248543be91457a6c0567a4b057ff0acc361efc2Masatake YAMATOstatic void 645b248543be91457a6c0567a4b057ff0acc361efc2Masatake YAMATOcopy_from_msghdr32(struct msghdr *to_msg, struct msghdr32 *from_msg32) 646b248543be91457a6c0567a4b057ff0acc361efc2Masatake YAMATO{ 647b248543be91457a6c0567a4b057ff0acc361efc2Masatake YAMATO to_msg->msg_name = (void*)(long)from_msg32->msg_name; 648b248543be91457a6c0567a4b057ff0acc361efc2Masatake YAMATO to_msg->msg_namelen = from_msg32->msg_namelen; 649b248543be91457a6c0567a4b057ff0acc361efc2Masatake YAMATO to_msg->msg_iov = (void*)(long)from_msg32->msg_iov; 650b248543be91457a6c0567a4b057ff0acc361efc2Masatake YAMATO to_msg->msg_iovlen = from_msg32->msg_iovlen; 651b248543be91457a6c0567a4b057ff0acc361efc2Masatake YAMATO to_msg->msg_control = (void*)(long)from_msg32->msg_control; 652b248543be91457a6c0567a4b057ff0acc361efc2Masatake YAMATO to_msg->msg_controllen = from_msg32->msg_controllen; 653b248543be91457a6c0567a4b057ff0acc361efc2Masatake YAMATO to_msg->msg_flags = from_msg32->msg_flags; 654b248543be91457a6c0567a4b057ff0acc361efc2Masatake YAMATO} 655b248543be91457a6c0567a4b057ff0acc361efc2Masatake YAMATO#endif 656b248543be91457a6c0567a4b057ff0acc361efc2Masatake YAMATO 65702f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATOstatic bool 65802f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATOextractmsghdr(struct tcb *tcp, long addr, struct msghdr *msg) 65976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 6603e759d4293076b9358a25bb61d50d3e6fff5b0e2Denys Vlasenko#if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4 6613e759d4293076b9358a25bb61d50d3e6fff5b0e2Denys Vlasenko if (current_wordsize == 4) { 6623e759d4293076b9358a25bb61d50d3e6fff5b0e2Denys Vlasenko struct msghdr32 msg32; 6633e759d4293076b9358a25bb61d50d3e6fff5b0e2Denys Vlasenko 66402f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATO if (umove(tcp, addr, &msg32) < 0) 66502f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATO return false; 666b248543be91457a6c0567a4b057ff0acc361efc2Masatake YAMATO copy_from_msghdr32(msg, &msg32); 6673e759d4293076b9358a25bb61d50d3e6fff5b0e2Denys Vlasenko } else 6683e759d4293076b9358a25bb61d50d3e6fff5b0e2Denys Vlasenko#endif 66902f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATO if (umove(tcp, addr, msg) < 0) 67002f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATO return false; 67102f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATO return true; 67202f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATO} 67302f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATO 674a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATOstatic bool 675a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATOextractmmsghdr(struct tcb *tcp, long addr, unsigned int idx, struct mmsghdr *mmsg) 676a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO{ 677a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO#if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4 678a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO if (current_wordsize == 4) { 679a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO struct mmsghdr32 mmsg32; 680a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO 681a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO addr += sizeof(struct mmsghdr32) * idx; 682a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO if (umove(tcp, addr, &mmsg32) < 0) 683a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO return false; 684a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO 685a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO copy_from_msghdr32(&mmsg->msg_hdr, &mmsg32.msg_hdr); 686a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO mmsg->msg_len = mmsg32.msg_len; 687a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO } else 688a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO#endif 689a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO { 690a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO addr += sizeof(*mmsg) * idx; 691a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO if (umove(tcp, addr, mmsg) < 0) 692a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO return false; 693a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO } 694a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO return true; 695a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO} 696a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO 69702f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATOstatic void 69802f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATOprintmsghdr(struct tcb *tcp, long addr, unsigned long data_size) 69902f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATO{ 70002f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATO struct msghdr msg; 70102f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATO 70200244b94bbfc3edd2ca17c83e879154b6f6708d4Dmitry V. Levin if (verbose(tcp) && extractmsghdr(tcp, addr, &msg)) 70302f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATO do_msghdr(tcp, &msg, data_size); 70402f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATO else 7056c277da20558fcae086c7a7a26cd63f4e553a84dDmitry V. Levin printaddr(addr); 70602f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATO} 70702f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATO 70802f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATOvoid 70902f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATOdumpiov_in_msghdr(struct tcb *tcp, long addr) 71002f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATO{ 71102f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATO struct msghdr msg; 71202f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATO 71302f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATO if (extractmsghdr(tcp, addr, &msg)) 71402f9f6b386741a52f58e1b31ad4e7fff60781ef8Masatake YAMATO dumpiov(tcp, msg.msg_iovlen, (long)msg.msg_iov); 7150873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab} 716f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman 7170873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwabstatic void 7185ea97658e78b6ce9fb768ffdd6a4b682c5df8e90Dmitry V. Levinprintmmsghdr(struct tcb *tcp, long addr, unsigned int idx, unsigned long msg_len) 7190873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab{ 720caf6a438f9d97684c10da8a6453d1e0e151a9613Masatake YAMATO struct mmsghdr mmsg; 721f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman 722a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO if (extractmmsghdr(tcp, addr, idx, &mmsg)) { 723a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO tprints("{"); 724a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO do_msghdr(tcp, &mmsg.msg_hdr, msg_len ? msg_len : mmsg.msg_len); 725a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO tprintf(", %u}", mmsg.msg_len); 7260873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab } 727a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO else 7286c277da20558fcae086c7a7a26cd63f4e553a84dDmitry V. Levin printaddr(addr); 72976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 73076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 7317af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levinstatic void 7325ea97658e78b6ce9fb768ffdd6a4b682c5df8e90Dmitry V. Levindecode_mmsg(struct tcb *tcp, unsigned long msg_len) 7337af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin{ 7347af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin /* mmsgvec */ 7357af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin if (syserror(tcp)) { 7366c277da20558fcae086c7a7a26cd63f4e553a84dDmitry V. Levin printaddr(tcp->u_arg[1]); 7377af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin } else { 7387af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin unsigned int len = tcp->u_rval; 7397af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin unsigned int i; 7407af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin 7417af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin tprints("{"); 7427af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin for (i = 0; i < len; ++i) { 7437af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin if (i) 7447af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin tprints(", "); 7455ea97658e78b6ce9fb768ffdd6a4b682c5df8e90Dmitry V. Levin printmmsghdr(tcp, tcp->u_arg[1], i, msg_len); 7467af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin } 7477af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin tprints("}"); 7487af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin } 7497af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin /* vlen */ 7507af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin tprintf(", %u, ", (unsigned int) tcp->u_arg[2]); 7517af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin /* flags */ 7527af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin printflags(msg_flags, tcp->u_arg[3], "MSG_???"); 7537af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin} 7547af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin 755a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATOvoid 756a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATOdumpiov_in_mmsghdr(struct tcb *tcp, long addr) 757a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO{ 758a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO unsigned int len = tcp->u_rval; 759a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO unsigned int i; 760a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO struct mmsghdr mmsg; 761a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO 762a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO for (i = 0; i < len; ++i) { 763a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO if (extractmmsghdr(tcp, addr, i, &mmsg)) { 764a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO tprintf(" = %lu buffers in vector %u\n", 765a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO (unsigned long)mmsg.msg_hdr.msg_iovlen, i); 766a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO dumpiov(tcp, mmsg.msg_hdr.msg_iovlen, 767a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO (long)mmsg.msg_hdr.msg_iov); 768a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO } 769a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO } 770a807dceca5ccfaf283aedaca3d998f83db8fe1faMasatake YAMATO} 77176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 7728a550d729d53f963452d10990cd56d1132cb1602Dmitry V. Levin/* 7738a550d729d53f963452d10990cd56d1132cb1602Dmitry V. Levin * low bits of the socket type define real socket type, 7748a550d729d53f963452d10990cd56d1132cb1602Dmitry V. Levin * other bits are socket type flags. 7758a550d729d53f963452d10990cd56d1132cb1602Dmitry V. Levin */ 7768a550d729d53f963452d10990cd56d1132cb1602Dmitry V. Levinstatic void 7771e42f2dbe721f7cb1e4bdfc9103bf358b4a443c1Dmitry V. Levintprint_sock_type(int flags) 7788a550d729d53f963452d10990cd56d1132cb1602Dmitry V. Levin{ 7798a550d729d53f963452d10990cd56d1132cb1602Dmitry V. Levin const char *str = xlookup(socktypes, flags & SOCK_TYPE_MASK); 7808a550d729d53f963452d10990cd56d1132cb1602Dmitry V. Levin 7817b609d5ba0852e6c56ba311350ebd4412361777bDenys Vlasenko if (str) { 7825940e6593911dcace424c668a1c0934c71fccb9eDenys Vlasenko tprints(str); 7838a550d729d53f963452d10990cd56d1132cb1602Dmitry V. Levin flags &= ~SOCK_TYPE_MASK; 7848a550d729d53f963452d10990cd56d1132cb1602Dmitry V. Levin if (!flags) 7858a550d729d53f963452d10990cd56d1132cb1602Dmitry V. Levin return; 78660fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("|"); 7878a550d729d53f963452d10990cd56d1132cb1602Dmitry V. Levin } 7888a550d729d53f963452d10990cd56d1132cb1602Dmitry V. Levin printflags(sock_type_flags, flags, "SOCK_???"); 7898a550d729d53f963452d10990cd56d1132cb1602Dmitry V. Levin} 7908a550d729d53f963452d10990cd56d1132cb1602Dmitry V. Levin 791a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(socket) 79276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 793219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin printxval(domains, tcp->u_arg[0], "PF_???"); 794219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin tprints(", "); 795219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin tprint_sock_type(tcp->u_arg[1]); 796219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin tprints(", "); 797219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin switch (tcp->u_arg[0]) { 798219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin case PF_INET: 7998758e544d502e54202079b0521ae0a234d644a4aRoland McGrath#ifdef PF_INET6 800219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin case PF_INET6: 8018758e544d502e54202079b0521ae0a234d644a4aRoland McGrath#endif 802219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin printxval(inet_protocols, tcp->u_arg[2], "IPPROTO_???"); 803219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin break; 80476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef PF_IPX 805219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin case PF_IPX: 806219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin /* BTW: I don't believe this.. */ 807219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin tprints("["); 808219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin printxval(domains, tcp->u_arg[2], "PF_???"); 809219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin tprints("]"); 810219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin break; 81176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif /* PF_IPX */ 8122394a3d0e5ee5684a42b36218ada2dcf3b4e705fMasatake YAMATO#ifdef PF_NETLINK 813219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin case PF_NETLINK: 814219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin printxval(netlink_protocols, tcp->u_arg[2], "NETLINK_???"); 815219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin break; 8162394a3d0e5ee5684a42b36218ada2dcf3b4e705fMasatake YAMATO#endif 817c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel#if defined(PF_BLUETOOTH) && defined(HAVE_BLUETOOTH_BLUETOOTH_H) 818219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin case PF_BLUETOOTH: 819219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin printxval(bt_protocols, tcp->u_arg[2], "BTPROTO_???"); 820219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin break; 821c400a1c70ebebde368481c01e85d68e7fd118be6Lubomir Rintel#endif 822219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin default: 823219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin tprintf("%lu", tcp->u_arg[2]); 824219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin break; 82576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 826219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin 8273d463be47e84896366a86d156cbf1466f69a9811Dmitry V. Levin return RVAL_DECODED | RVAL_FD; 82876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 82976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 830a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(bind) 83176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 832219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin printfd(tcp, tcp->u_arg[0]); 833219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin tprints(", "); 834219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin printsock(tcp, tcp->u_arg[1], tcp->u_arg[2]); 835219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin tprintf(", %lu", tcp->u_arg[2]); 836219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin 837219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin return RVAL_DECODED; 83876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 83976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 840a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(listen) 84176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 842219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin printfd(tcp, tcp->u_arg[0]); 843219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin tprints(", "); 844219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin tprintf("%lu", tcp->u_arg[1]); 845219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin 846219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin return RVAL_DECODED; 84776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 84876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 849705ff10c0b9c07b9b51fc2f2bc6f3e6412f6ed9cPaolo Bonzinistatic int 85015114ec215f889b71fd1f9ed2012b8deeb33a55cDmitry V. Levindo_sockname(struct tcb *tcp, int flags_arg) 85176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 85276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 853894c7e3858ede412e37a1752c716bed7f30a9605Philippe Ombredanne printfd(tcp, tcp->u_arg[0]); 854894c7e3858ede412e37a1752c716bed7f30a9605Philippe Ombredanne tprints(", "); 855705ff10c0b9c07b9b51fc2f2bc6f3e6412f6ed9cPaolo Bonzini return 0; 856705ff10c0b9c07b9b51fc2f2bc6f3e6412f6ed9cPaolo Bonzini } 8576c277da20558fcae086c7a7a26cd63f4e553a84dDmitry V. Levin 8586c277da20558fcae086c7a7a26cd63f4e553a84dDmitry V. Levin int len; 8596c277da20558fcae086c7a7a26cd63f4e553a84dDmitry V. Levin if (!tcp->u_arg[2] || !verbose(tcp) || syserror(tcp) || 8606c277da20558fcae086c7a7a26cd63f4e553a84dDmitry V. Levin umove(tcp, tcp->u_arg[2], &len) < 0) { 8616c277da20558fcae086c7a7a26cd63f4e553a84dDmitry V. Levin printaddr(tcp->u_arg[1]); 86260fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 8636c277da20558fcae086c7a7a26cd63f4e553a84dDmitry V. Levin printaddr(tcp->u_arg[2]); 8646c277da20558fcae086c7a7a26cd63f4e553a84dDmitry V. Levin } else { 8656c277da20558fcae086c7a7a26cd63f4e553a84dDmitry V. Levin printsock(tcp, tcp->u_arg[1], len); 8666c277da20558fcae086c7a7a26cd63f4e553a84dDmitry V. Levin tprintf(", [%d]", len); 86776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 8686c277da20558fcae086c7a7a26cd63f4e553a84dDmitry V. Levin 869705ff10c0b9c07b9b51fc2f2bc6f3e6412f6ed9cPaolo Bonzini if (flags_arg >= 0) { 87060fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 871705ff10c0b9c07b9b51fc2f2bc6f3e6412f6ed9cPaolo Bonzini printflags(sock_type_flags, tcp->u_arg[flags_arg], 872705ff10c0b9c07b9b51fc2f2bc6f3e6412f6ed9cPaolo Bonzini "SOCK_???"); 873705ff10c0b9c07b9b51fc2f2bc6f3e6412f6ed9cPaolo Bonzini } 87476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 87576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 87676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 877a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(accept) 878705ff10c0b9c07b9b51fc2f2bc6f3e6412f6ed9cPaolo Bonzini{ 87915114ec215f889b71fd1f9ed2012b8deeb33a55cDmitry V. Levin do_sockname(tcp, -1); 88015114ec215f889b71fd1f9ed2012b8deeb33a55cDmitry V. Levin return RVAL_FD; 881705ff10c0b9c07b9b51fc2f2bc6f3e6412f6ed9cPaolo Bonzini} 882705ff10c0b9c07b9b51fc2f2bc6f3e6412f6ed9cPaolo Bonzini 883a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(accept4) 884705ff10c0b9c07b9b51fc2f2bc6f3e6412f6ed9cPaolo Bonzini{ 88515114ec215f889b71fd1f9ed2012b8deeb33a55cDmitry V. Levin do_sockname(tcp, 3); 88615114ec215f889b71fd1f9ed2012b8deeb33a55cDmitry V. Levin return RVAL_FD; 887705ff10c0b9c07b9b51fc2f2bc6f3e6412f6ed9cPaolo Bonzini} 888705ff10c0b9c07b9b51fc2f2bc6f3e6412f6ed9cPaolo Bonzini 889a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(send) 89076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 891219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin printfd(tcp, tcp->u_arg[0]); 892219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin tprints(", "); 893219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin printstr(tcp, tcp->u_arg[1], tcp->u_arg[2]); 894219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin tprintf(", %lu, ", tcp->u_arg[2]); 895219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin /* flags */ 896219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin printflags(msg_flags, tcp->u_arg[3], "MSG_???"); 897219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin 898219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin return RVAL_DECODED; 89976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 90076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 901a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(sendto) 90276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 903219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin printfd(tcp, tcp->u_arg[0]); 904219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin tprints(", "); 905219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin printstr(tcp, tcp->u_arg[1], tcp->u_arg[2]); 906219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin tprintf(", %lu, ", tcp->u_arg[2]); 907219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin /* flags */ 908219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin printflags(msg_flags, tcp->u_arg[3], "MSG_???"); 909219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin /* to address */ 910219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin tprints(", "); 911219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin printsock(tcp, tcp->u_arg[4], tcp->u_arg[5]); 912219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin /* to length */ 913219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin tprintf(", %lu", tcp->u_arg[5]); 914219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin 915219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin return RVAL_DECODED; 91676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 91776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 918a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(sendmsg) 91976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 920219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin printfd(tcp, tcp->u_arg[0]); 921219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin tprints(", "); 922219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin printmsghdr(tcp, tcp->u_arg[1], (unsigned long) -1L); 923219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin /* flags */ 924219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin tprints(", "); 925219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin printflags(msg_flags, tcp->u_arg[2], "MSG_???"); 926219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin 927219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin return RVAL_DECODED; 92876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 92976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 930a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(sendmmsg) 9317af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin{ 9327af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin if (entering(tcp)) { 9337af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin /* sockfd */ 934894c7e3858ede412e37a1752c716bed7f30a9605Philippe Ombredanne printfd(tcp, tcp->u_arg[0]); 935894c7e3858ede412e37a1752c716bed7f30a9605Philippe Ombredanne tprints(", "); 9367af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin if (!verbose(tcp)) { 9377af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin tprintf("%#lx, %u, ", 9387af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin tcp->u_arg[1], (unsigned int) tcp->u_arg[2]); 9397af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin printflags(msg_flags, tcp->u_arg[3], "MSG_???"); 9407af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin } 9417af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin } else { 9427af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin if (verbose(tcp)) 9435ea97658e78b6ce9fb768ffdd6a4b682c5df8e90Dmitry V. Levin decode_mmsg(tcp, (unsigned long) -1L); 9447af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin } 9457af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin return 0; 9467af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin} 9477af9f35001af19e2844b3e9fb3c672ee696be17bDmitry V. Levin 948a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(recv) 94976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 95076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 951894c7e3858ede412e37a1752c716bed7f30a9605Philippe Ombredanne printfd(tcp, tcp->u_arg[0]); 952894c7e3858ede412e37a1752c716bed7f30a9605Philippe Ombredanne tprints(", "); 95376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } else { 95476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (syserror(tcp)) 9556c277da20558fcae086c7a7a26cd63f4e553a84dDmitry V. Levin printaddr(tcp->u_arg[1]); 95676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else 95776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printstr(tcp, tcp->u_arg[1], tcp->u_rval); 95876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 95976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", %lu, ", tcp->u_arg[2]); 960b2dee13345a62c80a677f3342cd525d611fbc632Roland McGrath printflags(msg_flags, tcp->u_arg[3], "MSG_???"); 96176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 96276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 96376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 96476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 965a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(recvfrom) 96676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 96776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman int fromlen; 96876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 96976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 970894c7e3858ede412e37a1752c716bed7f30a9605Philippe Ombredanne printfd(tcp, tcp->u_arg[0]); 971894c7e3858ede412e37a1752c716bed7f30a9605Philippe Ombredanne tprints(", "); 97276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } else { 973383386de73799a7c977e729c1e104ba6d6b3630cDenys Vlasenko /* buf */ 97476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (syserror(tcp)) { 97552dc1506abc7372c4beebbd185d09501f52c6283Dmitry V. Levin printaddr(tcp->u_arg[1]); 976383386de73799a7c977e729c1e104ba6d6b3630cDenys Vlasenko } else { 977383386de73799a7c977e729c1e104ba6d6b3630cDenys Vlasenko printstr(tcp, tcp->u_arg[1], tcp->u_rval); 97876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 97976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* len */ 98076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", %lu, ", tcp->u_arg[2]); 98176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* flags */ 982b2dee13345a62c80a677f3342cd525d611fbc632Roland McGrath printflags(msg_flags, tcp->u_arg[3], "MSG_???"); 9836c277da20558fcae086c7a7a26cd63f4e553a84dDmitry V. Levin tprints(", "); 98452dc1506abc7372c4beebbd185d09501f52c6283Dmitry V. Levin if (syserror(tcp) || !tcp->u_arg[4] || !tcp->u_arg[5] || 9856c277da20558fcae086c7a7a26cd63f4e553a84dDmitry V. Levin umove(tcp, tcp->u_arg[5], &fromlen) < 0) { 986383386de73799a7c977e729c1e104ba6d6b3630cDenys Vlasenko /* from address, len */ 9876c277da20558fcae086c7a7a26cd63f4e553a84dDmitry V. Levin printaddr(tcp->u_arg[4]); 9886c277da20558fcae086c7a7a26cd63f4e553a84dDmitry V. Levin tprints(", "); 9896c277da20558fcae086c7a7a26cd63f4e553a84dDmitry V. Levin printaddr(tcp->u_arg[5]); 99076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 99176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 992383386de73799a7c977e729c1e104ba6d6b3630cDenys Vlasenko /* from address */ 993383386de73799a7c977e729c1e104ba6d6b3630cDenys Vlasenko printsock(tcp, tcp->u_arg[4], fromlen); 99476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* from length */ 99576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", [%u]", fromlen); 99676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 99776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 99876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 99976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 1000a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(recvmsg) 100176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 100276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 1003894c7e3858ede412e37a1752c716bed7f30a9605Philippe Ombredanne printfd(tcp, tcp->u_arg[0]); 1004894c7e3858ede412e37a1752c716bed7f30a9605Philippe Ombredanne tprints(", "); 100576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } else { 100600244b94bbfc3edd2ca17c83e879154b6f6708d4Dmitry V. Levin if (syserror(tcp)) 10076c277da20558fcae086c7a7a26cd63f4e553a84dDmitry V. Levin printaddr(tcp->u_arg[1]); 100876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else 1009e0bc222263cf47a43e1b26d55edb2ffadc8ccbffDenys Vlasenko printmsghdr(tcp, tcp->u_arg[1], tcp->u_rval); 101076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* flags */ 101160fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 1012b2dee13345a62c80a677f3342cd525d611fbc632Roland McGrath printflags(msg_flags, tcp->u_arg[2], "MSG_???"); 101376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 101476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 101576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 101676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 1017a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(recvmmsg) 10180873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab{ 10192950de36314b5ea88a3741e24f948113358f7ce2Dmitry V. Levin static char str[sizeof("left") + TIMESPEC_TEXT_BUFSIZE]; 1020e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin 1021a1d541ec56e2fb4716f083fcc814b1dedde63d87Denys Vlasenko if (entering(tcp)) { 1022894c7e3858ede412e37a1752c716bed7f30a9605Philippe Ombredanne printfd(tcp, tcp->u_arg[0]); 1023894c7e3858ede412e37a1752c716bed7f30a9605Philippe Ombredanne tprints(", "); 1024e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin if (verbose(tcp)) { 1025a1d541ec56e2fb4716f083fcc814b1dedde63d87Denys Vlasenko /* Abusing tcp->auxstr as temp storage. 10262950de36314b5ea88a3741e24f948113358f7ce2Dmitry V. Levin * Will be used and cleared on syscall exit. 1027a1d541ec56e2fb4716f083fcc814b1dedde63d87Denys Vlasenko */ 10282950de36314b5ea88a3741e24f948113358f7ce2Dmitry V. Levin tcp->auxstr = sprint_timespec(tcp, tcp->u_arg[4]); 1029e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin } else { 1030e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin tprintf("%#lx, %ld, ", tcp->u_arg[1], tcp->u_arg[2]); 1031e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin printflags(msg_flags, tcp->u_arg[3], "MSG_???"); 103260fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 1033e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin print_timespec(tcp, tcp->u_arg[4]); 1034e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin } 1035e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin return 0; 1036e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin } else { 1037e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin if (verbose(tcp)) { 10385ea97658e78b6ce9fb768ffdd6a4b682c5df8e90Dmitry V. Levin decode_mmsg(tcp, 0); 10392950de36314b5ea88a3741e24f948113358f7ce2Dmitry V. Levin tprints(", "); 1040e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin /* timeout on entrance */ 10412950de36314b5ea88a3741e24f948113358f7ce2Dmitry V. Levin tprints(tcp->auxstr); 1042e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin tcp->auxstr = NULL; 1043e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin } 1044e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin if (syserror(tcp)) 1045e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin return 0; 1046e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin if (tcp->u_rval == 0) { 1047e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin tcp->auxstr = "Timeout"; 1048e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin return RVAL_STR; 1049e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin } 1050e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin if (!verbose(tcp)) 1051e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin return 0; 1052e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin /* timeout on exit */ 10532950de36314b5ea88a3741e24f948113358f7ce2Dmitry V. Levin snprintf(str, sizeof(str), "left %s", 10542950de36314b5ea88a3741e24f948113358f7ce2Dmitry V. Levin sprint_timespec(tcp, tcp->u_arg[4])); 1055e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin tcp->auxstr = str; 1056e6591031475ace4ac54bb9995f21dd86fa857b1bDmitry V. Levin return RVAL_STR; 10570873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab } 10580873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab} 10590873f29af4c1b2357e4f13338731665dd1ee2893Andreas Schwab 10600ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/shutdown_modes.h" 10619cd385010ec1e0d22be70ff5163db194f1f22735Sebastian Pipping 1062a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(shutdown) 106376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 1064219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin printfd(tcp, tcp->u_arg[0]); 1065219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin tprints(", "); 1066219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin printxval(shutdown_modes, tcp->u_arg[1], "SHUT_???"); 1067219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin 1068219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin return RVAL_DECODED; 106976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 107076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 1071a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(getsockname) 107276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 107315114ec215f889b71fd1f9ed2012b8deeb33a55cDmitry V. Levin return do_sockname(tcp, -1); 107476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 107576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 10762a4f0521fc34f853c1bd41e5176d01162c161bbfDmitry V. Levinstatic void 10772a4f0521fc34f853c1bd41e5176d01162c161bbfDmitry V. Levinprintpair_fd(struct tcb *tcp, const int i0, const int i1) 10782a4f0521fc34f853c1bd41e5176d01162c161bbfDmitry V. Levin{ 10792a4f0521fc34f853c1bd41e5176d01162c161bbfDmitry V. Levin tprints("["); 10802a4f0521fc34f853c1bd41e5176d01162c161bbfDmitry V. Levin printfd(tcp, i0); 10812a4f0521fc34f853c1bd41e5176d01162c161bbfDmitry V. Levin tprints(", "); 10822a4f0521fc34f853c1bd41e5176d01162c161bbfDmitry V. Levin printfd(tcp, i1); 10832a4f0521fc34f853c1bd41e5176d01162c161bbfDmitry V. Levin tprints("]"); 10842a4f0521fc34f853c1bd41e5176d01162c161bbfDmitry V. Levin} 10852a4f0521fc34f853c1bd41e5176d01162c161bbfDmitry V. Levin 10862a4f0521fc34f853c1bd41e5176d01162c161bbfDmitry V. Levinstatic void 10872a4f0521fc34f853c1bd41e5176d01162c161bbfDmitry V. Levindecode_pair_fd(struct tcb *tcp, const long addr) 10882a4f0521fc34f853c1bd41e5176d01162c161bbfDmitry V. Levin{ 10892a4f0521fc34f853c1bd41e5176d01162c161bbfDmitry V. Levin int pair[2]; 10902a4f0521fc34f853c1bd41e5176d01162c161bbfDmitry V. Levin 10912a4f0521fc34f853c1bd41e5176d01162c161bbfDmitry V. Levin if (umove_or_printaddr(tcp, addr, &pair)) 10922a4f0521fc34f853c1bd41e5176d01162c161bbfDmitry V. Levin return; 10932a4f0521fc34f853c1bd41e5176d01162c161bbfDmitry V. Levin 10942a4f0521fc34f853c1bd41e5176d01162c161bbfDmitry V. Levin printpair_fd(tcp, pair[0], pair[1]); 10952a4f0521fc34f853c1bd41e5176d01162c161bbfDmitry V. Levin} 10962a4f0521fc34f853c1bd41e5176d01162c161bbfDmitry V. Levin 10974371b10b30ceb369942e93105c038519524ba18eDmitry V. Levinstatic int 10984371b10b30ceb369942e93105c038519524ba18eDmitry V. Levindo_pipe(struct tcb *tcp, int flags_arg) 10994371b10b30ceb369942e93105c038519524ba18eDmitry V. Levin{ 110076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (exiting(tcp)) { 110176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (syserror(tcp)) { 11026c277da20558fcae086c7a7a26cd63f4e553a84dDmitry V. Levin printaddr(tcp->u_arg[0]); 11034371b10b30ceb369942e93105c038519524ba18eDmitry V. Levin } else { 110478ed3f3558942b7c042aeb84ee0f4a2dccf64791Dmitry V. Levin#ifdef HAVE_GETRVAL2 11052a4f0521fc34f853c1bd41e5176d01162c161bbfDmitry V. Levin if (flags_arg < 0) { 11062a4f0521fc34f853c1bd41e5176d01162c161bbfDmitry V. Levin printpair_fd(tcp, tcp->u_rval, getrval2(tcp)); 11072a4f0521fc34f853c1bd41e5176d01162c161bbfDmitry V. Levin } else 110876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif 11092a4f0521fc34f853c1bd41e5176d01162c161bbfDmitry V. Levin decode_pair_fd(tcp, tcp->u_arg[0]); 11104371b10b30ceb369942e93105c038519524ba18eDmitry V. Levin } 11114371b10b30ceb369942e93105c038519524ba18eDmitry V. Levin if (flags_arg >= 0) { 111260fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 11134371b10b30ceb369942e93105c038519524ba18eDmitry V. Levin printflags(open_mode_flags, tcp->u_arg[flags_arg], "O_???"); 11144371b10b30ceb369942e93105c038519524ba18eDmitry V. Levin } 11154371b10b30ceb369942e93105c038519524ba18eDmitry V. Levin } 111676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 111776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 111876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 1119a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(pipe) 11204371b10b30ceb369942e93105c038519524ba18eDmitry V. Levin{ 11214371b10b30ceb369942e93105c038519524ba18eDmitry V. Levin return do_pipe(tcp, -1); 11224371b10b30ceb369942e93105c038519524ba18eDmitry V. Levin} 11234371b10b30ceb369942e93105c038519524ba18eDmitry V. Levin 1124a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(pipe2) 11254371b10b30ceb369942e93105c038519524ba18eDmitry V. Levin{ 11264371b10b30ceb369942e93105c038519524ba18eDmitry V. Levin return do_pipe(tcp, 1); 11274371b10b30ceb369942e93105c038519524ba18eDmitry V. Levin} 11284371b10b30ceb369942e93105c038519524ba18eDmitry V. Levin 1129a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(socketpair) 113076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 113176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 113276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printxval(domains, tcp->u_arg[0], "PF_???"); 113360fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 11341e42f2dbe721f7cb1e4bdfc9103bf358b4a443c1Dmitry V. Levin tprint_sock_type(tcp->u_arg[1]); 1135033fb910a291a26d714d277c748683e67903f44cDmitry V. Levin tprintf(", %lu", tcp->u_arg[2]); 113676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } else { 1137b679508f6ef838a390d807c1bb4696b096543475Dmitry V. Levin tprints(", "); 11382a4f0521fc34f853c1bd41e5176d01162c161bbfDmitry V. Levin decode_pair_fd(tcp, tcp->u_arg[3]); 113976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 114076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 114176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 114276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 11436d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#include "xlat/sockoptions.h" 11446d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#include "xlat/sockipoptions.h" 114554646b8e057443f0b76afe9a231eae63afbf5d5aMike Frysinger#include "xlat/getsockipoptions.h" 114654646b8e057443f0b76afe9a231eae63afbf5d5aMike Frysinger#include "xlat/setsockipoptions.h" 11476d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#include "xlat/sockipv6options.h" 114854646b8e057443f0b76afe9a231eae63afbf5d5aMike Frysinger#include "xlat/getsockipv6options.h" 114954646b8e057443f0b76afe9a231eae63afbf5d5aMike Frysinger#include "xlat/setsockipv6options.h" 11506d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#include "xlat/sockipxoptions.h" 11516d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#include "xlat/sockrawoptions.h" 11526d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#include "xlat/sockpacketoptions.h" 11536d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#include "xlat/socksctpoptions.h" 11546d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#include "xlat/socktcpoptions.h" 11556d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin 11560509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levinstatic void 115754646b8e057443f0b76afe9a231eae63afbf5d5aMike Frysingerprint_sockopt_fd_level_name(struct tcb *tcp, int fd, int level, int name, bool is_getsockopt) 115876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 11590509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin printfd(tcp, fd); 11600509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin tprints(", "); 11610509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin printxval(socketlayers, level, "SOL_??"); 11620509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin tprints(", "); 11630509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin 11640509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin switch (level) { 11650509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin case SOL_SOCKET: 11660509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin printxval(sockoptions, name, "SO_???"); 11670509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin break; 11680509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin case SOL_IP: 116954646b8e057443f0b76afe9a231eae63afbf5d5aMike Frysinger printxvals(name, "IP_???", sockipoptions, 117054646b8e057443f0b76afe9a231eae63afbf5d5aMike Frysinger is_getsockopt ? getsockipoptions : setsockipoptions, NULL); 11710509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin break; 11720509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin case SOL_IPV6: 117354646b8e057443f0b76afe9a231eae63afbf5d5aMike Frysinger printxvals(name, "IPV6_???", sockipv6options, 117454646b8e057443f0b76afe9a231eae63afbf5d5aMike Frysinger is_getsockopt ? getsockipv6options : setsockipv6options, NULL); 11750509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin break; 11760509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin case SOL_IPX: 11770509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin printxval(sockipxoptions, name, "IPX_???"); 11780509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin break; 11790509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin case SOL_PACKET: 11800509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin printxval(sockpacketoptions, name, "PACKET_???"); 11810509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin break; 11820509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin case SOL_TCP: 11830509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin printxval(socktcpoptions, name, "TCP_???"); 11840509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin break; 11850509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin case SOL_SCTP: 11860509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin printxval(socksctpoptions, name, "SCTP_???"); 11870509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin break; 11880509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin case SOL_RAW: 11890509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin printxval(sockrawoptions, name, "RAW_???"); 11900509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin break; 119176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 11920509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin /* Other SOL_* protocol levels still need work. */ 11930509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin 11940509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin default: 11950509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin tprintf("%u", name); 11960509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } 11970509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin 11980509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin tprints(", "); 11990509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin} 120093f7fccaa60735509fd75ad22c8a97a8cd52f6bbJohn Hughes 120193f7fccaa60735509fd75ad22c8a97a8cd52f6bbJohn Hughes#ifdef SO_LINGER 12020509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levinstatic void 12030509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levinprint_linger(struct tcb *tcp, long addr, int len) 12040509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin{ 12050509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin struct linger linger; 12060509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin 12070509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin if (len != sizeof(linger) || 12080509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin umove(tcp, addr, &linger) < 0) { 12096c277da20558fcae086c7a7a26cd63f4e553a84dDmitry V. Levin printaddr(addr); 12100509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin return; 12110509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } 12120509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin 12130509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin tprintf("{onoff=%d, linger=%d}", 12140509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin linger.l_onoff, 12150509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin linger.l_linger); 12160509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin} 12170509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin#endif /* SO_LINGER */ 12180509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin 12190ddd8addef9e9b0c7af00f70b97b3e464205ad1dDmitry V. Levin#ifdef SO_PEERCRED 12200509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levinstatic void 12210509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levinprint_ucred(struct tcb *tcp, long addr, int len) 12220509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin{ 12230509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin struct ucred uc; 12240509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin 12250509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin if (len != sizeof(uc) || 12260509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin umove(tcp, addr, &uc) < 0) { 12276c277da20558fcae086c7a7a26cd63f4e553a84dDmitry V. Levin printaddr(addr); 12280509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } else { 12290509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin tprintf("{pid=%u, uid=%u, gid=%u}", 12300509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin (unsigned) uc.pid, 12310509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin (unsigned) uc.uid, 12320509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin (unsigned) uc.gid); 12330509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } 12340509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin} 12350509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin#endif /* SO_PEERCRED */ 12360509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin 1237ca75bd6dffc01e4d95e85d3af82d446cd80afbb5Dmitry V. Levin#ifdef PACKET_STATISTICS 12380509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levinstatic void 12390509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levinprint_tpacket_stats(struct tcb *tcp, long addr, int len) 12400509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin{ 12410509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin struct tpacket_stats stats; 124293f7fccaa60735509fd75ad22c8a97a8cd52f6bbJohn Hughes 12430509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin if (len != sizeof(stats) || 12440509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin umove(tcp, addr, &stats) < 0) { 12456c277da20558fcae086c7a7a26cd63f4e553a84dDmitry V. Levin printaddr(addr); 12460509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } else { 12470509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin tprintf("{packets=%u, drops=%u}", 12480509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin stats.tp_packets, 12490509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin stats.tp_drops); 125076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 125176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 12520509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin#endif /* PACKET_STATISTICS */ 125376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 12540509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin#ifdef ICMP_FILTER 12556d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin# include "xlat/icmpfilterflags.h" 12566d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin 12570509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levinstatic void 12580509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levinprint_icmp_filter(struct tcb *tcp, long addr, int len) 12597987cdf192632516d6ba493b0a9943f5a3a7c362Wichert Akkerman{ 12607987cdf192632516d6ba493b0a9943f5a3a7c362Wichert Akkerman struct icmp_filter filter; 12617987cdf192632516d6ba493b0a9943f5a3a7c362Wichert Akkerman 12620509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin if (len != sizeof(filter) || 12630509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin umove(tcp, addr, &filter) < 0) { 12646c277da20558fcae086c7a7a26cd63f4e553a84dDmitry V. Levin printaddr(addr); 12657987cdf192632516d6ba493b0a9943f5a3a7c362Wichert Akkerman return; 12667987cdf192632516d6ba493b0a9943f5a3a7c362Wichert Akkerman } 12677987cdf192632516d6ba493b0a9943f5a3a7c362Wichert Akkerman 126860fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("~("); 1269b2dee13345a62c80a677f3342cd525d611fbc632Roland McGrath printflags(icmpfilterflags, ~filter.data, "ICMP_???"); 127060fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(")"); 12717987cdf192632516d6ba493b0a9943f5a3a7c362Wichert Akkerman} 12727987cdf192632516d6ba493b0a9943f5a3a7c362Wichert Akkerman#endif /* ICMP_FILTER */ 12737987cdf192632516d6ba493b0a9943f5a3a7c362Wichert Akkerman 12740509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levinstatic void 12750509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levinprint_getsockopt(struct tcb *tcp, int level, int name, long addr, int len) 127676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 12770509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin if (addr && verbose(tcp)) 127838ae88d332acd9f86a30d58158e306d795d98977John Hughes switch (level) { 1279989ebc91395600c21b4242aee27df9190b2166b3Denys Vlasenko case SOL_SOCKET: 128038ae88d332acd9f86a30d58158e306d795d98977John Hughes switch (name) { 12810509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin#ifdef SO_LINGER 1282989ebc91395600c21b4242aee27df9190b2166b3Denys Vlasenko case SO_LINGER: 12830509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin print_linger(tcp, addr, len); 12840509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin goto done; 12850509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin#endif 12860509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin#ifdef SO_PEERCRED 12870509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin case SO_PEERCRED: 12880509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin print_ucred(tcp, addr, len); 12890509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin goto done; 129038ae88d332acd9f86a30d58158e306d795d98977John Hughes#endif 129138ae88d332acd9f86a30d58158e306d795d98977John Hughes } 129238ae88d332acd9f86a30d58158e306d795d98977John Hughes break; 12930509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin 12940509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin case SOL_PACKET: 12950509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin switch (name) { 12966d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifdef PACKET_STATISTICS 12970509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin case PACKET_STATISTICS: 12980509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin print_tpacket_stats(tcp, addr, len); 12990509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin goto done; 13006d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif 13010509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } 130238ae88d332acd9f86a30d58158e306d795d98977John Hughes break; 13030509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin 13040509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin case SOL_RAW: 13050509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin switch (name) { 13066d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifdef ICMP_FILTER 13070509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin case ICMP_FILTER: 13080509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin print_icmp_filter(tcp, addr, len); 13090509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin goto done; 13106d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif 13110509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } 13124f6ba69d99a8b6933707abdeb0151f98c28172c9Roland McGrath break; 13130509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } 13140509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin 13150509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin /* default arg printing */ 13160509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin 13170509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin if (verbose(tcp)) { 13180509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin if (len == sizeof(int)) { 13190509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin printnum_int(tcp, addr, "%d"); 13200509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } else { 13210509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin printstr(tcp, addr, len); 13220509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } 13230509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } else { 13246c277da20558fcae086c7a7a26cd63f4e553a84dDmitry V. Levin printaddr(addr); 13250509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } 13260509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levindone: 13270509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin tprintf(", [%d]", len); 13280509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin} 13290509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin 1330a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(getsockopt) 13310509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin{ 13320509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin if (entering(tcp)) { 13330509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin print_sockopt_fd_level_name(tcp, tcp->u_arg[0], 133454646b8e057443f0b76afe9a231eae63afbf5d5aMike Frysinger tcp->u_arg[1], tcp->u_arg[2], true); 13350509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } else { 13360509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin int len; 13370509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin 13380509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin if (syserror(tcp) || umove(tcp, tcp->u_arg[4], &len) < 0) { 13390509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin tprintf("%#lx, %#lx", 13400509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin tcp->u_arg[3], tcp->u_arg[4]); 13410509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } else { 13420509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin print_getsockopt(tcp, tcp->u_arg[1], tcp->u_arg[2], 13430509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin tcp->u_arg[3], len); 13440509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } 13450509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } 13460509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin return 0; 13470509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin} 13480509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin 13497bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin#ifdef IP_ADD_MEMBERSHIP 13507bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levinstatic void 13517bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levinprint_mreq(struct tcb *tcp, long addr, unsigned int len) 13527bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin{ 13537bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin struct ip_mreq mreq; 13547bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin 13557bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin if (len < sizeof(mreq)) { 13567bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin printstr(tcp, addr, len); 13577bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin return; 13587bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin } 13596c277da20558fcae086c7a7a26cd63f4e553a84dDmitry V. Levin if (umove_or_printaddr(tcp, addr, &mreq)) 13607bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin return; 13616c277da20558fcae086c7a7a26cd63f4e553a84dDmitry V. Levin 13627bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin tprints("{imr_multiaddr=inet_addr("); 13637bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin print_quoted_string(inet_ntoa(mreq.imr_multiaddr), 13647bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin 16, QUOTE_0_TERMINATED); 13657bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin tprints("), imr_interface=inet_addr("); 13667bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin print_quoted_string(inet_ntoa(mreq.imr_interface), 13677bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin 16, QUOTE_0_TERMINATED); 13687bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin tprints(")}"); 13697bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin} 13707bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin#endif /* IP_ADD_MEMBERSHIP */ 13717bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin 13727bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin#ifdef IPV6_ADD_MEMBERSHIP 13737bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levinstatic void 13747bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levinprint_mreq6(struct tcb *tcp, long addr, unsigned int len) 13757bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin{ 13767bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin struct ipv6_mreq mreq; 13777bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin 13787bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin if (len < sizeof(mreq)) 13797bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin goto fail; 13807bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin 13816c277da20558fcae086c7a7a26cd63f4e553a84dDmitry V. Levin if (umove_or_printaddr(tcp, addr, &mreq)) 13827bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin return; 13837bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin 13847bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin#ifdef HAVE_INET_NTOP 13857bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin const struct in6_addr *in6 = &mreq.ipv6mr_multiaddr; 13867bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin char address[INET6_ADDRSTRLEN]; 13877bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin 13887bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin if (!inet_ntop(AF_INET6, in6, address, sizeof(address))) 13897bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin goto fail; 13907bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin 13917bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin tprints("{ipv6mr_multiaddr=inet_pton("); 13927bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin print_quoted_string(address, sizeof(address), QUOTE_0_TERMINATED); 13937bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin tprints("), ipv6mr_interface="); 13947bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin print_ifindex(mreq.ipv6mr_interface); 13957bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin tprints("}"); 13967bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin return; 13977bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin#endif /* HAVE_INET_NTOP */ 13987bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin 13997bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levinfail: 14007bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin printstr(tcp, addr, len); 14017bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin} 14027bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin#endif /* IPV6_ADD_MEMBERSHIP */ 14037bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin 1404a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin#ifdef MCAST_JOIN_GROUP 1405a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levinstatic void 1406a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levinprint_group_req(struct tcb *tcp, long addr, int len) 1407a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin{ 1408a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin struct group_req greq; 1409a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin 1410a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin if (len != sizeof(greq) || 1411a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin umove(tcp, addr, &greq) < 0) { 14126c277da20558fcae086c7a7a26cd63f4e553a84dDmitry V. Levin printaddr(addr); 1413a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin return; 1414a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin } 1415a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin 14161019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin tprintf("{gr_interface=%u, gr_group=", greq.gr_interface); 14171019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin print_sockaddr(tcp, (const void *) &greq.gr_group, 14181019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin sizeof(greq.gr_group)); 14191019f002c11a075abbbc195b62617775d5c5e0d0Dmitry V. Levin tprintf("}"); 1420a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin 1421a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin} 1422a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin#endif /* MCAST_JOIN_GROUP */ 1423a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin 14240509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin#ifdef PACKET_RX_RING 14250509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levinstatic void 14260509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levinprint_tpacket_req(struct tcb *tcp, long addr, int len) 14270509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin{ 14280509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin struct tpacket_req req; 14290509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin 14300509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin if (len != sizeof(req) || 14310509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin umove(tcp, addr, &req) < 0) { 14326c277da20558fcae086c7a7a26cd63f4e553a84dDmitry V. Levin printaddr(addr); 14330509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } else { 14340509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin tprintf("{block_size=%u, block_nr=%u, " 14350509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin "frame_size=%u, frame_nr=%u}", 14360509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin req.tp_block_size, 14370509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin req.tp_block_nr, 14380509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin req.tp_frame_size, 14390509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin req.tp_frame_nr); 14400509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } 14410509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin} 14420509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin#endif /* PACKET_RX_RING */ 14430509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin 144402f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin#ifdef PACKET_ADD_MEMBERSHIP 144502f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin# include "xlat/packet_mreq_type.h" 144602f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin 144702f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levinstatic void 144802f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levinprint_packet_mreq(struct tcb *tcp, long addr, int len) 144902f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin{ 145002f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin struct packet_mreq mreq; 145102f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin 145202f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin if (len != sizeof(mreq) || 145302f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin umove(tcp, addr, &mreq) < 0) { 14546c277da20558fcae086c7a7a26cd63f4e553a84dDmitry V. Levin printaddr(addr); 145502f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin } else { 145602f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin unsigned int i; 145702f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin 145802f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin tprintf("{mr_ifindex=%u, mr_type=", mreq.mr_ifindex); 145902f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin printxval(packet_mreq_type, mreq.mr_type, "PACKET_MR_???"); 146002f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin tprintf(", mr_alen=%u, mr_address=", mreq.mr_alen); 146102f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin if (mreq.mr_alen > ARRAY_SIZE(mreq.mr_address)) 146202f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin mreq.mr_alen = ARRAY_SIZE(mreq.mr_address); 146302f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin for (i = 0; i < mreq.mr_alen; ++i) 146402f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin tprintf("%02x", mreq.mr_address[i]); 146502f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin tprints("}"); 146602f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin } 146702f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin} 146802f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin#endif /* PACKET_ADD_MEMBERSHIP */ 146902f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin 14700509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levinstatic void 14710509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levinprint_setsockopt(struct tcb *tcp, int level, int name, long addr, int len) 14720509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin{ 14730509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin if (addr && verbose(tcp)) 14740509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin switch (level) { 14750509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin case SOL_SOCKET: 14760509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin switch (name) { 14770509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin#ifdef SO_LINGER 14780509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin case SO_LINGER: 14790509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin print_linger(tcp, addr, len); 14800509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin goto done; 14814f6ba69d99a8b6933707abdeb0151f98c28172c9Roland McGrath#endif 14820509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } 148338ae88d332acd9f86a30d58158e306d795d98977John Hughes break; 14840509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin 1485a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin case SOL_IP: 1486a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin switch (name) { 14877bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin#ifdef IP_ADD_MEMBERSHIP 14887bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin case IP_ADD_MEMBERSHIP: 14897bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin case IP_DROP_MEMBERSHIP: 14907bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin print_mreq(tcp, addr, len); 14917bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin goto done; 14927bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin#endif /* IP_ADD_MEMBERSHIP */ 1493a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin#ifdef MCAST_JOIN_GROUP 1494a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin case MCAST_JOIN_GROUP: 1495a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin case MCAST_LEAVE_GROUP: 1496a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin print_group_req(tcp, addr, len); 1497a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin goto done; 1498a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin#endif /* MCAST_JOIN_GROUP */ 1499a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin } 15003910d0f67caccf421c72a19026d89115000ebefdDmitry V. Levin break; 15017bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin 15027bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin case SOL_IPV6: 15037bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin switch (name) { 15047bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin#ifdef IPV6_ADD_MEMBERSHIP 15057bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin case IPV6_ADD_MEMBERSHIP: 15067bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin case IPV6_DROP_MEMBERSHIP: 15077bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin# ifdef IPV6_JOIN_ANYCAST 15087bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin case IPV6_JOIN_ANYCAST: 15097bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin# endif 15107bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin# ifdef IPV6_LEAVE_ANYCAST 15117bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin case IPV6_LEAVE_ANYCAST: 15127bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin# endif 15137bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin print_mreq6(tcp, addr, len); 15147bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin goto done; 15157bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin#endif /* IPV6_ADD_MEMBERSHIP */ 15167bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin } 15177bee462a645a69e042c7262317f40c77d1516d95Dmitry V. Levin break; 1518a0a4909988f9a5db1427dbf7a5ef4efbfb3e8125Dmitry V. Levin 1519989ebc91395600c21b4242aee27df9190b2166b3Denys Vlasenko case SOL_PACKET: 1520ca75bd6dffc01e4d95e85d3af82d446cd80afbb5Dmitry V. Levin switch (name) { 15216d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifdef PACKET_RX_RING 1522989ebc91395600c21b4242aee27df9190b2166b3Denys Vlasenko case PACKET_RX_RING: 15236d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin# ifdef PACKET_TX_RING 1524989ebc91395600c21b4242aee27df9190b2166b3Denys Vlasenko case PACKET_TX_RING: 15256d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin# endif 15260509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin print_tpacket_req(tcp, addr, len); 15270509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin goto done; 15286d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif /* PACKET_RX_RING */ 15296d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifdef PACKET_ADD_MEMBERSHIP 153002f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin case PACKET_ADD_MEMBERSHIP: 153102f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin case PACKET_DROP_MEMBERSHIP: 153202f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin print_packet_mreq(tcp, addr, len); 153302f2f091d58023912ad8814c960cf6c8bc3d0574Dmitry V. Levin goto done; 15346d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif /* PACKET_ADD_MEMBERSHIP */ 1535ca75bd6dffc01e4d95e85d3af82d446cd80afbb5Dmitry V. Levin } 153638ae88d332acd9f86a30d58158e306d795d98977John Hughes break; 15370509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin 1538989ebc91395600c21b4242aee27df9190b2166b3Denys Vlasenko case SOL_RAW: 153938ae88d332acd9f86a30d58158e306d795d98977John Hughes switch (name) { 15406d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#ifdef ICMP_FILTER 15410509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin case ICMP_FILTER: 15420509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin print_icmp_filter(tcp, addr, len); 15430509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin goto done; 15446d31c7a6a974472cf32579dbd61554b45a5fbd0eDmitry V. Levin#endif 154538ae88d332acd9f86a30d58158e306d795d98977John Hughes } 154638ae88d332acd9f86a30d58158e306d795d98977John Hughes break; 154738ae88d332acd9f86a30d58158e306d795d98977John Hughes } 154893f7fccaa60735509fd75ad22c8a97a8cd52f6bbJohn Hughes 154938ae88d332acd9f86a30d58158e306d795d98977John Hughes /* default arg printing */ 155093f7fccaa60735509fd75ad22c8a97a8cd52f6bbJohn Hughes 15510509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin if (verbose(tcp)) { 15520509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin if (len == sizeof(int)) { 15530509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin printnum_int(tcp, addr, "%d"); 15540509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } else { 15550509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin printstr(tcp, addr, len); 15560509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } 15570509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin } else { 15586c277da20558fcae086c7a7a26cd63f4e553a84dDmitry V. Levin printaddr(addr); 155938ae88d332acd9f86a30d58158e306d795d98977John Hughes } 15600509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levindone: 15610509c8ed6db16c10d26801e6be8acc923eba2a32Dmitry V. Levin tprintf(", %d", len); 156238ae88d332acd9f86a30d58158e306d795d98977John Hughes} 156338ae88d332acd9f86a30d58158e306d795d98977John Hughes 1564a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(setsockopt) 156538ae88d332acd9f86a30d58158e306d795d98977John Hughes{ 1566219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin print_sockopt_fd_level_name(tcp, tcp->u_arg[0], 156754646b8e057443f0b76afe9a231eae63afbf5d5aMike Frysinger tcp->u_arg[1], tcp->u_arg[2], false); 1568219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin print_setsockopt(tcp, tcp->u_arg[1], tcp->u_arg[2], 1569219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin tcp->u_arg[3], tcp->u_arg[4]); 1570219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin 1571219b3a79b48f86168564773711d5954ae70fdf39Dmitry V. Levin return RVAL_DECODED; 157276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 1573