xref: /csrg-svn/sys/netns/spp_debug.c (revision 26056)
1 /*
2  * Copyright (c) 1984, 1985 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  *	@(#)spp_debug.c	6.6 (Berkeley) 02/03/86
7  */
8 
9 #include "param.h"
10 #include "systm.h"
11 #include "mbuf.h"
12 #include "socket.h"
13 #include "socketvar.h"
14 #include "protosw.h"
15 #include "errno.h"
16 
17 #include "../net/route.h"
18 #include "../net/if.h"
19 #include "../netinet/tcp_fsm.h"
20 #include "../netinet/tcp_timer.h"
21 
22 #include "ns.h"
23 #include "ns_pcb.h"
24 #include "idp.h"
25 #include "idp_var.h"
26 #include "sp.h"
27 #include "spidp.h"
28 #include "spp_var.h"
29 #define	SANAMES
30 #include "spp_debug.h"
31 
32 int	sppconsdebug = 0;
33 /*
34  * spp debug routines
35  */
36 spp_trace(act, ostate, sp, si, req)
37 	short act;
38 	u_char ostate;
39 	struct sppcb *sp;
40 	struct spidp *si;
41 	int req;
42 {
43 #ifdef INET
44 	u_short seq, ack, len, alo;
45 	unsigned long iptime();
46 	int flags;
47 	struct spp_debug *sd = &spp_debug[spp_debx++];
48 	extern char *prurequests[];
49 	extern char *tanames[];
50 	extern char *tcpstates[];
51 	extern char *tcptimers[];
52 
53 	if (spp_debx == SPP_NDEBUG)
54 		spp_debx = 0;
55 	sd->sd_time = iptime();
56 	sd->sd_act = act;
57 	sd->sd_ostate = ostate;
58 	sd->sd_cb = (caddr_t)sp;
59 	if (sp)
60 		sd->sd_sp = *sp;
61 	else
62 		bzero((caddr_t)&sd->sd_sp, sizeof (*sp));
63 	if (si)
64 		sd->sd_si = *si;
65 	else
66 		bzero((caddr_t)&sd->sd_si, sizeof (*si));
67 	sd->sd_req = req;
68 	if (sppconsdebug == 0)
69 		return;
70 	if (ostate >= TCP_NSTATES) ostate = 0;
71 	if (act >= SA_DROP) act = SA_DROP;
72 	if (sp)
73 		printf("%x %s:", sp, tcpstates[ostate]);
74 	else
75 		printf("???????? ");
76 	printf("%s ", tanames[act]);
77 	switch (act) {
78 
79 	case SA_RESPOND:
80 	case SA_INPUT:
81 	case SA_OUTPUT:
82 	case SA_DROP:
83 		if (si == 0)
84 			break;
85 		seq = si->si_seq;
86 		ack = si->si_ack;
87 		alo = si->si_alo;
88 		len = si->si_len;
89 		if (act == SA_OUTPUT) {
90 			seq = ntohs(seq);
91 			ack = ntohs(ack);
92 			alo = ntohs(alo);
93 			len = ntohs(len);
94 		}
95 #ifndef lint
96 #define p1(f)  { printf("%s = %x, ", "f", f); }
97 		p1(seq); p1(ack); p1(alo); p1(len);
98 #endif
99 		flags = si->si_cc;
100 		if (flags) {
101 			char *cp = "<";
102 #ifndef lint
103 #define pf(f) { if (flags&SP_/**/f) { printf("%s%s", cp, "f"); cp = ","; } }
104 			pf(SP); pf(SA); pf(OB); pf(EM);
105 #else
106 			cp = cp;
107 #endif
108 			printf(">");
109 		}
110 #ifndef lint
111 #define p2(f)  { printf("%s = %x, ", "f", si->si_/**/f); }
112 		p2(sid);p2(did);p2(dt);p2(pt);
113 #endif
114 		ns_printhost(&si->si_sna);
115 		ns_printhost(&si->si_dna);
116 
117 		if (act==SA_RESPOND) {
118 			printf("idp_len = %x, ",
119 				((struct idp *)si)->idp_len);
120 		}
121 		break;
122 
123 	case SA_USER:
124 		printf("%s", prurequests[req&0xff]);
125 		if ((req & 0xff) == PRU_SLOWTIMO)
126 			printf("<%s>", tcptimers[req>>8]);
127 		break;
128 	}
129 	if (sp)
130 		printf(" -> %s", tcpstates[sp->s_state]);
131 	/* print out internal state of sp !?! */
132 	printf("\n");
133 	if (sp == 0)
134 		return;
135 #ifndef lint
136 #define p3(f)  { printf("%s = %x, ", "f", sp->s_/**/f); }
137 	printf("\t"); p3(rack);p3(ralo);p3(snt);p3(flags); printf("\n");
138 #endif
139 #endif
140 }
141