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