don't use same buffer for input and output, as that leads to race
[unix-history] / usr / src / sbin / routed / trace.h
index 3046d0f..1582c08 100644 (file)
@@ -1,15 +1,20 @@
 /*
 /*
- * Copyright (c) 1983 Regents of the University of California.
+ * Copyright (c) 1983, 1988 Regents of the University of California.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms are permitted
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms are permitted
- * provided that this notice is preserved and that due credit is given
- * to the University of California at Berkeley. The name of the University
- * may not be used to endorse or promote products derived from this
- * software without specific prior written permission. This software
- * is provided ``as is'' without express or implied warranty.
+ * provided that the above copyright notice and this paragraph are
+ * duplicated in all such forms and that any documentation,
+ * advertising materials, and other materials related to such
+ * distribution and use acknowledge that the software was developed
+ * by the University of California, Berkeley.  The name of the
+ * University may not be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  *
  *
- *     @(#)trace.h     5.3 (Berkeley) %G%
+ *     @(#)trace.h     5.7 (Berkeley) %G%
  */
 
 /*
  */
 
 /*
@@ -20,7 +25,7 @@
  * Trace record format.
  */
 struct iftrace {
  * Trace record format.
  */
 struct iftrace {
-       time_t  ift_stamp;              /* time stamp */
+       struct  timeval ift_stamp;      /* time stamp */
        struct  sockaddr ift_who;       /* from/to */
        char    *ift_packet;            /* pointer to packet */
        short   ift_size;               /* size of packet */
        struct  sockaddr ift_who;       /* from/to */
        char    *ift_packet;            /* pointer to packet */
        short   ift_size;               /* size of packet */
@@ -44,26 +49,32 @@ struct      ifdebug {
  * Packet tracing stuff.
  */
 int    tracepackets;           /* watch packets as they go by */
  * Packet tracing stuff.
  */
 int    tracepackets;           /* watch packets as they go by */
-int    tracing;                /* on/off */
+int    tracecontents;          /* watch packet contents as they go by */
+int    traceactions;           /* on/off */
+int    tracehistory;           /* on/off */
 FILE   *ftrace;                /* output trace file */
 
 #define        TRACE_ACTION(action, route) { \
 FILE   *ftrace;                /* output trace file */
 
 #define        TRACE_ACTION(action, route) { \
-         if (tracing) \
-               traceaction(ftrace, "action", route); \
+         if (traceactions) \
+               traceaction(ftrace, action, route); \
        }
        }
-#define        TRACE_INPUT(ifp, src, size) { \
-         if (tracing) { \
+#define        TRACE_NEWMETRIC(route, newmetric) { \
+         if (traceactions) \
+               tracenewmetric(ftrace, route, newmetric); \
+       }
+#define        TRACE_INPUT(ifp, src, pack, size) { \
+         if (tracehistory) { \
                ifp = if_iflookup(src); \
                if (ifp) \
                ifp = if_iflookup(src); \
                if (ifp) \
-                       trace(&ifp->int_input, src, packet, size, \
+                       trace(&ifp->int_input, src, pack, size, \
                                ntohl(ifp->int_metric)); \
          } \
          if (tracepackets) \
                                ntohl(ifp->int_metric)); \
          } \
          if (tracepackets) \
-               dumppacket(stdout, "from", src, packet, size); \
+               dumppacket(ftrace, "from", src, pack, size, &now); \
        }
 #define        TRACE_OUTPUT(ifp, dst, size) { \
        }
 #define        TRACE_OUTPUT(ifp, dst, size) { \
-         if (tracing && ifp) \
+         if (tracehistory && ifp) \
                trace(&ifp->int_output, dst, packet, size, ifp->int_metric); \
          if (tracepackets) \
                trace(&ifp->int_output, dst, packet, size, ifp->int_metric); \
          if (tracepackets) \
-               dumppacket(stdout, "to", dst, packet, size); \
+               dumppacket(ftrace, "to", dst, packet, size, &now); \
        }
        }