]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-egp.c
Fix the pointer tests in the non-ndoified TTEST2() macro as well.
[tcpdump] / print-egp.c
index 2576c8ed0350679fc2cbb81591d0bd3fa4dd67e4..4a1d046531be37a9bcc8ac2b0426e98ce426963c 100644 (file)
@@ -19,8 +19,8 @@
  */
 
 #ifndef lint
-static const char rcsid[] =
-    "@(#) $Header: /tcpdump/master/tcpdump/print-egp.c,v 1.33 2002-11-09 17:19:25 itojun Exp $ (LBL)";
+static const char rcsid[] _U_ =
+    "@(#) $Header: /tcpdump/master/tcpdump/print-egp.c,v 1.38 2006-02-11 22:13:24 hannes Exp $ (LBL)";
 #endif
 
 #ifdef HAVE_CONFIG_H
@@ -33,6 +33,7 @@ static const char rcsid[] =
 
 #include "interface.h"
 #include "addrtoname.h"
+#include "extract.h"
 
 #include "ip.h"
 
@@ -91,7 +92,7 @@ struct egp_packet {
        } egp_pands;
 #define  egp_poll  egp_pands.egpu_poll
 #define  egp_sourcenet  egp_pands.egpu_sourcenet
-} __attribute__((packed));
+};
 
 const char *egp_acquire_codes[] = {
        "request",
@@ -213,7 +214,7 @@ trunc:
 }
 
 void
-egp_print(register const u_int8_t *bp)
+egp_print(register const u_int8_t *bp, register u_int length)
 {
        register const struct egp_packet *egp;
        register int status;
@@ -221,17 +222,27 @@ egp_print(register const u_int8_t *bp)
        register int type;
 
        egp = (struct egp_packet *)bp;
-       if (!TTEST(*egp)) {
+        if (!TTEST2(*egp, length)) {
                printf("[|egp]");
                return;
        }
-       (void)printf("egp: ");
+
+        if (!vflag) {
+            printf("EGPv%u, AS %u, seq %u, length %u",
+                   egp->egp_version,
+                   EXTRACT_16BITS(&egp->egp_as),
+                   EXTRACT_16BITS(&egp->egp_sequence),
+                   length);
+            return;
+        } else
+            printf("EGPv%u, length %u",
+                   egp->egp_version,
+                   length);            
 
        if (egp->egp_version != EGP_VERSION) {
                printf("[version %d]", egp->egp_version);
                return;
        }
-       printf("as:%d seq:%d", ntohs(egp->egp_as), ntohs(egp->egp_sequence));
 
        type = egp->egp_type;
        code = egp->egp_code;
@@ -256,8 +267,8 @@ egp_print(register const u_int8_t *bp)
                                break;
                        }
                        printf(" hello:%d poll:%d",
-                              ntohs(egp->egp_hello),
-                              ntohs(egp->egp_poll));
+                              EXTRACT_16BITS(&egp->egp_hello),
+                              EXTRACT_16BITS(&egp->egp_poll));
                        break;
 
                case EGPC_REFUSE:
@@ -338,10 +349,10 @@ egp_print(register const u_int8_t *bp)
                else
                        printf(" [status %d]", status);
 
-               if (ntohs(egp->egp_reason) <= EGPR_UVERSION)
-                       printf(" %s", egp_reasons[ntohs(egp->egp_reason)]);
+               if (EXTRACT_16BITS(&egp->egp_reason) <= EGPR_UVERSION)
+                       printf(" %s", egp_reasons[EXTRACT_16BITS(&egp->egp_reason)]);
                else
-                       printf(" [reason %d]", ntohs(egp->egp_reason));
+                       printf(" [reason %d]", EXTRACT_16BITS(&egp->egp_reason));
                break;
 
        default: