]> The Tcpdump Group git mirrors - tcpdump/blobdiff - tcpdump.c
From Andrew Silent: Realtek Remote Control Protocol support (see
[tcpdump] / tcpdump.c
index 061ce448a2dea7b68fc9bb41d8139b8d39e617e3..561c91492050c498775a8b1473ce2d8297d81bf9 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.271 2007-09-24 23:46:27 guy Exp $ (LBL)";
+    "@(#) $Header: /tcpdump/master/tcpdump/tcpdump.c,v 1.271.2.5 2008-01-29 10:50:28 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"
@@ -221,6 +222,9 @@ static struct printer printers[] = {
 #ifdef DLT_APPLE_IP_OVER_IEEE1394
        { ap1394_if_print,      DLT_APPLE_IP_OVER_IEEE1394 },
 #endif
+#ifdef DLT_IEEE802_11_RADIO_AVS
+       { ieee802_11_radio_avs_if_print,        DLT_IEEE802_11_RADIO_AVS },
+#endif
 #ifdef DLT_JUNIPER_ATM1
        { juniper_atm1_print,   DLT_JUNIPER_ATM1 },
 #endif
@@ -330,10 +334,10 @@ show_dlts_and_exit(pcap_t *pd)
                         * OK, does tcpdump handle that type?
                         */
                        if (lookup_printer(dlts[n_dlts]) == NULL)
-                               (void) fprintf(stderr, " (not supported)");
+                               (void) fprintf(stderr, " (printing not supported)");
                        putchar('\n');
                } else {
-                       (void) fprintf(stderr, "  DLT %d (not supported)\n",
+                       (void) fprintf(stderr, "  DLT %d (printing not supported)\n",
                            dlts[n_dlts]);
                }
        }
@@ -1006,10 +1010,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)
@@ -1070,7 +1074,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) {
@@ -1188,11 +1197,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)
@@ -1201,6 +1216,7 @@ info(register int verbose)
 
        if (pcap_stats(pd, &stat) < 0) {
                (void)fprintf(stderr, "pcap_stats: %s\n", pcap_geterr(pd));
+               infoprint = 0;
                return;
        }
 
@@ -1221,6 +1237,7 @@ info(register int verbose)
        infoprint = 0;
 }
 
+#ifndef WIN32
 static void
 compress_savefile(const char *filename)
 {
@@ -1241,6 +1258,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)