xref: /csrg-svn/sys/netiso/tp_trace.c (revision 63222)
149268Sbostic /*-
2*63222Sbostic  * Copyright (c) 1991, 1993
3*63222Sbostic  *	The Regents of the University of California.  All rights reserved.
449268Sbostic  *
549268Sbostic  * %sccs.include.redist.c%
649268Sbostic  *
7*63222Sbostic  *	@(#)tp_trace.c	8.1 (Berkeley) 06/10/93
849268Sbostic  */
949268Sbostic 
1036417Ssklower /***********************************************************
1136417Ssklower 		Copyright IBM Corporation 1987
1236417Ssklower 
1336417Ssklower                       All Rights Reserved
1436417Ssklower 
1536417Ssklower Permission to use, copy, modify, and distribute this software and its
1636417Ssklower documentation for any purpose and without fee is hereby granted,
1736417Ssklower provided that the above copyright notice appear in all copies and that
1836417Ssklower both that copyright notice and this permission notice appear in
1936417Ssklower supporting documentation, and that the name of IBM not be
2036417Ssklower used in advertising or publicity pertaining to distribution of the
2136417Ssklower software without specific, written prior permission.
2236417Ssklower 
2336417Ssklower IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
2436417Ssklower ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
2536417Ssklower IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
2636417Ssklower ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
2736417Ssklower WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
2836417Ssklower ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
2936417Ssklower SOFTWARE.
3036417Ssklower 
3136417Ssklower ******************************************************************/
3236417Ssklower 
3336417Ssklower /*
3436417Ssklower  * ARGO Project, Computer Sciences Dept., University of Wisconsin - Madison
3536417Ssklower  */
3636417Ssklower /*
3736417Ssklower  * ARGO TP
3836417Ssklower  *
3936417Ssklower  * $Header: tp_trace.c,v 5.3 88/11/18 17:29:14 nhall Exp $
4036417Ssklower  * $Source: /usr/argo/sys/netiso/RCS/tp_trace.c,v $
4136417Ssklower  *
4236417Ssklower  * The whole protocol trace module.
4336417Ssklower  * We keep a circular buffer of trace structures, which are big
4436417Ssklower  * unions of different structures we might want to see.
4536417Ssklower  * Unfortunately this gets too big pretty easily. Pcbs were removed
4636417Ssklower  * from the tracing when the kernel got too big to boot.
4736417Ssklower  */
4836417Ssklower 
4936417Ssklower #define TP_TRACEFILE
5036417Ssklower 
5156533Sbostic #include <sys/param.h>
5256533Sbostic #include <sys/systm.h>
5356533Sbostic #include <sys/mbuf.h>
5456533Sbostic #include <sys/socket.h>
5556533Sbostic #include <sys/time.h>
5636417Ssklower 
5756533Sbostic #include <netiso/tp_param.h>
5856533Sbostic #include <netiso/tp_timer.h>
5956533Sbostic #include <netiso/tp_stat.h>
6056533Sbostic #include <netiso/tp_param.h>
6156533Sbostic #include <netiso/tp_ip.h>
6256533Sbostic #include <netiso/tp_pcb.h>
6356533Sbostic #include <netiso/tp_tpdu.h>
6456533Sbostic #include <netiso/argo_debug.h>
6556533Sbostic #include <netiso/tp_trace.h>
6636417Ssklower 
6736417Ssklower #ifdef TPPT
6836417Ssklower static tp_seq = 0;
6936417Ssklower u_char tp_traceflags[128];
7036417Ssklower 
7136417Ssklower /*
7236417Ssklower  * The argument tpcb is the obvious.
7336417Ssklower  * event here is just the type of trace event - TPPTmisc, etc.
7436417Ssklower  * The rest of the arguments have different uses depending
7536417Ssklower  * on the type of trace event.
7636417Ssklower  */
7736417Ssklower /*ARGSUSED*/
7836417Ssklower /*VARARGS*/
7936417Ssklower 
8036417Ssklower void
tpTrace(tpcb,event,arg,src,len,arg4,arg5)8136417Ssklower tpTrace(tpcb, event, arg, src, len, arg4, arg5)
8236417Ssklower 	struct tp_pcb	*tpcb;
8336417Ssklower 	u_int 			event, arg;
8436417Ssklower 	u_int	 		src;
8536417Ssklower 	u_int	 		len;
8636417Ssklower 	u_int	 		arg4;
8736417Ssklower 	u_int	 		arg5;
8836417Ssklower {
8936417Ssklower 	register struct tp_Trace *tp;
9036417Ssklower 
9136417Ssklower 	tp = &tp_Trace[tp_Tracen++];
9236417Ssklower 	tp_Tracen %= TPTRACEN;
9336417Ssklower 
9436417Ssklower 	tp->tpt_event = event;
9536417Ssklower 	tp->tpt_tseq = tp_seq++;
9636417Ssklower 	tp->tpt_arg = arg;
9736417Ssklower 	if(tpcb)
9836417Ssklower 		tp->tpt_arg2 = tpcb->tp_lref;
9936417Ssklower 	bcopy( (caddr_t)&time, (caddr_t)&tp->tpt_time, sizeof(struct timeval) );
10036417Ssklower 
10136417Ssklower 	switch(event) {
10236417Ssklower 
10336417Ssklower 	case TPPTertpdu:
10436417Ssklower 		bcopy((caddr_t)src, (caddr_t)&tp->tpt_ertpdu,
10537469Ssklower 			(unsigned)MIN((int)len, sizeof(struct tp_Trace)));
10636417Ssklower 		break;
10736417Ssklower 
10836417Ssklower 	case TPPTusrreq:
10936417Ssklower 	case TPPTmisc:
11036417Ssklower 
11136417Ssklower 		/* arg is a string */
11236417Ssklower 		bcopy((caddr_t)arg, (caddr_t)tp->tpt_str,
11337469Ssklower 			(unsigned)MIN(1+strlen((caddr_t) arg), TPTRACE_STRLEN));
11436417Ssklower 		tp->tpt_m2 = src;
11536417Ssklower 		tp->tpt_m3 = len;
11636417Ssklower 		tp->tpt_m4 = arg4;
11736417Ssklower 		tp->tpt_m1 = arg5;
11836417Ssklower 		break;
11936417Ssklower 
12036417Ssklower 	case TPPTgotXack:
12136417Ssklower 	case TPPTXack:
12236417Ssklower 	case TPPTsendack:
12336417Ssklower 	case TPPTgotack:
12436417Ssklower 	case TPPTack:
12536417Ssklower 	case TPPTindicate:
12636417Ssklower 	default:
12736417Ssklower 	case TPPTdriver:
12836417Ssklower 		tp->tpt_m2 = arg;
12936417Ssklower 		tp->tpt_m3 = src;
13036417Ssklower 		tp->tpt_m4 = len;
13136417Ssklower 		tp->tpt_m5 = arg4;
13236417Ssklower 		tp->tpt_m1 = arg5;
13336417Ssklower 		break;
13436417Ssklower 	case TPPTparam:
13536417Ssklower 		bcopy((caddr_t)src, (caddr_t)&tp->tpt_param, sizeof(struct tp_param));
13636417Ssklower 		break;
13736417Ssklower 	case TPPTref:
13836417Ssklower 		bcopy((caddr_t)src, (caddr_t)&tp->tpt_ref, sizeof(struct tp_ref));
13936417Ssklower 		break;
14036417Ssklower 
14136417Ssklower 	case TPPTtpduin:
14236417Ssklower 	case TPPTtpduout:
14336417Ssklower 		tp->tpt_arg2 = arg4;
14437469Ssklower 		bcopy((caddr_t)src, (caddr_t)&tp->tpt_tpdu,
14537469Ssklower 		      (unsigned)MIN((int)len, sizeof(struct tp_Trace)));
14636417Ssklower 		break;
14736417Ssklower 	}
14836417Ssklower }
14960359Sbostic #endif /* TPPT */
150