+ switch (type) {
+
+ case 0x01: /* Device-ID */
+ if (!ndo->ndo_vflag)
+ ND_PRINT((ndo, ", Device-ID "));
+ ND_PRINT((ndo, "'"));
+ (void)fn_printn(ndo, tptr, len, NULL);
+ ND_PRINT((ndo, "'"));
+ break;
+ case 0x02: /* Address */
+ if (cdp_print_addr(ndo, tptr, len) < 0)
+ goto trunc;
+ break;
+ case 0x03: /* Port-ID */
+ ND_PRINT((ndo, "'"));
+ (void)fn_printn(ndo, tptr, len, NULL);
+ ND_PRINT((ndo, "'"));
+ break;
+ case 0x04: /* Capabilities */
+ if (len < 4)
+ goto trunc;
+ ND_PRINT((ndo, "(0x%08x): %s",
+ EXTRACT_32BITS(tptr),
+ bittok2str(cdp_capability_values, "none", EXTRACT_32BITS(tptr))));
+ break;
+ case 0x05: /* Version */
+ ND_PRINT((ndo, "\n\t "));
+ for (i=0;i<len;i++) {
+ j = *(tptr+i);
+ ND_PRINT((ndo, "%c", j));
+ if (j == 0x0a) /* lets rework the version string to get a nice indentation */
+ ND_PRINT((ndo, "\t "));
+ }
+ break;
+ case 0x06: /* Platform */
+ ND_PRINT((ndo, "'"));
+ (void)fn_printn(ndo, tptr, len, NULL);
+ ND_PRINT((ndo, "'"));
+ break;
+ case 0x07: /* Prefixes */
+ if (cdp_print_prefixes(ndo, tptr, len) < 0)
+ goto trunc;
+ break;
+ case 0x08: /* Protocol Hello Option - not documented */
+ break;
+ case 0x09: /* VTP Mgmt Domain - CDPv2 */
+ ND_PRINT((ndo, "'"));
+ (void)fn_printn(ndo, tptr, len, NULL);
+ ND_PRINT((ndo, "'"));
+ break;
+ case 0x0a: /* Native VLAN ID - CDPv2 */
+ if (len < 2)
+ goto trunc;
+ ND_PRINT((ndo, "%d", EXTRACT_16BITS(tptr)));
+ break;
+ case 0x0b: /* Duplex - CDPv2 */
+ if (len < 1)
+ goto trunc;
+ ND_PRINT((ndo, "%s", *(tptr) ? "full": "half"));
+ break;
+
+ /* http://www.cisco.com/c/en/us/td/docs/voice_ip_comm/cata/186/2_12_m/english/release/notes/186rn21m.html
+ * plus more details from other sources
+ */
+ case 0x0e: /* ATA-186 VoIP VLAN request - incomplete doc. */
+ if (len < 3)
+ goto trunc;
+ ND_PRINT((ndo, "app %d, vlan %d", *(tptr), EXTRACT_16BITS(tptr + 1)));
+ break;
+ case 0x10: /* ATA-186 VoIP VLAN assignment - incomplete doc. */
+ ND_PRINT((ndo, "%1.2fW", cdp_get_number(tptr, len) / 1000.0));
+ break;
+ case 0x11: /* MTU - not documented */
+ if (len < 4)
+ goto trunc;
+ ND_PRINT((ndo, "%u bytes", EXTRACT_32BITS(tptr)));
+ break;
+ case 0x12: /* AVVID trust bitmap - not documented */
+ if (len < 1)
+ goto trunc;
+ ND_PRINT((ndo, "0x%02x", *(tptr)));
+ break;
+ case 0x13: /* AVVID untrusted port CoS - not documented */
+ if (len < 1)
+ goto trunc;
+ ND_PRINT((ndo, "0x%02x", *(tptr)));
+ break;
+ case 0x14: /* System Name - not documented */
+ ND_PRINT((ndo, "'"));
+ (void)fn_printn(ndo, tptr, len, NULL);
+ ND_PRINT((ndo, "'"));
+ break;
+ case 0x16: /* System Object ID - not documented */
+ if (cdp_print_addr(ndo, tptr, len) < 0)
+ goto trunc;
+ break;
+ case 0x17: /* Physical Location - not documented */
+ if (len < 1)
+ goto trunc;
+ ND_PRINT((ndo, "0x%02x", *(tptr)));
+ if (len > 1) {
+ ND_PRINT((ndo, "/"));
+ (void)fn_printn(ndo, tptr + 1, len - 1, NULL);
+ }
+ break;
+ default:
+ print_unknown_data(ndo, tptr, "\n\t ", len);
+ break;
+ }
+ }
+ tptr = tptr+len;