]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-bfd.c
Fix the pointer tests in the non-ndoified TTEST2() macro as well.
[tcpdump] / print-bfd.c
index 9225412c12e5728dc6165291b7d9bce4c2d3e9dc..f157684f075e76f590d92ac56eddf36794e4585e 100644 (file)
@@ -15,7 +15,7 @@
 
 #ifndef lint
 static const char rcsid[] _U_ =
-    "@(#) $Header: /tcpdump/master/tcpdump/print-bfd.c,v 1.7 2005-04-27 23:14:02 hannes Exp $";
+    "@(#) $Header: /tcpdump/master/tcpdump/print-bfd.c,v 1.10 2006-02-02 06:35:52 hannes Exp $";
 #endif
 
 #ifdef HAVE_CONFIG_H
@@ -146,7 +146,7 @@ static const struct tok bfd_v0_flag_values[] = {
     { 0, NULL }
 };
 
-#define BFD_FLAG_AUTH 0x40
+#define BFD_FLAG_AUTH 0x04
 
 static const struct tok bfd_v1_flag_values[] = {
     { 0x20, "Poll" },
@@ -171,13 +171,17 @@ bfd_print(register const u_char *pptr, register u_int len, register u_int port)
 {
         const struct bfd_header_t *bfd_header;
         const struct bfd_auth_header_t *bfd_auth_header;
-        u_int8_t version;
+        u_int8_t version = 0;
 
         bfd_header = (const struct bfd_header_t *)pptr;
-        TCHECK(*bfd_header);
-        version = BFD_EXTRACT_VERSION(bfd_header->version_diag);
-
-        switch (port << 8 | version) {
+        if (port == BFD_CONTROL_PORT) {
+            TCHECK(*bfd_header);
+            version = BFD_EXTRACT_VERSION(bfd_header->version_diag);
+        } else if (port == BFD_ECHO_PORT) {
+            /* Echo is BFD v1 only */
+            version = 1;
+        }
+        switch ((port << 8) | version) {
 
             /* BFDv0 */
         case (BFD_CONTROL_PORT << 8):
@@ -219,8 +223,8 @@ bfd_print(register const u_char *pptr, register u_int len, register u_int port)
                 printf("BFDv%u, %s, State %s, Flags: [%s], length: %u",
                        version,
                        tok2str(bfd_port_values, "unknown (%u)", port),
-                       tok2str(bfd_v1_state_values, "unknown (%u)", bfd_header->flags & 0xc0),
-                       bittok2str(bfd_v1_flag_values, "none", bfd_header->flags),
+                       tok2str(bfd_v1_state_values, "unknown (%u)", (bfd_header->flags & 0xc0) >> 6),
+                       bittok2str(bfd_v1_flag_values, "none", bfd_header->flags & 0x3f),
                        len);
                 return;
             }
@@ -229,8 +233,8 @@ bfd_print(register const u_char *pptr, register u_int len, register u_int port)
                    version,
                    len,
                    tok2str(bfd_port_values, "unknown (%u)", port),
-                   tok2str(bfd_v1_state_values, "unknown (%u)", bfd_header->flags & 0xc0),
-                   bittok2str(bfd_v1_flag_values, "none", bfd_header->flags),
+                   tok2str(bfd_v1_state_values, "unknown (%u)", (bfd_header->flags & 0xc0) >> 6),
+                   bittok2str(bfd_v1_flag_values, "none", bfd_header->flags & 0x3f),
                    tok2str(bfd_diag_values,"unknown",BFD_EXTRACT_DIAG(bfd_header->version_diag)),
                    BFD_EXTRACT_DIAG(bfd_header->version_diag));