|
|
1.1 root 1: /*
2: * Copyright (c) 1982, 1986 Regents of the University of California.
3: * All rights reserved. The Berkeley software License Agreement
4: * specifies the terms and conditions for redistribution.
5: *
6: * @(#)tcp_debug.c 7.1 (Berkeley) 6/5/86
7: */
8:
9: #include "param.h"
10: #include "systm.h"
11: #include "mbuf.h"
12: #include "socket.h"
13: #include "socketvar.h"
14: #define PRUREQUESTS
15: #include "protosw.h"
16: #include "errno.h"
17:
18: #include "../net/route.h"
19: #include "../net/if.h"
20:
21: #include "in.h"
22: #include "in_pcb.h"
23: #include "in_systm.h"
24: #include "ip.h"
25: #include "ip_var.h"
26: #include "tcp.h"
27: #define TCPSTATES
28: #include "tcp_fsm.h"
29: #include "tcp_seq.h"
30: #define TCPTIMERS
31: #include "tcp_timer.h"
32: #include "tcp_var.h"
33: #include "tcpip.h"
34: #define TANAMES
35: #include "tcp_debug.h"
36:
37: int tcpconsdebug = 0;
38: /*
39: * Tcp debug routines
40: */
41: tcp_trace(act, ostate, tp, ti, req)
42: short act, ostate;
43: struct tcpcb *tp;
44: struct tcpiphdr *ti;
45: int req;
46: {
47: tcp_seq seq, ack;
48: int len, flags;
49: struct tcp_debug *td = &tcp_debug[tcp_debx++];
50:
51: if (tcp_debx == TCP_NDEBUG)
52: tcp_debx = 0;
53: td->td_time = iptime();
54: td->td_act = act;
55: td->td_ostate = ostate;
56: td->td_tcb = (caddr_t)tp;
57: if (tp)
58: td->td_cb = *tp;
59: else
60: bzero((caddr_t)&td->td_cb, sizeof (*tp));
61: if (ti)
62: td->td_ti = *ti;
63: else
64: bzero((caddr_t)&td->td_ti, sizeof (*ti));
65: td->td_req = req;
66: if (tcpconsdebug == 0)
67: return;
68: if (tp)
69: printf("%x %s:", tp, tcpstates[ostate]);
70: else
71: printf("???????? ");
72: printf("%s ", tanames[act]);
73: switch (act) {
74:
75: case TA_INPUT:
76: case TA_OUTPUT:
77: case TA_DROP:
78: if (ti == 0)
79: break;
80: seq = ti->ti_seq;
81: ack = ti->ti_ack;
82: len = ti->ti_len;
83: if (act == TA_OUTPUT) {
84: seq = ntohl(seq);
85: ack = ntohl(ack);
86: len = ntohs((u_short)len);
87: }
88: if (act == TA_OUTPUT)
89: len -= sizeof (struct tcphdr);
90: if (len)
91: printf("[%x..%x)", seq, seq+len);
92: else
93: printf("%x", seq);
94: printf("@%x, urp=%x", ack, ti->ti_urp);
95: flags = ti->ti_flags;
96: if (flags) {
97: #ifndef lint
98: char *cp = "<";
99: #define pf(f) { if (ti->ti_flags&TH_/**/f) { printf("%s%s", cp, "f"); cp = ","; } }
100: pf(SYN); pf(ACK); pf(FIN); pf(RST); pf(PUSH); pf(URG);
101: #endif
102: printf(">");
103: }
104: break;
105:
106: case TA_USER:
107: printf("%s", prurequests[req&0xff]);
108: if ((req & 0xff) == PRU_SLOWTIMO)
109: printf("<%s>", tcptimers[req>>8]);
110: break;
111: }
112: if (tp)
113: printf(" -> %s", tcpstates[tp->t_state]);
114: /* print out internal state of tp !?! */
115: printf("\n");
116: if (tp == 0)
117: return;
118: printf("\trcv_(nxt,wnd,up) (%x,%x,%x) snd_(una,nxt,max) (%x,%x,%x)\n",
119: tp->rcv_nxt, tp->rcv_wnd, tp->rcv_up, tp->snd_una, tp->snd_nxt,
120: tp->snd_max);
121: printf("\tsnd_(wl1,wl2,wnd) (%x,%x,%x)\n",
122: tp->snd_wl1, tp->snd_wl2, tp->snd_wnd);
123: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.