spx_debug.c revision 32350
1185347Sattilio/*
2185347Sattilio * Copyright (c) 1995, Mike Mitchell
3185347Sattilio * Copyright (c) 1984, 1985, 1986, 1987, 1993
4185347Sattilio *	The Regents of the University of California.  All rights reserved.
5185347Sattilio *
6185347Sattilio * Redistribution and use in source and binary forms, with or without
7185347Sattilio * modification, are permitted provided that the following conditions
8185347Sattilio * are met:
9185347Sattilio * 1. Redistributions of source code must retain the above copyright
10185347Sattilio *    notice, this list of conditions and the following disclaimer.
11185347Sattilio * 2. Redistributions in binary form must reproduce the above copyright
12185347Sattilio *    notice, this list of conditions and the following disclaimer in the
13185347Sattilio *    documentation and/or other materials provided with the distribution.
14185347Sattilio * 3. All advertising materials mentioning features or use of this software
15185347Sattilio *    must display the following acknowledgement:
16185347Sattilio *	This product includes software developed by the University of
17185347Sattilio *	California, Berkeley and its contributors.
18185347Sattilio * 4. Neither the name of the University nor the names of its contributors
19185347Sattilio *    may be used to endorse or promote products derived from this software
20185347Sattilio *    without specific prior written permission.
21185347Sattilio *
22185347Sattilio * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
23185347Sattilio * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24185347Sattilio * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25185347Sattilio * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
26185347Sattilio * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27185347Sattilio * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28185347Sattilio * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29185347Sattilio * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30185347Sattilio * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31185347Sattilio * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32185347Sattilio * SUCH DAMAGE.
33185347Sattilio *
34185347Sattilio *	@(#)spx_debug.c
35185347Sattilio *
36185347Sattilio * $Id: spx_debug.c,v 1.11 1997/10/28 12:24:26 bde Exp $
37185347Sattilio */
38185347Sattilio
39185347Sattilio#include "opt_inet.h"
40185347Sattilio#include "opt_tcpdebug.h"
41185347Sattilio
42185347Sattilio#include <sys/param.h>
43185347Sattilio#include <sys/systm.h>
44185347Sattilio#include <sys/protosw.h>
45185347Sattilio
46185347Sattilio#include <netinet/in_systm.h>
47185347Sattilio#include <netinet/tcp_fsm.h>
48185347Sattilio
49185347Sattilio#include <netipx/ipx.h>
50185347Sattilio#include <netipx/ipx_var.h>
51185347Sattilio#include <netipx/spx.h>
52185347Sattilio#define SPXTIMERS
53185347Sattilio#include <netipx/spx_timer.h>
54185347Sattilio#define	SANAMES
55185347Sattilio#include <netipx/spx_debug.h>
56185347Sattilio
57185347Sattilio#ifdef TCPDEBUG
58185347Sattiliostatic	int spxconsdebug = 0;
59185347Sattiliostatic	struct spx_debug spx_debug[SPX_NDEBUG];
60185347Sattiliostatic	int spx_debx;
61185347Sattilio#endif
62185347Sattilio
63185347Sattilio/*
64185347Sattilio * spx debug routines
65185347Sattilio */
66185347Sattiliovoid
67185347Sattiliospx_trace(act, ostate, sp, si, req)
68185347Sattilio	short act;
69185347Sattilio	u_char ostate;
70185347Sattilio	struct spxpcb *sp;
71185347Sattilio	struct spx *si;
72185347Sattilio	int req;
73185347Sattilio{
74185347Sattilio#ifdef INET
75185347Sattilio#ifdef TCPDEBUG
76185347Sattilio	u_short seq, ack, len, alo;
77185347Sattilio	int flags;
78185347Sattilio	struct spx_debug *sd = &spx_debug[spx_debx++];
79185347Sattilio
80185347Sattilio	if (spx_debx == SPX_NDEBUG)
81185347Sattilio		spx_debx = 0;
82185347Sattilio	sd->sd_time = iptime();
83185347Sattilio	sd->sd_act = act;
84185347Sattilio	sd->sd_ostate = ostate;
85185347Sattilio	sd->sd_cb = (caddr_t)sp;
86185347Sattilio	if (sp != NULL)
87185347Sattilio		sd->sd_sp = *sp;
88185347Sattilio	else
89185347Sattilio		bzero((caddr_t)&sd->sd_sp, sizeof(*sp));
90185347Sattilio	if (si != NULL)
91185347Sattilio		sd->sd_si = *si;
92185347Sattilio	else
93185347Sattilio		bzero((caddr_t)&sd->sd_si, sizeof(*si));
94185347Sattilio	sd->sd_req = req;
95185347Sattilio	if (spxconsdebug == 0)
96185347Sattilio		return;
97185347Sattilio	if (ostate >= TCP_NSTATES)
98185347Sattilio		ostate = 0;
99185347Sattilio	if (act >= SA_DROP)
100185347Sattilio		act = SA_DROP;
101185347Sattilio	if (sp != NULL)
102185347Sattilio		printf("%x %s:", sp, tcpstates[ostate]);
103185347Sattilio	else
104185347Sattilio		printf("???????? ");
105185347Sattilio	printf("%s ", spxnames[act]);
106185347Sattilio	switch (act) {
107185347Sattilio
108185347Sattilio	case SA_RESPOND:
109185347Sattilio	case SA_INPUT:
110185347Sattilio	case SA_OUTPUT:
111185347Sattilio	case SA_DROP:
112185347Sattilio		if (si == NULL)
113185347Sattilio			break;
114185347Sattilio		seq = si->si_seq;
115185347Sattilio		ack = si->si_ack;
116185347Sattilio		alo = si->si_alo;
117185347Sattilio		len = si->si_len;
118185347Sattilio		if (act == SA_OUTPUT) {
119185347Sattilio			seq = ntohs(seq);
120185347Sattilio			ack = ntohs(ack);
121185347Sattilio			alo = ntohs(alo);
122185347Sattilio			len = ntohs(len);
123185347Sattilio		}
124185347Sattilio#ifndef lint
125185347Sattilio#define p1(f)  { printf("%s = %x, ", "f", f); }
126185347Sattilio		p1(seq); p1(ack); p1(alo); p1(len);
127185347Sattilio#endif
128185347Sattilio		flags = si->si_cc;
129185347Sattilio		if (flags) {
130185347Sattilio			char *cp = "<";
131185347Sattilio#ifndef lint
132185347Sattilio#define pf(f) { if (flags & SPX_ ## f) { printf("%s%s", cp, "f"); cp = ","; } }
133185347Sattilio			pf(SP); pf(SA); pf(OB); pf(EM);
134185347Sattilio#else
135185347Sattilio			cp = cp;
136185347Sattilio#endif
137185347Sattilio			printf(">");
138185347Sattilio		}
139185347Sattilio#ifndef lint
140185347Sattilio#define p2(f)  { printf("%s = %x, ", "f", si->si_ ## f); }
141185347Sattilio		p2(sid);p2(did);p2(dt);p2(pt);
142185347Sattilio#endif
143185347Sattilio		ipx_printhost(&si->si_sna);
144185347Sattilio		ipx_printhost(&si->si_dna);
145185347Sattilio
146185347Sattilio		if (act == SA_RESPOND) {
147185347Sattilio			printf("ipx_len = %x, ",
148185347Sattilio				((struct ipx *)si)->ipx_len);
149185347Sattilio		}
150185347Sattilio		break;
151185347Sattilio
152185347Sattilio	case SA_USER:
153185347Sattilio		printf("%s", prurequests[req&0xff]);
154185347Sattilio		if ((req & 0xff) == PRU_SLOWTIMO)
155185347Sattilio			printf("<%s>", spxtimers[req>>8]);
156185347Sattilio		break;
157185347Sattilio	}
158185347Sattilio	if (sp)
159185347Sattilio		printf(" -> %s", tcpstates[sp->s_state]);
160185347Sattilio	/* print out internal state of sp !?! */
161185347Sattilio	printf("\n");
162185347Sattilio	if (sp == 0)
163185347Sattilio		return;
164185347Sattilio#ifndef lint
165185347Sattilio#define p3(f)  { printf("%s = %x, ", "f", sp->s_ ## f); }
166185347Sattilio	printf("\t"); p3(rack);p3(ralo);p3(smax);p3(flags); printf("\n");
167185347Sattilio#endif
168185347Sattilio#endif
169185347Sattilio#endif
170185347Sattilio}
171185347Sattilio