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