summaryrefslogtreecommitdiff
path: root/lib/ptti.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ptti.c')
-rw-r--r--lib/ptti.c1370
1 files changed, 1370 insertions, 0 deletions
diff --git a/lib/ptti.c b/lib/ptti.c
new file mode 100644
index 0000000..e542454
--- /dev/null
+++ b/lib/ptti.c
@@ -0,0 +1,1370 @@
+/*
+ * ptti.c -- BSD style print_tcptpi() function for lsof library
+ */
+
+
+/*
+ * Copyright 1997 Purdue Research Foundation, West Lafayette, Indiana
+ * 47907. All rights reserved.
+ *
+ * Written by Victor A. Abell
+ *
+ * This software is not subject to any license of the American Telephone
+ * and Telegraph Company or the Regents of the University of California.
+ *
+ * Permission is granted to anyone to use this software for any purpose on
+ * any computer system, and to alter it and redistribute it freely, subject
+ * to the following restrictions:
+ *
+ * 1. Neither the authors nor Purdue University are responsible for any
+ * consequences of the use of this software.
+ *
+ * 2. The origin of this software must not be misrepresented, either by
+ * explicit claim or by omission. Credit to the authors and Purdue
+ * University must appear in documentation and sources.
+ *
+ * 3. Altered versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ *
+ * 4. This notice may not be removed or altered.
+ */
+
+
+#include "../machine.h"
+
+#if defined(USE_LIB_PRINT_TCPTPI)
+
+# if !defined(lint)
+static char copyright[] =
+"@(#) Copyright 1997 Purdue Research Foundation.\nAll rights reserved.\n";
+static char *rcsid = "$Id: ptti.c,v 1.6 2008/10/21 16:13:23 abe Exp $";
+# endif /* !defined(lint) */
+
+#define TCPSTATES /* activate tcpstates[] */
+#include "../lsof.h"
+
+
+/*
+ * build_IPstates() -- build the TCP and UDP state tables
+ *
+ * Note: this module does not support a UDP state table.
+ */
+
+void
+build_IPstates()
+{
+
+/*
+ * Set the TcpNstates global variable.
+ */
+ TcpNstates = TCP_NSTATES;
+ TcpSt = (char **)&tcpstates;
+}
+
+
+/*
+ * print_tcptpi() - print TCP/TPI info
+ */
+
+void
+print_tcptpi(nl)
+ int nl; /* 1 == '\n' required */
+{
+ int ps = 0;
+ int s;
+
+ if ((Ftcptpi & TCPTPI_STATE) && Lf->lts.type == 0) {
+ if (Ffield)
+ (void) printf("%cST=", LSOF_FID_TCPTPI);
+ else
+ putchar('(');
+ if (!TcpNstates)
+ (void) build_IPstates();
+ if ((s = Lf->lts.state.i) < 0 || s >= TcpNstates)
+ (void) printf("UNKNOWN_TCP_STATE_%d", s);
+ else
+ (void) fputs(TcpSt[s], stdout);
+ ps++;
+ if (Ffield)
+ putchar(Terminator);
+ }
+
+#if defined(HASTCPTPIQ)
+ if (Ftcptpi & TCPTPI_QUEUES) {
+ if (Lf->lts.rqs) {
+ if (Ffield)
+ putchar(LSOF_FID_TCPTPI);
+ else {
+ if (ps)
+ putchar(' ');
+ else
+ putchar('(');
+ }
+ (void) printf("QR=%lu", Lf->lts.rq);
+ if (Ffield)
+ putchar(Terminator);
+ ps++;
+ }
+ if (Lf->lts.sqs) {
+ if (Ffield)
+ putchar(LSOF_FID_TCPTPI);
+ else {
+ if (ps)
+ putchar(' ');
+ else
+ putchar('(');
+ }
+ (void) printf("QS=%lu", Lf->lts.sq);
+ if (Ffield)
+ putchar(Terminator);
+ ps++;
+ }
+ }
+#endif /* defined(HASTCPTPIQ) */
+
+#if defined(HASSOOPT)
+ if (Ftcptpi & TCPTPI_FLAGS) {
+ int opt;
+
+ if ((opt = Lf->lts.opt)
+ || Lf->lts.pqlens || Lf->lts.qlens || Lf->lts.qlims
+ || Lf->lts.rbszs || Lf->lts.sbsz
+ ) {
+ char sep = ' ';
+
+ if (Ffield)
+ sep = LSOF_FID_TCPTPI;
+ else if (!ps)
+ sep = '(';
+ (void) printf("%cSO", sep);
+ ps++;
+ sep = '=';
+
+# if defined(SO_ACCEPTCONN)
+ if (opt & SO_ACCEPTCONN) {
+ (void) printf("%cACCEPTCONN", sep);
+ opt &= ~SO_ACCEPTCONN;
+ sep = ',';
+ }
+# endif /* defined(SO_ACCEPTCONN) */
+
+# if defined(SO_ACCEPTFILTER)
+ if (opt & SO_ACCEPTFILTER) {
+ (void) printf("%cACCEPTFILTER", sep);
+ opt &= ~SO_ACCEPTFILTER;
+ sep = ',';
+ }
+# endif /* defined(SO_ACCEPTFILTER) */
+
+# if defined(SO_AUDIT)
+ if (opt & SO_AUDIT) {
+ (void) printf("%cAUDIT", sep);
+ opt &= ~SO_AUDIT;
+ sep = ',';
+ }
+# endif /* defined(SO_AUDIT) */
+
+# if defined(SO_BINDANY)
+ if (opt & SO_BINDANY) {
+ (void) printf("%cBINDANY", sep);
+ opt &= ~SO_BINDANY;
+ sep = ',';
+ }
+# endif /* defined(SO_BINDANY) */
+
+# if defined(SO_BINTIME)
+ if (opt & SO_BINTIME) {
+ (void) printf("%cBINTIME", sep);
+ opt &= ~SO_BINTIME;
+ sep = ',';
+ }
+# endif /* defined(SO_BINTIME) */
+
+# if defined(SO_BROADCAST)
+ if (opt & SO_BROADCAST) {
+ (void) printf("%cBROADCAST", sep);
+ opt &= ~SO_BROADCAST;
+ sep = ',';
+ }
+# endif /* defined(SO_BROADCAST) */
+
+# if defined(SO_CKSUMRECV)
+ if (opt & SO_CKSUMRECV) {
+ (void) printf("%cCKSUMRECV", sep);
+ opt &= ~SO_CKSUMRECV;
+ sep = ',';
+ }
+# endif /* defined(SO_CKSUMRECV) */
+
+# if defined(SO_CLUA_IN_NOALIAS)
+ if (opt & SO_CLUA_IN_NOALIAS) {
+ (void) printf("%cCLUA_IN_NOALIAS", sep);
+ opt &= ~SO_CLUA_IN_NOALIAS;
+ sep = ',';
+ }
+# endif /* defined(SO_CLUA_IN_NOALIAS) */
+
+# if defined(SO_CLUA_IN_NOLOCAL)
+ if (opt & SO_CLUA_IN_NOLOCAL) {
+ (void) printf("%cCLUA_IN_NOLOCAL", sep);
+ opt &= ~SO_CLUA_IN_NOLOCAL;
+ sep = ',';
+ }
+# endif /* defined(SO_CLUA_IN_NOLOCAL) */
+
+# if defined(SO_DEBUG)
+ if (opt & SO_DEBUG) {
+ (void) printf("%cDEBUG", sep);
+ opt &= ~ SO_DEBUG;
+ sep = ',';
+ }
+# endif /* defined(SO_DEBUG) */
+
+# if defined(SO_DGRAM_ERRIND)
+ if (opt & SO_DGRAM_ERRIND) {
+ (void) printf("%cDGRAM_ERRIND", sep);
+ opt &= ~SO_DGRAM_ERRIND;
+ sep = ',';
+ }
+# endif /* defined(SO_DGRAM_ERRIND) */
+
+# if defined(SO_DONTROUTE)
+ if (opt & SO_DONTROUTE) {
+ (void) printf("%cDONTROUTE", sep);
+ opt &= ~SO_DONTROUTE;
+ sep = ',';
+ }
+# endif /* defined(SO_DONTROUTE) */
+
+# if defined(SO_DONTTRUNC)
+ if (opt & SO_DONTTRUNC) {
+ (void) printf("%cDONTTRUNC", sep);
+ opt &= ~SO_DONTTRUNC;
+ sep = ',';
+ }
+# endif /* defined(SO_DONTTRUNC) */
+
+# if defined(SO_EXPANDED_RIGHTS)
+ if (opt & SO_EXPANDED_RIGHTS) {
+ (void) printf("%cEXPANDED_RIGHTS", sep);
+ opt &= ~SO_EXPANDED_RIGHTS;
+ sep = ',';
+ }
+# endif /* defined(SO_EXPANDED_RIGHTS) */
+
+# if defined(SO_KEEPALIVE)
+ if (opt & SO_KEEPALIVE) {
+ (void) printf("%cKEEPALIVE", sep);
+ if (Lf->lts.kai)
+ (void) printf("=%d", Lf->lts.kai);
+ opt &= ~SO_KEEPALIVE;
+ sep = ',';
+ }
+# endif /* defined(SO_KEEPALIVE) */
+
+# if defined(SO_KERNACCEPT)
+ if (opt & SO_KERNACCEPT) {
+ (void) printf("%cKERNACCEPT", sep);
+ opt &= ~SO_KERNACCEPT;
+ sep = ',';
+ }
+# endif /* defined(SO_KERNACCEPT) */
+
+# if defined(SO_IMASOCKET)
+ if (opt & SO_IMASOCKET) {
+ (void) printf("%cIMASOCKET", sep);
+ opt &= ~SO_IMASOCKET;
+ sep = ',';
+ }
+# endif /* defined(SO_IMASOCKET) */
+
+# if defined(SO_LINGER)
+ if (opt & SO_LINGER) {
+ (void) printf("%cLINGER", sep);
+ if (Lf->lts.ltm)
+ (void) printf("=%d", Lf->lts.ltm);
+ opt &= ~SO_LINGER;
+ sep = ',';
+ }
+# endif /* defined(SO_LINGER) */
+
+# if defined(SO_LISTENING)
+ if (opt & SO_LISTENING) {
+ (void) printf("%cLISTENING", sep);
+ opt &= ~SO_LISTENING;
+ sep = ',';
+ }
+# endif /* defined(SO_LISTENING) */
+
+# if defined(SO_MGMT)
+ if (opt & SO_MGMT) {
+ (void) printf("%cMGMT", sep);
+ opt &= ~SO_MGMT;
+ sep = ',';
+ }
+# endif /* defined(SO_MGMT) */
+
+# if defined(SO_PAIRABLE)
+ if (opt & SO_PAIRABLE) {
+ (void) printf("%cPAIRABLE", sep);
+ opt &= ~SO_PAIRABLE;
+ sep = ',';
+ }
+# endif /* defined(SO_PAIRABLE) */
+
+# if defined(SO_RESVPORT)
+ if (opt & SO_RESVPORT) {
+ (void) printf("%cRESVPORT", sep);
+ opt &= ~SO_RESVPORT;
+ sep = ',';
+ }
+# endif /* defined(SO_RESVPORT) */
+
+# if defined(SO_NOREUSEADDR)
+ if (opt & SO_NOREUSEADDR) {
+ (void) printf("%cNOREUSEADDR", sep);
+ opt &= ~SO_NOREUSEADDR;
+ sep = ',';
+ }
+# endif /* defined(SO_NOREUSEADDR) */
+
+# if defined(SO_NOSIGPIPE)
+ if (opt & SO_NOSIGPIPE) {
+ (void) printf("%cNOSIGPIPE", sep);
+ opt &= ~SO_NOSIGPIPE;
+ sep = ',';
+ }
+# endif /* defined(SO_NOSIGPIPE) */
+
+# if defined(SO_OOBINLINE)
+ if (opt & SO_OOBINLINE) {
+ (void) printf("%cOOBINLINE", sep);
+ opt &= ~SO_OOBINLINE;
+ sep = ',';
+ }
+# endif /* defined(SO_OOBINLINE) */
+
+# if defined(SO_ORDREL)
+ if (opt & SO_ORDREL) {
+ (void) printf("%cORDREL", sep);
+ opt &= ~SO_ORDREL;
+ sep = ',';
+ }
+# endif /* defined(SO_ORDREL) */
+
+ if (Lf->lts.pqlens) {
+ (void) printf("%cPQLEN=%u", sep, Lf->lts.pqlen);
+ sep = ',';
+ }
+ if (Lf->lts.qlens) {
+ (void) printf("%cQLEN=%u", sep, Lf->lts.qlen);
+ sep = ',';
+ }
+ if (Lf->lts.qlims) {
+ (void) printf("%cQLIM=%u", sep, Lf->lts.qlim);
+ sep = ',';
+ }
+ if (Lf->lts.rbszs) {
+ (void) printf("%cRCVBUF=%lu", sep, Lf->lts.rbsz);
+ sep = ',';
+ }
+
+# if defined(SO_REUSEADDR)
+ if (opt & SO_REUSEADDR) {
+ (void) printf("%cREUSEADDR", sep);
+ opt &= ~SO_REUSEADDR;
+ sep = ',';
+ }
+# endif /* defined(SO_REUSEADDR) */
+
+# if defined(SO_REUSEALIASPORT)
+ if (opt & SO_REUSEALIASPORT) {
+ (void) printf("%cREUSEALIASPORT", sep);
+ opt &= ~SO_REUSEALIASPORT;
+ sep = ',';
+ }
+# endif /* defined(SO_REUSEALIASPORT) */
+
+# if defined(SO_REUSEPORT)
+ if (opt & SO_REUSEPORT) {
+ (void) printf("%cREUSEPORT", sep);
+ opt &= ~SO_REUSEPORT;
+ sep = ',';
+ }
+# endif /* defined(SO_REUSEPORT) */
+
+# if defined(SO_REUSERAD)
+ if (opt & SO_REUSERAD) {
+ (void) printf("%cREUSERAD", sep);
+ opt &= ~SO_REUSERAD;
+ sep = ',';
+ }
+# endif /* defined(SO_REUSERAD) */
+
+# if defined(SO_SECURITY_REQUEST)
+ if (opt & SO_SECURITY_REQUEST) {
+ (void) printf("%cSECURITY_REQUEST", sep);
+ opt &= ~SO_SECURITY_REQUEST;
+ sep = ',';
+ }
+# endif /* defined(SO_SECURITY_REQUEST) */
+
+ if (Lf->lts.sbszs) {
+ (void) printf("%cSNDBUF=%lu", sep, Lf->lts.sbsz);
+ sep = ',';
+ }
+
+# if defined(SO_TIMESTAMP)
+ if (opt & SO_TIMESTAMP) {
+ (void) printf("%cTIMESTAMP", sep);
+ opt &= ~SO_TIMESTAMP;
+ sep = ',';
+ }
+# endif /* defined(SO_TIMESTAMP) */
+
+# if defined(SO_UMC)
+ if (opt & SO_UMC) {
+ (void) printf("%cUMC", sep);
+ opt &= ~SO_UMC;
+ sep = ',';
+ }
+# endif /* defined(SO_UMC) */
+
+# if defined(SO_USE_IFBUFS)
+ if (opt & SO_USE_IFBUFS) {
+ (void) printf("%cUSE_IFBUFS", sep);
+ opt &= ~SO_USE_IFBUFS;
+ sep = ',';
+ }
+# endif /* defined(SO_USE_IFBUFS) */
+
+# if defined(SO_USELOOPBACK)
+ if (opt & SO_USELOOPBACK) {
+ (void) printf("%cUSELOOPBACK", sep);
+ opt &= ~SO_USELOOPBACK;
+ sep = ',';
+ }
+# endif /* defined(SO_USELOOPBACK) */
+
+# if defined(SO_WANTMORE)
+ if (opt & SO_WANTMORE) {
+ (void) printf("%cWANTMORE", sep);
+ opt &= ~SO_WANTMORE;
+ sep = ',';
+ }
+# endif /* defined(SO_WANTMORE) */
+
+# if defined(SO_WANTOOBFLAG)
+ if (opt & SO_WANTOOBFLAG) {
+ (void) printf("%cWANTOOBFLAG", sep);
+ opt &= ~SO_WANTOOBFLAG;
+ sep = ',';
+ }
+# endif /* defined(SO_WANTOOBFLAG) */
+
+ if (opt)
+ (void) printf("%cUNKNOWN=%#x", sep, opt);
+ if (Ffield)
+ putchar(Terminator);
+ }
+ }
+#endif /* defined(HASSOOPT) */
+
+#if defined(HASSOSTATE)
+ if (Ftcptpi & TCPTPI_FLAGS) {
+ unsigned int ss;
+
+ if ((ss = Lf->lts.ss)) {
+ char sep = ' ';
+
+ if (Ffield)
+ sep = LSOF_FID_TCPTPI;
+ else if (!ps)
+ sep = '(';
+ (void) printf("%cSS", sep);
+ ps++;
+ sep = '=';
+
+# if defined(SS_ASYNC)
+ if (ss & SS_ASYNC) {
+ (void) printf("%cASYNC", sep);
+ ss &= ~SS_ASYNC;
+ sep = ',';
+ }
+# endif /* defined(SS_ASYNC) */
+
+# if defined(SS_BOUND)
+ if (ss & SS_BOUND) {
+ (void) printf("%cBOUND", sep);
+ ss &= ~SS_BOUND;
+ sep = ',';
+ }
+# endif /* defined(SS_BOUND) */
+
+# if defined(HASSBSTATE)
+# if defined(SBS_CANTRCVMORE)
+ if (Lf->lts.sbs_rcv & SBS_CANTRCVMORE) {
+ (void) printf("%cCANTRCVMORE", sep);
+ Lf->lts.sbs_rcv &= ~SBS_CANTRCVMORE;
+ sep = ',';
+ }
+# endif /* defined(SBS_CANTRCVMORE) */
+
+# if defined(SBS_CANTSENDMORE)
+ if (Lf->lts.sbs_snd & SBS_CANTSENDMORE) {
+ (void) printf("%cCANTSENDMORE", sep);
+ Lf->lts.sbs_snd &= ~SBS_CANTSENDMORE;
+ sep = ',';
+ }
+# endif /* defined(SS_CANTSENDMORE) */
+# else /* !defined(HASSBSTATE) */
+
+# if defined(SS_CANTRCVMORE)
+ if (ss & SS_CANTRCVMORE) {
+ (void) printf("%cCANTRCVMORE", sep);
+ ss &= ~SS_CANTRCVMORE;
+ sep = ',';
+ }
+# endif /* defined(SS_CANTRCVMORE) */
+
+# if defined(SS_CANTSENDMORE)
+ if (ss & SS_CANTSENDMORE) {
+ (void) printf("%cCANTSENDMORE", sep);
+ ss &= ~SS_CANTSENDMORE;
+ sep = ',';
+ }
+# endif /* defined(SS_CANTSENDMORE) */
+# endif /* defined(HASSBSTATE) */
+
+# if defined(SS_COMP)
+ if (ss & SS_COMP) {
+ (void) printf("%cCOMP", sep);
+ ss &= ~SS_COMP;
+ sep = ',';
+ }
+# endif /* defined(SS_COMP) */
+
+# if defined(SS_CONNECTOUT)
+ if (ss & SS_CONNECTOUT) {
+ (void) printf("%cCONNECTOUT", sep);
+ ss &= ~SS_CONNECTOUT;
+ sep = ',';
+ }
+# endif /* defined(SS_CONNECTOUT) */
+
+# if defined(SS_HIPRI)
+ if (ss & SS_HIPRI) {
+ (void) printf("%cHIPRI", sep);
+ ss &= ~SS_HIPRI;
+ sep = ',';
+ }
+# endif /* defined(SS_HIPRI) */
+
+# if defined(SS_IGNERR)
+ if (ss & SS_IGNERR) {
+ (void) printf("%cIGNERR", sep);
+ ss &= ~SS_IGNERR;
+ sep = ',';
+ }
+# endif /* defined(SS_IGNERR) */
+
+# if defined(SS_INCOMP)
+ if (ss & SS_INCOMP) {
+ (void) printf("%cINCOMP", sep);
+ ss &= ~SS_INCOMP;
+ sep = ',';
+ }
+# endif /* defined(SS_INCOMP) */
+
+# if defined(SS_IOCWAIT)
+ if (ss & SS_IOCWAIT) {
+ (void) printf("%cIOCWAIT", sep);
+ ss &= ~SS_IOCWAIT;
+ sep = ',';
+ }
+# endif /* defined(SS_IOCWAIT) */
+
+# if defined(SS_ISCONFIRMING)
+ if (ss & SS_ISCONFIRMING) {
+ (void) printf("%cISCONFIRMING", sep);
+ ss &= ~SS_ISCONFIRMING;
+ sep = ',';
+ }
+# endif /* defined(SS_ISCONFIRMING) */
+
+# if defined(SS_ISCONNECTED)
+ if (ss & SS_ISCONNECTED) {
+ (void) printf("%cISCONNECTED", sep);
+ ss &= ~SS_ISCONNECTED;
+ sep = ',';
+ }
+# endif /* defined(SS_ISCONNECTED) */
+
+# if defined(SS_ISCONNECTING)
+ if (ss & SS_ISCONNECTING) {
+ (void) printf("%cISCONNECTING", sep);
+ ss &= ~SS_ISCONNECTING;
+ sep = ',';
+ }
+# endif /* defined(SS_ISCONNECTING) */
+
+# if defined(SS_ISDISCONNECTING)
+ if (ss & SS_ISDISCONNECTING) {
+ (void) printf("%cISDISCONNECTING", sep);
+ ss &= ~SS_ISDISCONNECTING;
+ sep = ',';
+ }
+# endif /* defined(SS_ISDISCONNECTING) */
+
+# if defined(SS_MORETOSEND)
+ if (ss & SS_MORETOSEND) {
+ (void) printf("%cMORETOSEND", sep);
+ ss &= ~SS_MORETOSEND;
+ sep = ',';
+ }
+# endif /* defined(SS_MORETOSEND) */
+
+# if defined(SS_NBIO)
+ if (ss & SS_NBIO) {
+ (void) printf("%cNBIO", sep);
+ ss &= ~SS_NBIO;
+ sep = ',';
+ }
+# endif /* defined(SS_NBIO) */
+
+# if defined(SS_NOCONN)
+ if (ss & SS_NOCONN) {
+ (void) printf("%cNOCONN", sep);
+ ss &= ~SS_NOCONN;
+ sep = ',';
+ }
+# endif /* defined(SS_NOCONN) */
+
+# if defined(SS_NODELETE)
+ if (ss & SS_NODELETE) {
+ (void) printf("%cNODELETE", sep);
+ ss &= ~SS_NODELETE;
+ sep = ',';
+ }
+# endif /* defined(SS_NODELETE) */
+
+# if defined(SS_NOFDREF)
+ if (ss & SS_NOFDREF) {
+ (void) printf("%cNOFDREF", sep);
+ ss &= ~SS_NOFDREF;
+ sep = ',';
+ }
+# endif /* defined(SS_NOFDREF) */
+
+# if defined(SS_NOGHOST)
+ if (ss & SS_NOGHOST) {
+ (void) printf("%cNOGHOST", sep);
+ ss &= ~SS_NOGHOST;
+ sep = ',';
+ }
+# endif /* defined(SS_NOGHOST) */
+
+# if defined(SS_NOINPUT)
+ if (ss & SS_NOINPUT) {
+ (void) printf("%cNOINPUT", sep);
+ ss &= ~SS_NOINPUT;
+ sep = ',';
+ }
+# endif /* defined(SS_NOINPUT) */
+
+# if defined(SS_PRIV)
+ if (ss & SS_PRIV) {
+ (void) printf("%cPRIV", sep);
+ ss &= ~SS_PRIV;
+ sep = ',';
+ }
+# endif /* defined(SS_PRIV) */
+
+# if defined(SS_QUEUE)
+ if (ss & SS_QUEUE) {
+ (void) printf("%cQUEUE", sep);
+ ss &= ~SS_QUEUE;
+ sep = ',';
+ }
+# endif /* defined(SS_QUEUE) */
+
+# if defined(HASSBSTATE)
+# if defined(SBS_RCVATMARK)
+ if (Lf->lts.sbs_rcv & SBS_RCVATMARK) {
+ (void) printf("%cRCVATMARK", sep);
+ Lf->lts.sbs_rcv &= ~SBS_RCVATMARK;
+ sep = ',';
+ }
+# endif /* defined(SBS_RCVATMARK) */
+
+# else /* !defined(HASSBSTATE) */
+# if defined(SS_RCVATMARK)
+ if (ss & SS_RCVATMARK) {
+ (void) printf("%cRCVATMARK", sep);
+ ss &= ~SS_RCVATMARK;
+ sep = ',';
+ }
+# endif /* defined(SS_RCVATMARK) */
+# endif /* defined(HASSBSTATE) */
+
+# if defined(SS_READWAIT)
+ if (ss & SS_READWAIT) {
+ (void) printf("%cREADWAIT", sep);
+ ss &= ~SS_READWAIT;
+ sep = ',';
+ }
+# endif /* defined(SS_READWAIT) */
+
+# if defined(SS_SETRCV)
+ if (ss & SS_SETRCV) {
+ (void) printf("%cSETRCV", sep);
+ ss &= ~SS_SETRCV;
+ sep = ',';
+ }
+# endif /* defined(SS_SETRCV) */
+
+# if defined(SS_SETSND)
+ if (ss & SS_SETSND) {
+ (void) printf("%cSETSND", sep);
+ ss &= ~SS_SETSND;
+ sep = ',';
+ }
+# endif /* defined(SS_SETSND) */
+
+# if defined(SS_SIGREAD)
+ if (ss & SS_SIGREAD) {
+ (void) printf("%cSIGREAD", sep);
+ ss &= ~SS_SIGREAD;
+ sep = ',';
+ }
+# endif /* defined(SS_SIGREAD) */
+
+# if defined(SS_SIGWRITE)
+ if (ss & SS_SIGWRITE) {
+ (void) printf("%cSIGWRITE", sep);
+ ss &= ~SS_SIGWRITE;
+ sep = ',';
+ }
+# endif /* defined(SS_SIGWRITE) */
+
+# if defined(SS_SPLICED)
+ if (ss & SS_SPLICED) {
+ (void) printf("%cSPLICED", sep);
+ ss &= ~SS_SPLICED;
+ sep = ',';
+ }
+# endif /* defined(SS_SPLICED) */
+
+# if defined(SS_WRITEWAIT)
+ if (ss & SS_WRITEWAIT) {
+ (void) printf("%cWRITEWAIT", sep);
+ ss &= ~SS_WRITEWAIT;
+ sep = ',';
+ }
+# endif /* defined(SS_WRITEWAIT) */
+
+# if defined(SS_ZOMBIE)
+ if (ss & SS_ZOMBIE) {
+ (void) printf("%cZOMBIE", sep);
+ ss &= ~SS_ZOMBIE;
+ sep = ',';
+ }
+# endif /* defined(SS_ZOMBIE) */
+
+ if (ss)
+ (void) printf("%cUNKNOWN=%#x", sep, ss);
+ if (Ffield)
+ putchar(Terminator);
+ }
+ }
+#endif /* defined(HASSOSTATE) */
+
+#if defined(HASTCPOPT)
+ if (Ftcptpi & TCPTPI_FLAGS) {
+ int topt;
+
+ if ((topt = Lf->lts.topt) || Lf->lts.msss) {
+ char sep = ' ';
+
+ if (Ffield)
+ sep = LSOF_FID_TCPTPI;
+ else if (!ps)
+ sep = '(';
+ (void) printf("%cTF", sep);
+ ps++;
+ sep = '=';
+
+# if defined(TF_ACKNOW)
+ if (topt & TF_ACKNOW) {
+ (void) printf("%cACKNOW", sep);
+ topt &= ~TF_ACKNOW;
+ sep = ',';
+ }
+# endif /* defined(TF_ACKNOW) */
+
+# if defined(TF_CANT_TXSACK)
+ if (topt & TF_CANT_TXSACK) {
+ (void) printf("%cCANT_TXSACK", sep);
+ topt &= ~TF_CANT_TXSACK;
+ sep = ',';
+ }
+# endif /* defined(TF_CANT_TXSACK) */
+
+# if defined(TF_DEAD)
+ if (topt & TF_DEAD) {
+ (void) printf("%cDEAD", sep);
+ topt &= ~TF_DEAD;
+ sep = ',';
+ }
+# endif /* defined(TF_DEAD) */
+
+# if defined(TF_DELACK)
+ if (topt & TF_DELACK) {
+ (void) printf("%cDELACK", sep);
+ topt &= ~TF_DELACK;
+ sep = ',';
+ }
+# endif /* defined(TF_DELACK) */
+
+# if defined(TF_DELAY_ACK)
+ if (topt & TF_DELAY_ACK) {
+ (void) printf("%cDELAY_ACK", sep);
+ topt &= ~TF_DELAY_ACK;
+ sep = ',';
+ }
+# endif /* defined(TF_DELAY_ACK) */
+
+# if defined(TF_DISABLE_ECN)
+ if (topt & TF_DISABLE_ECN) {
+ (void) printf("%cDISABLE_ECN", sep);
+ topt &= ~TF_DISABLE_ECN;
+ sep = ',';
+ }
+# endif /* defined(TF_DISABLE_ECN) */
+
+# if defined(TF_ECN)
+ if (topt & TF_ECN) {
+ (void) printf("%cECN", sep);
+ topt &= ~TF_ECN;
+ sep = ',';
+ }
+# endif /* defined(TF_ECN) */
+
+# if defined(TF_ECN_PERMIT)
+ if (topt & TF_ECN_PERMIT) {
+ (void) printf("%cECN_PERMIT", sep);
+ topt &= ~TF_ECN_PERMIT;
+ sep = ',';
+ }
+# endif /* defined(TF_ECN_PERMIT) */
+
+# if defined(TF_FASTRECOVERY)
+ if (topt & TF_FASTRECOVERY) {
+ (void) printf("%cFASTRECOVERY", sep);
+ topt &= ~TF_FASTRECOVERY;
+ sep = ',';
+ }
+# endif /* defined(TF_FASTRECOVERY) */
+
+# if defined(TF_FASTRXMT_PHASE)
+ if (topt & TF_FASTRXMT_PHASE) {
+ (void) printf("%cFASTRXMT_PHASE", sep);
+ topt &= ~TF_FASTRXMT_PHASE;
+ sep = ',';
+ }
+# endif /* defined(TF_FASTRXMT_PHASE) */
+
+# if defined(TF_HAVEACKED)
+ if (topt & TF_HAVEACKED) {
+ (void) printf("%cHAVEACKED", sep);
+ topt &= ~TF_HAVEACKED;
+ sep = ',';
+ }
+# endif /* defined(TF_HAVEACKED) */
+
+# if defined(TF_HAVECLOSED)
+ if (topt & TF_HAVECLOSED) {
+ (void) printf("%cHAVECLOSED", sep);
+ topt &= ~TF_HAVECLOSED;
+ sep = ',';
+ }
+# endif /* defined(TF_HAVECLOSED) */
+
+# if defined(TF_IGNR_RXSACK)
+ if (topt & TF_IGNR_RXSACK) {
+ (void) printf("%cIGNR_RXSACK", sep);
+ topt &= ~TF_IGNR_RXSACK;
+ sep = ',';
+ }
+# endif /* defined(TF_IGNR_RXSACK) */
+
+# if defined(TF_IOLOCK)
+ if (topt & TF_IOLOCK) {
+ (void) printf("%cIOLOCK", sep);
+ topt &= ~TF_IOLOCK;
+ sep = ',';
+ }
+# endif /* defined(TF_IOLOCK) */
+
+# if defined(TF_LARGESEND)
+ if (topt & TF_LARGESEND) {
+ (void) printf("%cLARGESEND", sep);
+ topt &= ~TF_LARGESEND;
+ sep = ',';
+ }
+# endif /* defined(TF_LARGESEND) */
+
+# if defined(TF_LASTIDLE)
+ if (topt & TF_LASTIDLE) {
+ (void) printf("%cLASTIDLE", sep);
+ topt &= ~TF_LASTIDLE;
+ sep = ',';
+ }
+# endif /* defined(TF_LASTIDLE) */
+
+# if defined(TF_LQ_OVERFLOW)
+ if (topt & TF_LQ_OVERFLOW) {
+ (void) printf("%cLQ_OVERFLOW", sep);
+ topt &= ~TF_LQ_OVERFLOW;
+ sep = ',';
+ }
+# endif /* defined(TF_LQ_OVERFLOW) */
+
+ if (Lf->lts.msss) {
+ (void) printf("%cMSS=%lu", sep, Lf->lts.mss);
+ sep = ',';
+ }
+
+# if defined(TF_MORETOCOME)
+ if (topt & TF_MORETOCOME) {
+ (void) printf("%cMORETOCOME", sep);
+ topt &= ~TF_MORETOCOME;
+ sep = ',';
+ }
+# endif /* defined(TF_MORETOCOME) */
+
+# if defined(TF_NEEDACK)
+ if (topt & TF_NEEDACK) {
+ (void) printf("%cNEEDACK", sep);
+ topt &= ~TF_NEEDACK;
+ sep = ',';
+ }
+# endif /* defined(TF_NEEDACK) */
+
+# if defined(TF_NEEDCLOSE)
+ if (topt & TF_NEEDCLOSE) {
+ (void) printf("%cNEEDCLOSE", sep);
+ topt &= ~TF_NEEDCLOSE;
+ sep = ',';
+ }
+# endif /* defined(TF_NEEDCLOSE) */
+
+# if defined(TF_NEEDFIN)
+ if (topt & TF_NEEDFIN) {
+ (void) printf("%cNEEDFIN", sep);
+ topt &= ~TF_NEEDFIN;
+ sep = ',';
+ }
+# endif /* defined(TF_NEEDFIN) */
+
+# if defined(TF_NEEDIN)
+ if (topt & TF_NEEDIN) {
+ (void) printf("%cNEEDIN", sep);
+ topt &= ~TF_NEEDIN;
+ sep = ',';
+ }
+# endif /* defined(TF_NEEDIN) */
+
+# if defined(TF_NEEDOUT)
+ if (topt & TF_NEEDOUT) {
+ (void) printf("%cNEEDOUT", sep);
+ topt &= ~TF_NEEDOUT;
+ sep = ',';
+ }
+# endif /* defined(TF_NEEDOUT) */
+
+# if defined(TF_NEEDSYN)
+ if (topt & TF_NEEDSYN) {
+ (void) printf("%cNEEDSYN", sep);
+ topt &= ~TF_NEEDSYN;
+ sep = ',';
+ }
+# endif /* defined(TF_NEEDSYN) */
+
+# if defined(TF_NEEDTIMER)
+ if (topt & TF_NEEDTIMER) {
+ (void) printf("%cNEEDTIMER", sep);
+ topt &= ~TF_NEEDTIMER;
+ sep = ',';
+ }
+# endif /* defined(TF_NEEDTIMER) */
+
+# if defined(TF_NEWRENO_RXMT)
+ if (topt & TF_NEWRENO_RXMT) {
+ (void) printf("%cNEWRENO_RXMT", sep);
+ topt &= ~TF_NEWRENO_RXMT;
+ sep = ',';
+ }
+# endif /* defined(TF_NEWRENO_RXMT) */
+
+# if defined(TF_NODELACK)
+ if (topt & TF_NODELACK) {
+ (void) printf("%cNODELACK", sep);
+ topt &= ~TF_NODELACK;
+ sep = ',';
+ }
+# endif /* defined(TF_NODELACK) */
+
+# if defined(TF_NODELAY)
+ if (topt & TF_NODELAY) {
+ (void) printf("%cNODELAY", sep);
+ topt &= ~TF_NODELAY;
+ sep = ',';
+ }
+# endif /* defined(TF_NODELAY) */
+
+# if defined(TF_NOOPT)
+ if (topt & TF_NOOPT) {
+ (void) printf("%cNOOPT", sep);
+ topt &= ~TF_NOOPT;
+ sep = ',';
+ }
+# endif /* defined(TF_NOOPT) */
+
+# if defined(TF_NOPUSH)
+ if (topt & TF_NOPUSH) {
+ (void) printf("%cNOPUSH", sep);
+ topt &= ~TF_NOPUSH;
+ sep = ',';
+ }
+# endif /* defined(TF_NOPUSH) */
+
+# if defined(TF_NO_PMTU)
+ if (topt & TF_NO_PMTU) {
+ (void) printf("%cNO_PMTU", sep);
+ topt &= ~TF_NO_PMTU;
+ sep = ',';
+ }
+# endif /* defined(TF_NO_PMTU) */
+
+# if defined(TF_RAW)
+ if (topt & TF_RAW) {
+ (void) printf("%cRAW", sep);
+ topt &= ~TF_RAW;
+ sep = ',';
+ }
+# endif /* defined(TF_RAW) */
+
+# if defined(TF_RCVD_CC)
+ if (topt & TF_RCVD_CC) {
+ (void) printf("%cRCVD_CC", sep);
+ topt &= ~TF_RCVD_CC;
+ sep = ',';
+ }
+# endif /* defined(TF_RCVD_CC) */
+
+# if defined(TF_RCVD_SCALE)
+ if (topt & TF_RCVD_SCALE) {
+ (void) printf("%cRCVD_SCALE", sep);
+ topt &= ~TF_RCVD_SCALE;
+ sep = ',';
+ }
+# endif /* defined(TF_RCVD_SCALE) */
+
+# if defined(TF_RCVD_CE)
+ if (topt & TF_RCVD_CE) {
+ (void) printf("%cRCVD_CE", sep);
+ topt &= ~TF_RCVD_CE;
+ sep = ',';
+ }
+# endif /* defined(TF_RCVD_CE) */
+
+# if defined(TF_RCVD_TS)
+ if (topt & TF_RCVD_TS) {
+ (void) printf("%cRCVD_TS", sep);
+ topt &= ~TF_RCVD_TS;
+ sep = ',';
+ }
+# endif /* defined(TF_RCVD_TS) */
+
+# if defined(TF_RCVD_TSTMP)
+ if (topt & TF_RCVD_TSTMP) {
+ (void) printf("%cRCVD_TSTMP", sep);
+ topt &= ~TF_RCVD_TSTMP;
+ sep = ',';
+ }
+# endif /* defined(TF_RCVD_TSTMP) */
+
+# if defined(TF_RCVD_WS)
+ if (topt & TF_RCVD_WS) {
+ (void) printf("%cRCVD_WS", sep);
+ topt &= ~TF_RCVD_WS;
+ sep = ',';
+ }
+# endif /* defined(TF_RCVD_WS) */
+
+# if defined(TF_REASSEMBLING)
+ if (topt & TF_REASSEMBLING) {
+ (void) printf("%cREASSEMBLING", sep);
+ topt &= ~TF_REASSEMBLING;
+ sep = ',';
+ }
+# endif /* defined(TF_REASSEMBLING) */
+
+# if defined(TF_REQ_CC)
+ if (topt & TF_REQ_CC) {
+ (void) printf("%cREQ_CC", sep);
+ topt &= ~TF_REQ_CC;
+ sep = ',';
+ }
+# endif /* defined(TF_REQ_CC) */
+
+# if defined(TF_REQ_SCALE)
+ if (topt & TF_REQ_SCALE) {
+ (void) printf("%cREQ_SCALE", sep);
+ topt &= ~TF_REQ_SCALE;
+ sep = ',';
+ }
+# endif /* defined(TF_REQ_SCALE) */
+
+# if defined(TF_REQ_TSTMP)
+ if (topt & TF_REQ_TSTMP) {
+ (void) printf("%cREQ_TSTMP", sep);
+ topt &= ~TF_REQ_TSTMP;
+ sep = ',';
+ }
+# endif /* defined(TF_REQ_TSTMP) */
+
+# if defined(TF_RFC1323)
+ if (topt & TF_RFC1323) {
+ (void) printf("%cRFC1323", sep);
+ topt &= ~TF_RFC1323;
+ sep = ',';
+ }
+# endif /* defined(TF_RFC1323) */
+
+# if defined(TF_RXWIN0SENT)
+ if (topt & TF_RXWIN0SENT) {
+ (void) printf("%cRXWIN0SENT", sep);
+ topt &= ~TF_RXWIN0SENT;
+ sep = ',';
+ }
+# endif /* defined(TF_RXWIN0SENT) */
+
+# if defined(TF_SACK_GENERATE)
+ if (topt & TF_SACK_GENERATE) {
+ (void) printf("%cSACK_GENERATE", sep);
+ topt &= ~TF_SACK_GENERATE;
+ sep = ',';
+ }
+# endif /* defined(TF_SACK_GENERATE) */
+
+# if defined(TF_SACK_PERMIT)
+ if (topt & TF_SACK_PERMIT) {
+ (void) printf("%cSACK_PERMIT", sep);
+ topt &= ~TF_SACK_PERMIT;
+ sep = ',';
+ }
+# endif /* defined(TF_SACK_PERMIT) */
+
+# if defined(TF_SACK_PROCESS)
+ if (topt & TF_SACK_PROCESS) {
+ (void) printf("%cSACK_PROCESS", sep);
+ topt &= ~TF_SACK_PROCESS;
+ sep = ',';
+ }
+# endif /* defined(TF_SACK_PROCESS) */
+
+# if defined(TF_SEND)
+ if (topt & TF_SEND) {
+ (void) printf("%cSEND", sep);
+ topt &= ~TF_SEND;
+ sep = ',';
+ }
+# endif /* defined(TF_SEND) */
+
+# if defined(TF_SEND_AND_DISCONNECT)
+ if (topt & TF_SEND_AND_DISCONNECT) {
+ (void) printf("%cSEND_AND_DISCONNECT", sep);
+ topt &= ~TF_SEND_AND_DISCONNECT;
+ sep = ',';
+ }
+# endif /* defined(TF_SEND_AND_DISCONNECT) */
+
+# if defined(TF_SENDCCNEW)
+ if (topt & TF_SENDCCNEW) {
+ (void) printf("%cSENDCCNEW", sep);
+ topt &= ~TF_SENDCCNEW;
+ sep = ',';
+ }
+# endif /* defined(TF_SENDCCNEW) */
+
+# if defined(TF_SEND_CWR)
+ if (topt & TF_SEND_CWR) {
+ (void) printf("%cSEND_CWR", sep);
+ topt &= ~TF_SEND_CWR;
+ sep = ',';
+ }
+# endif /* defined(TF_SEND_CWR) */
+
+# if defined(TF_SEND_ECHO)
+ if (topt & TF_SEND_ECHO) {
+ (void) printf("%cSEND_ECHO", sep);
+ topt &= ~TF_SEND_ECHO;
+ sep = ',';
+ }
+# endif /* defined(TF_SEND_ECHO) */
+
+# if defined(TF_SEND_TSTMP)
+ if (topt & TF_SEND_TSTMP) {
+ (void) printf("%cSEND_TSTMP", sep);
+ topt &= ~TF_SEND_TSTMP;
+ sep = ',';
+ }
+# endif /* defined(TF_SEND_TSTMP) */
+
+# if defined(TF_SENTFIN)
+ if (topt & TF_SENTFIN) {
+ (void) printf("%cSENTFIN", sep);
+ topt &= ~TF_SENTFIN;
+ sep = ',';
+ }
+# endif /* defined(TF_SENTFIN) */
+
+# if defined(TF_SENT_TS)
+ if (topt & TF_SENT_TS) {
+ (void) printf("%cSENT_TS", sep);
+ topt &= ~TF_SENT_TS;
+ sep = ',';
+ }
+# endif /* defined(TF_SENT_TS) */
+
+# if defined(TF_SENT_WS)
+ if (topt & TF_SENT_WS) {
+ (void) printf("%cSENT_WS", sep);
+ topt &= ~TF_SENT_WS;
+ sep = ',';
+ }
+# endif /* defined(TF_SENT_WS) */
+
+# if defined(TF_SIGNATURE)
+ if (topt & TF_SIGNATURE) {
+ (void) printf("%cSIGNATURE", sep);
+ topt &= ~TF_SIGNATURE;
+ sep = ',';
+ }
+# endif /* defined(TF_SIGNATURE) */
+
+# if defined(TF_SLOWLINK)
+ if (topt & TF_SLOWLINK) {
+ (void) printf("%cSLOWLINK", sep);
+ topt &= ~TF_SLOWLINK;
+ sep = ',';
+ }
+# endif /* defined(TF_SLOWLINK) */
+
+# if defined(TF_STDURG)
+ if (topt & TF_STDURG) {
+ (void) printf("%cSTDURG", sep);
+ topt &= ~TF_STDURG;
+ sep = ',';
+ }
+# endif /* defined(TF_STDURG) */
+
+# if defined(TF_SYN_REXMT)
+ if (topt & TF_SYN_REXMT) {
+ (void) printf("%cSYN_REXMT", sep);
+ topt &= ~TF_SYN_REXMT;
+ sep = ',';
+ }
+# endif /* defined(TF_SYN_REXMT) */
+
+# if defined(TF_UIOMOVED)
+ if (topt & TF_UIOMOVED) {
+ (void) printf("%cUIOMOVED", sep);
+ topt &= ~TF_UIOMOVED;
+ sep = ',';
+ }
+# endif /* defined(TF_UIOMOVED) */
+
+# if defined(TF_USE_SCALE)
+ if (topt & TF_USE_SCALE) {
+ (void) printf("%cUSE_SCALE", sep);
+ topt &= ~TF_USE_SCALE;
+ sep = ',';
+ }
+# endif /* defined(TF_USE_SCALE) */
+
+# if defined(TF_WASIDLE)
+ if (topt & TF_WASIDLE) {
+ (void) printf("%cWASIDLE", sep);
+ topt &= ~TF_WASIDLE;
+ sep = ',';
+ }
+# endif /* defined(TF_WASIDLE) */
+
+# if defined(TF_WASFRECOVERY)
+ if (topt & TF_WASFRECOVERY) {
+ (void) printf("%cWASFRECOVERY", sep);
+ topt &= ~TF_WASFRECOVERY;
+ sep = ',';
+ }
+# endif /* defined(TF_WASFRECOVERY) */
+
+# if defined(TF_WILL_SACK)
+ if (topt & TF_WILL_SACK) {
+ (void) printf("%cWILL_SACK", sep);
+ topt &= ~TF_WILL_SACK;
+ sep = ',';
+ }
+# endif /* defined(TF_WILL_SACK) */
+
+ if (topt)
+ (void) printf("%cUNKNOWN=%#x", sep, topt);
+ if (Ffield)
+ putchar(Terminator);
+ }
+ }
+#endif /* defined(HASTCPOPT) */
+
+#if defined(HASTCPTPIW)
+ if (Ftcptpi & TCPTPI_WINDOWS) {
+ if (Lf->lts.rws) {
+ if (Ffield)
+ putchar(LSOF_FID_TCPTPI);
+ else {
+ if (ps)
+ putchar(' ');
+ else
+ putchar('(');
+ }
+ (void) printf("WR=%lu", Lf->lts.rw);
+ if (Ffield)
+ putchar(Terminator);
+ ps++;
+ }
+ if (Lf->lts.wws) {
+ if (Ffield)
+ putchar(LSOF_FID_TCPTPI);
+ else {
+ if (ps)
+ putchar(' ');
+ else
+ putchar('(');
+ }
+ (void) printf("WW=%lu", Lf->lts.ww);
+ if (Ffield)
+ putchar(Terminator);
+ ps++;
+ }
+ }
+#endif /* defined(HASTCPTPIW) */
+
+ if (ps && !Ffield)
+ putchar(')');
+ if (nl)
+ putchar('\n');
+}
+#else /* !defined(USE_LIB_PRINT_TCPTPI) */
+char ptti_d1[] = "d"; char *ptti_d2 = ptti_d1;
+#endif /* defined(USE_LIB_PRINT_TCPTPI) */