1 /*********************************************************** 2 Copyright IBM Corporation 1987 3 4 All Rights Reserved 5 6 Permission to use, copy, modify, and distribute this software and its 7 documentation for any purpose and without fee is hereby granted, 8 provided that the above copyright notice appear in all copies and that 9 both that copyright notice and this permission notice appear in 10 supporting documentation, and that the name of IBM not be 11 used in advertising or publicity pertaining to distribution of the 12 software without specific, written prior permission. 13 14 IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING 15 ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL 16 IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR 17 ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, 18 WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, 19 ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS 20 SOFTWARE. 21 22 ******************************************************************/ 23 24 /* 25 * ARGO Project, Computer Sciences Dept., University of Wisconsin - Madison 26 */ 27 /* 28 * ARGO TP 29 * 30 * $Header: tp_trace.c,v 5.3 88/11/18 17:29:14 nhall Exp $ 31 * $Source: /usr/argo/sys/netiso/RCS/tp_trace.c,v $ 32 * @(#)tp_trace.c 7.3 (Berkeley) 08/29/89 * 33 * 34 * The whole protocol trace module. 35 * We keep a circular buffer of trace structures, which are big 36 * unions of different structures we might want to see. 37 * Unfortunately this gets too big pretty easily. Pcbs were removed 38 * from the tracing when the kernel got too big to boot. 39 */ 40 41 #ifndef lint 42 static char *rcsid = "$Header: tp_trace.c,v 5.3 88/11/18 17:29:14 nhall Exp $"; 43 #endif lint 44 45 #define TP_TRACEFILE 46 47 #include "param.h" 48 #include "systm.h" 49 #include "mbuf.h" 50 #include "socket.h" 51 #include "types.h" 52 #include "time.h" 53 54 #include "tp_param.h" 55 #include "tp_timer.h" 56 #include "tp_stat.h" 57 #include "tp_param.h" 58 #include "tp_ip.h" 59 #include "tp_pcb.h" 60 #include "tp_tpdu.h" 61 #include "argo_debug.h" 62 #include "tp_trace.h" 63 64 #ifdef TPPT 65 static tp_seq = 0; 66 u_char tp_traceflags[128]; 67 68 /* 69 * The argument tpcb is the obvious. 70 * event here is just the type of trace event - TPPTmisc, etc. 71 * The rest of the arguments have different uses depending 72 * on the type of trace event. 73 */ 74 /*ARGSUSED*/ 75 /*VARARGS*/ 76 77 void 78 tpTrace(tpcb, event, arg, src, len, arg4, arg5) 79 struct tp_pcb *tpcb; 80 u_int event, arg; 81 u_int src; 82 u_int len; 83 u_int arg4; 84 u_int arg5; 85 { 86 register struct tp_Trace *tp; 87 88 tp = &tp_Trace[tp_Tracen++]; 89 tp_Tracen %= TPTRACEN; 90 91 tp->tpt_event = event; 92 tp->tpt_tseq = tp_seq++; 93 tp->tpt_arg = arg; 94 if(tpcb) 95 tp->tpt_arg2 = tpcb->tp_lref; 96 bcopy( (caddr_t)&time, (caddr_t)&tp->tpt_time, sizeof(struct timeval) ); 97 98 switch(event) { 99 100 case TPPTertpdu: 101 bcopy((caddr_t)src, (caddr_t)&tp->tpt_ertpdu, 102 (unsigned)MIN((int)len, sizeof(struct tp_Trace))); 103 break; 104 105 case TPPTusrreq: 106 case TPPTmisc: 107 108 /* arg is a string */ 109 bcopy((caddr_t)arg, (caddr_t)tp->tpt_str, 110 (unsigned)MIN(1+strlen((caddr_t) arg), TPTRACE_STRLEN)); 111 tp->tpt_m2 = src; 112 tp->tpt_m3 = len; 113 tp->tpt_m4 = arg4; 114 tp->tpt_m1 = arg5; 115 break; 116 117 case TPPTgotXack: 118 case TPPTXack: 119 case TPPTsendack: 120 case TPPTgotack: 121 case TPPTack: 122 case TPPTindicate: 123 default: 124 case TPPTdriver: 125 tp->tpt_m2 = arg; 126 tp->tpt_m3 = src; 127 tp->tpt_m4 = len; 128 tp->tpt_m5 = arg4; 129 tp->tpt_m1 = arg5; 130 break; 131 case TPPTparam: 132 bcopy((caddr_t)src, (caddr_t)&tp->tpt_param, sizeof(struct tp_param)); 133 break; 134 case TPPTref: 135 bcopy((caddr_t)src, (caddr_t)&tp->tpt_ref, sizeof(struct tp_ref)); 136 break; 137 138 case TPPTtpduin: 139 case TPPTtpduout: 140 tp->tpt_arg2 = arg4; 141 bcopy((caddr_t)src, (caddr_t)&tp->tpt_tpdu, 142 (unsigned)MIN((int)len, sizeof(struct tp_Trace))); 143 break; 144 } 145 } 146 #endif TPPT 147