/* \summary: Cisco Discovery Protocol (CDP) printer */
-#ifdef HAVE_CONFIG_H
#include <config.h>
-#endif
#include "netdissect-stdinc.h"
static const struct cdp_tlvinfo cdptlvs[] = {
/* 0x00 */
[ 0x01 ] = { "Device-ID", cdp_print_string, VERBOSE_OR_NOT_VERBOSE, -1, -1 },
- [ 0x02 ] = { "Address", cdp_print_addr, VERBOSE_ONLY, -1, -1 },
+ [ 0x02 ] = { "Address", cdp_print_addr, VERBOSE_ONLY, 4, -1 },
[ 0x03 ] = { "Port-ID", cdp_print_string, VERBOSE_ONLY, -1, -1 },
[ 0x04 ] = { "Capability", cdp_print_capability, VERBOSE_ONLY, 4, 4 },
[ 0x05 ] = { "Version String", cdp_print_version, VERBOSE_ONLY, -1, -1 },
(info ? (info->when_to_print == VERBOSE_OR_NOT_VERBOSE) : 0);
if (len < CDP_TLV_HEADER_LEN) {
if (ndo->ndo_vflag)
- ND_PRINT("\n\t%s (0x%02x), TLV length: %u byte%s (too short)",
+ ND_PRINT("\n\t%s (0x%04x), TLV length: %u byte%s (too short)",
name, type, len, PLURAL_SUFFIX(len));
else
ND_PRINT(", %s TLV length %u too short",
if (ndo->ndo_vflag) {
/* Print all TLVs when in verbose mode */
- ND_PRINT("\n\t%s (0x%02x), value length: %u byte%s: ",
+ ND_PRINT("\n\t%s (0x%04x), value length: %u byte%s: ",
name, type, len, PLURAL_SUFFIX(len));
} else {
/* Print only some TLVs when not in verbose mode */
0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00, 0x86, 0xdd
};
- if (l < 4) {
- ND_PRINT(" (not enough space for num)");
- goto invalid;
- }
num = GET_BE_U_4(p);
p += 4;
l -= 4;
ND_PRINT("IPv4 (%u) %s", num, GET_IPADDR_STRING(p));
p += al;
l -= al;
- }
- else if (pt == PT_IEEE_802_2 && pl == 8 &&
+ } else if (pt == PT_IEEE_802_2 && pl == 8 &&
memcmp(p, prot_ipv6, 8) == 0 && al == 16) {
/*
* IPv6: protocol type = IEEE 802.2 header,
ND_PRINT("IPv6 (%u) %s", num, GET_IP6ADDR_STRING(p));
p += al;
l -= al;
- }
- else {
+ } else {
/*
* Generic case: just print raw data
*/
ND_PRINT(" IPv4 Prefixes (%u):", l / 5);
- while (l > 0) {
+ while (l != 0) {
ND_PRINT(" %u.%u.%u.%u/%u",
GET_U_1(p), GET_U_1(p + 1), GET_U_1(p + 2),
GET_U_1(p + 3), GET_U_1(p + 4));