Annotation of sys/netinet/tcp_debug.c, Revision 1.1
1.1 ! nbrk 1: /* $OpenBSD: tcp_debug.c,v 1.20 2004/09/24 15:02:43 markus Exp $ */
! 2: /* $NetBSD: tcp_debug.c,v 1.10 1996/02/13 23:43:36 christos Exp $ */
! 3:
! 4: /*
! 5: * Copyright (c) 1982, 1986, 1993
! 6: * The Regents of the University of California. All rights reserved.
! 7: *
! 8: * Redistribution and use in source and binary forms, with or without
! 9: * modification, are permitted provided that the following conditions
! 10: * are met:
! 11: * 1. Redistributions of source code must retain the above copyright
! 12: * notice, this list of conditions and the following disclaimer.
! 13: * 2. Redistributions in binary form must reproduce the above copyright
! 14: * notice, this list of conditions and the following disclaimer in the
! 15: * documentation and/or other materials provided with the distribution.
! 16: * 3. Neither the name of the University nor the names of its contributors
! 17: * may be used to endorse or promote products derived from this software
! 18: * without specific prior written permission.
! 19: *
! 20: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
! 21: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
! 22: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
! 23: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
! 24: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
! 25: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
! 26: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
! 27: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
! 28: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
! 29: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
! 30: * SUCH DAMAGE.
! 31: *
! 32: * @(#)COPYRIGHT 1.1 (NRL) 17 January 1995
! 33: *
! 34: * NRL grants permission for redistribution and use in source and binary
! 35: * forms, with or without modification, of the software and documentation
! 36: * created at NRL provided that the following conditions are met:
! 37: *
! 38: * 1. Redistributions of source code must retain the above copyright
! 39: * notice, this list of conditions and the following disclaimer.
! 40: * 2. Redistributions in binary form must reproduce the above copyright
! 41: * notice, this list of conditions and the following disclaimer in the
! 42: * documentation and/or other materials provided with the distribution.
! 43: * 3. All advertising materials mentioning features or use of this software
! 44: * must display the following acknowledgements:
! 45: * This product includes software developed by the University of
! 46: * California, Berkeley and its contributors.
! 47: * This product includes software developed at the Information
! 48: * Technology Division, US Naval Research Laboratory.
! 49: * 4. Neither the name of the NRL nor the names of its contributors
! 50: * may be used to endorse or promote products derived from this software
! 51: * without specific prior written permission.
! 52: *
! 53: * THE SOFTWARE PROVIDED BY NRL IS PROVIDED BY NRL AND CONTRIBUTORS ``AS
! 54: * IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
! 55: * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
! 56: * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NRL OR
! 57: * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
! 58: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
! 59: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
! 60: * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
! 61: * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
! 62: * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
! 63: * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
! 64: *
! 65: * The views and conclusions contained in the software and documentation
! 66: * are those of the authors and should not be interpreted as representing
! 67: * official policies, either expressed or implied, of the US Naval
! 68: * Research Laboratory (NRL).
! 69: */
! 70:
! 71: #ifdef TCPDEBUG
! 72: /* load symbolic names */
! 73: #define PRUREQUESTS
! 74: #define TCPSTATES
! 75: #define TCPTIMERS
! 76: #define TANAMES
! 77: #endif
! 78:
! 79: #include <sys/param.h>
! 80: #include <sys/systm.h>
! 81: #include <sys/mbuf.h>
! 82: #include <sys/socket.h>
! 83: #include <sys/protosw.h>
! 84:
! 85: #include <net/route.h>
! 86: #include <net/if.h>
! 87:
! 88: #include <netinet/in.h>
! 89: #include <netinet/in_systm.h>
! 90: #include <netinet/ip.h>
! 91: #include <netinet/in_pcb.h>
! 92: #include <netinet/ip_var.h>
! 93: #include <netinet/tcp.h>
! 94: #include <netinet/tcp_timer.h>
! 95: #include <netinet/tcp_var.h>
! 96: #include <netinet/tcpip.h>
! 97: #include <netinet/tcp_debug.h>
! 98: #include <netinet/tcp_fsm.h>
! 99:
! 100: #ifdef INET6
! 101: #ifndef INET
! 102: #include <netinet/in.h>
! 103: #endif
! 104: #include <netinet/ip6.h>
! 105: #endif /* INET6 */
! 106:
! 107: #ifdef TCPDEBUG
! 108: int tcpconsdebug = 0;
! 109: #endif
! 110:
! 111: struct tcp_debug tcp_debug[TCP_NDEBUG];
! 112: int tcp_debx;
! 113:
! 114: /*
! 115: * Tcp debug routines
! 116: */
! 117: void
! 118: tcp_trace(short act, short ostate, struct tcpcb *tp, caddr_t headers,
! 119: int req, int len)
! 120: {
! 121: #ifdef TCPDEBUG
! 122: tcp_seq seq, ack;
! 123: int flags;
! 124: #endif
! 125: struct tcp_debug *td = &tcp_debug[tcp_debx++];
! 126: struct tcpiphdr *ti = (struct tcpiphdr *)headers;
! 127: struct tcphdr *th;
! 128: #ifdef INET6
! 129: struct tcpipv6hdr *ti6 = (struct tcpipv6hdr *)ti;
! 130: #endif
! 131:
! 132: if (tcp_debx == TCP_NDEBUG)
! 133: tcp_debx = 0;
! 134: td->td_time = iptime();
! 135: td->td_act = act;
! 136: td->td_ostate = ostate;
! 137: td->td_tcb = (caddr_t)tp;
! 138: if (tp)
! 139: td->td_cb = *tp;
! 140: else
! 141: bzero((caddr_t)&td->td_cb, sizeof (*tp));
! 142: switch (tp->pf) {
! 143: #ifdef INET6
! 144: case PF_INET6:
! 145: if (ti6) {
! 146: th = &ti6->ti6_t;
! 147: td->td_ti6 = *ti6;
! 148: td->td_ti6.ti6_plen = len;
! 149: } else
! 150: bzero(&td->td_ti6, sizeof(struct tcpipv6hdr));
! 151: break;
! 152: #endif /* INET6 */
! 153: case PF_INET:
! 154: if (ti) {
! 155: th = &ti->ti_t;
! 156: td->td_ti = *ti;
! 157: td->td_ti.ti_len = len;
! 158: } else
! 159: bzero(&td->td_ti, sizeof(struct tcpiphdr));
! 160: break;
! 161: default:
! 162: return;
! 163: }
! 164:
! 165: td->td_req = req;
! 166: #ifdef TCPDEBUG
! 167: if (tcpconsdebug == 0)
! 168: return;
! 169: if (tp)
! 170: printf("%x %s:", tp, tcpstates[ostate]);
! 171: else
! 172: printf("???????? ");
! 173: printf("%s ", tanames[act]);
! 174: switch (act) {
! 175:
! 176: case TA_INPUT:
! 177: case TA_OUTPUT:
! 178: case TA_DROP:
! 179: if (ti == 0)
! 180: break;
! 181: seq = th->th_seq;
! 182: ack = th->th_ack;
! 183: if (act == TA_OUTPUT) {
! 184: seq = ntohl(seq);
! 185: ack = ntohl(ack);
! 186: }
! 187: if (len)
! 188: printf("[%x..%x)", seq, seq+len);
! 189: else
! 190: printf("%x", seq);
! 191: printf("@%x, urp=%x", ack, th->th_urp);
! 192: flags = th->th_flags;
! 193: if (flags) {
! 194: #ifndef lint
! 195: char *cp = "<";
! 196: #define pf(f) { if (th->th_flags&TH_##f) { printf("%s%s", cp, "f"); cp = ","; } }
! 197: pf(SYN); pf(ACK); pf(FIN); pf(RST); pf(PUSH); pf(URG);
! 198: #endif
! 199: printf(">");
! 200: }
! 201: break;
! 202:
! 203: case TA_USER:
! 204: printf("%s", prurequests[req&0xff]);
! 205: if ((req & 0xff) == PRU_SLOWTIMO)
! 206: printf("<%s>", tcptimers[req>>8]);
! 207: break;
! 208: }
! 209: if (tp)
! 210: printf(" -> %s", tcpstates[tp->t_state]);
! 211: /* print out internal state of tp !?! */
! 212: printf("\n");
! 213: if (tp == 0)
! 214: return;
! 215: printf("\trcv_(nxt,wnd,up) (%x,%x,%x) snd_(una,nxt,max) (%x,%x,%x)\n",
! 216: tp->rcv_nxt, tp->rcv_wnd, tp->rcv_up, tp->snd_una, tp->snd_nxt,
! 217: tp->snd_max);
! 218: printf("\tsnd_(wl1,wl2,wnd) (%x,%x,%x)\n",
! 219: tp->snd_wl1, tp->snd_wl2, tp->snd_wnd);
! 220: #endif /* TCPDEBUG */
! 221: }
CVSweb