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