]> The Tcpdump Group git mirrors - tcpdump/blobdiff - tcpdump.c
Get rid of the zero-length array in "struct bgp_notification" - not all
[tcpdump] / tcpdump.c
index 9cf6442349297a03498534d928f73f7d068c01f5..1d81af14e36a7f5228996af98125acc0e5c8314b 100644 (file)
--- a/tcpdump.c
+++ b/tcpdump.c
@@ -30,7 +30,7 @@ static const char copyright[] =
     "@(#) 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[] =
-    "@(#) $Header: /tcpdump/master/tcpdump/tcpdump.c,v 1.194 2002-12-22 00:15:28 guy Exp $ (LBL)";
+    "@(#) $Header: /tcpdump/master/tcpdump/tcpdump.c,v 1.208 2003-05-25 16:26:57 hannes Exp $ (LBL)";
 #endif
 
 /*
@@ -132,6 +132,9 @@ struct printer {
 
 static struct printer printers[] = {
        { arcnet_if_print,      DLT_ARCNET },
+#ifdef DLT_ARCNET_LINUX
+       { arcnet_linux_if_print, DLT_ARCNET_LINUX },
+#endif
        { ether_if_print,       DLT_EN10MB },
        { token_if_print,       DLT_IEEE802 },
 #ifdef DLT_LANE8023
@@ -144,9 +147,13 @@ static struct printer printers[] = {
        { cip_if_print,         DLT_ATM_CLIP },
 #endif
        { sl_if_print,          DLT_SLIP },
+#ifdef DLT_SLIP_BSDOS
        { sl_bsdos_if_print,    DLT_SLIP_BSDOS },
+#endif
        { ppp_if_print,         DLT_PPP },
+#ifdef DLT_PPP_BSDOS
        { ppp_bsdos_if_print,   DLT_PPP_BSDOS },
+#endif
        { fddi_if_print,        DLT_FDDI },
        { null_if_print,        DLT_NULL },
 #ifdef DLT_LOOP
@@ -195,6 +202,9 @@ static struct printer printers[] = {
 #endif
 #ifdef DLT_IEEE802_11_RADIO
        { ieee802_11_radio_if_print,    DLT_IEEE802_11_RADIO },
+#endif
+#ifdef DLT_ENC
+       { enc_if_print,         DLT_ENC },
 #endif
        { NULL,                 0 },
 };
@@ -266,18 +276,14 @@ show_dlts_and_exit(pcap_t *pd)
 /*
  * Set up flags that might or might not be supported depending on the
  * version of libpcap we're using.
- *
- * Win32 builds are assumed to be done with the latest version of WinPcap.
  */
 #ifdef WIN32
 #define B_FLAG         "B:"
 #define B_FLAG_USAGE   " [ -B size ]"
-#define D_FLAG         "D"
-#define U_FLAG         "U"
 #else /* WIN32 */
-
 #define B_FLAG
 #define B_FLAG_USAGE
+#endif /* WIN32 */
 
 #ifdef HAVE_PCAP_FINDALLDEVS
 #define D_FLAG "D"
@@ -291,8 +297,6 @@ show_dlts_and_exit(pcap_t *pd)
 #define U_FLAG
 #endif
 
-#endif /* WIN32 */
-
 int
 main(int argc, char **argv)
 {
@@ -538,6 +542,8 @@ main(int argc, char **argv)
                                packettype = PT_SNMP;
                        else if (strcasecmp(optarg, "cnfp") == 0)
                                packettype = PT_CNFP;
+                       else if (strcasecmp(optarg, "tftp") == 0)
+                               packettype = PT_TFTP;
                        else
                                error("unknown packet type `%s'", optarg);
                        break;
@@ -612,6 +618,9 @@ main(int argc, char **argv)
 #endif /* WIN32 */
 
                pd = pcap_open_offline(RFileName, ebuf);
+                printf("reading from file %s, link-type %u\n",
+                      RFileName,
+                      pcap_datalink(pd));
                if (pd == NULL)
                        error("%s", ebuf);
                localnet = 0;
@@ -733,8 +742,14 @@ main(int argc, char **argv)
 #endif
 #ifndef WIN32
        if (RFileName == NULL) {
-               (void)fprintf(stderr, "%s: listening on %s\n",
-                   program_name, device);
+               if (!vflag && !WFileName) {
+                       (void)fprintf(stderr,
+                           "%s: verbose output suppressed, use -v or -vv for full protocol decode\n",
+                           program_name);
+               } else
+                       (void)fprintf(stderr, "%s: ", program_name);
+               (void)fprintf(stderr, "listening on %s, link-type %u, capture size %u bytes\n",
+                   device, pcap_datalink(pd), snaplen);
                (void)fflush(stderr);
        }
 #endif /* WIN32 */
@@ -846,7 +861,7 @@ dump_packet_and_trunc(u_char *user, const struct pcap_pkthdr *h, const u_char *s
        }
 
        pcap_dump((u_char *)dump_info->p, h, sp);
-#ifdef HAVE_PCAP_FINDALLDEVS
+#ifdef HAVE_PCAP_DUMP_FLUSH
        if (Uflag)
                pcap_dump_flush(dump_info->p);
 #endif
@@ -862,7 +877,7 @@ dump_packet(u_char *user, const struct pcap_pkthdr *h, const u_char *sp)
        ++infodelay;
 
        pcap_dump(user, h, sp);
-#ifdef HAVE_PCAP_FINDALLDEVS
+#ifdef HAVE_PCAP_DUMP_FLUSH
        if (Uflag)
                pcap_dump_flush((pcap_dumper_t *)user);
 #endif
@@ -993,21 +1008,28 @@ static void
 usage(void)
 {
        extern char version[];
+#ifndef HAVE_PCAP_LIB_VERSION
 #if defined(WIN32) || defined(HAVE_PCAP_VERSION)
        extern char pcap_version[];
-#else
+#else /* defined(WIN32) || defined(HAVE_PCAP_VERSION) */
        static char pcap_version[] = "unknown";
-#endif
+#endif /* defined(WIN32) || defined(HAVE_PCAP_VERSION) */
+#endif /* HAVE_PCAP_LIB_VERSION */
 
+#ifdef HAVE_PCAP_LIB_VERSION
+       (void)fprintf(stderr, "%s version %s\n", program_name, version);
+       (void)fprintf(stderr, "%s\n", pcap_lib_version());
+#else /* HAVE_PCAP_LIB_VERSION */
 #ifdef WIN32
        (void)fprintf(stderr, "%s version %s, based on tcpdump version %s\n", program_name, WDversion, version);
        (void)fprintf(stderr, "WinPcap version %s, based on libpcap version %s\n",Wpcap_version, pcap_version);
-#else  
+#else /* WIN32 */
        (void)fprintf(stderr, "%s version %s\n", program_name, version);
        (void)fprintf(stderr, "libpcap version %s\n", pcap_version);
 #endif /* WIN32 */
+#endif /* HAVE_PCAP_LIB_VERSION */
        (void)fprintf(stderr,
-"Usage: %s [-aAd" D_FLAG "eflLnNOpqRStu" U_FLAG "vxXy]" B_FLAG_USAGE " [-c count] [ -C file_size ]\n", program_name);
+"Usage: %s [-aAd" D_FLAG "eflLnNOpqRStu" U_FLAG "vxX]" B_FLAG_USAGE " [-c count] [ -C file_size ]\n", program_name);
        (void)fprintf(stderr,
 "\t\t[ -E algo:secret ] [ -F file ] [ -i interface ] [ -r file ]\n");
        (void)fprintf(stderr,