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