]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - usr.sbin/XNSrouted/trace.h
More abs paths nuked
[FreeBSD/FreeBSD.git] / usr.sbin / XNSrouted / trace.h
1 /*
2  * Copyright (c) 1983, 1993
3  *      The Regents of the University of California.  All rights reserved.
4  *
5  * This file includes significant work done at Cornell University by
6  * Bill Nesheim.  That work included by permission.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  * 3. All advertising materials mentioning features or use of this software
17  *    must display the following acknowledgement:
18  *      This product includes software developed by the University of
19  *      California, Berkeley and its contributors.
20  * 4. Neither the name of the University nor the names of its contributors
21  *    may be used to endorse or promote products derived from this software
22  *    without specific prior written permission.
23  *
24  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34  * SUCH DAMAGE.
35  *
36  *      @(#)trace.h     8.1 (Berkeley) 6/5/93
37  */
38
39 /*
40  * Xerox Routing Information Protocol.
41  */
42
43 /*
44  * Trace record format.
45  */
46 struct  iftrace {
47         time_t  ift_stamp;              /* time stamp */
48         struct  sockaddr ift_who;       /* from/to */
49         char    *ift_packet;            /* pointer to packet */
50         short   ift_size;               /* size of packet */
51         short   ift_metric;             /* metric  */
52 };
53
54 /*
55  * Per interface packet tracing buffers.  An incoming and
56  * outgoing circular buffer of packets is maintained, per
57  * interface, for debugging.  Buffers are dumped whenever
58  * an interface is marked down.
59  */
60 struct  ifdebug {
61         struct  iftrace *ifd_records;   /* array of trace records */
62         struct  iftrace *ifd_front;     /* next empty trace record */
63         int     ifd_count;              /* number of unprinted records */
64         struct  interface *ifd_if;      /* for locating stuff */
65 };
66
67 /*
68  * Packet tracing stuff.
69  */
70 int     tracepackets;           /* watch packets as they go by */
71 int     tracing;                /* on/off */
72 FILE    *ftrace;                /* output trace file */
73
74 #define TRACE_ACTION(action, route) { \
75           if (tracing) \
76                 traceaction(ftrace, "action", route); \
77         }
78 #define TRACE_INPUT(ifp, src, size) { \
79           if (tracing) { \
80                 ifp = if_iflookup(src); \
81                 if (ifp) \
82                         trace(&ifp->int_input, src, &packet[sizeof(struct idp)], size, \
83                                 ntohl(ifp->int_metric)); \
84           } \
85           if (tracepackets && ftrace) \
86                 dumppacket(ftrace, "from", src, &packet[sizeof(struct idp)], size); \
87         }
88 #define TRACE_OUTPUT(ifp, dst, size) { \
89           if (tracing) { \
90                 ifp = if_iflookup(dst); \
91                 if (ifp) \
92                     trace(&ifp->int_output, dst, &packet[sizeof(struct idp)], size, ifp->int_metric); \
93           } \
94           if (tracepackets && ftrace) \
95                 dumppacket(ftrace, "to", dst, &packet[sizeof(struct idp)], size); \
96         }