xref: /csrg-svn/sbin/XNSrouted/trace.h (revision 24875)
1 /*
2  * Copyright (c) 1983 Regents of the University of California.
3  * All rights reserved.  The Berkeley software License Agreement
4  * specifies the terms and conditions for redistribution.
5  *
6  *	@(#)trace.h	5.4 (Berkeley) 09/17/85";
7  *
8  * Includes material written at Cornell University by Bill Nesheim,
9  * by permission of the author.
10  */
11 
12 /*
13  * Xerox Routing Information Protocol.
14  */
15 
16 /*
17  * Trace record format.
18  */
19 struct	iftrace {
20 	time_t	ift_stamp;		/* time stamp */
21 	struct	sockaddr ift_who;	/* from/to */
22 	char	*ift_packet;		/* pointer to packet */
23 	short	ift_size;		/* size of packet */
24 	short	ift_metric;		/* metric  */
25 };
26 
27 /*
28  * Per interface packet tracing buffers.  An incoming and
29  * outgoing circular buffer of packets is maintained, per
30  * interface, for debugging.  Buffers are dumped whenever
31  * an interface is marked down.
32  */
33 struct	ifdebug {
34 	struct	iftrace *ifd_records;	/* array of trace records */
35 	struct	iftrace *ifd_front;	/* next empty trace record */
36 	int	ifd_count;		/* number of unprinted records */
37 	struct	interface *ifd_if;	/* for locating stuff */
38 };
39 
40 /*
41  * Packet tracing stuff.
42  */
43 int	tracepackets;		/* watch packets as they go by */
44 int	tracing;		/* on/off */
45 FILE	*ftrace;		/* output trace file */
46 
47 #define	TRACE_ACTION(action, route) { \
48 	  if (tracing) \
49 		traceaction(ftrace, "action", route); \
50 	}
51 #define	TRACE_INPUT(ifp, src, size) { \
52 	  if (tracing) { \
53 		ifp = if_iflookup(src); \
54 		if (ifp) \
55 			trace(&ifp->int_input, src, &packet[sizeof(struct idp)], size, \
56 				ntohl(ifp->int_metric)); \
57 	  } \
58 	  if (tracepackets && ftrace) \
59 		dumppacket(ftrace, "from", src, &packet[sizeof(struct idp)], size); \
60 	}
61 #define	TRACE_OUTPUT(ifp, dst, size) { \
62 	  if (tracing) { \
63 		ifp = if_iflookup(dst); \
64 		if (ifp) \
65 		    trace(&ifp->int_output, dst, &packet[sizeof(struct idp)], size, ifp->int_metric); \
66 	  } \
67 	  if (tracepackets && ftrace) \
68 		dumppacket(ftrace, "to", dst, &packet[sizeof(struct idp)], size); \
69 	}
70