123214Smckusick /* 223214Smckusick * Copyright (c) 1982 Regents of the University of California. 323214Smckusick * All rights reserved. The Berkeley software License Agreement 423214Smckusick * specifies the terms and conditions for redistribution. 523214Smckusick * 6*24225Ssklower * @(#)spp_debug.c 6.3 (Berkeley) 08/09/85 723214Smckusick */ 821494Ssklower 921494Ssklower #include "param.h" 1021494Ssklower #include "systm.h" 1121494Ssklower #include "mbuf.h" 1221494Ssklower #include "socket.h" 1321494Ssklower #include "socketvar.h" 1421494Ssklower #include "protosw.h" 1521494Ssklower #include "errno.h" 1621494Ssklower 1721494Ssklower #include "../net/route.h" 1821494Ssklower #include "../net/if.h" 1921494Ssklower #include "../netinet/tcp_fsm.h" 2021494Ssklower #include "../netinet/tcp_timer.h" 2121494Ssklower 2221494Ssklower #include "ns.h" 2321494Ssklower #include "ns_pcb.h" 2421494Ssklower #include "idp.h" 2521494Ssklower #include "idp_var.h" 2621494Ssklower #include "sp.h" 2721494Ssklower #include "spidp.h" 2821494Ssklower #include "spp_var.h" 2921494Ssklower #define SANAMES 3021494Ssklower #include "spp_debug.h" 3121494Ssklower 3221494Ssklower int sppconsdebug = 0; 3321494Ssklower extern char *prurequests[]; 3421494Ssklower extern char *tanames[]; 3521494Ssklower extern char *tcpstates[]; 3621494Ssklower extern char *tcptimers[]; 3721494Ssklower /* 3821494Ssklower * spp debug routines 3921494Ssklower */ 4021494Ssklower spp_trace(act, ostate, sp, si, req) 4121494Ssklower short act; 4221494Ssklower u_char ostate; 4321494Ssklower struct sppcb *sp; 4421494Ssklower struct spidp *si; 4521494Ssklower int req; 4621494Ssklower { 4721494Ssklower u_short seq, ack, len, alo; 4821494Ssklower unsigned long iptime(); 4921494Ssklower int flags; 5021494Ssklower struct spp_debug *sd = &spp_debug[spp_debx++]; 5121494Ssklower 5221494Ssklower if (spp_debx == SPP_NDEBUG) 5321494Ssklower spp_debx = 0; 5421494Ssklower sd->sd_time = iptime(); 5521494Ssklower sd->sd_act = act; 5621494Ssklower sd->sd_ostate = ostate; 5721494Ssklower sd->sd_cb = (caddr_t)sp; 5821494Ssklower if (sp) 5921494Ssklower sd->sd_sp = *sp; 6021494Ssklower else 6121494Ssklower bzero((caddr_t)&sd->sd_sp, sizeof (*sp)); 6221494Ssklower if (si) 6321494Ssklower sd->sd_si = *si; 6421494Ssklower else 6521494Ssklower bzero((caddr_t)&sd->sd_si, sizeof (*si)); 6621494Ssklower sd->sd_req = req; 6721494Ssklower if (sppconsdebug == 0) 6821494Ssklower return; 6921494Ssklower if (ostate >= TCP_NSTATES) ostate = 0; 7021494Ssklower if (act >= SA_DROP) act = SA_DROP; 7121494Ssklower if (sp) 7221494Ssklower printf("%x %s:", sp, tcpstates[ostate]); 7321494Ssklower else 7421494Ssklower printf("???????? "); 7521494Ssklower printf("%s ", tanames[act]); 7621494Ssklower switch (act) { 7721494Ssklower 7821494Ssklower case SA_RESPOND: 7921494Ssklower case SA_INPUT: 8021494Ssklower case SA_OUTPUT: 8121494Ssklower case SA_DROP: 8221494Ssklower if (si == 0) 8321494Ssklower break; 8421494Ssklower seq = si->si_seq; 8521494Ssklower ack = si->si_ack; 8621494Ssklower alo = si->si_alo; 8721494Ssklower len = si->si_len; 8821494Ssklower if (act == SA_OUTPUT) { 8921494Ssklower seq = ntohs(seq); 9021494Ssklower ack = ntohs(ack); 9121494Ssklower alo = ntohs(alo); 9221494Ssklower len = ntohs(len); 9321494Ssklower } 9421494Ssklower #ifndef lint 9521494Ssklower #define p1(f) { printf("%s = %x, ", "f", f); } 9621494Ssklower p1(seq); p1(ack); p1(alo); p1(len); 9721494Ssklower #endif 9821494Ssklower flags = si->si_cc; 9921494Ssklower if (flags) { 10021494Ssklower char *cp = "<"; 10121494Ssklower #ifndef lint 10221494Ssklower #define pf(f) { if (flags&SP_/**/f) { printf("%s%s", cp, "f"); cp = ","; } } 10321494Ssklower pf(SP); pf(SA); pf(OB); pf(EM); 104*24225Ssklower #else 105*24225Ssklower cp = cp; 10621494Ssklower #endif 10721494Ssklower printf(">"); 10821494Ssklower } 10921494Ssklower #ifndef lint 11021494Ssklower #define p2(f) { printf("%s = %x, ", "f", si->si_/**/f); } 11121494Ssklower p2(sid);p2(did);p2(dt);p2(pt); 11221494Ssklower #endif 11321494Ssklower ns_printhost(&si->si_sna); 11421494Ssklower ns_printhost(&si->si_dna); 11521494Ssklower 11621494Ssklower if (act==SA_RESPOND) { 11721494Ssklower printf("idp_len = %x, ", 11821494Ssklower ((struct idp *)si)->idp_len); 11921494Ssklower } 12021494Ssklower break; 12121494Ssklower 12221494Ssklower case SA_USER: 12321494Ssklower printf("%s", prurequests[req&0xff]); 12421494Ssklower if ((req & 0xff) == PRU_SLOWTIMO) 12521494Ssklower printf("<%s>", tcptimers[req>>8]); 12621494Ssklower break; 12721494Ssklower } 12821494Ssklower if (sp) 12921494Ssklower printf(" -> %s", tcpstates[sp->s_state]); 13021494Ssklower /* print out internal state of sp !?! */ 13121494Ssklower printf("\n"); 13221494Ssklower if (sp == 0) 13321494Ssklower return; 13421494Ssklower #ifndef lint 13521494Ssklower #define p3(f) { printf("%s = %x, ", "f", sp->s_/**/f); } 13621494Ssklower printf("\t"); p3(rack);p3(ralo);p3(snt);p3(flags); printf("\n"); 13721494Ssklower #endif 13821494Ssklower } 139