]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-bfd.c
Add changes in 4.2.1.
[tcpdump] / print-bfd.c
index f7a8ef298d0e820010bd8a55e1089e7663d5f96f..f157684f075e76f590d92ac56eddf36794e4585e 100644 (file)
@@ -15,7 +15,7 @@
 
 #ifndef lint
 static const char rcsid[] _U_ =
-    "@(#) $Header: /tcpdump/master/tcpdump/print-bfd.c,v 1.9 2005-04-28 09:27:35 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
@@ -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,7 +223,7 @@ 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),
+                       tok2str(bfd_v1_state_values, "unknown (%u)", (bfd_header->flags & 0xc0) >> 6),
                        bittok2str(bfd_v1_flag_values, "none", bfd_header->flags & 0x3f),
                        len);
                 return;