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