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