Define LSOF_CC to system CC
[platform/upstream/lsof.git] / lib / ptti.c
1 /*
2  * ptti.c -- BSD style print_tcptpi() function for lsof library
3  */
4
5
6 /*
7  * Copyright 1997 Purdue Research Foundation, West Lafayette, Indiana
8  * 47907.  All rights reserved.
9  *
10  * Written by Victor A. Abell
11  *
12  * This software is not subject to any license of the American Telephone
13  * and Telegraph Company or the Regents of the University of California.
14  *
15  * Permission is granted to anyone to use this software for any purpose on
16  * any computer system, and to alter it and redistribute it freely, subject
17  * to the following restrictions:
18  *
19  * 1. Neither the authors nor Purdue University are responsible for any
20  *    consequences of the use of this software.
21  *
22  * 2. The origin of this software must not be misrepresented, either by
23  *    explicit claim or by omission.  Credit to the authors and Purdue
24  *    University must appear in documentation and sources.
25  *
26  * 3. Altered versions must be plainly marked as such, and must not be
27  *    misrepresented as being the original software.
28  *
29  * 4. This notice may not be removed or altered.
30  */
31
32
33 #include "../machine.h"
34
35 #if     defined(USE_LIB_PRINT_TCPTPI)
36
37 # if    !defined(lint)
38 static char copyright[] =
39 "@(#) Copyright 1997 Purdue Research Foundation.\nAll rights reserved.\n";
40 static char *rcsid = "$Id: ptti.c,v 1.6 2008/10/21 16:13:23 abe Exp $";
41 # endif /* !defined(lint) */
42
43 #define TCPSTATES                       /* activate tcpstates[] */
44 #include "../lsof.h"
45
46
47 /*
48  * build_IPstates() -- build the TCP and UDP state tables
49  *
50  * Note: this module does not support a UDP state table.
51  */
52
53 void
54 build_IPstates()
55 {
56
57 /*
58  * Set the TcpNstates global variable.
59  */
60         TcpNstates = TCP_NSTATES;
61         TcpSt = (char **)&tcpstates;
62 }
63
64
65 /*
66  * print_tcptpi() - print TCP/TPI info
67  */
68
69 void
70 print_tcptpi(nl)
71         int nl;                         /* 1 == '\n' required */
72 {
73         int ps = 0;
74         int s;
75
76         if ((Ftcptpi & TCPTPI_STATE) && Lf->lts.type == 0) {
77             if (Ffield)
78                 (void) printf("%cST=", LSOF_FID_TCPTPI);
79             else
80                 putchar('(');
81             if (!TcpNstates)
82                 (void) build_IPstates();
83             if ((s = Lf->lts.state.i) < 0 || s >= TcpNstates)
84                 (void) printf("UNKNOWN_TCP_STATE_%d", s);
85             else
86                 (void) fputs(TcpSt[s], stdout);
87             ps++;
88             if (Ffield)
89                 putchar(Terminator);
90         }
91
92 #if     defined(HASTCPTPIQ)
93         if (Ftcptpi & TCPTPI_QUEUES) {
94             if (Lf->lts.rqs) {
95                 if (Ffield)
96                     putchar(LSOF_FID_TCPTPI);
97                 else {
98                     if (ps)
99                         putchar(' ');
100                     else
101                         putchar('(');
102                 }
103                 (void) printf("QR=%lu", Lf->lts.rq);
104                 if (Ffield)
105                     putchar(Terminator);
106                 ps++;
107             }
108             if (Lf->lts.sqs) {
109                 if (Ffield)
110                     putchar(LSOF_FID_TCPTPI);
111                 else {
112                     if (ps)
113                         putchar(' ');
114                     else
115                         putchar('(');
116                 }
117                 (void) printf("QS=%lu", Lf->lts.sq);
118                 if (Ffield)
119                     putchar(Terminator);
120                 ps++;
121             }
122         }
123 #endif  /* defined(HASTCPTPIQ) */
124
125 #if     defined(HASSOOPT)
126         if (Ftcptpi & TCPTPI_FLAGS) {
127             int opt;
128
129             if ((opt = Lf->lts.opt)
130             ||  Lf->lts.pqlens || Lf->lts.qlens || Lf->lts.qlims
131             ||  Lf->lts.rbszs  || Lf->lts.sbsz
132             ) {
133                 char sep = ' ';
134
135                 if (Ffield)
136                     sep = LSOF_FID_TCPTPI;
137                 else if (!ps)
138                     sep = '(';
139                 (void) printf("%cSO", sep);
140                 ps++;
141                 sep = '=';
142
143 # if    defined(SO_ACCEPTCONN)
144                 if (opt & SO_ACCEPTCONN) {
145                     (void) printf("%cACCEPTCONN", sep);
146                     opt &= ~SO_ACCEPTCONN;
147                     sep = ',';
148                 }
149 # endif /* defined(SO_ACCEPTCONN) */
150
151 # if    defined(SO_ACCEPTFILTER)
152                 if (opt & SO_ACCEPTFILTER) {
153                     (void) printf("%cACCEPTFILTER", sep);
154                     opt &= ~SO_ACCEPTFILTER;
155                     sep = ',';
156                 }
157 # endif /* defined(SO_ACCEPTFILTER) */
158
159 # if    defined(SO_AUDIT)
160                 if (opt & SO_AUDIT) {
161                     (void) printf("%cAUDIT", sep);
162                     opt &= ~SO_AUDIT;
163                     sep = ',';
164                 }
165 # endif /* defined(SO_AUDIT) */
166
167 # if    defined(SO_BINDANY)
168                 if (opt & SO_BINDANY) {
169                     (void) printf("%cBINDANY", sep);
170                     opt &= ~SO_BINDANY;
171                     sep = ',';
172                 }
173 # endif /* defined(SO_BINDANY) */
174
175 # if    defined(SO_BINTIME)
176                 if (opt & SO_BINTIME) {
177                     (void) printf("%cBINTIME", sep);
178                     opt &= ~SO_BINTIME;
179                     sep = ',';
180                 }
181 # endif /* defined(SO_BINTIME) */
182
183 # if    defined(SO_BROADCAST)
184                 if (opt & SO_BROADCAST) {
185                     (void) printf("%cBROADCAST", sep);
186                     opt &= ~SO_BROADCAST;
187                     sep = ',';
188                 }
189 # endif /* defined(SO_BROADCAST) */
190
191 # if    defined(SO_CKSUMRECV)
192                 if (opt & SO_CKSUMRECV) {
193                     (void) printf("%cCKSUMRECV", sep);
194                     opt &= ~SO_CKSUMRECV;
195                     sep = ',';
196                 }
197 # endif /* defined(SO_CKSUMRECV) */
198
199 # if    defined(SO_CLUA_IN_NOALIAS)
200                 if (opt & SO_CLUA_IN_NOALIAS) {
201                     (void) printf("%cCLUA_IN_NOALIAS", sep);
202                     opt &= ~SO_CLUA_IN_NOALIAS;
203                     sep = ',';
204                 }
205 # endif /* defined(SO_CLUA_IN_NOALIAS) */
206
207 # if    defined(SO_CLUA_IN_NOLOCAL)
208                 if (opt & SO_CLUA_IN_NOLOCAL) {
209                     (void) printf("%cCLUA_IN_NOLOCAL", sep);
210                     opt &= ~SO_CLUA_IN_NOLOCAL;
211                     sep = ',';
212                 }
213 # endif /* defined(SO_CLUA_IN_NOLOCAL) */
214
215 # if    defined(SO_DEBUG)
216                 if (opt & SO_DEBUG) {
217                     (void) printf("%cDEBUG", sep);
218                     opt &= ~ SO_DEBUG;
219                     sep = ',';
220                 }
221 # endif /* defined(SO_DEBUG) */
222
223 # if    defined(SO_DGRAM_ERRIND)
224                 if (opt & SO_DGRAM_ERRIND) {
225                     (void) printf("%cDGRAM_ERRIND", sep);
226                     opt &= ~SO_DGRAM_ERRIND;
227                     sep = ',';
228                 }
229 # endif /* defined(SO_DGRAM_ERRIND) */
230
231 # if    defined(SO_DONTROUTE)
232                 if (opt & SO_DONTROUTE) {
233                     (void) printf("%cDONTROUTE", sep);
234                     opt &= ~SO_DONTROUTE;
235                     sep = ',';
236                 }
237 # endif /* defined(SO_DONTROUTE) */
238
239 # if    defined(SO_DONTTRUNC)
240                 if (opt & SO_DONTTRUNC) {
241                     (void) printf("%cDONTTRUNC", sep);
242                     opt &= ~SO_DONTTRUNC;
243                     sep = ',';
244                 }
245 # endif /* defined(SO_DONTTRUNC) */
246
247 # if    defined(SO_EXPANDED_RIGHTS)
248                 if (opt & SO_EXPANDED_RIGHTS) {
249                     (void) printf("%cEXPANDED_RIGHTS", sep);
250                     opt &= ~SO_EXPANDED_RIGHTS;
251                     sep = ',';
252                 }
253 # endif /* defined(SO_EXPANDED_RIGHTS) */
254
255 # if    defined(SO_KEEPALIVE)
256                 if (opt & SO_KEEPALIVE) {
257                     (void) printf("%cKEEPALIVE", sep);
258                     if (Lf->lts.kai)
259                         (void) printf("=%d", Lf->lts.kai);
260                     opt &= ~SO_KEEPALIVE;
261                     sep = ',';
262                 }
263 # endif /* defined(SO_KEEPALIVE) */
264
265 # if    defined(SO_KERNACCEPT)
266                 if (opt & SO_KERNACCEPT) {
267                     (void) printf("%cKERNACCEPT", sep);
268                     opt &= ~SO_KERNACCEPT;
269                     sep = ',';
270                 }
271 # endif /* defined(SO_KERNACCEPT) */
272
273 # if    defined(SO_IMASOCKET)
274                 if (opt & SO_IMASOCKET) {
275                     (void) printf("%cIMASOCKET", sep);
276                     opt &= ~SO_IMASOCKET;
277                     sep = ',';
278                 }
279 # endif /* defined(SO_IMASOCKET) */
280
281 # if    defined(SO_LINGER)
282                 if (opt & SO_LINGER) {
283                     (void) printf("%cLINGER", sep);
284                     if (Lf->lts.ltm)
285                         (void) printf("=%d", Lf->lts.ltm);
286                     opt &= ~SO_LINGER;
287                     sep = ',';
288                 }
289 # endif /* defined(SO_LINGER) */
290
291 # if    defined(SO_LISTENING)
292                 if (opt & SO_LISTENING) {
293                     (void) printf("%cLISTENING", sep);
294                     opt &= ~SO_LISTENING;
295                     sep = ',';
296                 }
297 # endif /* defined(SO_LISTENING) */
298
299 # if    defined(SO_MGMT)
300                 if (opt & SO_MGMT) {
301                     (void) printf("%cMGMT", sep);
302                     opt &= ~SO_MGMT;
303                     sep = ',';
304                 }
305 # endif /* defined(SO_MGMT) */
306
307 # if    defined(SO_PAIRABLE)
308                 if (opt & SO_PAIRABLE) {
309                     (void) printf("%cPAIRABLE", sep);
310                     opt &= ~SO_PAIRABLE;
311                     sep = ',';
312                 }
313 # endif /* defined(SO_PAIRABLE) */
314
315 # if    defined(SO_RESVPORT)
316                 if (opt & SO_RESVPORT) {
317                     (void) printf("%cRESVPORT", sep);
318                     opt &= ~SO_RESVPORT;
319                     sep = ',';
320                 }
321 # endif /* defined(SO_RESVPORT) */
322
323 # if    defined(SO_NOREUSEADDR)
324                 if (opt & SO_NOREUSEADDR) {
325                     (void) printf("%cNOREUSEADDR", sep);
326                     opt &= ~SO_NOREUSEADDR;
327                     sep = ',';
328                 }
329 # endif /* defined(SO_NOREUSEADDR) */
330
331 # if    defined(SO_NOSIGPIPE)
332                 if (opt & SO_NOSIGPIPE) {
333                     (void) printf("%cNOSIGPIPE", sep);
334                     opt &= ~SO_NOSIGPIPE;
335                     sep = ',';
336                 }
337 # endif /* defined(SO_NOSIGPIPE) */
338
339 # if    defined(SO_OOBINLINE)
340                 if (opt & SO_OOBINLINE) {
341                     (void) printf("%cOOBINLINE", sep);
342                     opt &= ~SO_OOBINLINE;
343                     sep = ',';
344                 }
345 # endif /* defined(SO_OOBINLINE) */
346
347 # if    defined(SO_ORDREL)
348                 if (opt & SO_ORDREL) {
349                     (void) printf("%cORDREL", sep);
350                     opt &= ~SO_ORDREL;
351                     sep = ',';
352                 }
353 # endif /* defined(SO_ORDREL) */
354
355                 if (Lf->lts.pqlens) {
356                     (void) printf("%cPQLEN=%u", sep, Lf->lts.pqlen);
357                     sep = ',';
358                 }
359                 if (Lf->lts.qlens) {
360                     (void) printf("%cQLEN=%u", sep, Lf->lts.qlen);
361                     sep = ',';
362                 }
363                 if (Lf->lts.qlims) {
364                     (void) printf("%cQLIM=%u", sep, Lf->lts.qlim);
365                     sep = ',';
366                 }
367                 if (Lf->lts.rbszs) {
368                     (void) printf("%cRCVBUF=%lu", sep, Lf->lts.rbsz);
369                     sep = ',';
370                 }
371
372 # if    defined(SO_REUSEADDR)
373                 if (opt & SO_REUSEADDR) {
374                     (void) printf("%cREUSEADDR", sep);
375                     opt &= ~SO_REUSEADDR;
376                     sep = ',';
377                 }
378 # endif /* defined(SO_REUSEADDR) */
379
380 # if    defined(SO_REUSEALIASPORT)
381                 if (opt & SO_REUSEALIASPORT) {
382                     (void) printf("%cREUSEALIASPORT", sep);
383                     opt &= ~SO_REUSEALIASPORT;
384                     sep = ',';
385                 }
386 # endif /* defined(SO_REUSEALIASPORT) */
387
388 # if    defined(SO_REUSEPORT)
389                 if (opt & SO_REUSEPORT) {
390                     (void) printf("%cREUSEPORT", sep);
391                     opt &= ~SO_REUSEPORT;
392                     sep = ',';
393                 }
394 # endif /* defined(SO_REUSEPORT) */
395
396 # if    defined(SO_REUSERAD)
397                 if (opt & SO_REUSERAD) {
398                     (void) printf("%cREUSERAD", sep);
399                     opt &= ~SO_REUSERAD;
400                     sep = ',';
401                 }
402 # endif /* defined(SO_REUSERAD) */
403
404 # if    defined(SO_SECURITY_REQUEST)
405                 if (opt & SO_SECURITY_REQUEST) {
406                     (void) printf("%cSECURITY_REQUEST", sep);
407                     opt &= ~SO_SECURITY_REQUEST;
408                     sep = ',';
409                 }
410 # endif /* defined(SO_SECURITY_REQUEST) */
411
412                 if (Lf->lts.sbszs) {
413                     (void) printf("%cSNDBUF=%lu", sep, Lf->lts.sbsz);
414                     sep = ',';
415                 }
416
417 # if    defined(SO_TIMESTAMP)
418                 if (opt & SO_TIMESTAMP) {
419                     (void) printf("%cTIMESTAMP", sep);
420                     opt &= ~SO_TIMESTAMP;
421                     sep = ',';
422                 }
423 # endif /* defined(SO_TIMESTAMP) */
424
425 # if    defined(SO_UMC)
426                 if (opt & SO_UMC) {
427                     (void) printf("%cUMC", sep);
428                     opt &= ~SO_UMC;
429                     sep = ',';
430                 }
431 # endif /* defined(SO_UMC) */
432
433 # if    defined(SO_USE_IFBUFS)
434                 if (opt & SO_USE_IFBUFS) {
435                     (void) printf("%cUSE_IFBUFS", sep);
436                     opt &= ~SO_USE_IFBUFS;
437                     sep = ',';
438                 }
439 # endif /* defined(SO_USE_IFBUFS) */
440
441 # if    defined(SO_USELOOPBACK)
442                 if (opt & SO_USELOOPBACK) {
443                     (void) printf("%cUSELOOPBACK", sep);
444                     opt &= ~SO_USELOOPBACK;
445                     sep = ',';
446                 }
447 # endif /* defined(SO_USELOOPBACK) */
448
449 # if    defined(SO_WANTMORE)
450                 if (opt & SO_WANTMORE) {
451                     (void) printf("%cWANTMORE", sep);
452                     opt &= ~SO_WANTMORE;
453                     sep = ',';
454                 }
455 # endif /* defined(SO_WANTMORE) */
456
457 # if    defined(SO_WANTOOBFLAG)
458                 if (opt & SO_WANTOOBFLAG) {
459                     (void) printf("%cWANTOOBFLAG", sep);
460                     opt &= ~SO_WANTOOBFLAG;
461                     sep = ',';
462                 }
463 # endif /* defined(SO_WANTOOBFLAG) */
464
465                 if (opt)
466                     (void) printf("%cUNKNOWN=%#x", sep, opt);
467                 if (Ffield)
468                     putchar(Terminator);
469             }
470         }
471 #endif  /* defined(HASSOOPT) */
472
473 #if     defined(HASSOSTATE)
474         if (Ftcptpi & TCPTPI_FLAGS) {
475             unsigned int ss;
476
477             if ((ss = Lf->lts.ss)) {
478                 char sep = ' ';
479
480                 if (Ffield)
481                     sep = LSOF_FID_TCPTPI;
482                 else if (!ps)
483                     sep = '(';
484                 (void) printf("%cSS", sep);
485                 ps++;
486                 sep = '=';
487
488 # if    defined(SS_ASYNC)
489                 if (ss & SS_ASYNC) {
490                     (void) printf("%cASYNC", sep);
491                     ss &= ~SS_ASYNC;
492                     sep = ',';
493                 }
494 # endif /* defined(SS_ASYNC) */
495
496 # if    defined(SS_BOUND)
497                 if (ss & SS_BOUND) {
498                     (void) printf("%cBOUND", sep);
499                     ss &= ~SS_BOUND;
500                     sep = ',';
501                 }
502 # endif /* defined(SS_BOUND) */
503
504 # if    defined(HASSBSTATE)
505 #  if   defined(SBS_CANTRCVMORE)
506                 if (Lf->lts.sbs_rcv & SBS_CANTRCVMORE) {
507                     (void) printf("%cCANTRCVMORE", sep);
508                     Lf->lts.sbs_rcv &= ~SBS_CANTRCVMORE;
509                     sep = ',';
510                 }
511 #  endif        /* defined(SBS_CANTRCVMORE) */
512
513 #  if   defined(SBS_CANTSENDMORE)
514                 if (Lf->lts.sbs_snd & SBS_CANTSENDMORE) {
515                     (void) printf("%cCANTSENDMORE", sep);
516                     Lf->lts.sbs_snd &= ~SBS_CANTSENDMORE;
517                     sep = ',';
518                 }
519 #  endif        /* defined(SS_CANTSENDMORE) */
520 # else  /* !defined(HASSBSTATE) */
521
522 #  if   defined(SS_CANTRCVMORE)
523                 if (ss & SS_CANTRCVMORE) {
524                     (void) printf("%cCANTRCVMORE", sep);
525                     ss &= ~SS_CANTRCVMORE;
526                     sep = ',';
527                 }
528 #  endif        /* defined(SS_CANTRCVMORE) */
529
530 #  if   defined(SS_CANTSENDMORE)
531                 if (ss & SS_CANTSENDMORE) {
532                     (void) printf("%cCANTSENDMORE", sep);
533                     ss &= ~SS_CANTSENDMORE;
534                     sep = ',';
535                 }
536 #  endif        /* defined(SS_CANTSENDMORE) */
537 # endif /* defined(HASSBSTATE) */
538
539 # if    defined(SS_COMP)
540                 if (ss & SS_COMP) {
541                     (void) printf("%cCOMP", sep);
542                     ss &= ~SS_COMP;
543                     sep = ',';
544                 }
545 # endif /* defined(SS_COMP) */
546
547 # if    defined(SS_CONNECTOUT)
548                 if (ss & SS_CONNECTOUT) {
549                     (void) printf("%cCONNECTOUT", sep);
550                     ss &= ~SS_CONNECTOUT;
551                     sep = ',';
552                 }
553 # endif /* defined(SS_CONNECTOUT) */
554
555 # if    defined(SS_HIPRI)
556                 if (ss & SS_HIPRI) {
557                     (void) printf("%cHIPRI", sep);
558                     ss &= ~SS_HIPRI;
559                     sep = ',';
560                 }
561 # endif /* defined(SS_HIPRI) */
562
563 # if    defined(SS_IGNERR)
564                 if (ss & SS_IGNERR) {
565                     (void) printf("%cIGNERR", sep);
566                     ss &= ~SS_IGNERR;
567                     sep = ',';
568                 }
569 # endif /* defined(SS_IGNERR) */
570
571 # if    defined(SS_INCOMP)
572                 if (ss & SS_INCOMP) {
573                     (void) printf("%cINCOMP", sep);
574                     ss &= ~SS_INCOMP;
575                     sep = ',';
576                 }
577 # endif /* defined(SS_INCOMP) */
578
579 # if    defined(SS_IOCWAIT)
580                 if (ss & SS_IOCWAIT) {
581                     (void) printf("%cIOCWAIT", sep);
582                     ss &= ~SS_IOCWAIT;
583                     sep = ',';
584                 }
585 # endif /* defined(SS_IOCWAIT) */
586
587 # if    defined(SS_ISCONFIRMING)
588                 if (ss & SS_ISCONFIRMING) {
589                     (void) printf("%cISCONFIRMING", sep);
590                     ss &= ~SS_ISCONFIRMING;
591                     sep = ',';
592                 }
593 # endif /* defined(SS_ISCONFIRMING) */
594
595 # if    defined(SS_ISCONNECTED)
596                 if (ss & SS_ISCONNECTED) {
597                     (void) printf("%cISCONNECTED", sep);
598                     ss &= ~SS_ISCONNECTED;
599                     sep = ',';
600                 }
601 # endif /* defined(SS_ISCONNECTED) */
602
603 # if    defined(SS_ISCONNECTING)
604                 if (ss & SS_ISCONNECTING) {
605                     (void) printf("%cISCONNECTING", sep);
606                     ss &= ~SS_ISCONNECTING;
607                     sep = ',';
608                 }
609 # endif /* defined(SS_ISCONNECTING) */
610
611 # if    defined(SS_ISDISCONNECTING)
612                 if (ss & SS_ISDISCONNECTING) {
613                     (void) printf("%cISDISCONNECTING", sep);
614                     ss &= ~SS_ISDISCONNECTING;
615                     sep = ',';
616                 }
617 # endif /* defined(SS_ISDISCONNECTING) */
618
619 # if    defined(SS_MORETOSEND)
620                 if (ss & SS_MORETOSEND) {
621                     (void) printf("%cMORETOSEND", sep);
622                     ss &= ~SS_MORETOSEND;
623                     sep = ',';
624                 }
625 # endif /* defined(SS_MORETOSEND) */
626
627 # if    defined(SS_NBIO)
628                 if (ss & SS_NBIO) {
629                     (void) printf("%cNBIO", sep);
630                     ss &= ~SS_NBIO;
631                     sep = ',';
632                 }
633 # endif /* defined(SS_NBIO) */
634
635 # if    defined(SS_NOCONN)
636                 if (ss & SS_NOCONN) {
637                     (void) printf("%cNOCONN", sep);
638                     ss &= ~SS_NOCONN;
639                     sep = ',';
640                 }
641 # endif /* defined(SS_NOCONN) */
642
643 # if    defined(SS_NODELETE)
644                 if (ss & SS_NODELETE) {
645                     (void) printf("%cNODELETE", sep);
646                     ss &= ~SS_NODELETE;
647                     sep = ',';
648                 }
649 # endif /* defined(SS_NODELETE) */
650
651 # if    defined(SS_NOFDREF)
652                 if (ss & SS_NOFDREF) {
653                     (void) printf("%cNOFDREF", sep);
654                     ss &= ~SS_NOFDREF;
655                     sep = ',';
656                 }
657 # endif /* defined(SS_NOFDREF) */
658
659 # if    defined(SS_NOGHOST)
660                 if (ss & SS_NOGHOST) {
661                     (void) printf("%cNOGHOST", sep);
662                     ss &= ~SS_NOGHOST;
663                     sep = ',';
664                 }
665 # endif /* defined(SS_NOGHOST) */
666
667 # if    defined(SS_NOINPUT)
668                 if (ss & SS_NOINPUT) {
669                     (void) printf("%cNOINPUT", sep);
670                     ss &= ~SS_NOINPUT;
671                     sep = ',';
672                 }
673 # endif /* defined(SS_NOINPUT) */
674
675 # if    defined(SS_PRIV)
676                 if (ss & SS_PRIV) {
677                     (void) printf("%cPRIV", sep);
678                     ss &= ~SS_PRIV;
679                     sep = ',';
680                 }
681 # endif /* defined(SS_PRIV) */
682
683 # if    defined(SS_QUEUE)
684                 if (ss & SS_QUEUE) {
685                     (void) printf("%cQUEUE", sep);
686                     ss &= ~SS_QUEUE;
687                     sep = ',';
688                 }
689 # endif /* defined(SS_QUEUE) */
690
691 # if    defined(HASSBSTATE)
692 #  if   defined(SBS_RCVATMARK)
693                 if (Lf->lts.sbs_rcv & SBS_RCVATMARK) {
694                     (void) printf("%cRCVATMARK", sep);
695                     Lf->lts.sbs_rcv &= ~SBS_RCVATMARK;
696                     sep = ',';
697                 }
698 #  endif        /* defined(SBS_RCVATMARK) */
699
700 # else  /* !defined(HASSBSTATE) */
701 #  if   defined(SS_RCVATMARK)
702                 if (ss & SS_RCVATMARK) {
703                     (void) printf("%cRCVATMARK", sep);
704                     ss &= ~SS_RCVATMARK;
705                     sep = ',';
706                 }
707 #  endif        /* defined(SS_RCVATMARK) */
708 # endif /* defined(HASSBSTATE) */
709
710 # if    defined(SS_READWAIT)
711                 if (ss & SS_READWAIT) {
712                     (void) printf("%cREADWAIT", sep);
713                     ss &= ~SS_READWAIT;
714                     sep = ',';
715                 }
716 # endif /* defined(SS_READWAIT) */
717
718 # if    defined(SS_SETRCV)
719                 if (ss & SS_SETRCV) {
720                     (void) printf("%cSETRCV", sep);
721                     ss &= ~SS_SETRCV;
722                     sep = ',';
723                 }
724 # endif /* defined(SS_SETRCV) */
725
726 # if    defined(SS_SETSND)
727                 if (ss & SS_SETSND) {
728                     (void) printf("%cSETSND", sep);
729                     ss &= ~SS_SETSND;
730                     sep = ',';
731                 }
732 # endif /* defined(SS_SETSND) */
733
734 # if    defined(SS_SIGREAD)
735                 if (ss & SS_SIGREAD) {
736                     (void) printf("%cSIGREAD", sep);
737                     ss &= ~SS_SIGREAD;
738                     sep = ',';
739                 }
740 # endif /* defined(SS_SIGREAD) */
741
742 # if    defined(SS_SIGWRITE)
743                 if (ss & SS_SIGWRITE) {
744                     (void) printf("%cSIGWRITE", sep);
745                     ss &= ~SS_SIGWRITE;
746                     sep = ',';
747                 }
748 # endif /* defined(SS_SIGWRITE) */
749
750 # if    defined(SS_SPLICED)
751                 if (ss & SS_SPLICED) {
752                     (void) printf("%cSPLICED", sep);
753                     ss &= ~SS_SPLICED;
754                     sep = ',';
755                 }
756 # endif /* defined(SS_SPLICED) */
757
758 # if    defined(SS_WRITEWAIT)
759                 if (ss & SS_WRITEWAIT) {
760                     (void) printf("%cWRITEWAIT", sep);
761                     ss &= ~SS_WRITEWAIT;
762                     sep = ',';
763                 }
764 # endif /* defined(SS_WRITEWAIT) */
765
766 # if    defined(SS_ZOMBIE)
767                 if (ss & SS_ZOMBIE) {
768                     (void) printf("%cZOMBIE", sep);
769                     ss &= ~SS_ZOMBIE;
770                     sep = ',';
771                 }
772 # endif /* defined(SS_ZOMBIE) */
773
774                 if (ss)
775                     (void) printf("%cUNKNOWN=%#x", sep, ss);
776                 if (Ffield)
777                     putchar(Terminator);
778             }
779         }
780 #endif  /* defined(HASSOSTATE) */
781
782 #if     defined(HASTCPOPT)
783         if (Ftcptpi & TCPTPI_FLAGS) {
784             int topt;
785
786             if ((topt = Lf->lts.topt) || Lf->lts.msss) {
787                 char sep = ' ';
788
789                 if (Ffield)
790                     sep = LSOF_FID_TCPTPI;
791                 else if (!ps)
792                     sep = '(';
793                 (void) printf("%cTF", sep);
794                 ps++;
795                 sep = '=';
796
797 # if    defined(TF_ACKNOW)
798                 if (topt & TF_ACKNOW) {
799                     (void) printf("%cACKNOW", sep);
800                     topt &= ~TF_ACKNOW;
801                     sep = ',';
802                 }
803 # endif /* defined(TF_ACKNOW) */
804
805 # if    defined(TF_CANT_TXSACK)
806                 if (topt & TF_CANT_TXSACK) {
807                     (void) printf("%cCANT_TXSACK", sep);
808                     topt &= ~TF_CANT_TXSACK;
809                     sep = ',';
810                 }
811 # endif /* defined(TF_CANT_TXSACK) */
812
813 # if    defined(TF_DEAD)
814                 if (topt & TF_DEAD) {
815                     (void) printf("%cDEAD", sep);
816                     topt &= ~TF_DEAD;
817                     sep = ',';
818                 }
819 # endif /* defined(TF_DEAD) */
820
821 # if    defined(TF_DELACK)
822                 if (topt & TF_DELACK) {
823                     (void) printf("%cDELACK", sep);
824                     topt &= ~TF_DELACK;
825                     sep = ',';
826                 }
827 # endif /* defined(TF_DELACK) */
828
829 # if    defined(TF_DELAY_ACK)
830                 if (topt & TF_DELAY_ACK) {
831                     (void) printf("%cDELAY_ACK", sep);
832                     topt &= ~TF_DELAY_ACK;
833                     sep = ',';
834                 }
835 # endif /* defined(TF_DELAY_ACK) */
836
837 # if    defined(TF_DISABLE_ECN)
838                 if (topt & TF_DISABLE_ECN) {
839                     (void) printf("%cDISABLE_ECN", sep);
840                     topt &= ~TF_DISABLE_ECN;
841                     sep = ',';
842                 }
843 # endif /* defined(TF_DISABLE_ECN) */
844
845 # if    defined(TF_ECN)
846                 if (topt & TF_ECN) {
847                     (void) printf("%cECN", sep);
848                     topt &= ~TF_ECN;
849                     sep = ',';
850                 }
851 # endif /* defined(TF_ECN) */
852
853 # if    defined(TF_ECN_PERMIT)
854                 if (topt & TF_ECN_PERMIT) {
855                     (void) printf("%cECN_PERMIT", sep);
856                     topt &= ~TF_ECN_PERMIT;
857                     sep = ',';
858                 }
859 # endif /* defined(TF_ECN_PERMIT) */
860
861 # if    defined(TF_FASTRECOVERY)
862                 if (topt & TF_FASTRECOVERY) {
863                     (void) printf("%cFASTRECOVERY", sep);
864                     topt &= ~TF_FASTRECOVERY;
865                     sep = ',';
866                 }
867 # endif /* defined(TF_FASTRECOVERY) */
868
869 # if    defined(TF_FASTRXMT_PHASE)
870                 if (topt & TF_FASTRXMT_PHASE) {
871                     (void) printf("%cFASTRXMT_PHASE", sep);
872                     topt &= ~TF_FASTRXMT_PHASE;
873                     sep = ',';
874                 }
875 # endif /* defined(TF_FASTRXMT_PHASE) */
876
877 # if    defined(TF_HAVEACKED)
878                 if (topt & TF_HAVEACKED) {
879                     (void) printf("%cHAVEACKED", sep);
880                     topt &= ~TF_HAVEACKED;
881                     sep = ',';
882                 }
883 # endif /* defined(TF_HAVEACKED) */
884
885 # if    defined(TF_HAVECLOSED)
886                 if (topt & TF_HAVECLOSED) {
887                     (void) printf("%cHAVECLOSED", sep);
888                     topt &= ~TF_HAVECLOSED;
889                     sep = ',';
890                 }
891 # endif /* defined(TF_HAVECLOSED) */
892
893 # if    defined(TF_IGNR_RXSACK)
894                 if (topt & TF_IGNR_RXSACK) {
895                     (void) printf("%cIGNR_RXSACK", sep);
896                     topt &= ~TF_IGNR_RXSACK;
897                     sep = ',';
898                 }
899 # endif /* defined(TF_IGNR_RXSACK) */
900
901 # if    defined(TF_IOLOCK)
902                 if (topt & TF_IOLOCK) {
903                     (void) printf("%cIOLOCK", sep);
904                     topt &= ~TF_IOLOCK;
905                     sep = ',';
906                 }
907 # endif /* defined(TF_IOLOCK) */
908
909 # if    defined(TF_LARGESEND)
910                 if (topt & TF_LARGESEND) {
911                     (void) printf("%cLARGESEND", sep);
912                     topt &= ~TF_LARGESEND;
913                     sep = ',';
914                 }
915 # endif /* defined(TF_LARGESEND) */
916
917 # if    defined(TF_LASTIDLE)
918                 if (topt & TF_LASTIDLE) {
919                     (void) printf("%cLASTIDLE", sep);
920                     topt &= ~TF_LASTIDLE;
921                     sep = ',';
922                 }
923 # endif /* defined(TF_LASTIDLE) */
924
925 # if    defined(TF_LQ_OVERFLOW)
926                 if (topt & TF_LQ_OVERFLOW) {
927                     (void) printf("%cLQ_OVERFLOW", sep);
928                     topt &= ~TF_LQ_OVERFLOW;
929                     sep = ',';
930                 }
931 # endif /* defined(TF_LQ_OVERFLOW) */
932
933                 if (Lf->lts.msss) {
934                     (void) printf("%cMSS=%lu", sep, Lf->lts.mss);
935                     sep = ',';
936                 }
937
938 # if    defined(TF_MORETOCOME)
939                 if (topt & TF_MORETOCOME) {
940                     (void) printf("%cMORETOCOME", sep);
941                     topt &= ~TF_MORETOCOME;
942                     sep = ',';
943                 }
944 # endif /* defined(TF_MORETOCOME) */
945
946 # if    defined(TF_NEEDACK)
947                 if (topt & TF_NEEDACK) {
948                     (void) printf("%cNEEDACK", sep);
949                     topt &= ~TF_NEEDACK;
950                     sep = ',';
951                 }
952 # endif /* defined(TF_NEEDACK) */
953
954 # if    defined(TF_NEEDCLOSE)
955                 if (topt & TF_NEEDCLOSE) {
956                     (void) printf("%cNEEDCLOSE", sep);
957                     topt &= ~TF_NEEDCLOSE;
958                     sep = ',';
959                 }
960 # endif /* defined(TF_NEEDCLOSE) */
961
962 # if    defined(TF_NEEDFIN)
963                 if (topt & TF_NEEDFIN) {
964                     (void) printf("%cNEEDFIN", sep);
965                     topt &= ~TF_NEEDFIN;
966                     sep = ',';
967                 }
968 # endif /* defined(TF_NEEDFIN) */
969
970 # if    defined(TF_NEEDIN)
971                 if (topt & TF_NEEDIN) {
972                     (void) printf("%cNEEDIN", sep);
973                     topt &= ~TF_NEEDIN;
974                     sep = ',';
975                 }
976 # endif /* defined(TF_NEEDIN) */
977
978 # if    defined(TF_NEEDOUT)
979                 if (topt & TF_NEEDOUT) {
980                     (void) printf("%cNEEDOUT", sep);
981                     topt &= ~TF_NEEDOUT;
982                     sep = ',';
983                 }
984 # endif /* defined(TF_NEEDOUT) */
985
986 # if    defined(TF_NEEDSYN)
987                 if (topt & TF_NEEDSYN) {
988                     (void) printf("%cNEEDSYN", sep);
989                     topt &= ~TF_NEEDSYN;
990                     sep = ',';
991                 }
992 # endif /* defined(TF_NEEDSYN) */
993
994 # if    defined(TF_NEEDTIMER)
995                 if (topt & TF_NEEDTIMER) {
996                     (void) printf("%cNEEDTIMER", sep);
997                     topt &= ~TF_NEEDTIMER;
998                     sep = ',';
999                 }
1000 # endif /* defined(TF_NEEDTIMER) */
1001
1002 # if    defined(TF_NEWRENO_RXMT)
1003                 if (topt & TF_NEWRENO_RXMT) {
1004                     (void) printf("%cNEWRENO_RXMT", sep);
1005                     topt &= ~TF_NEWRENO_RXMT;
1006                     sep = ',';
1007                 }
1008 # endif /* defined(TF_NEWRENO_RXMT) */
1009
1010 # if    defined(TF_NODELACK)
1011                 if (topt & TF_NODELACK) {
1012                     (void) printf("%cNODELACK", sep);
1013                     topt &= ~TF_NODELACK;
1014                     sep = ',';
1015                 }
1016 # endif /* defined(TF_NODELACK) */
1017
1018 # if    defined(TF_NODELAY)
1019                 if (topt & TF_NODELAY) {
1020                     (void) printf("%cNODELAY", sep);
1021                     topt &= ~TF_NODELAY;
1022                     sep = ',';
1023                 }
1024 # endif /* defined(TF_NODELAY) */
1025
1026 # if    defined(TF_NOOPT)
1027                 if (topt & TF_NOOPT) {
1028                     (void) printf("%cNOOPT", sep);
1029                     topt &= ~TF_NOOPT;
1030                     sep = ',';
1031                 }
1032 # endif /* defined(TF_NOOPT) */
1033
1034 # if    defined(TF_NOPUSH)
1035                 if (topt & TF_NOPUSH) {
1036                     (void) printf("%cNOPUSH", sep);
1037                     topt &= ~TF_NOPUSH;
1038                     sep = ',';
1039                 }
1040 # endif /* defined(TF_NOPUSH) */
1041
1042 # if    defined(TF_NO_PMTU)
1043                 if (topt & TF_NO_PMTU) {
1044                     (void) printf("%cNO_PMTU", sep);
1045                     topt &= ~TF_NO_PMTU;
1046                     sep = ',';
1047                 }
1048 # endif /* defined(TF_NO_PMTU) */
1049
1050 # if    defined(TF_RAW)
1051                 if (topt & TF_RAW) {
1052                     (void) printf("%cRAW", sep);
1053                     topt &= ~TF_RAW;
1054                     sep = ',';
1055                 }
1056 # endif /* defined(TF_RAW) */
1057
1058 # if    defined(TF_RCVD_CC)
1059                 if (topt & TF_RCVD_CC) {
1060                     (void) printf("%cRCVD_CC", sep);
1061                     topt &= ~TF_RCVD_CC;
1062                     sep = ',';
1063                 }
1064 # endif /* defined(TF_RCVD_CC) */
1065
1066 # if    defined(TF_RCVD_SCALE)
1067                 if (topt & TF_RCVD_SCALE) {
1068                     (void) printf("%cRCVD_SCALE", sep);
1069                     topt &= ~TF_RCVD_SCALE;
1070                     sep = ',';
1071                 }
1072 # endif /* defined(TF_RCVD_SCALE) */
1073
1074 # if    defined(TF_RCVD_CE)
1075                 if (topt & TF_RCVD_CE) {
1076                     (void) printf("%cRCVD_CE", sep);
1077                     topt &= ~TF_RCVD_CE;
1078                     sep = ',';
1079                 }
1080 # endif /* defined(TF_RCVD_CE) */
1081
1082 # if    defined(TF_RCVD_TS)
1083                 if (topt & TF_RCVD_TS) {
1084                     (void) printf("%cRCVD_TS", sep);
1085                     topt &= ~TF_RCVD_TS;
1086                     sep = ',';
1087                 }
1088 # endif /* defined(TF_RCVD_TS) */
1089
1090 # if    defined(TF_RCVD_TSTMP)
1091                 if (topt & TF_RCVD_TSTMP) {
1092                     (void) printf("%cRCVD_TSTMP", sep);
1093                     topt &= ~TF_RCVD_TSTMP;
1094                     sep = ',';
1095                 }
1096 # endif /* defined(TF_RCVD_TSTMP) */
1097
1098 # if    defined(TF_RCVD_WS)
1099                 if (topt & TF_RCVD_WS) {
1100                     (void) printf("%cRCVD_WS", sep);
1101                     topt &= ~TF_RCVD_WS;
1102                     sep = ',';
1103                 }
1104 # endif /* defined(TF_RCVD_WS) */
1105
1106 # if    defined(TF_REASSEMBLING)
1107                 if (topt & TF_REASSEMBLING) {
1108                     (void) printf("%cREASSEMBLING", sep);
1109                     topt &= ~TF_REASSEMBLING;
1110                     sep = ',';
1111                 }
1112 # endif /* defined(TF_REASSEMBLING) */
1113
1114 # if    defined(TF_REQ_CC)
1115                 if (topt & TF_REQ_CC) {
1116                     (void) printf("%cREQ_CC", sep);
1117                     topt &= ~TF_REQ_CC;
1118                     sep = ',';
1119                 }
1120 # endif /* defined(TF_REQ_CC) */
1121
1122 # if    defined(TF_REQ_SCALE)
1123                 if (topt & TF_REQ_SCALE) {
1124                     (void) printf("%cREQ_SCALE", sep);
1125                     topt &= ~TF_REQ_SCALE;
1126                     sep = ',';
1127                 }
1128 # endif /* defined(TF_REQ_SCALE) */
1129
1130 # if    defined(TF_REQ_TSTMP)
1131                 if (topt & TF_REQ_TSTMP) {
1132                     (void) printf("%cREQ_TSTMP", sep);
1133                     topt &= ~TF_REQ_TSTMP;
1134                     sep = ',';
1135                 }
1136 # endif /* defined(TF_REQ_TSTMP) */
1137
1138 # if    defined(TF_RFC1323)
1139                 if (topt & TF_RFC1323) {
1140                     (void) printf("%cRFC1323", sep);
1141                     topt &= ~TF_RFC1323;
1142                     sep = ',';
1143                 }
1144 # endif /* defined(TF_RFC1323) */
1145
1146 # if    defined(TF_RXWIN0SENT)
1147                 if (topt & TF_RXWIN0SENT) {
1148                     (void) printf("%cRXWIN0SENT", sep);
1149                     topt &= ~TF_RXWIN0SENT;
1150                     sep = ',';
1151                 }
1152 # endif /* defined(TF_RXWIN0SENT) */
1153
1154 # if    defined(TF_SACK_GENERATE)
1155                 if (topt & TF_SACK_GENERATE) {
1156                     (void) printf("%cSACK_GENERATE", sep);
1157                     topt &= ~TF_SACK_GENERATE;
1158                     sep = ',';
1159                 }
1160 # endif /* defined(TF_SACK_GENERATE) */
1161
1162 # if    defined(TF_SACK_PERMIT)
1163                 if (topt & TF_SACK_PERMIT) {
1164                     (void) printf("%cSACK_PERMIT", sep);
1165                     topt &= ~TF_SACK_PERMIT;
1166                     sep = ',';
1167                 }
1168 # endif /* defined(TF_SACK_PERMIT) */
1169
1170 # if    defined(TF_SACK_PROCESS)
1171                 if (topt & TF_SACK_PROCESS) {
1172                     (void) printf("%cSACK_PROCESS", sep);
1173                     topt &= ~TF_SACK_PROCESS;
1174                     sep = ',';
1175                 }
1176 # endif /* defined(TF_SACK_PROCESS) */
1177
1178 # if    defined(TF_SEND)
1179                 if (topt & TF_SEND) {
1180                     (void) printf("%cSEND", sep);
1181                     topt &= ~TF_SEND;
1182                     sep = ',';
1183                 }
1184 # endif /* defined(TF_SEND) */
1185
1186 # if    defined(TF_SEND_AND_DISCONNECT)
1187                 if (topt & TF_SEND_AND_DISCONNECT) {
1188                     (void) printf("%cSEND_AND_DISCONNECT", sep);
1189                     topt &= ~TF_SEND_AND_DISCONNECT;
1190                     sep = ',';
1191                 }
1192 # endif /* defined(TF_SEND_AND_DISCONNECT) */
1193
1194 # if    defined(TF_SENDCCNEW)
1195                 if (topt & TF_SENDCCNEW) {
1196                     (void) printf("%cSENDCCNEW", sep);
1197                     topt &= ~TF_SENDCCNEW;
1198                     sep = ',';
1199                 }
1200 # endif /* defined(TF_SENDCCNEW) */
1201
1202 # if    defined(TF_SEND_CWR)
1203                 if (topt & TF_SEND_CWR) {
1204                     (void) printf("%cSEND_CWR", sep);
1205                     topt &= ~TF_SEND_CWR;
1206                     sep = ',';
1207                 }
1208 # endif /* defined(TF_SEND_CWR) */
1209
1210 # if    defined(TF_SEND_ECHO)
1211                 if (topt & TF_SEND_ECHO) {
1212                     (void) printf("%cSEND_ECHO", sep);
1213                     topt &= ~TF_SEND_ECHO;
1214                     sep = ',';
1215                 }
1216 # endif /* defined(TF_SEND_ECHO) */
1217
1218 # if    defined(TF_SEND_TSTMP)
1219                 if (topt & TF_SEND_TSTMP) {
1220                     (void) printf("%cSEND_TSTMP", sep);
1221                     topt &= ~TF_SEND_TSTMP;
1222                     sep = ',';
1223                 }
1224 # endif /* defined(TF_SEND_TSTMP) */
1225
1226 # if    defined(TF_SENTFIN)
1227                 if (topt & TF_SENTFIN) {
1228                     (void) printf("%cSENTFIN", sep);
1229                     topt &= ~TF_SENTFIN;
1230                     sep = ',';
1231                 }
1232 # endif /* defined(TF_SENTFIN) */
1233
1234 # if    defined(TF_SENT_TS)
1235                 if (topt & TF_SENT_TS) {
1236                     (void) printf("%cSENT_TS", sep);
1237                     topt &= ~TF_SENT_TS;
1238                     sep = ',';
1239                 }
1240 # endif /* defined(TF_SENT_TS) */
1241
1242 # if    defined(TF_SENT_WS)
1243                 if (topt & TF_SENT_WS) {
1244                     (void) printf("%cSENT_WS", sep);
1245                     topt &= ~TF_SENT_WS;
1246                     sep = ',';
1247                 }
1248 # endif /* defined(TF_SENT_WS) */
1249
1250 # if    defined(TF_SIGNATURE)
1251                 if (topt & TF_SIGNATURE) {
1252                     (void) printf("%cSIGNATURE", sep);
1253                     topt &= ~TF_SIGNATURE;
1254                     sep = ',';
1255                 }
1256 # endif /* defined(TF_SIGNATURE) */
1257
1258 # if    defined(TF_SLOWLINK)
1259                 if (topt & TF_SLOWLINK) {
1260                     (void) printf("%cSLOWLINK", sep);
1261                     topt &= ~TF_SLOWLINK;
1262                     sep = ',';
1263                 }
1264 # endif /* defined(TF_SLOWLINK) */
1265
1266 # if    defined(TF_STDURG)
1267                 if (topt & TF_STDURG) {
1268                     (void) printf("%cSTDURG", sep);
1269                     topt &= ~TF_STDURG;
1270                     sep = ',';
1271                 }
1272 # endif /* defined(TF_STDURG) */
1273
1274 # if    defined(TF_SYN_REXMT)
1275                 if (topt & TF_SYN_REXMT) {
1276                     (void) printf("%cSYN_REXMT", sep);
1277                     topt &= ~TF_SYN_REXMT;
1278                     sep = ',';
1279                 }
1280 # endif /* defined(TF_SYN_REXMT) */
1281
1282 # if    defined(TF_UIOMOVED)
1283                 if (topt & TF_UIOMOVED) {
1284                     (void) printf("%cUIOMOVED", sep);
1285                     topt &= ~TF_UIOMOVED;
1286                     sep = ',';
1287                 }
1288 # endif /* defined(TF_UIOMOVED) */
1289
1290 # if    defined(TF_USE_SCALE)
1291                 if (topt & TF_USE_SCALE) {
1292                     (void) printf("%cUSE_SCALE", sep);
1293                     topt &= ~TF_USE_SCALE;
1294                     sep = ',';
1295                 }
1296 # endif /* defined(TF_USE_SCALE) */
1297
1298 # if    defined(TF_WASIDLE)
1299                 if (topt & TF_WASIDLE) {
1300                     (void) printf("%cWASIDLE", sep);
1301                     topt &= ~TF_WASIDLE;
1302                     sep = ',';
1303                 }
1304 # endif /* defined(TF_WASIDLE) */
1305
1306 # if    defined(TF_WASFRECOVERY)
1307                 if (topt & TF_WASFRECOVERY) {
1308                     (void) printf("%cWASFRECOVERY", sep);
1309                     topt &= ~TF_WASFRECOVERY;
1310                     sep = ',';
1311                 }
1312 # endif /* defined(TF_WASFRECOVERY) */
1313
1314 # if    defined(TF_WILL_SACK)
1315                 if (topt & TF_WILL_SACK) {
1316                     (void) printf("%cWILL_SACK", sep);
1317                     topt &= ~TF_WILL_SACK;
1318                     sep = ',';
1319                 }
1320 # endif /* defined(TF_WILL_SACK) */
1321
1322                 if (topt)
1323                     (void) printf("%cUNKNOWN=%#x", sep, topt);
1324                 if (Ffield)
1325                     putchar(Terminator);
1326             }
1327         }
1328 #endif  /* defined(HASTCPOPT) */
1329
1330 #if     defined(HASTCPTPIW)
1331         if (Ftcptpi & TCPTPI_WINDOWS) {
1332             if (Lf->lts.rws) {
1333                 if (Ffield)
1334                     putchar(LSOF_FID_TCPTPI);
1335                 else {
1336                     if (ps)
1337                         putchar(' ');
1338                     else
1339                         putchar('(');
1340                 }
1341                 (void) printf("WR=%lu", Lf->lts.rw);
1342                 if (Ffield)
1343                     putchar(Terminator);
1344                 ps++;
1345             }
1346             if (Lf->lts.wws) {
1347                 if (Ffield)
1348                     putchar(LSOF_FID_TCPTPI);
1349                 else {
1350                     if (ps)
1351                         putchar(' ');
1352                     else
1353                         putchar('(');
1354                 }
1355                 (void) printf("WW=%lu", Lf->lts.ww);
1356                 if (Ffield)
1357                     putchar(Terminator);
1358                 ps++;
1359             }
1360         }
1361 #endif  /* defined(HASTCPTPIW) */
1362
1363         if (ps && !Ffield)
1364             putchar(')');
1365         if (nl)
1366             putchar('\n');
1367 }
1368 #else   /* !defined(USE_LIB_PRINT_TCPTPI) */
1369 char ptti_d1[] = "d"; char *ptti_d2 = ptti_d1;
1370 #endif  /* defined(USE_LIB_PRINT_TCPTPI) */