]> The Tcpdump Group git mirrors - tcpdump/blobdiff - tcpdump.c
add support for Frame-Relay over AS-PIC dissector
[tcpdump] / tcpdump.c
index 8472d797fc856217125f9168b26ca6579823facb..93a77558a921a0269d31f9a9924e98240fa3a296 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.253.2.7 2005-07-05 21:08:02 mcr Exp $ (LBL)";
+    "@(#) $Header: /tcpdump/master/tcpdump/tcpdump.c,v 1.253.2.10 2005-07-07 01:24:40 guy Exp $ (LBL)";
 #endif
 
 /*
@@ -484,7 +484,7 @@ main(int argc, char **argv)
 
        opterr = 0;
        while (
-           (op = getopt(argc, argv, "aA" B_FLAG "c:C:d" D_FLAG "eE:fF:i:lLm:M:nNOpP:qr:Rs:StT:u" U_FLAG "vw:W:xXy:YZ:")) != -1)
+           (op = getopt(argc, argv, "aA" B_FLAG "c:C:d" D_FLAG "eE:fF:i:lLm:M:nNOpqr:Rs:StT:u" U_FLAG "vw:W:xXy:YZ:")) != -1)
                switch (op) {
 
                case 'a':
@@ -492,8 +492,6 @@ main(int argc, char **argv)
                        break;
 
                case 'A':
-                       ++xflag;
-                       ++Xflag;
                        ++Aflag;
                        break;
 
@@ -655,6 +653,7 @@ main(int argc, char **argv)
 
                case 'q':
                        ++qflag;
+                       ++suppress_default_print;
                        break;
 
                case 'r':
@@ -735,10 +734,12 @@ main(int argc, char **argv)
 
                case 'x':
                        ++xflag;
+                       ++suppress_default_print;
                        break;
 
                case 'X':
                        ++Xflag;
+                       ++suppress_default_print;
                        break;
 
                case 'y':
@@ -1224,9 +1225,28 @@ print_packet(u_char *user, const struct pcap_pkthdr *h, const u_char *sp)
        snapend = sp + h->caplen;
 
        hdrlen = (*print_info->printer)(h, sp);
-       if (xflag) {
+       if (Xflag) {
                /*
-                * Print the raw packet data.
+                * Print the raw packet data in hex and ASCII.
+                */
+               if (Xflag > 1) {
+                       /*
+                        * Include the link-layer header.
+                        */
+                       hex_and_ascii_print("\n\t", sp, h->caplen);
+               } else {
+                       /*
+                        * Don't include the link-layer header - and if
+                        * we have nothing past the link-layer header,
+                        * print nothing.
+                        */
+                       if (h->caplen > hdrlen)
+                               hex_and_ascii_print("\n\t", sp + hdrlen,
+                                   h->caplen - hdrlen);
+               }
+       } else if (xflag) {
+               /*
+                * Print the raw packet data in hex.
                 */
                if (xflag > 1) {
                        /*
@@ -1243,15 +1263,15 @@ print_packet(u_char *user, const struct pcap_pkthdr *h, const u_char *sp)
                                hex_print("\n\t", sp + hdrlen,
                                    h->caplen - hdrlen);
                }
-       } else if (Xflag) {
+       } else if (Aflag) {
                /*
-                * Print the raw packet data.
+                * Print the raw packet data in ASCII.
                 */
-               if (Xflag > 1) {
+               if (Aflag > 1) {
                        /*
                         * Include the link-layer header.
                         */
-                       ascii_print("\n\t", sp, h->caplen);
+                       ascii_print(sp, h->caplen);
                } else {
                        /*
                         * Don't include the link-layer header - and if
@@ -1259,8 +1279,7 @@ print_packet(u_char *user, const struct pcap_pkthdr *h, const u_char *sp)
                         * print nothing.
                         */
                        if (h->caplen > hdrlen)
-                               ascii_print("\n\t", sp + hdrlen,
-                                   h->caplen - hdrlen);
+                               ascii_print(sp + hdrlen, h->caplen - hdrlen);
                }
        }
 
@@ -1299,12 +1318,12 @@ print_packet(u_char *user, const struct pcap_pkthdr *h, const u_char *sp)
 #endif
 
 /*
- * By default, print the specified data out in hex.
+ * By default, print the specified data out in hex and ASCII.
  */
 static void
 ndo_default_print(netdissect_options *ndo _U_, const u_char *bp, u_int length)
 {
-       ascii_print("\n\t", bp, length); /* pass on lf and identation string */
+       hex_and_ascii_print("\n\t", bp, length); /* pass on lf and identation string */
 }
 
 void