]> The Tcpdump Group git mirrors - tcpdump/blobdiff - tcpdump.c
updated test cases for fixed msgid/cookie printing for IKEv2.
[tcpdump] / tcpdump.c
index 7e1f129947e5053c0c7a9d844c1cf8a142c030a3..e004378708f0e56970c1a3f5313d4f90d8c076f1 100644 (file)
--- a/tcpdump.c
+++ b/tcpdump.c
@@ -30,7 +30,7 @@ static const char copyright[] _U_ =
     "@(#) Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 2000\n\
 The Regents of the University of California.  All rights reserved.\n";
 static const char rcsid[] _U_ =
-    "@(#) $Header: /tcpdump/master/tcpdump/tcpdump.c,v 1.269 2006-05-05 23:13:01 guy Exp $ (LBL)";
+    "@(#) $Header: /tcpdump/master/tcpdump/tcpdump.c,v 1.274 2007-11-21 20:39:24 guy Exp $ (LBL)";
 #endif
 
 /*
@@ -66,14 +66,15 @@ extern int SIZE_BUF;
 #include <stdlib.h>
 #include <string.h>
 #include <limits.h>
-#include <sys/resource.h>
-#include <sys/wait.h>
 #ifndef WIN32
+#include <sys/wait.h>
+#include <sys/resource.h>
 #include <pwd.h>
 #include <grp.h>
 #include <errno.h>
 #endif /* WIN32 */
 
+
 #include "netdissect.h"
 #include "interface.h"
 #include "addrtoname.h"
@@ -191,7 +192,7 @@ static struct printer printers[] = {
 #ifdef DLT_LTALK
        { ltalk_if_print,       DLT_LTALK },
 #endif
-#ifdef DLT_PFLOG
+#if defined(DLT_PFLOG) && defined(HAVE_NET_PFVAR_H)
        { pflog_if_print,       DLT_PFLOG },
 #endif
 #ifdef DLT_FR
@@ -268,6 +269,9 @@ static struct printer printers[] = {
 #endif
 #ifdef DLT_MFR
        { mfr_if_print, DLT_MFR },
+#endif
+#ifdef DLT_BLUETOOTH_HCI_H4_WITH_PHDR
+       { bt_if_print, DLT_BLUETOOTH_HCI_H4_WITH_PHDR},
 #endif
        { NULL,                 0 },
 };
@@ -1003,10 +1007,10 @@ main(int argc, char **argv)
 
 #ifndef WIN32  
        (void)setsignal(SIGPIPE, cleanup);
-#endif /* WIN32 */
        (void)setsignal(SIGTERM, cleanup);
        (void)setsignal(SIGINT, cleanup);
        (void)setsignal(SIGCHLD, child_cleanup);
+#endif /* WIN32 */
        /* Cooperate with nohup(1) */
 #ifndef WIN32  
        if ((oldhandler = setsignal(SIGHUP, cleanup)) != SIG_DFL)
@@ -1067,7 +1071,12 @@ main(int argc, char **argv)
        }
 #endif /* WIN32 */
 #ifdef SIGINFO
-       (void)setsignal(SIGINFO, requestinfo);
+       /*
+        * We can't get statistics when reading from a file rather
+        * than capturing from a device.
+        */
+       if (RFileName == NULL)
+               (void)setsignal(SIGINFO, requestinfo);
 #endif
 
        if (vflag > 0 && WFileName) {
@@ -1185,11 +1194,17 @@ cleanup(int signo _U_)
 #endif
 }
 
+/*
+  On windows, we do not use a fork, so we do not care less about
+  waiting a child processes to die
+ */
+#ifndef WIN32
 static RETSIGTYPE
 child_cleanup(int signo _U_)
 {
   wait(NULL);
 }
+#endif /* WIN32 */
 
 static void
 info(register int verbose)
@@ -1198,6 +1213,7 @@ info(register int verbose)
 
        if (pcap_stats(pd, &stat) < 0) {
                (void)fprintf(stderr, "pcap_stats: %s\n", pcap_geterr(pd));
+               infoprint = 0;
                return;
        }
 
@@ -1218,6 +1234,7 @@ info(register int verbose)
        infoprint = 0;
 }
 
+#ifndef WIN32
 static void
 compress_savefile(const char *filename)
 {
@@ -1238,6 +1255,14 @@ compress_savefile(const char *filename)
                        filename,
                        strerror(errno));
 }
+#else  /* WIN32 */
+static void
+compress_savefile(const char *filename)
+{
+       fprintf(stderr,
+               "compress_savefile failed. Functionality not implemented under windows\n");
+}
+#endif /* WIN32 */
 
 static void
 dump_packet_and_trunc(u_char *user, const struct pcap_pkthdr *h, const u_char *sp)