stream.c revision b63256e69bf3f1a74aadb0e14556490bc8f4ef95
176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman/* 276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com> 34dc8a2aec63e4fb5ee2688544c4de323ed5de3efWichert Akkerman * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl> 476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * All rights reserved. 576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * 676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * Redistribution and use in source and binary forms, with or without 776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * modification, are permitted provided that the following conditions 876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * are met: 976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * 1. Redistributions of source code must retain the above copyright 1076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * notice, this list of conditions and the following disclaimer. 1176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * 2. Redistributions in binary form must reproduce the above copyright 1276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * notice, this list of conditions and the following disclaimer in the 1376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * documentation and/or other materials provided with the distribution. 1476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * 3. The name of the author may not be used to endorse or promote products 1576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * derived from this software without specific prior written permission. 1676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * 1776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 1876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 1976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 2076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 2176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 2276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 2676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * 2876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * $Id$ 2976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman */ 3076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 3176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#include "defs.h" 3234e014ac7502357e599935c62c18cba564c451beRoland McGrath#include <sys/syscall.h> 3376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 3442080d852e2dc0ef3eb507ef561e91cc97cff515Wichert Akkerman#ifdef HAVE_POLL_H 3542080d852e2dc0ef3eb507ef561e91cc97cff515Wichert Akkerman#include <poll.h> 3642080d852e2dc0ef3eb507ef561e91cc97cff515Wichert Akkerman#endif 37245a6ac0e71d7ecdbb776b12b735de58cf5a055bPavel Machek#ifdef HAVE_SYS_POLL_H 3876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#include <sys/poll.h> 39245a6ac0e71d7ecdbb776b12b735de58cf5a055bPavel Machek#endif 4042080d852e2dc0ef3eb507ef561e91cc97cff515Wichert Akkerman#ifdef HAVE_STROPTS_H 4142080d852e2dc0ef3eb507ef561e91cc97cff515Wichert Akkerman#include <stropts.h> 4242080d852e2dc0ef3eb507ef561e91cc97cff515Wichert Akkerman#endif 4342080d852e2dc0ef3eb507ef561e91cc97cff515Wichert Akkerman#ifdef HAVE_SYS_CONF_H 4442080d852e2dc0ef3eb507ef561e91cc97cff515Wichert Akkerman#include <sys/conf.h> 4542080d852e2dc0ef3eb507ef561e91cc97cff515Wichert Akkerman#endif 4642080d852e2dc0ef3eb507ef561e91cc97cff515Wichert Akkerman#ifdef HAVE_SYS_STREAM_H 4742080d852e2dc0ef3eb507ef561e91cc97cff515Wichert Akkerman#include <sys/stream.h> 4842080d852e2dc0ef3eb507ef561e91cc97cff515Wichert Akkerman#endif 4942080d852e2dc0ef3eb507ef561e91cc97cff515Wichert Akkerman#ifdef HAVE_SYS_TIHDR_H 5042080d852e2dc0ef3eb507ef561e91cc97cff515Wichert Akkerman#include <sys/tihdr.h> 5142080d852e2dc0ef3eb507ef561e91cc97cff515Wichert Akkerman#endif 5276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 53561c7995d7524afbf92689593b9ba5f9615d0982Roland McGrath#if defined(HAVE_SYS_STREAM_H) || defined(LINUX) || defined(FREEBSD) 5442080d852e2dc0ef3eb507ef561e91cc97cff515Wichert Akkerman 5542080d852e2dc0ef3eb507ef561e91cc97cff515Wichert Akkerman#ifndef HAVE_STROPTS_H 5676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#define RS_HIPRI 1 5776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanstruct strbuf { 58adedb510197209e7077310f9e9f67e3d51fb8617Denys Vlasenko int maxlen; /* no. of bytes in buffer */ 59adedb510197209e7077310f9e9f67e3d51fb8617Denys Vlasenko int len; /* no. of bytes returned */ 6030145dda9d7ff70df1d5ad750a183572c73e8963Dmitry V. Levin const char *buf; /* pointer to data */ 6176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman}; 6276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#define MORECTL 1 6376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#define MOREDATA 2 6442080d852e2dc0ef3eb507ef561e91cc97cff515Wichert Akkerman#endif /* !HAVE_STROPTS_H */ 6576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 6676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef HAVE_SYS_TIUSER_H 6776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#include <sys/tiuser.h> 6876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#include <sys/sockmod.h> 6976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#include <sys/timod.h> 7076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif /* HAVE_SYS_TIUSER_H */ 7176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 72bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman#ifndef FREEBSD 73d9f816f60457930af27349fac3d23b3b78338036Roland McGrathstatic const struct xlat msgflags[] = { 7476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { RS_HIPRI, "RS_HIPRI" }, 7576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { 0, NULL }, 7676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman}; 7776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 7876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 7976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanstatic void 801201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkoprintstrbuf(struct tcb *tcp, struct strbuf *sbp, int getting) 8176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 8276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (sbp->maxlen == -1 && getting) 8376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("{maxlen=-1}"); 8476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else { 8576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("{"); 8676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (getting) 8776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("maxlen=%d, ", sbp->maxlen); 8876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("len=%d, buf=", sbp->len); 892e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman printstr(tcp, (unsigned long) sbp->buf, sbp->len); 9076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("}"); 9176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 9276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 9376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 9476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanstatic void 951201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkoprintstrbufarg(struct tcb *tcp, int arg, int getting) 9676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 9776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman struct strbuf buf; 9876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 9976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (arg == 0) 10076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("NULL"); 10176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else if (umove(tcp, arg, &buf) < 0) 10276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("{...}"); 10376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else 10476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printstrbuf(tcp, &buf, getting); 10576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", "); 10676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 10776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 10876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 1091201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkosys_putmsg(struct tcb *tcp) 11076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 11176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman int i; 11276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 11376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 11476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* fd */ 11576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%ld, ", tcp->u_arg[0]); 11676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* control and data */ 11776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman for (i = 1; i < 3; i++) 11876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printstrbufarg(tcp, tcp->u_arg[i], 0); 11976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* flags */ 120b2dee13345a62c80a677f3342cd525d611fbc632Roland McGrath printflags(msgflags, tcp->u_arg[3], "RS_???"); 12176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 12276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 12376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 12476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 125b9fe011cdfb0a3014e68a6e82007b6c2703a340bDmitry V. Levin#if defined(SPARC) || defined(SPARC64) || defined(SUNOS4) || defined(SVR4) 12676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 1271201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkosys_getmsg(struct tcb *tcp) 12876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 12976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman int i, flags; 13076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 13176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 13276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* fd */ 13376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%lu, ", tcp->u_arg[0]); 13476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } else { 13576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (syserror(tcp)) { 13676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%#lx, %#lx, %#lx", 13776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tcp->u_arg[1], tcp->u_arg[2], tcp->u_arg[3]); 13876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 13976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 14076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* control and data */ 14176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman for (i = 1; i < 3; i++) 14276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printstrbufarg(tcp, tcp->u_arg[i], 1); 14376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* pointer to flags */ 14476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (tcp->u_arg[3] == 0) 14576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("NULL"); 14676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else if (umove(tcp, tcp->u_arg[3], &flags) < 0) 14776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("[?]"); 14876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else { 14976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("["); 150b2dee13345a62c80a677f3342cd525d611fbc632Roland McGrath printflags(msgflags, flags, "RS_???"); 15176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("]"); 15276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 15376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* decode return value */ 15476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman switch (tcp->u_rval) { 15576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case MORECTL: 15676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tcp->auxstr = "MORECTL"; 15776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman break; 15876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case MORECTL|MOREDATA: 15976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tcp->auxstr = "MORECTL|MOREDATA"; 16076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman break; 16176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case MOREDATA: 16276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tcp->auxstr = "MORECTL"; 16376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman break; 16476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman default: 16576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tcp->auxstr = NULL; 16676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman break; 16776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 16876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 16976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return RVAL_HEX | RVAL_STR; 17076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 171b9fe011cdfb0a3014e68a6e82007b6c2703a340bDmitry V. Levin#endif /* SPARC || SPARC64 || SUNOS4 || SVR4 */ 17276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 17334e014ac7502357e599935c62c18cba564c451beRoland McGrath#if defined SYS_putpmsg || defined SYS_getpmsg 174d9f816f60457930af27349fac3d23b3b78338036Roland McGrathstatic const struct xlat pmsgflags[] = { 175d856b99aff36012d1c8bc72012d0ede414e17971Wichert Akkerman#ifdef MSG_HIPRI 17676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { MSG_HIPRI, "MSG_HIPRI" }, 177d856b99aff36012d1c8bc72012d0ede414e17971Wichert Akkerman#endif 178d856b99aff36012d1c8bc72012d0ede414e17971Wichert Akkerman#ifdef MSG_AND 17976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { MSG_ANY, "MSG_ANY" }, 180d856b99aff36012d1c8bc72012d0ede414e17971Wichert Akkerman#endif 181d856b99aff36012d1c8bc72012d0ede414e17971Wichert Akkerman#ifdef MSG_BAND 18276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { MSG_BAND, "MSG_BAND" }, 183d856b99aff36012d1c8bc72012d0ede414e17971Wichert Akkerman#endif 18476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { 0, NULL }, 18576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman}; 18634e014ac7502357e599935c62c18cba564c451beRoland McGrath#endif 18776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 18834e014ac7502357e599935c62c18cba564c451beRoland McGrath#ifdef SYS_putpmsg 18976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 1901201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkosys_putpmsg(struct tcb *tcp) 19176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 19276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman int i; 19376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 19476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 19576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* fd */ 19676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%ld, ", tcp->u_arg[0]); 19776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* control and data */ 19876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman for (i = 1; i < 3; i++) 19976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printstrbufarg(tcp, tcp->u_arg[i], 0); 20076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* band */ 20176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%ld, ", tcp->u_arg[3]); 20276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* flags */ 203b2dee13345a62c80a677f3342cd525d611fbc632Roland McGrath printflags(pmsgflags, tcp->u_arg[4], "MSG_???"); 20476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 20576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 20676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 20734e014ac7502357e599935c62c18cba564c451beRoland McGrath#endif /* SYS_putpmsg */ 20876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 20934e014ac7502357e599935c62c18cba564c451beRoland McGrath#ifdef SYS_getpmsg 21076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 2111201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkosys_getpmsg(struct tcb *tcp) 21276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 21376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman int i, flags; 21476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 21576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 21676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* fd */ 21776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%lu, ", tcp->u_arg[0]); 21876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } else { 21976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (syserror(tcp)) { 22076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%#lx, %#lx, %#lx, %#lx", tcp->u_arg[1], 22176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tcp->u_arg[2], tcp->u_arg[3], tcp->u_arg[4]); 22276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 22376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 22476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* control and data */ 22576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman for (i = 1; i < 3; i++) 22676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printstrbufarg(tcp, tcp->u_arg[i], 1); 22776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* pointer to band */ 22876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printnum(tcp, tcp->u_arg[3], "%d"); 229906dade0ddcd670302fe8ce4e00b9a449b61999fWichert Akkerman tprintf(", "); 23076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* pointer to flags */ 23176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (tcp->u_arg[4] == 0) 23276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("NULL"); 23376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else if (umove(tcp, tcp->u_arg[4], &flags) < 0) 23476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("[?]"); 23576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else { 23676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("["); 237b2dee13345a62c80a677f3342cd525d611fbc632Roland McGrath printflags(pmsgflags, flags, "MSG_???"); 23876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("]"); 23976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 24076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* decode return value */ 24176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman switch (tcp->u_rval) { 24276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case MORECTL: 24376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tcp->auxstr = "MORECTL"; 24476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman break; 24576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case MORECTL|MOREDATA: 24676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tcp->auxstr = "MORECTL|MOREDATA"; 24776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman break; 24876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case MOREDATA: 24976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tcp->auxstr = "MORECTL"; 25076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman break; 25176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman default: 25276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tcp->auxstr = NULL; 25376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman break; 25476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 25576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 25676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return RVAL_HEX | RVAL_STR; 25776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 25834e014ac7502357e599935c62c18cba564c451beRoland McGrath#endif /* SYS_getpmsg */ 25976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 260bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman#endif /* !FREEBSD */ 26176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 26276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 263faf722234dc8af97776f94fdda7e100fb60650a2Wichert Akkerman#ifdef HAVE_SYS_POLL_H 264faf722234dc8af97776f94fdda7e100fb60650a2Wichert Akkerman 265d9f816f60457930af27349fac3d23b3b78338036Roland McGrathstatic const struct xlat pollflags[] = { 266245a6ac0e71d7ecdbb776b12b735de58cf5a055bPavel Machek#ifdef POLLIN 26776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { POLLIN, "POLLIN" }, 26876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { POLLPRI, "POLLPRI" }, 26976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { POLLOUT, "POLLOUT" }, 27076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef POLLRDNORM 27176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { POLLRDNORM, "POLLRDNORM" }, 27276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif 27376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef POLLWRNORM 27476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { POLLWRNORM, "POLLWRNORM" }, 27576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif 27676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef POLLRDBAND 27776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { POLLRDBAND, "POLLRDBAND" }, 27876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif 27976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef POLLWRBAND 28076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { POLLWRBAND, "POLLWRBAND" }, 28176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif 28276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { POLLERR, "POLLERR" }, 28376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { POLLHUP, "POLLHUP" }, 28476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { POLLNVAL, "POLLNVAL" }, 285245a6ac0e71d7ecdbb776b12b735de58cf5a055bPavel Machek#endif 28676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { 0, NULL }, 28776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman}; 28876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 28995ebf5abfc1f3ed8b451b7816aa51b93a49e3ef7Dmitry V. Levinstatic int 290f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrathdecode_poll(struct tcb *tcp, long pts) 29176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 292aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath struct pollfd fds; 293aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath unsigned nfds; 294aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath unsigned long size, start, cur, end, abbrev_end; 295aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath int failed = 0; 29676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 297f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath if (entering(tcp)) { 298f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath nfds = tcp->u_arg[1]; 299f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath size = sizeof(fds) * nfds; 300f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath start = tcp->u_arg[0]; 301f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath end = start + size; 302f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath if (nfds == 0 || size / sizeof(fds) != nfds || end < start) { 303f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath tprintf("%#lx, %d, ", 304f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath tcp->u_arg[0], nfds); 305f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath return 0; 306f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath } 307f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath if (abbrev(tcp)) { 308f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath abbrev_end = start + max_strlen * sizeof(fds); 309f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath if (abbrev_end < start) 310f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath abbrev_end = end; 311f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath } else { 312aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath abbrev_end = end; 313f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath } 314f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath tprintf("["); 315f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath for (cur = start; cur < end; cur += sizeof(fds)) { 316f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath if (cur > start) 317f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath tprintf(", "); 318f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath if (cur >= abbrev_end) { 319f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath tprintf("..."); 320f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath break; 321f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath } 322f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath if (umoven(tcp, cur, sizeof fds, (char *) &fds) < 0) { 323f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath tprintf("?"); 324f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath failed = 1; 325f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath break; 326f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath } 327f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath if (fds.fd < 0) { 328f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath tprintf("{fd=%d}", fds.fd); 329f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath continue; 330f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath } 3313138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin tprintf("{fd="); 3323138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin printfd(tcp, fds.fd); 3333138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin tprintf(", events="); 334f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath printflags(pollflags, fds.events, "POLL???"); 335f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath tprintf("}"); 336f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath } 337f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath tprintf("]"); 338f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath if (failed) 339f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath tprintf(" %#lx", start); 340f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath tprintf(", %d, ", nfds); 341f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath return 0; 342aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath } else { 343f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath static char outstr[1024]; 344f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath char str[64]; 345adedb510197209e7077310f9e9f67e3d51fb8617Denys Vlasenko const char *flagstr; 346f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath unsigned int cumlen; 347f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath 348f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath if (syserror(tcp)) 349f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath return 0; 350f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath if (tcp->u_rval == 0) { 351f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath tcp->auxstr = "Timeout"; 352f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath return RVAL_STR; 35376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 354f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath 355f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath nfds = tcp->u_arg[1]; 356f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath size = sizeof(fds) * nfds; 357f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath start = tcp->u_arg[0]; 358f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath end = start + size; 359f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath if (nfds == 0 || size / sizeof(fds) != nfds || end < start) 360f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath return 0; 361f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath if (abbrev(tcp)) { 362f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath abbrev_end = start + max_strlen * sizeof(fds); 363f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath if (abbrev_end < start) 364f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath abbrev_end = end; 365f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath } else { 366f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath abbrev_end = end; 36776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 368f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath 369f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath outstr[0] = '\0'; 370f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath cumlen = 0; 371f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath 372f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath for (cur = start; cur < end; cur += sizeof(fds)) { 373f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath if (umoven(tcp, cur, sizeof fds, (char *) &fds) < 0) { 374f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath ++cumlen; 375f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath if (cumlen < sizeof(outstr)) 376f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath strcat(outstr, "?"); 377f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath failed = 1; 378f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath break; 379f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath } 380f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath if (!fds.revents) 381f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath continue; 382f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath if (!cumlen) { 383f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath ++cumlen; 384f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath strcat(outstr, "["); 385f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath } else { 386f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath cumlen += 2; 387f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath if (cumlen < sizeof(outstr)) 388f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath strcat(outstr, ", "); 389f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath } 390f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath if (cur >= abbrev_end) { 391f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath cumlen += 3; 392f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath if (cumlen < sizeof(outstr)) 393f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath strcat(outstr, "..."); 394f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath break; 395f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath } 396f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath sprintf(str, "{fd=%d, revents=", fds.fd); 397b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko flagstr = sprintflags("", pollflags, fds.revents); 398f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath cumlen += strlen(str) + strlen(flagstr) + 1; 399f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath if (cumlen < sizeof(outstr)) { 400f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath strcat(outstr, str); 401f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath strcat(outstr, flagstr); 402f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath strcat(outstr, "}"); 403f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath } 40476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 405f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath if (failed) 406f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath return 0; 407f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath 408f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath if (cumlen && ++cumlen < sizeof(outstr)) 409f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath strcat(outstr, "]"); 410f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath 411f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath if (pts) { 412f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath char str[128]; 413f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath 414f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath sprintf(str, "%sleft ", cumlen ? ", " : ""); 4156bc09daaf6b249b35dec4283b165b1f39e6d6a0dRoland McGrath sprint_timespec(str + strlen(str), tcp, pts); 416f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath if ((cumlen += strlen(str)) < sizeof(outstr)) 417f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath strcat(outstr, str); 41876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 419f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath 420f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath if (!outstr[0]) 421f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath return 0; 422f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath 423f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath tcp->auxstr = outstr; 424f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath return RVAL_STR; 425aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath } 42695ebf5abfc1f3ed8b451b7816aa51b93a49e3ef7Dmitry V. Levin} 42795ebf5abfc1f3ed8b451b7816aa51b93a49e3ef7Dmitry V. Levin 42895ebf5abfc1f3ed8b451b7816aa51b93a49e3ef7Dmitry V. Levinint 42995ebf5abfc1f3ed8b451b7816aa51b93a49e3ef7Dmitry V. Levinsys_poll(struct tcb *tcp) 43095ebf5abfc1f3ed8b451b7816aa51b93a49e3ef7Dmitry V. Levin{ 431f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath int rc = decode_poll(tcp, 0); 432f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath if (entering(tcp)) { 43376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef INFTIM 43495ebf5abfc1f3ed8b451b7816aa51b93a49e3ef7Dmitry V. Levin if (tcp->u_arg[2] == INFTIM) 43595ebf5abfc1f3ed8b451b7816aa51b93a49e3ef7Dmitry V. Levin tprintf("INFTIM"); 43695ebf5abfc1f3ed8b451b7816aa51b93a49e3ef7Dmitry V. Levin else 43776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif 43895ebf5abfc1f3ed8b451b7816aa51b93a49e3ef7Dmitry V. Levin tprintf("%ld", tcp->u_arg[2]); 43995ebf5abfc1f3ed8b451b7816aa51b93a49e3ef7Dmitry V. Levin } 44095ebf5abfc1f3ed8b451b7816aa51b93a49e3ef7Dmitry V. Levin return rc; 44176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 44276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 44395ebf5abfc1f3ed8b451b7816aa51b93a49e3ef7Dmitry V. Levin#ifdef LINUX 44495ebf5abfc1f3ed8b451b7816aa51b93a49e3ef7Dmitry V. Levinint 44595ebf5abfc1f3ed8b451b7816aa51b93a49e3ef7Dmitry V. Levinsys_ppoll(struct tcb *tcp) 44695ebf5abfc1f3ed8b451b7816aa51b93a49e3ef7Dmitry V. Levin{ 447f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath int rc = decode_poll(tcp, tcp->u_arg[2]); 448f17106ee78b1c60ef3cdab3ca474bc11f1fe6923Roland McGrath if (entering(tcp)) { 4496bc09daaf6b249b35dec4283b165b1f39e6d6a0dRoland McGrath print_timespec(tcp, tcp->u_arg[2]); 4506bc09daaf6b249b35dec4283b165b1f39e6d6a0dRoland McGrath tprintf(", "); 45195ebf5abfc1f3ed8b451b7816aa51b93a49e3ef7Dmitry V. Levin print_sigset(tcp, tcp->u_arg[3], 0); 45295ebf5abfc1f3ed8b451b7816aa51b93a49e3ef7Dmitry V. Levin tprintf(", %lu", tcp->u_arg[4]); 45395ebf5abfc1f3ed8b451b7816aa51b93a49e3ef7Dmitry V. Levin } 45495ebf5abfc1f3ed8b451b7816aa51b93a49e3ef7Dmitry V. Levin return rc; 45595ebf5abfc1f3ed8b451b7816aa51b93a49e3ef7Dmitry V. Levin} 45695ebf5abfc1f3ed8b451b7816aa51b93a49e3ef7Dmitry V. Levin#endif 457aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath 458faf722234dc8af97776f94fdda7e100fb60650a2Wichert Akkerman#else /* !HAVE_SYS_POLL_H */ 459faf722234dc8af97776f94fdda7e100fb60650a2Wichert Akkermanint 4601201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkosys_poll(struct tcb *tcp) 461faf722234dc8af97776f94fdda7e100fb60650a2Wichert Akkerman{ 4625ae2b7c601dadf79a4345e1ee21053947b9e4addDenys Vlasenko return 0; 463faf722234dc8af97776f94fdda7e100fb60650a2Wichert Akkerman} 464faf722234dc8af97776f94fdda7e100fb60650a2Wichert Akkerman#endif 465faf722234dc8af97776f94fdda7e100fb60650a2Wichert Akkerman 466561c7995d7524afbf92689593b9ba5f9615d0982Roland McGrath#if !defined(LINUX) && !defined(FREEBSD) 46776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 468d9f816f60457930af27349fac3d23b3b78338036Roland McGrathstatic const struct xlat stream_flush_options[] = { 46976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { FLUSHR, "FLUSHR" }, 47076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { FLUSHW, "FLUSHW" }, 47176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { FLUSHRW, "FLUSHRW" }, 47276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef FLUSHBAND 47376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { FLUSHBAND, "FLUSHBAND" }, 47476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif 47576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { 0, NULL }, 47676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman}; 47776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 478d9f816f60457930af27349fac3d23b3b78338036Roland McGrathstatic const struct xlat stream_setsig_flags[] = { 47976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { S_INPUT, "S_INPUT" }, 48076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { S_HIPRI, "S_HIPRI" }, 48176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { S_OUTPUT, "S_OUTPUT" }, 48276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { S_MSG, "S_MSG" }, 48376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef S_ERROR 48476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { S_ERROR, "S_ERROR" }, 48576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif 48676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef S_HANGUP 48776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { S_HANGUP, "S_HANGUP" }, 48876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif 48976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef S_RDNORM 49076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { S_RDNORM, "S_RDNORM" }, 49176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif 49276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef S_WRNORM 49376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { S_WRNORM, "S_WRNORM" }, 49476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif 49576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef S_RDBAND 49676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { S_RDBAND, "S_RDBAND" }, 49776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif 49876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef S_WRBAND 49976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { S_WRBAND, "S_WRBAND" }, 50076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif 50176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef S_BANDURG 50276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { S_BANDURG, "S_BANDURG" }, 50376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif 50476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { 0, NULL }, 50576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman}; 50676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 507d9f816f60457930af27349fac3d23b3b78338036Roland McGrathstatic const struct xlat stream_read_options[] = { 50876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { RNORM, "RNORM" }, 50976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { RMSGD, "RMSGD" }, 51076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { RMSGN, "RMSGN" }, 51176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { 0, NULL }, 51276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman}; 51376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 514d9f816f60457930af27349fac3d23b3b78338036Roland McGrathstatic const struct xlat stream_read_flags[] = { 51576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef RPROTDAT 51676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { RPROTDAT, "RPROTDAT" }, 51776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif 51876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef RPROTDIS 51976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { RPROTDIS, "RPROTDIS" }, 52076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif 52176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef RPROTNORM 52276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { RPROTNORM, "RPROTNORM" }, 52376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif 52476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { 0, NULL }, 52576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman}; 52676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 52776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifndef RMODEMASK 52876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#define RMODEMASK (~0) 52976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif 53076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 53176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef I_SWROPT 532d9f816f60457930af27349fac3d23b3b78338036Roland McGrathstatic const struct xlat stream_write_flags[] = { 53376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { SNDZERO, "SNDZERO" }, 53476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { SNDPIPE, "SNDPIPE" }, 53576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { 0, NULL }, 53676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman}; 53776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif /* I_SWROPT */ 53876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 53976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef I_ATMARK 540d9f816f60457930af27349fac3d23b3b78338036Roland McGrathstatic const struct xlat stream_atmark_options[] = { 54176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { ANYMARK, "ANYMARK" }, 54276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { LASTMARK, "LASTMARK" }, 54376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { 0, NULL }, 54476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman}; 54576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif /* I_ATMARK */ 54676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 54776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef TI_BIND 548d9f816f60457930af27349fac3d23b3b78338036Roland McGrathstatic const struct xlat transport_user_options[] = { 54976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { T_CONN_REQ, "T_CONN_REQ" }, 55076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { T_CONN_RES, "T_CONN_RES" }, 55176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { T_DISCON_REQ, "T_DISCON_REQ" }, 55276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { T_DATA_REQ, "T_DATA_REQ" }, 55376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { T_EXDATA_REQ, "T_EXDATA_REQ" }, 55476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { T_INFO_REQ, "T_INFO_REQ" }, 55576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { T_BIND_REQ, "T_BIND_REQ" }, 55676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { T_UNBIND_REQ, "T_UNBIND_REQ" }, 55776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { T_UNITDATA_REQ,"T_UNITDATA_REQ"}, 55876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { T_OPTMGMT_REQ,"T_OPTMGMT_REQ" }, 55976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { T_ORDREL_REQ, "T_ORDREL_REQ" }, 56076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { 0, NULL }, 56176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman}; 56276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 563b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenkostatic const struct xlat transport_user_flags[] = { 56438ae88d332acd9f86a30d58158e306d795d98977John Hughes { 0, "0" }, 56538ae88d332acd9f86a30d58158e306d795d98977John Hughes { T_MORE, "T_MORE" }, 56638ae88d332acd9f86a30d58158e306d795d98977John Hughes { T_EXPEDITED, "T_EXPEDITED" }, 56738ae88d332acd9f86a30d58158e306d795d98977John Hughes { T_NEGOTIATE, "T_NEGOTIATE" }, 56838ae88d332acd9f86a30d58158e306d795d98977John Hughes { T_CHECK, "T_CHECK" }, 56938ae88d332acd9f86a30d58158e306d795d98977John Hughes { T_DEFAULT, "T_DEFAULT" }, 57038ae88d332acd9f86a30d58158e306d795d98977John Hughes { T_SUCCESS, "T_SUCCESS" }, 57138ae88d332acd9f86a30d58158e306d795d98977John Hughes { T_FAILURE, "T_FAILURE" }, 57238ae88d332acd9f86a30d58158e306d795d98977John Hughes { T_CURRENT, "T_CURRENT" }, 57338ae88d332acd9f86a30d58158e306d795d98977John Hughes { T_PARTSUCCESS,"T_PARTSUCCESS" }, 57438ae88d332acd9f86a30d58158e306d795d98977John Hughes { T_READONLY, "T_READONLY" }, 57538ae88d332acd9f86a30d58158e306d795d98977John Hughes { T_NOTSUPPORT, "T_NOTSUPPORT" }, 57676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { 0, NULL }, 57776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman}; 57838ae88d332acd9f86a30d58158e306d795d98977John Hughes 57938ae88d332acd9f86a30d58158e306d795d98977John Hughes 5806d2b34971b33d379c89c36c5ad1b0c6d5d12c453Roland McGrath#ifdef HAVE_STRUCT_T_OPTHDR 58138ae88d332acd9f86a30d58158e306d795d98977John Hughes 582b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenkostatic const struct xlat xti_level[] = { 58338ae88d332acd9f86a30d58158e306d795d98977John Hughes { XTI_GENERIC, "XTI_GENERIC" }, 58438ae88d332acd9f86a30d58158e306d795d98977John Hughes { 0, NULL }, 58538ae88d332acd9f86a30d58158e306d795d98977John Hughes}; 58638ae88d332acd9f86a30d58158e306d795d98977John Hughes 587b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenkostatic const struct xlat xti_generic[] = { 58838ae88d332acd9f86a30d58158e306d795d98977John Hughes { XTI_DEBUG, "XTI_DEBUG" }, 58938ae88d332acd9f86a30d58158e306d795d98977John Hughes { XTI_LINGER, "XTI_LINGER" }, 59038ae88d332acd9f86a30d58158e306d795d98977John Hughes { XTI_RCVBUF, "XTI_RCVBUF" }, 59138ae88d332acd9f86a30d58158e306d795d98977John Hughes { XTI_RCVLOWAT, "XTI_RCVLOWAT" }, 59238ae88d332acd9f86a30d58158e306d795d98977John Hughes { XTI_SNDBUF, "XTI_SNDBUF" }, 59338ae88d332acd9f86a30d58158e306d795d98977John Hughes { XTI_SNDLOWAT, "XTI_SNDLOWAT" }, 59438ae88d332acd9f86a30d58158e306d795d98977John Hughes { 0, NULL }, 59538ae88d332acd9f86a30d58158e306d795d98977John Hughes}; 59638ae88d332acd9f86a30d58158e306d795d98977John Hughes 59738ae88d332acd9f86a30d58158e306d795d98977John Hughes 59838ae88d332acd9f86a30d58158e306d795d98977John Hughes 59938ae88d332acd9f86a30d58158e306d795d98977John Hughesvoid 6001201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkoprint_xti_optmgmt(struct tcb *tcp, long addr, int len) 60138ae88d332acd9f86a30d58158e306d795d98977John Hughes{ 60238ae88d332acd9f86a30d58158e306d795d98977John Hughes int c = 0; 60338ae88d332acd9f86a30d58158e306d795d98977John Hughes struct t_opthdr hdr; 60438ae88d332acd9f86a30d58158e306d795d98977John Hughes 6052c4e3a8061130493bd196564f096b677c5528fc1John Hughes while (len >= (int) sizeof hdr) { 60638ae88d332acd9f86a30d58158e306d795d98977John Hughes if (umove(tcp, addr, &hdr) < 0) break; 60738ae88d332acd9f86a30d58158e306d795d98977John Hughes if (c++) { 608b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko tprintf(", "); 60938ae88d332acd9f86a30d58158e306d795d98977John Hughes } 61038ae88d332acd9f86a30d58158e306d795d98977John Hughes else if (len > hdr.len + sizeof hdr) { 611b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko tprintf("["); 61238ae88d332acd9f86a30d58158e306d795d98977John Hughes } 613b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko tprintf("{level="); 614b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko printxval(xti_level, hdr.level, "???"); 615b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko tprintf(", name="); 61638ae88d332acd9f86a30d58158e306d795d98977John Hughes switch (hdr.level) { 61738ae88d332acd9f86a30d58158e306d795d98977John Hughes case XTI_GENERIC: 618b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko printxval(xti_generic, hdr.name, "XTI_???"); 61938ae88d332acd9f86a30d58158e306d795d98977John Hughes break; 62038ae88d332acd9f86a30d58158e306d795d98977John Hughes default: 621b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko tprintf("%ld", hdr.name); 62238ae88d332acd9f86a30d58158e306d795d98977John Hughes break; 62338ae88d332acd9f86a30d58158e306d795d98977John Hughes } 624b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko tprintf(", status="); 625b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko printxval(transport_user_flags, hdr.status, "T_???"); 62638ae88d332acd9f86a30d58158e306d795d98977John Hughes addr += sizeof hdr; 62738ae88d332acd9f86a30d58158e306d795d98977John Hughes len -= sizeof hdr; 62838ae88d332acd9f86a30d58158e306d795d98977John Hughes if ((hdr.len -= sizeof hdr) > 0) { 62938ae88d332acd9f86a30d58158e306d795d98977John Hughes if (hdr.len > len) break; 630b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko tprintf(", val="); 631b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko if (len == sizeof(int)) 632b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko printnum(tcp, addr, "%d"); 63338ae88d332acd9f86a30d58158e306d795d98977John Hughes else 634b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko printstr(tcp, addr, hdr.len); 63538ae88d332acd9f86a30d58158e306d795d98977John Hughes addr += hdr.len; 63638ae88d332acd9f86a30d58158e306d795d98977John Hughes len -= hdr.len; 63738ae88d332acd9f86a30d58158e306d795d98977John Hughes } 638b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko tprintf("}"); 63938ae88d332acd9f86a30d58158e306d795d98977John Hughes } 64038ae88d332acd9f86a30d58158e306d795d98977John Hughes if (len > 0) { 641b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko if (c++) tprintf(", "); 642b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko printstr(tcp, addr, len); 64338ae88d332acd9f86a30d58158e306d795d98977John Hughes } 644b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko if (c > 1) tprintf("]"); 64538ae88d332acd9f86a30d58158e306d795d98977John Hughes} 64638ae88d332acd9f86a30d58158e306d795d98977John Hughes 64738ae88d332acd9f86a30d58158e306d795d98977John Hughes#endif 64838ae88d332acd9f86a30d58158e306d795d98977John Hughes 64938ae88d332acd9f86a30d58158e306d795d98977John Hughes 65038ae88d332acd9f86a30d58158e306d795d98977John Hughesstatic void 6511201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkoprint_optmgmt(struct tcb *tcp, long addr, int len) 65238ae88d332acd9f86a30d58158e306d795d98977John Hughes{ 65334e014ac7502357e599935c62c18cba564c451beRoland McGrath /* We don't know how to tell if TLI (socket) or XTI 65438ae88d332acd9f86a30d58158e306d795d98977John Hughes optmgmt is being used yet, assume TLI. */ 6556d2b34971b33d379c89c36c5ad1b0c6d5d12c453Roland McGrath#if defined (HAVE_STRUCT_OPTHDR) 656b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko print_sock_optmgmt(tcp, addr, len); 6576d2b34971b33d379c89c36c5ad1b0c6d5d12c453Roland McGrath#elif defined (HAVE_STRUCT_T_OPTHDR) 658b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko print_xti_optmgmt(tcp, addr, len); 65938ae88d332acd9f86a30d58158e306d795d98977John Hughes#else 660b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko printstr(tcp, addr, len); 66138ae88d332acd9f86a30d58158e306d795d98977John Hughes#endif 66238ae88d332acd9f86a30d58158e306d795d98977John Hughes} 66338ae88d332acd9f86a30d58158e306d795d98977John Hughes 66438ae88d332acd9f86a30d58158e306d795d98977John Hughes 66538ae88d332acd9f86a30d58158e306d795d98977John Hughes 66638ae88d332acd9f86a30d58158e306d795d98977John Hughes 667b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenkostatic const struct xlat service_type[] = { 66838ae88d332acd9f86a30d58158e306d795d98977John Hughes { T_COTS, "T_COTS" }, 66938ae88d332acd9f86a30d58158e306d795d98977John Hughes { T_COTS_ORD, "T_COTS_ORD" }, 67038ae88d332acd9f86a30d58158e306d795d98977John Hughes { T_CLTS, "T_CLTS" }, 67138ae88d332acd9f86a30d58158e306d795d98977John Hughes { 0, NULL }, 67238ae88d332acd9f86a30d58158e306d795d98977John Hughes}; 67338ae88d332acd9f86a30d58158e306d795d98977John Hughes 674b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenkostatic const struct xlat ts_state[] = { 67538ae88d332acd9f86a30d58158e306d795d98977John Hughes { TS_UNBND, "TS_UNBND" }, 67638ae88d332acd9f86a30d58158e306d795d98977John Hughes { TS_WACK_BREQ, "TS_WACK_BREQ" }, 67738ae88d332acd9f86a30d58158e306d795d98977John Hughes { TS_WACK_UREQ, "TS_WACK_UREQ" }, 67838ae88d332acd9f86a30d58158e306d795d98977John Hughes { TS_IDLE, "TS_IDLE" }, 67938ae88d332acd9f86a30d58158e306d795d98977John Hughes { TS_WACK_OPTREQ,"TS_WACK_OPTREQ"}, 68038ae88d332acd9f86a30d58158e306d795d98977John Hughes { TS_WACK_CREQ, "TS_WACK_CREQ" }, 68138ae88d332acd9f86a30d58158e306d795d98977John Hughes { TS_WCON_CREQ, "TS_WCON_CREQ" }, 68238ae88d332acd9f86a30d58158e306d795d98977John Hughes { TS_WRES_CIND, "TS_WRES_CIND" }, 68338ae88d332acd9f86a30d58158e306d795d98977John Hughes { TS_WACK_CRES, "TS_WACK_CRES" }, 68438ae88d332acd9f86a30d58158e306d795d98977John Hughes { TS_DATA_XFER, "TS_DATA_XFER" }, 68538ae88d332acd9f86a30d58158e306d795d98977John Hughes { TS_WIND_ORDREL,"TS_WIND_ORDREL"}, 68638ae88d332acd9f86a30d58158e306d795d98977John Hughes { TS_WREQ_ORDREL,"TS_WREQ_ORDREL"}, 68738ae88d332acd9f86a30d58158e306d795d98977John Hughes { TS_WACK_DREQ6,"TS_WACK_DREQ6" }, 68838ae88d332acd9f86a30d58158e306d795d98977John Hughes { TS_WACK_DREQ7,"TS_WACK_DREQ7" }, 68938ae88d332acd9f86a30d58158e306d795d98977John Hughes { TS_WACK_DREQ9,"TS_WACK_DREQ9" }, 69038ae88d332acd9f86a30d58158e306d795d98977John Hughes { TS_WACK_DREQ10,"TS_WACK_DREQ10"}, 69138ae88d332acd9f86a30d58158e306d795d98977John Hughes { TS_WACK_DREQ11,"TS_WACK_DREQ11"}, 69238ae88d332acd9f86a30d58158e306d795d98977John Hughes { 0, NULL }, 69338ae88d332acd9f86a30d58158e306d795d98977John Hughes}; 69438ae88d332acd9f86a30d58158e306d795d98977John Hughes 695b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenkostatic const struct xlat provider_flags[] = { 69638ae88d332acd9f86a30d58158e306d795d98977John Hughes { 0, "0" }, 69738ae88d332acd9f86a30d58158e306d795d98977John Hughes { SENDZERO, "SENDZERO" }, 69838ae88d332acd9f86a30d58158e306d795d98977John Hughes { EXPINLINE, "EXPINLINE" }, 69938ae88d332acd9f86a30d58158e306d795d98977John Hughes { XPG4_1, "XPG4_1" }, 70038ae88d332acd9f86a30d58158e306d795d98977John Hughes { 0, NULL }, 70138ae88d332acd9f86a30d58158e306d795d98977John Hughes}; 70238ae88d332acd9f86a30d58158e306d795d98977John Hughes 70338ae88d332acd9f86a30d58158e306d795d98977John Hughes 704b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenkostatic const struct xlat tli_errors[] = { 70538ae88d332acd9f86a30d58158e306d795d98977John Hughes { TBADADDR, "TBADADDR" }, 70638ae88d332acd9f86a30d58158e306d795d98977John Hughes { TBADOPT, "TBADOPT" }, 70738ae88d332acd9f86a30d58158e306d795d98977John Hughes { TACCES, "TACCES" }, 70838ae88d332acd9f86a30d58158e306d795d98977John Hughes { TBADF, "TBADF" }, 70938ae88d332acd9f86a30d58158e306d795d98977John Hughes { TNOADDR, "TNOADDR" }, 71038ae88d332acd9f86a30d58158e306d795d98977John Hughes { TOUTSTATE, "TOUTSTATE" }, 71138ae88d332acd9f86a30d58158e306d795d98977John Hughes { TBADSEQ, "TBADSEQ" }, 71238ae88d332acd9f86a30d58158e306d795d98977John Hughes { TSYSERR, "TSYSERR" }, 71338ae88d332acd9f86a30d58158e306d795d98977John Hughes { TLOOK, "TLOOK" }, 71438ae88d332acd9f86a30d58158e306d795d98977John Hughes { TBADDATA, "TBADDATA" }, 71538ae88d332acd9f86a30d58158e306d795d98977John Hughes { TBUFOVFLW, "TBUFOVFLW" }, 71638ae88d332acd9f86a30d58158e306d795d98977John Hughes { TFLOW, "TFLOW" }, 71738ae88d332acd9f86a30d58158e306d795d98977John Hughes { TNODATA, "TNODATA" }, 71838ae88d332acd9f86a30d58158e306d795d98977John Hughes { TNODIS, "TNODIS" }, 71938ae88d332acd9f86a30d58158e306d795d98977John Hughes { TNOUDERR, "TNOUDERR" }, 72038ae88d332acd9f86a30d58158e306d795d98977John Hughes { TBADFLAG, "TBADFLAG" }, 72138ae88d332acd9f86a30d58158e306d795d98977John Hughes { TNOREL, "TNOREL" }, 72238ae88d332acd9f86a30d58158e306d795d98977John Hughes { TNOTSUPPORT, "TNOTSUPPORT" }, 72338ae88d332acd9f86a30d58158e306d795d98977John Hughes { TSTATECHNG, "TSTATECHNG" }, 72438ae88d332acd9f86a30d58158e306d795d98977John Hughes { TNOSTRUCTYPE, "TNOSTRUCTYPE" }, 72538ae88d332acd9f86a30d58158e306d795d98977John Hughes { TBADNAME, "TBADNAME" }, 72638ae88d332acd9f86a30d58158e306d795d98977John Hughes { TBADQLEN, "TBADQLEN" }, 72738ae88d332acd9f86a30d58158e306d795d98977John Hughes { TADDRBUSY, "TADDRBUSY" }, 72838ae88d332acd9f86a30d58158e306d795d98977John Hughes { TINDOUT, "TINDOUT" }, 72938ae88d332acd9f86a30d58158e306d795d98977John Hughes { TPROVMISMATCH,"TPROVMISMATCH" }, 73038ae88d332acd9f86a30d58158e306d795d98977John Hughes { TRESQLEN, "TRESQLEN" }, 73138ae88d332acd9f86a30d58158e306d795d98977John Hughes { TRESADDR, "TRESADDR" }, 73238ae88d332acd9f86a30d58158e306d795d98977John Hughes { TQFULL, "TQFULL" }, 73338ae88d332acd9f86a30d58158e306d795d98977John Hughes { TPROTO, "TPROTO" }, 73438ae88d332acd9f86a30d58158e306d795d98977John Hughes { 0, NULL }, 73538ae88d332acd9f86a30d58158e306d795d98977John Hughes}; 73638ae88d332acd9f86a30d58158e306d795d98977John Hughes 73738ae88d332acd9f86a30d58158e306d795d98977John Hughes 73838ae88d332acd9f86a30d58158e306d795d98977John Hughesstatic int 7391201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkoprint_transport_message(struct tcb *tcp, int expect, long addr, int len) 74038ae88d332acd9f86a30d58158e306d795d98977John Hughes{ 74138ae88d332acd9f86a30d58158e306d795d98977John Hughes union T_primitives m; 74238ae88d332acd9f86a30d58158e306d795d98977John Hughes int c = 0; 74338ae88d332acd9f86a30d58158e306d795d98977John Hughes 74438ae88d332acd9f86a30d58158e306d795d98977John Hughes if (len < sizeof m.type) goto dump; 74538ae88d332acd9f86a30d58158e306d795d98977John Hughes 746b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko if (umove(tcp, addr, &m.type) < 0) goto dump; 74738ae88d332acd9f86a30d58158e306d795d98977John Hughes 74838ae88d332acd9f86a30d58158e306d795d98977John Hughes#define GET(type, struct) \ 74938ae88d332acd9f86a30d58158e306d795d98977John Hughes do { \ 75038ae88d332acd9f86a30d58158e306d795d98977John Hughes if (len < sizeof m.struct) goto dump; \ 751b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko if (umove(tcp, addr, &m.struct) < 0) goto dump;\ 752b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko tprintf("{"); \ 75338ae88d332acd9f86a30d58158e306d795d98977John Hughes if (expect != type) { \ 75438ae88d332acd9f86a30d58158e306d795d98977John Hughes ++c; \ 755b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko tprintf(#type); \ 75638ae88d332acd9f86a30d58158e306d795d98977John Hughes } \ 75738ae88d332acd9f86a30d58158e306d795d98977John Hughes } \ 75838ae88d332acd9f86a30d58158e306d795d98977John Hughes while (0) 75938ae88d332acd9f86a30d58158e306d795d98977John Hughes 76038ae88d332acd9f86a30d58158e306d795d98977John Hughes#define COMMA() \ 761b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko do { if (c++) tprintf(", "); } while (0) 76234e014ac7502357e599935c62c18cba564c451beRoland McGrath 76338ae88d332acd9f86a30d58158e306d795d98977John Hughes 76438ae88d332acd9f86a30d58158e306d795d98977John Hughes#define STRUCT(struct, elem, print) \ 76538ae88d332acd9f86a30d58158e306d795d98977John Hughes do { \ 766b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko COMMA(); \ 76738ae88d332acd9f86a30d58158e306d795d98977John Hughes if (m.struct.elem##_length < 0 || \ 76838ae88d332acd9f86a30d58158e306d795d98977John Hughes m.struct.elem##_offset < sizeof m.struct || \ 76938ae88d332acd9f86a30d58158e306d795d98977John Hughes m.struct.elem##_offset + m.struct.elem##_length > len) \ 77038ae88d332acd9f86a30d58158e306d795d98977John Hughes { \ 771b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko tprintf(#elem "_length=%ld, " #elem "_offset=%ld",\ 77238ae88d332acd9f86a30d58158e306d795d98977John Hughes m.struct.elem##_length, \ 77338ae88d332acd9f86a30d58158e306d795d98977John Hughes m.struct.elem##_offset); \ 77438ae88d332acd9f86a30d58158e306d795d98977John Hughes } \ 77538ae88d332acd9f86a30d58158e306d795d98977John Hughes else { \ 776b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko tprintf(#elem "="); \ 777b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko print(tcp, \ 77838ae88d332acd9f86a30d58158e306d795d98977John Hughes addr + m.struct.elem##_offset, \ 77938ae88d332acd9f86a30d58158e306d795d98977John Hughes m.struct.elem##_length); \ 78038ae88d332acd9f86a30d58158e306d795d98977John Hughes } \ 78138ae88d332acd9f86a30d58158e306d795d98977John Hughes } \ 78238ae88d332acd9f86a30d58158e306d795d98977John Hughes while (0) 78338ae88d332acd9f86a30d58158e306d795d98977John Hughes 784b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko#define ADDR(struct, elem) STRUCT(struct, elem, printstr) 78534e014ac7502357e599935c62c18cba564c451beRoland McGrath 78638ae88d332acd9f86a30d58158e306d795d98977John Hughes switch (m.type) { 78738ae88d332acd9f86a30d58158e306d795d98977John Hughes#ifdef T_CONN_REQ 78838ae88d332acd9f86a30d58158e306d795d98977John Hughes case T_CONN_REQ: /* connect request */ 789b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko GET(T_CONN_REQ, conn_req); 790b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko ADDR(conn_req, DEST); 791b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko ADDR(conn_req, OPT); 79238ae88d332acd9f86a30d58158e306d795d98977John Hughes break; 79338ae88d332acd9f86a30d58158e306d795d98977John Hughes#endif 79438ae88d332acd9f86a30d58158e306d795d98977John Hughes#ifdef T_CONN_RES 79538ae88d332acd9f86a30d58158e306d795d98977John Hughes case T_CONN_RES: /* connect response */ 796b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko GET(T_CONN_RES, conn_res); 79738dc6bb84fefe9e310177afe09cf37f88a2abb67Roland McGrath#ifdef HAVE_STRUCT_T_CONN_RES_QUEUE_PTR 798b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko COMMA(); 799b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko tprintf("QUEUE=%p", m.conn_res.QUEUE_ptr); 80038dc6bb84fefe9e310177afe09cf37f88a2abb67Roland McGrath#elif defined HAVE_STRUCT_T_CONN_RES_ACCEPTOR_ID 801b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko COMMA(); 802b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko tprintf("ACCEPTOR=%#lx", m.conn_res.ACCEPTOR_id); 80338dc6bb84fefe9e310177afe09cf37f88a2abb67Roland McGrath#endif 804b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko ADDR(conn_res, OPT); 805b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko COMMA(); 806b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko tprintf("SEQ=%ld", m.conn_res.SEQ_number); 80738ae88d332acd9f86a30d58158e306d795d98977John Hughes break; 80838ae88d332acd9f86a30d58158e306d795d98977John Hughes#endif 80938ae88d332acd9f86a30d58158e306d795d98977John Hughes#ifdef T_DISCON_REQ 81038ae88d332acd9f86a30d58158e306d795d98977John Hughes case T_DISCON_REQ: /* disconnect request */ 811b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko GET(T_DISCON_REQ, discon_req); 812b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko COMMA(); 813b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko tprintf("SEQ=%ld", m.discon_req.SEQ_number); 81438ae88d332acd9f86a30d58158e306d795d98977John Hughes break; 81538ae88d332acd9f86a30d58158e306d795d98977John Hughes#endif 81638ae88d332acd9f86a30d58158e306d795d98977John Hughes#ifdef T_DATA_REQ 81738ae88d332acd9f86a30d58158e306d795d98977John Hughes case T_DATA_REQ: /* data request */ 818b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko GET(T_DATA_REQ, data_req); 819b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko COMMA(); 820b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko tprintf("MORE=%ld", m.data_req.MORE_flag); 82138ae88d332acd9f86a30d58158e306d795d98977John Hughes break; 82238ae88d332acd9f86a30d58158e306d795d98977John Hughes#endif 82338ae88d332acd9f86a30d58158e306d795d98977John Hughes#ifdef T_EXDATA_REQ 82438ae88d332acd9f86a30d58158e306d795d98977John Hughes case T_EXDATA_REQ: /* expedited data req */ 825b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko GET(T_EXDATA_REQ, exdata_req); 826b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko COMMA(); 827b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko tprintf("MORE=%ld", m.exdata_req.MORE_flag); 82838ae88d332acd9f86a30d58158e306d795d98977John Hughes break; 82938ae88d332acd9f86a30d58158e306d795d98977John Hughes#endif 83038ae88d332acd9f86a30d58158e306d795d98977John Hughes#ifdef T_INFO_REQ 83138ae88d332acd9f86a30d58158e306d795d98977John Hughes case T_INFO_REQ: /* information req */ 832b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko GET(T_INFO_REQ, info_req); 83338ae88d332acd9f86a30d58158e306d795d98977John Hughes break; 83438ae88d332acd9f86a30d58158e306d795d98977John Hughes#endif 83538ae88d332acd9f86a30d58158e306d795d98977John Hughes#ifdef T_BIND_REQ 83638ae88d332acd9f86a30d58158e306d795d98977John Hughes case T_BIND_REQ: /* bind request */ 83738ae88d332acd9f86a30d58158e306d795d98977John Hughes#ifdef O_T_BIND_REQ 83838ae88d332acd9f86a30d58158e306d795d98977John Hughes case O_T_BIND_REQ: /* Ugly xti/tli hack */ 83938ae88d332acd9f86a30d58158e306d795d98977John Hughes#endif 840b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko GET(T_BIND_REQ, bind_req); 841b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko ADDR(bind_req, ADDR); 842b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko COMMA(); 843b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko tprintf("CONIND=%ld", m.bind_req.CONIND_number); 84438ae88d332acd9f86a30d58158e306d795d98977John Hughes break; 84538ae88d332acd9f86a30d58158e306d795d98977John Hughes#endif 84638ae88d332acd9f86a30d58158e306d795d98977John Hughes#ifdef T_UNBIND_REQ 84738ae88d332acd9f86a30d58158e306d795d98977John Hughes case T_UNBIND_REQ: /* unbind request */ 848b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko GET(T_UNBIND_REQ, unbind_req); 84938ae88d332acd9f86a30d58158e306d795d98977John Hughes break; 85038ae88d332acd9f86a30d58158e306d795d98977John Hughes#endif 85138ae88d332acd9f86a30d58158e306d795d98977John Hughes#ifdef T_UNITDATA_REQ 85238ae88d332acd9f86a30d58158e306d795d98977John Hughes case T_UNITDATA_REQ: /* unitdata requset */ 853b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko GET(T_UNITDATA_REQ, unitdata_req); 854b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko ADDR(unitdata_req, DEST); 855b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko ADDR(unitdata_req, OPT); 85638ae88d332acd9f86a30d58158e306d795d98977John Hughes break; 85738ae88d332acd9f86a30d58158e306d795d98977John Hughes#endif 85838ae88d332acd9f86a30d58158e306d795d98977John Hughes#ifdef T_OPTMGMT_REQ 85938ae88d332acd9f86a30d58158e306d795d98977John Hughes case T_OPTMGMT_REQ: /* manage opt req */ 860b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko GET(T_OPTMGMT_REQ, optmgmt_req); 861b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko COMMA(); 862b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko tprintf("MGMT="); 863b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko printflags(transport_user_flags, m.optmgmt_req.MGMT_flags, 864b2dee13345a62c80a677f3342cd525d611fbc632Roland McGrath "T_???"); 865b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko STRUCT(optmgmt_req, OPT, print_optmgmt); 86638ae88d332acd9f86a30d58158e306d795d98977John Hughes break; 86738ae88d332acd9f86a30d58158e306d795d98977John Hughes#endif 86838ae88d332acd9f86a30d58158e306d795d98977John Hughes#ifdef T_ORDREL_REQ 86938ae88d332acd9f86a30d58158e306d795d98977John Hughes case T_ORDREL_REQ: /* orderly rel req */ 870b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko GET(T_ORDREL_REQ, ordrel_req); 87138ae88d332acd9f86a30d58158e306d795d98977John Hughes break; 87238ae88d332acd9f86a30d58158e306d795d98977John Hughes#endif 87338ae88d332acd9f86a30d58158e306d795d98977John Hughes#ifdef T_CONN_IND 87438ae88d332acd9f86a30d58158e306d795d98977John Hughes case T_CONN_IND: /* connect indication */ 875b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko GET(T_CONN_IND, conn_ind); 876b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko ADDR(conn_ind, SRC); 877b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko ADDR(conn_ind, OPT); 878b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko tprintf(", SEQ=%ld", m.conn_ind.SEQ_number); 87938ae88d332acd9f86a30d58158e306d795d98977John Hughes break; 88038ae88d332acd9f86a30d58158e306d795d98977John Hughes#endif 88138ae88d332acd9f86a30d58158e306d795d98977John Hughes#ifdef T_CONN_CON 88238ae88d332acd9f86a30d58158e306d795d98977John Hughes case T_CONN_CON: /* connect corfirm */ 883b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko GET(T_CONN_CON, conn_con); 884b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko ADDR(conn_con, RES); 885b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko ADDR(conn_con, OPT); 88638ae88d332acd9f86a30d58158e306d795d98977John Hughes break; 88738ae88d332acd9f86a30d58158e306d795d98977John Hughes#endif 88838ae88d332acd9f86a30d58158e306d795d98977John Hughes#ifdef T_DISCON_IND 88938ae88d332acd9f86a30d58158e306d795d98977John Hughes case T_DISCON_IND: /* discon indication */ 890b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko GET(T_DISCON_IND, discon_ind); 891b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko COMMA(); 892b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko tprintf("DISCON=%ld, SEQ=%ld", 89338ae88d332acd9f86a30d58158e306d795d98977John Hughes m.discon_ind.DISCON_reason, m.discon_ind.SEQ_number); 89438ae88d332acd9f86a30d58158e306d795d98977John Hughes break; 89538ae88d332acd9f86a30d58158e306d795d98977John Hughes#endif 89638ae88d332acd9f86a30d58158e306d795d98977John Hughes#ifdef T_DATA_IND 89738ae88d332acd9f86a30d58158e306d795d98977John Hughes case T_DATA_IND: /* data indication */ 898b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko GET(T_DATA_IND, data_ind); 899b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko COMMA(); 900b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko tprintf("MORE=%ld", m.data_ind.MORE_flag); 90138ae88d332acd9f86a30d58158e306d795d98977John Hughes break; 90238ae88d332acd9f86a30d58158e306d795d98977John Hughes#endif 90338ae88d332acd9f86a30d58158e306d795d98977John Hughes#ifdef T_EXDATA_IND 90438ae88d332acd9f86a30d58158e306d795d98977John Hughes case T_EXDATA_IND: /* expedited data ind */ 905b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko GET(T_EXDATA_IND, exdata_ind); 906b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko COMMA(); 907b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko tprintf("MORE=%ld", m.exdata_ind.MORE_flag); 90838ae88d332acd9f86a30d58158e306d795d98977John Hughes break; 90938ae88d332acd9f86a30d58158e306d795d98977John Hughes#endif 91038ae88d332acd9f86a30d58158e306d795d98977John Hughes#ifdef T_INFO_ACK 91138ae88d332acd9f86a30d58158e306d795d98977John Hughes case T_INFO_ACK: /* info ack */ 912b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko GET(T_INFO_ACK, info_ack); 913b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko COMMA(); 914b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko tprintf("TSDU=%ld, ETSDU=%ld, CDATA=%ld, DDATA=%ld, " 91538ae88d332acd9f86a30d58158e306d795d98977John Hughes "ADDR=%ld, OPT=%ld, TIDU=%ld, SERV=", 91638ae88d332acd9f86a30d58158e306d795d98977John Hughes m.info_ack.TSDU_size, m.info_ack.ETSDU_size, 91738ae88d332acd9f86a30d58158e306d795d98977John Hughes m.info_ack.CDATA_size, m.info_ack.DDATA_size, 91838ae88d332acd9f86a30d58158e306d795d98977John Hughes m.info_ack.ADDR_size, m.info_ack.OPT_size, 91938ae88d332acd9f86a30d58158e306d795d98977John Hughes m.info_ack.TIDU_size); 920b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko printxval(service_type, m.info_ack.SERV_type, "T_???"); 921b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko tprintf(", CURRENT="); 922b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko printxval(ts_state, m.info_ack.CURRENT_state, "TS_???"); 923b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko tprintf(", PROVIDER="); 924b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko printflags(provider_flags, m.info_ack.PROVIDER_flag, "???"); 92538ae88d332acd9f86a30d58158e306d795d98977John Hughes break; 92638ae88d332acd9f86a30d58158e306d795d98977John Hughes#endif 92738ae88d332acd9f86a30d58158e306d795d98977John Hughes#ifdef T_BIND_ACK 92838ae88d332acd9f86a30d58158e306d795d98977John Hughes case T_BIND_ACK: /* bind ack */ 929b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko GET(T_BIND_ACK, bind_ack); 930b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko ADDR(bind_ack, ADDR); 931b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko tprintf(", CONIND=%ld", m.bind_ack.CONIND_number); 93238ae88d332acd9f86a30d58158e306d795d98977John Hughes break; 93338ae88d332acd9f86a30d58158e306d795d98977John Hughes#endif 93438ae88d332acd9f86a30d58158e306d795d98977John Hughes#ifdef T_ERROR_ACK 93538ae88d332acd9f86a30d58158e306d795d98977John Hughes case T_ERROR_ACK: /* error ack */ 936b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko GET(T_ERROR_ACK, error_ack); 937b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko COMMA(); 938b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko tprintf("ERROR="); 939b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko printxval(transport_user_options, 94038ae88d332acd9f86a30d58158e306d795d98977John Hughes m.error_ack.ERROR_prim, "TI_???"); 941b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko tprintf(", TLI="); 942b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko printxval(tli_errors, m.error_ack.TLI_error, "T???"); 943b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko tprintf("UNIX=%s", strerror(m.error_ack.UNIX_error)); 94438ae88d332acd9f86a30d58158e306d795d98977John Hughes break; 94538ae88d332acd9f86a30d58158e306d795d98977John Hughes#endif 94638ae88d332acd9f86a30d58158e306d795d98977John Hughes#ifdef T_OK_ACK 94738ae88d332acd9f86a30d58158e306d795d98977John Hughes case T_OK_ACK: /* ok ack */ 948b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko GET(T_OK_ACK, ok_ack); 949b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko COMMA(); 950b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko tprintf("CORRECT="); 951b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko printxval(transport_user_options, 95238ae88d332acd9f86a30d58158e306d795d98977John Hughes m.ok_ack.CORRECT_prim, "TI_???"); 95338ae88d332acd9f86a30d58158e306d795d98977John Hughes break; 95438ae88d332acd9f86a30d58158e306d795d98977John Hughes#endif 95538ae88d332acd9f86a30d58158e306d795d98977John Hughes#ifdef T_UNITDATA_IND 95638ae88d332acd9f86a30d58158e306d795d98977John Hughes case T_UNITDATA_IND: /* unitdata ind */ 957b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko GET(T_UNITDATA_IND, unitdata_ind); 958b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko ADDR(unitdata_ind, SRC); 959b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko ADDR(unitdata_ind, OPT); 96038ae88d332acd9f86a30d58158e306d795d98977John Hughes break; 96138ae88d332acd9f86a30d58158e306d795d98977John Hughes#endif 96238ae88d332acd9f86a30d58158e306d795d98977John Hughes#ifdef T_UDERROR_IND 96338ae88d332acd9f86a30d58158e306d795d98977John Hughes case T_UDERROR_IND: /* unitdata error ind */ 964b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko GET(T_UDERROR_IND, uderror_ind); 965b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko ADDR(uderror_ind, DEST); 966b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko ADDR(uderror_ind, OPT); 967b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko tprintf(", ERROR=%ld", m.uderror_ind.ERROR_type); 96838ae88d332acd9f86a30d58158e306d795d98977John Hughes break; 96938ae88d332acd9f86a30d58158e306d795d98977John Hughes#endif 97038ae88d332acd9f86a30d58158e306d795d98977John Hughes#ifdef T_OPTMGMT_ACK 97138ae88d332acd9f86a30d58158e306d795d98977John Hughes case T_OPTMGMT_ACK: /* manage opt ack */ 972b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko GET(T_OPTMGMT_ACK, optmgmt_ack); 973b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko COMMA(); 974b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko tprintf("MGMT="); 975b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko printflags(transport_user_flags, m.optmgmt_ack.MGMT_flags, 976b2dee13345a62c80a677f3342cd525d611fbc632Roland McGrath "T_???"); 977b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko STRUCT(optmgmt_ack, OPT, print_optmgmt); 97838ae88d332acd9f86a30d58158e306d795d98977John Hughes break; 97938ae88d332acd9f86a30d58158e306d795d98977John Hughes#endif 98038ae88d332acd9f86a30d58158e306d795d98977John Hughes#ifdef T_ORDREL_IND 98138ae88d332acd9f86a30d58158e306d795d98977John Hughes case T_ORDREL_IND: /* orderly rel ind */ 982b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko GET(T_ORDREL_IND, ordrel_ind); 98338ae88d332acd9f86a30d58158e306d795d98977John Hughes break; 98438ae88d332acd9f86a30d58158e306d795d98977John Hughes#endif 98538ae88d332acd9f86a30d58158e306d795d98977John Hughes#ifdef T_ADDR_REQ 98638ae88d332acd9f86a30d58158e306d795d98977John Hughes case T_ADDR_REQ: /* address req */ 987b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko GET(T_ADDR_REQ, addr_req); 98838ae88d332acd9f86a30d58158e306d795d98977John Hughes break; 98938ae88d332acd9f86a30d58158e306d795d98977John Hughes#endif 99038ae88d332acd9f86a30d58158e306d795d98977John Hughes#ifdef T_ADDR_ACK 99138ae88d332acd9f86a30d58158e306d795d98977John Hughes case T_ADDR_ACK: /* address response */ 992b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko GET(T_ADDR_ACK, addr_ack); 993b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko ADDR(addr_ack, LOCADDR); 994b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko ADDR(addr_ack, REMADDR); 99538ae88d332acd9f86a30d58158e306d795d98977John Hughes break; 99638ae88d332acd9f86a30d58158e306d795d98977John Hughes#endif 99738ae88d332acd9f86a30d58158e306d795d98977John Hughes default: 99838ae88d332acd9f86a30d58158e306d795d98977John Hughes dump: 99938ae88d332acd9f86a30d58158e306d795d98977John Hughes c = -1; 100038ae88d332acd9f86a30d58158e306d795d98977John Hughes printstr(tcp, addr, len); 100138ae88d332acd9f86a30d58158e306d795d98977John Hughes break; 100238ae88d332acd9f86a30d58158e306d795d98977John Hughes } 100338ae88d332acd9f86a30d58158e306d795d98977John Hughes 1004b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko if (c >= 0) tprintf("}"); 100538ae88d332acd9f86a30d58158e306d795d98977John Hughes 100638ae88d332acd9f86a30d58158e306d795d98977John Hughes#undef ADDR 100738ae88d332acd9f86a30d58158e306d795d98977John Hughes#undef COMMA 100838ae88d332acd9f86a30d58158e306d795d98977John Hughes#undef STRUCT 100934e014ac7502357e599935c62c18cba564c451beRoland McGrath 101038ae88d332acd9f86a30d58158e306d795d98977John Hughes return 0; 101138ae88d332acd9f86a30d58158e306d795d98977John Hughes} 101238ae88d332acd9f86a30d58158e306d795d98977John Hughes 101338ae88d332acd9f86a30d58158e306d795d98977John Hughes 101476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif /* TI_BIND */ 101576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 101638ae88d332acd9f86a30d58158e306d795d98977John Hughes 1017e5e60858063f214fcd7860f50f8bcb46f951f9abDmitry V. Levinstatic int internal_stream_ioctl(struct tcb *tcp, int arg) 101876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 101976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman struct strioctl si; 10201c04b0b000a93eef43fb2633a082d3f18da69f47Roland McGrath struct ioctlent *iop; 102176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman int in_and_out; 102238ae88d332acd9f86a30d58158e306d795d98977John Hughes int timod = 0; 102376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef SI_GETUDATA 102476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman struct si_udata udata; 102576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif /* SI_GETUDATA */ 102676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 102776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (!arg) 102876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 102976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (umove(tcp, arg, &si) < 0) { 103076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) 103176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", {...}"); 103276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 1; 103376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 103476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 10352843a4e1d2fca851be6e47e7ff2413b45903ac9aRoland McGrath iop = ioctl_lookup(si.ic_cmd); 10362843a4e1d2fca851be6e47e7ff2413b45903ac9aRoland McGrath if (iop) { 10372843a4e1d2fca851be6e47e7ff2413b45903ac9aRoland McGrath tprintf(", {ic_cmd=%s", iop->symbol); 10382843a4e1d2fca851be6e47e7ff2413b45903ac9aRoland McGrath while ((iop = ioctl_next_match(iop))) 10392843a4e1d2fca851be6e47e7ff2413b45903ac9aRoland McGrath tprintf(" or %s", iop->symbol); 10402843a4e1d2fca851be6e47e7ff2413b45903ac9aRoland McGrath } else 104176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", {ic_cmd=%#x", si.ic_cmd); 104276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (si.ic_timout == INFTIM) 104376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", ic_timout=INFTIM, "); 104476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else 104576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(" ic_timout=%d, ", si.ic_timout); 104676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 104776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman in_and_out = 1; 104876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman switch (si.ic_cmd) { 104976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef SI_GETUDATA 105076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case SI_GETUDATA: 105176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman in_and_out = 0; 105276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman break; 105376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif /* SI_GETUDATA */ 105476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 105576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (in_and_out) { 105676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) 105776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("/* in */ "); 105876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else 105976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", /* out */ "); 106076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 106176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (in_and_out || entering(tcp)) 106276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("ic_len=%d, ic_dp=", si.ic_len); 106376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman switch (si.ic_cmd) { 106476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef TI_BIND 106576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case TI_BIND: 106676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* in T_BIND_REQ, out T_BIND_ACK */ 106738ae88d332acd9f86a30d58158e306d795d98977John Hughes ++timod; 106876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 1069b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko print_transport_message(tcp, 107038ae88d332acd9f86a30d58158e306d795d98977John Hughes T_BIND_REQ, 107138ae88d332acd9f86a30d58158e306d795d98977John Hughes si.ic_dp, si.ic_len); 107276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 107376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else { 1074b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko print_transport_message(tcp, 107538ae88d332acd9f86a30d58158e306d795d98977John Hughes T_BIND_ACK, 107638ae88d332acd9f86a30d58158e306d795d98977John Hughes si.ic_dp, si.ic_len); 107776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 107876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman break; 107976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif /* TI_BIND */ 108076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef TI_UNBIND 108176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case TI_UNBIND: 108276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* in T_UNBIND_REQ, out T_OK_ACK */ 108338ae88d332acd9f86a30d58158e306d795d98977John Hughes ++timod; 108438ae88d332acd9f86a30d58158e306d795d98977John Hughes if (entering(tcp)) { 1085b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko print_transport_message(tcp, 108638ae88d332acd9f86a30d58158e306d795d98977John Hughes T_UNBIND_REQ, 108738ae88d332acd9f86a30d58158e306d795d98977John Hughes si.ic_dp, si.ic_len); 108838ae88d332acd9f86a30d58158e306d795d98977John Hughes } 108938ae88d332acd9f86a30d58158e306d795d98977John Hughes else { 1090b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko print_transport_message(tcp, 109138ae88d332acd9f86a30d58158e306d795d98977John Hughes T_OK_ACK, 109238ae88d332acd9f86a30d58158e306d795d98977John Hughes si.ic_dp, si.ic_len); 109338ae88d332acd9f86a30d58158e306d795d98977John Hughes } 109476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman break; 109576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif /* TI_UNBIND */ 109676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef TI_GETINFO 109776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case TI_GETINFO: 109876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* in T_INFO_REQ, out T_INFO_ACK */ 109938ae88d332acd9f86a30d58158e306d795d98977John Hughes ++timod; 110038ae88d332acd9f86a30d58158e306d795d98977John Hughes if (entering(tcp)) { 1101b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko print_transport_message(tcp, 110238ae88d332acd9f86a30d58158e306d795d98977John Hughes T_INFO_REQ, 110338ae88d332acd9f86a30d58158e306d795d98977John Hughes si.ic_dp, si.ic_len); 110438ae88d332acd9f86a30d58158e306d795d98977John Hughes } 110538ae88d332acd9f86a30d58158e306d795d98977John Hughes else { 1106b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko print_transport_message(tcp, 110738ae88d332acd9f86a30d58158e306d795d98977John Hughes T_INFO_ACK, 110838ae88d332acd9f86a30d58158e306d795d98977John Hughes si.ic_dp, si.ic_len); 110938ae88d332acd9f86a30d58158e306d795d98977John Hughes } 111076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman break; 111176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif /* TI_GETINFO */ 111276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef TI_OPTMGMT 111376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case TI_OPTMGMT: 111476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* in T_OPTMGMT_REQ, out T_OPTMGMT_ACK */ 111538ae88d332acd9f86a30d58158e306d795d98977John Hughes ++timod; 111638ae88d332acd9f86a30d58158e306d795d98977John Hughes if (entering(tcp)) { 1117b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko print_transport_message(tcp, 111838ae88d332acd9f86a30d58158e306d795d98977John Hughes T_OPTMGMT_REQ, 111938ae88d332acd9f86a30d58158e306d795d98977John Hughes si.ic_dp, si.ic_len); 112038ae88d332acd9f86a30d58158e306d795d98977John Hughes } 112138ae88d332acd9f86a30d58158e306d795d98977John Hughes else { 1122b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko print_transport_message(tcp, 112338ae88d332acd9f86a30d58158e306d795d98977John Hughes T_OPTMGMT_ACK, 112438ae88d332acd9f86a30d58158e306d795d98977John Hughes si.ic_dp, si.ic_len); 112538ae88d332acd9f86a30d58158e306d795d98977John Hughes } 112676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman break; 112776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif /* TI_OPTMGMT */ 112876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef SI_GETUDATA 112976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case SI_GETUDATA: 113076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) 113176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman break; 113276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (umove(tcp, (int) si.ic_dp, &udata) < 0) 113376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("{...}"); 113476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else { 113576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("{tidusize=%d, addrsize=%d, ", 113676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman udata.tidusize, udata.addrsize); 113776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("optsize=%d, etsdusize=%d, ", 113876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman udata.optsize, udata.etsdusize); 113976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("servtype=%d, so_state=%d, ", 114076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman udata.servtype, udata.so_state); 114176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("so_options=%d", udata.so_options); 114276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("}"); 114376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 114476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman break; 114576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif /* SI_GETUDATA */ 114676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman default: 114710a88d09ebe283d0dd2ba5deccfe50dc20ea5821Michal Ludvig printstr(tcp, (long) si.ic_dp, si.ic_len); 114876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman break; 114976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 115038ae88d332acd9f86a30d58158e306d795d98977John Hughes if (exiting(tcp)) { 115176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("}"); 115221a75347451b5178a0eb85a48042b8db0e45b318Dmitry V. Levin if (timod && tcp->u_rval && !syserror(tcp)) { 1153b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko tcp->auxstr = xlookup(tli_errors, tcp->u_rval); 115438ae88d332acd9f86a30d58158e306d795d98977John Hughes return RVAL_STR + 1; 115538ae88d332acd9f86a30d58158e306d795d98977John Hughes } 115638ae88d332acd9f86a30d58158e306d795d98977John Hughes } 115734e014ac7502357e599935c62c18cba564c451beRoland McGrath 115876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 1; 115976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 116076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 116176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 11621201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkostream_ioctl(struct tcb *tcp, int code, int arg) 116376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 116476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef I_LIST 116576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman int i; 116676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif 116776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman int val; 116876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef I_FLUSHBAND 116976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman struct bandinfo bi; 117076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif 117176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman struct strpeek sp; 117276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman struct strfdinsert sfi; 117376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman struct strrecvfd srf; 117476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef I_LIST 117576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman struct str_list sl; 117676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif 117776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 117876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* I_STR is a special case because the data is read & written. */ 117976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (code == I_STR) 118076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return internal_stream_ioctl(tcp, arg); 118176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) 118276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 118376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 118476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman switch (code) { 118576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case I_PUSH: 118676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case I_LOOK: 118776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case I_FIND: 118876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* arg is a string */ 118976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", "); 119076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printpath(tcp, arg); 119176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 1; 119276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case I_POP: 119376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* doesn't take an argument */ 119476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 1; 119576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case I_FLUSH: 119676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* argument is an option */ 119776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", "); 119876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printxval(stream_flush_options, arg, "FLUSH???"); 119976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 1; 120076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef I_FLUSHBAND 120176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case I_FLUSHBAND: 120276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* argument is a pointer to a bandinfo struct */ 120376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (umove(tcp, arg, &bi) < 0) 120476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", {...}"); 120576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else { 120676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", {bi_pri=%d, bi_flag=", bi.bi_pri); 1207b2dee13345a62c80a677f3342cd525d611fbc632Roland McGrath printflags(stream_flush_options, bi.bi_flag, "FLUSH???"); 120876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("}"); 120976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 121076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 1; 121176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif /* I_FLUSHBAND */ 121276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case I_SETSIG: 121376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* argument is a set of flags */ 121476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", "); 1215b2dee13345a62c80a677f3342cd525d611fbc632Roland McGrath printflags(stream_setsig_flags, arg, "S_???"); 121676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 1; 121776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case I_GETSIG: 121876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* argument is a pointer to a set of flags */ 121976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (syserror(tcp)) 122076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 122176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", ["); 122276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (umove(tcp, arg, &val) < 0) 122376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("?"); 1224b2dee13345a62c80a677f3342cd525d611fbc632Roland McGrath else 1225b2dee13345a62c80a677f3342cd525d611fbc632Roland McGrath printflags(stream_setsig_flags, val, "S_???"); 122676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("]"); 122776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 1; 122876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case I_PEEK: 122976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* argument is a pointer to a strpeek structure */ 123076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (syserror(tcp) || !arg) 123176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 123276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (umove(tcp, arg, &sp) < 0) { 123376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", {...}"); 123476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 1; 123576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 123676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", {ctlbuf="); 123776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printstrbuf(tcp, &sp.ctlbuf, 1); 123876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", databuf="); 123976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printstrbuf(tcp, &sp.databuf, 1); 1240fd15cb31adf1c38c2b5524253a50e5646c7b08ceJohn Hughes tprintf(", flags="); 1241b2dee13345a62c80a677f3342cd525d611fbc632Roland McGrath printflags(msgflags, sp.flags, "RS_???"); 1242fd15cb31adf1c38c2b5524253a50e5646c7b08ceJohn Hughes tprintf("}"); 124376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 1; 124476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case I_SRDOPT: 124576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* argument is an option with flags */ 124676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", "); 124776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printxval(stream_read_options, arg & RMODEMASK, "R???"); 124876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman addflags(stream_read_flags, arg & ~RMODEMASK); 124976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 1; 125076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case I_GRDOPT: 125176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* argument is an pointer to an option with flags */ 125276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (syserror(tcp)) 125376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 125476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", ["); 125576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (umove(tcp, arg, &val) < 0) 125676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("?"); 125776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else { 125876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printxval(stream_read_options, 125976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman arg & RMODEMASK, "R???"); 126076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman addflags(stream_read_flags, arg & ~RMODEMASK); 126176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 126276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("]"); 126376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 1; 126476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case I_NREAD: 126576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef I_GETBAND 126676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case I_GETBAND: 126776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif 126876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef I_SETCLTIME 126976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case I_SETCLTIME: 127076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif 127176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef I_GETCLTIME 127276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case I_GETCLTIME: 127376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif 127476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* argument is a pointer to a decimal integer */ 127576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (syserror(tcp)) 127676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 127776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", "); 127876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printnum(tcp, arg, "%d"); 127976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 1; 128076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case I_FDINSERT: 128176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* argument is a pointer to a strfdinsert structure */ 128276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (syserror(tcp) || !arg) 128376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 128476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (umove(tcp, arg, &sfi) < 0) { 128576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", {...}"); 128676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 1; 128776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 128876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", {ctlbuf="); 128976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printstrbuf(tcp, &sfi.ctlbuf, 1); 129076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", databuf="); 129176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printstrbuf(tcp, &sfi.databuf, 1); 1292fd15cb31adf1c38c2b5524253a50e5646c7b08ceJohn Hughes tprintf(", flags="); 1293b2dee13345a62c80a677f3342cd525d611fbc632Roland McGrath printflags(msgflags, sfi.flags, "RS_???"); 129476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", filedes=%d, offset=%d}", sfi.fildes, sfi.offset); 129576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 1; 129676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef I_SWROPT 129776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case I_SWROPT: 129876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* argument is a set of flags */ 129976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", "); 1300b2dee13345a62c80a677f3342cd525d611fbc632Roland McGrath printflags(stream_write_flags, arg, "SND???"); 130176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 1; 130276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif /* I_SWROPT */ 130376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef I_GWROPT 130476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case I_GWROPT: 130576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* argument is an pointer to an option with flags */ 130676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (syserror(tcp)) 130776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 130876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", ["); 130976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (umove(tcp, arg, &val) < 0) 131076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("?"); 1311b2dee13345a62c80a677f3342cd525d611fbc632Roland McGrath else 1312b2dee13345a62c80a677f3342cd525d611fbc632Roland McGrath printflags(stream_write_flags, arg, "SND???"); 131376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("]"); 131476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 1; 131576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif /* I_GWROPT */ 131676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case I_SENDFD: 131776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef I_CKBAND 131876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case I_CKBAND: 131976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif 132076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef I_CANPUT 132176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case I_CANPUT: 132276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif 132376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case I_LINK: 132476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case I_UNLINK: 132576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case I_PLINK: 132676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case I_PUNLINK: 132776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* argument is a decimal integer */ 132876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", %d", arg); 132976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 1; 133076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case I_RECVFD: 133176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman /* argument is a pointer to a strrecvfd structure */ 133276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (syserror(tcp) || !arg) 133376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 133476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (umove(tcp, arg, &srf) < 0) { 133576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", {...}"); 133676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 1; 133776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 133876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", {fd=%d, uid=%lu, gid=%lu}", srf.fd, 133976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman (unsigned long) srf.uid, (unsigned long) srf.gid); 134076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 1; 134176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef I_LIST 134276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case I_LIST: 134376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (syserror(tcp)) 134476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 134576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (arg == 0) { 134676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", NULL"); 134776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 1; 134876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 134976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (umove(tcp, arg, &sl) < 0) { 135076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", {...}"); 135176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 1; 135276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 135376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", {sl_nmods=%d, sl_modlist=[", sl.sl_nmods); 135476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman for (i = 0; i < tcp->u_rval; i++) { 135576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (i) 135676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", "); 135776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printpath(tcp, (int) sl.sl_modlist[i].l_name); 135876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 135976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("]}"); 136076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 1; 136176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif /* I_LIST */ 136276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef I_ATMARK 136376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman case I_ATMARK: 136476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", "); 136576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printxval(stream_atmark_options, arg, "???MARK"); 136676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 1; 136776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif /* I_ATMARK */ 136876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman default: 136976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 137076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 137176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 137276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 1373561c7995d7524afbf92689593b9ba5f9615d0982Roland McGrath#endif /* !LINUX && !FREEBSD */ 137476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 1375561c7995d7524afbf92689593b9ba5f9615d0982Roland McGrath#endif /* HAVE_SYS_STREAM_H || LINUX || FREEBSD */ 1376