Blob Blame History Raw
From b49ff8d0b6ab53d95f3b4b97d889926f70112ae4 Mon Sep 17 00:00:00 2001
From: Jamie Bainbridge <jamie.bainbridge@gmail.com>
Date: Thu, 14 Aug 2014 20:47:57 +1000
Subject: [PATCH 4/4] Print checksum in hex, and print the actual checksum,
 plus cleanup

(cherry picked from commit 24007a9a1249ed8733ff0039812ba92544a38bbe)

Conflicts:
        print-cdp.c
---
 print-cdp.c | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/print-cdp.c b/print-cdp.c
index 5a0eaea..0f44ba6 100644
--- a/print-cdp.c
+++ b/print-cdp.c
@@ -44,6 +44,8 @@ static const char rcsid[] _U_ =
 #include "nlpid.h"
 
 #define CDP_HEADER_LEN  4
+#define CDP_HEADER_LEN     4
+#define CDP_HEADER_OFFSET  2
 
 static const struct tok cdp_tlv_values[] = {
     { 0x01,             "Device-ID"},
@@ -102,15 +104,15 @@ cdp_print(const u_char *pptr, u_int length, u_int caplen)
                 goto trunc;
 	printf("CDPv%u, ttl: %us", *tptr, *(tptr+1));
         if (vflag)
-                printf(", checksum: %u (unverified), length %u", EXTRACT_16BITS(tptr), length);
+                printf(", checksum: 0x%04x (unverified), length %u", EXTRACT_16BITS(tptr+CDP_HEADER_OFFSET), length);
 	tptr += CDP_HEADER_LEN;
 
 	while (tptr < (pptr+length)) {
 
-                if (!TTEST2(*tptr, 4)) /* read out Type and Length */
+                if (!TTEST2(*tptr, CDP_HEADER_LEN)) /* read out Type and Length */
                     goto trunc;
 		type = EXTRACT_16BITS(tptr);
-		len  = EXTRACT_16BITS(tptr+2); /* object length includes the 4 bytes header length */
+		len  = EXTRACT_16BITS(tptr+CDP_HEADER_OFFSET); /* object length includes the 4 bytes header length */
 
 		if (len < 4) {
                     if (vflag)
@@ -126,8 +128,8 @@ cdp_print(const u_char *pptr, u_int length, u_int caplen)
                     break;
                 }
 
-                tptr += 4;
-                len -= 4;
+                tptr += CDP_HEADER_LEN;
+                len -= CDP_HEADER_LEN;
 
 		if (!TTEST2(*tptr, len))
 			goto trunc;
@@ -184,15 +186,15 @@ cdp_print(const u_char *pptr, u_int length, u_int caplen)
 			break;
                     case 0x08: /* Protocol Hello Option - not documented */
 			break;
-                    case 0x09: /* VTP Mgmt Domain  - not documented */
+                    case 0x09: /* VTP Mgmt Domain  - CDPv2 */
                         printf("'");
                         fn_printn(tptr, len, NULL);
                         printf("'");
 			break;
-                    case 0x0a: /* Native VLAN ID - not documented */
+                    case 0x0a: /* Native VLAN ID - CDPv2 */
 			printf("%d",EXTRACT_16BITS(tptr));
 			break;
-                    case 0x0b: /* Duplex - not documented */
+                    case 0x0b: /* Duplex - CDPv2 */
 			printf("%s", *(tptr) ? "full": "half");
 			break;
 
-- 
2.4.3