From 9469f628841ba08d11f6bcaf850315ff6f0a72a1 Mon Sep 17 00:00:00 2001 From: Guy Harris Date: Mon, 10 Apr 2023 22:49:46 -0700 Subject: cdp: support CDP TLV 0x001a. Based on the way it's dissected in Wireshark. --- print-cdp.c | 18 ++++++++++++++++++ tests/cdp-v.out | 9 +++------ tests/lldp_cdp-ev.out | 12 ++++-------- 3 files changed, 25 insertions(+), 14 deletions(-) diff --git a/print-cdp.c b/print-cdp.c index 204131cd..d3bce2e9 100644 --- a/print-cdp.c +++ b/print-cdp.c @@ -182,6 +182,22 @@ cdp_print_phys_loc(netdissect_options *ndo, } } +static void +cdp_print_power_avail(netdissect_options *ndo, + const u_char *cp, const u_int len) +{ + ND_PRINT("reqid %u, mgmtid %u", GET_BE_U_2(cp), GET_BE_U_2(cp + 2)); + if (len > 4) { + const u_char *powerp; + u_int powerlen; + + ND_PRINT(", pwravail"); + for (powerp = cp + 4, powerlen = len - 4; + powerlen >= 4; powerp += 4, powerlen -= 4) + ND_PRINT(" %u mW", GET_BE_U_4(powerp)); + } +} + typedef enum { VERBOSE_OR_NOT_VERBOSE, VERBOSE_ONLY @@ -232,6 +248,8 @@ static const struct cdp_tlvinfo cdptlvs[] = { [ 0x16 ] = { "Management Addresses", cdp_print_addr, VERBOSE_ONLY, 4, -1 }, /* not documented */ [ 0x17 ] = { "Physical Location", cdp_print_phys_loc, VERBOSE_ONLY, 1, -1 }, + /* not documented */ + [ 0x1a ] = { "Power available", cdp_print_power_avail, VERBOSE_ONLY, 8, -1 }, }; #define T_MAX (sizeof cdptlvs / sizeof cdptlvs[0]) diff --git a/tests/cdp-v.out b/tests/cdp-v.out index 78e5011a..00376348 100644 --- a/tests/cdp-v.out +++ b/tests/cdp-v.out @@ -15,8 +15,7 @@ AVVID trust bitmap (0x12), value length: 1 byte: 0x00 AVVID untrusted ports CoS (0x13), value length: 1 byte: 0x00 Management Addresses (0x16), value length: 13 bytes: IPv4 (1) 192.168.0.1 - unknown field type (0x1a), value length: 12 bytes: - 0x0000: 0000 0001 0000 0000 ffff ffff + Power available (0x1a), value length: 12 bytes: reqid 0, mgmtid 1, pwravail 0 mW 4294967295 mW 2 11:47:08.378706 CDPv2, ttl: 180s, checksum: 0xb0bd (unverified), length 378 Device-ID (0x01), value length: 6 bytes: 'Switch' Version String (0x05), value length: 192 bytes: @@ -34,8 +33,7 @@ AVVID trust bitmap (0x12), value length: 1 byte: 0x00 AVVID untrusted ports CoS (0x13), value length: 1 byte: 0x00 Management Addresses (0x16), value length: 13 bytes: IPv4 (1) 192.168.0.1 - unknown field type (0x1a), value length: 12 bytes: - 0x0000: 0000 0001 0000 0000 ffff ffff + Power available (0x1a), value length: 12 bytes: reqid 0, mgmtid 1, pwravail 0 mW 4294967295 mW 3 11:48:08.392643 CDPv2, ttl: 180s, checksum: 0xb0bd (unverified), length 378 Device-ID (0x01), value length: 6 bytes: 'Switch' Version String (0x05), value length: 192 bytes: @@ -53,5 +51,4 @@ AVVID trust bitmap (0x12), value length: 1 byte: 0x00 AVVID untrusted ports CoS (0x13), value length: 1 byte: 0x00 Management Addresses (0x16), value length: 13 bytes: IPv4 (1) 192.168.0.1 - unknown field type (0x1a), value length: 12 bytes: - 0x0000: 0000 0001 0000 0000 ffff ffff + Power available (0x1a), value length: 12 bytes: reqid 0, mgmtid 1, pwravail 0 mW 4294967295 mW diff --git a/tests/lldp_cdp-ev.out b/tests/lldp_cdp-ev.out index ee1e8c37..1bd122af 100644 --- a/tests/lldp_cdp-ev.out +++ b/tests/lldp_cdp-ev.out @@ -15,8 +15,7 @@ AVVID trust bitmap (0x12), value length: 1 byte: 0x00 AVVID untrusted ports CoS (0x13), value length: 1 byte: 0x00 Management Addresses (0x16), value length: 13 bytes: IPv4 (1) 0.0.0.0 - unknown field type (0x1a), value length: 12 bytes: - 0x0000: 0000 0001 0000 0000 ffff ffff + Power available (0x1a), value length: 12 bytes: reqid 0, mgmtid 1, pwravail 0 mW 4294967295 mW 2 03:00:39.208974 00:19:2f:a7:b2:8d > 01:00:0c:cc:cc:cc, 802.3, length 378: LLC, dsap SNAP (0xaa) Individual, ssap SNAP (0xaa) Command, ctrl 0x03: oui Cisco (0x00000c), pid CDP (0x2000), length 370: CDPv2, ttl: 180s, checksum: 0x971d (unverified), length 370 Device-ID (0x01), value length: 2 bytes: 'S2' Version String (0x05), value length: 190 bytes: @@ -34,8 +33,7 @@ AVVID trust bitmap (0x12), value length: 1 byte: 0x00 AVVID untrusted ports CoS (0x13), value length: 1 byte: 0x00 Management Addresses (0x16), value length: 13 bytes: IPv4 (1) 0.0.0.0 - unknown field type (0x1a), value length: 12 bytes: - 0x0000: 0000 0001 0000 0000 ffff ffff + Power available (0x1a), value length: 12 bytes: reqid 0, mgmtid 1, pwravail 0 mW 4294967295 mW 3 03:00:41.163180 00:19:2f:a7:b2:8d > 01:80:c2:00:00:0e, ethertype LLDP (0x88cc), length 296: LLDP, length 282 Chassis ID TLV (1), length 7 Subtype MAC address (4): 00:19:2f:a7:b2:8d @@ -141,8 +139,7 @@ AVVID trust bitmap (0x12), value length: 1 byte: 0x00 AVVID untrusted ports CoS (0x13), value length: 1 byte: 0x00 Management Addresses (0x16), value length: 13 bytes: IPv4 (1) 0.0.0.0 - unknown field type (0x1a), value length: 12 bytes: - 0x0000: 0000 0001 0000 0000 ffff ffff + Power available (0x1a), value length: 12 bytes: reqid 0, mgmtid 1, pwravail 0 mW 4294967295 mW 8 03:01:39.211811 00:19:2f:a7:b2:8d > 01:00:0c:cc:cc:cc, 802.3, length 378: LLC, dsap SNAP (0xaa) Individual, ssap SNAP (0xaa) Command, ctrl 0x03: oui Cisco (0x00000c), pid CDP (0x2000), length 370: CDPv2, ttl: 180s, checksum: 0x971c (unverified), length 370 Device-ID (0x01), value length: 2 bytes: 'S2' Version String (0x05), value length: 190 bytes: @@ -160,8 +157,7 @@ AVVID trust bitmap (0x12), value length: 1 byte: 0x00 AVVID untrusted ports CoS (0x13), value length: 1 byte: 0x00 Management Addresses (0x16), value length: 13 bytes: IPv4 (1) 0.0.0.0 - unknown field type (0x1a), value length: 12 bytes: - 0x0000: 0000 0001 0000 0000 ffff ffff + Power available (0x1a), value length: 12 bytes: reqid 0, mgmtid 1, pwravail 0 mW 4294967295 mW 9 03:01:40.932913 00:19:2f:a7:b2:8d > 01:80:c2:00:00:0e, ethertype LLDP (0x88cc), length 296: LLDP, length 282 Chassis ID TLV (1), length 7 Subtype MAC address (4): 00:19:2f:a7:b2:8d -- cgit v1.2.1