* Copyright (c) 1982, 1986 Regents of the University of California.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* from: @(#)tcp_debug.c 7.6 (Berkeley) 6/28/90
* $Id: tcp_debug.c,v 1.6 1993/12/19 00:52:47 wollman Exp $
/* load symbolic names */
#include "../net/route.h"
struct tcp_debug tcp_debug
[TCP_NDEBUG
];
tcp_trace(act
, ostate
, tp
, ti
, req
)
struct tcp_debug
*td
= &tcp_debug
[tcp_debx
++];
if (tcp_debx
== TCP_NDEBUG
)
td
->td_tcb
= (caddr_t
)tp
;
bzero((caddr_t
)&td
->td_cb
, sizeof (*tp
));
bzero((caddr_t
)&td
->td_ti
, sizeof (*ti
));
printf("%x %s:", tp
, tcpstates
[ostate
]);
printf("%s ", tanames
[act
]);
len
= ntohs((u_short
)len
);
len
-= sizeof (struct tcphdr
);
printf("[%x..%x)", seq
, seq
+len
);
printf("@%x, urp=%x", ack
, ti
->ti_urp
);
#define pf(f) { if (ti->ti_flags& TH_ ## f) { printf("%s" #f, cp); cp = ","; } }
pf(SYN
); pf(ACK
); pf(FIN
); pf(RST
); pf(PUSH
); pf(URG
);
printf("%s", prurequests
[req
&0xff]);
if ((req
& 0xff) == PRU_SLOWTIMO
)
printf("<%s>", tcptimers
[req
>>8]);
printf(" -> %s", tcpstates
[tp
->t_state
]);
/* print out internal state of tp !?! */
printf("\trcv_(nxt,wnd,up) (%x,%x,%x) snd_(una,nxt,max) (%x,%x,%x)\n",
tp
->rcv_nxt
, tp
->rcv_wnd
, tp
->rcv_up
, tp
->snd_una
, tp
->snd_nxt
,
printf("\tsnd_(wl1,wl2,wnd) (%x,%x,%x)\n",
tp
->snd_wl1
, tp
->snd_wl2
, tp
->snd_wnd
);