+ case TYPE_VOIP_VLAN_REPLY:
+ tlvi = proto_tree_add_text(cdp_tree, tvb,
+ offset, length, "VoIP VLAN Reply");
+ tlv_tree = proto_item_add_subtree(tlvi, ett_cdp_tlv);
+ proto_tree_add_uint(tlv_tree, hf_cdp_tlvtype, tvb,
+ offset + TLV_TYPE, 2, type);
+ proto_tree_add_uint(tlv_tree, hf_cdp_tlvlength, tvb,
+ offset + TLV_LENGTH, 2, length);
+ proto_tree_add_text(tlv_tree, tvb, offset + 4,
+ length - 4, "Data");
+ offset += length;
+ break;
+ case TYPE_VOIP_VLAN_QUERY:
+ tlvi = proto_tree_add_text(cdp_tree, tvb,
+ offset, length, "VoIP VLAN Query");
+ tlv_tree = proto_item_add_subtree(tlvi, ett_cdp_tlv);
+ proto_tree_add_uint(tlv_tree, hf_cdp_tlvtype, tvb,
+ offset + TLV_TYPE, 2, type);
+ proto_tree_add_uint(tlv_tree, hf_cdp_tlvlength, tvb,
+ offset + TLV_LENGTH, 2, length);
+ proto_tree_add_text(tlv_tree, tvb, offset + 4,
+ length - 4, "Data");
+ offset += length;
+ break;
+ case TYPE_MTU:
+ tlvi = proto_tree_add_text(cdp_tree, tvb,
+ offset, length, "MTU: %u",
+ tvb_get_ntohl(tvb,offset + 4));
+ tlv_tree = proto_item_add_subtree(tlvi, ett_cdp_tlv);
+ proto_tree_add_uint(tlv_tree, hf_cdp_tlvtype, tvb,
+ offset + TLV_TYPE, 2, type);
+ proto_tree_add_uint(tlv_tree, hf_cdp_tlvlength, tvb,
+ offset + TLV_LENGTH, 2, length);
+ proto_tree_add_text(tlv_tree, tvb, offset + 4,
+ length - 4, "MTU: %u",
+ tvb_get_ntohl(tvb,offset + 4));
+ offset += length;
+ break;
+ case TYPE_TRUST_BITMAP:
+ tlvi = proto_tree_add_text(cdp_tree, tvb,
+ offset, length, "Trust Bitmap: 0x%02X",
+ tvb_get_guint8(tvb, offset + 4));
+ tlv_tree = proto_item_add_subtree(tlvi, ett_cdp_tlv);
+ proto_tree_add_uint(tlv_tree, hf_cdp_tlvtype, tvb,
+ offset + TLV_TYPE, 2, type);
+ proto_tree_add_uint(tlv_tree, hf_cdp_tlvlength, tvb,
+ offset + TLV_LENGTH, 2, length);
+ proto_tree_add_text(tlv_tree, tvb, offset + 4,
+ length - 4, "Trust Bitmap: %02x",
+ tvb_get_guint8(tvb, offset + 4));
+ offset += length;
+ break;
+ case TYPE_UNTRUSTED_COS:
+ tlvi = proto_tree_add_text(cdp_tree, tvb,
+ offset, length, "Untrusted port CoS: 0x%02X",
+ tvb_get_guint8(tvb, offset + 4));
+ tlv_tree = proto_item_add_subtree(tlvi, ett_cdp_tlv);
+ proto_tree_add_uint(tlv_tree, hf_cdp_tlvtype, tvb,
+ offset + TLV_TYPE, 2, type);
+ proto_tree_add_uint(tlv_tree, hf_cdp_tlvlength, tvb,
+ offset + TLV_LENGTH, 2, length);
+ proto_tree_add_text(tlv_tree, tvb, offset + 4,
+ length - 4, "Untrusted port CoS: %02x",
+ tvb_get_guint8(tvb, offset + 4));
+ offset += length;
+ break;
+ case TYPE_SYSTEM_NAME:
+ tlvi = proto_tree_add_text(cdp_tree, tvb,
+ offset, length, "System Name: %.*s",
+ length - 4,
+ tvb_get_ptr(tvb, offset + 4, length - 4));
+ tlv_tree = proto_item_add_subtree(tlvi, ett_cdp_tlv);
+ proto_tree_add_uint(tlv_tree, hf_cdp_tlvtype, tvb,
+ offset + TLV_TYPE, 2, type);
+ proto_tree_add_uint(tlv_tree, hf_cdp_tlvlength, tvb,
+ offset + TLV_LENGTH, 2, length);
+ proto_tree_add_text(tlv_tree, tvb, offset + 4,
+ length - 4, "System Name: %.*s",
+ length - 4,
+ tvb_get_ptr(tvb, offset + 4, length - 4));
+ offset += length;
+ break;
+ case TYPE_SYSTEM_OID:
+ tlvi = proto_tree_add_text(cdp_tree, tvb,
+ offset, length, "System Object Identifier");
+ tlv_tree = proto_item_add_subtree(tlvi, ett_cdp_tlv);
+ proto_tree_add_uint(tlv_tree, hf_cdp_tlvtype, tvb,
+ offset + TLV_TYPE, 2, type);
+ proto_tree_add_uint(tlv_tree, hf_cdp_tlvlength, tvb,
+ offset + TLV_LENGTH, 2, length);
+ proto_tree_add_text(tlv_tree, tvb, offset + 4,
+ length - 4, "System Object Identifier: %s",
+ tvb_bytes_to_str(tvb, offset + 4, length - 4));
+ offset += length;
+ break;
+ case TYPE_MANAGEMENT_ADDR:
+ tlvi = proto_tree_add_text(cdp_tree, tvb,
+ offset, length, "Management Addresses");
+ tlv_tree = proto_item_add_subtree(tlvi, ett_cdp_tlv);
+ proto_tree_add_uint(tlv_tree, hf_cdp_tlvtype, tvb,
+ offset + TLV_TYPE, 2, type);
+ proto_tree_add_uint(tlv_tree, hf_cdp_tlvlength, tvb,
+ offset + TLV_LENGTH, 2, length);
+ offset += 4;
+ length -= 4;
+ naddresses = tvb_get_ntohl(tvb, offset);
+ proto_tree_add_text(tlv_tree, tvb, offset, 4,
+ "Number of addresses: %u", naddresses);
+ offset += 4;
+ length -= 4;
+ while (naddresses != 0) {
+ addr_length = dissect_address_tlv(tvb, offset, length,
+ tlv_tree);
+ if (addr_length < 0)
+ break;
+ offset += addr_length;
+ length -= addr_length;
+
+ naddresses--;
+ }
+ offset += length;
+ break;
+ case TYPE_LOCATION:
+ tlvi = proto_tree_add_text(cdp_tree, tvb,
+ offset, length, "Location: %.*s",
+ length - 5,
+ tvb_get_ptr(tvb, offset + 5, length - 5));
+ tlv_tree = proto_item_add_subtree(tlvi, ett_cdp_tlv);
+ proto_tree_add_uint(tlv_tree, hf_cdp_tlvtype, tvb,
+ offset + TLV_TYPE, 2, type);
+ proto_tree_add_uint(tlv_tree, hf_cdp_tlvlength, tvb,
+ offset + TLV_LENGTH, 2, length);
+ proto_tree_add_text(tlv_tree, tvb, offset + 4,
+ 1 , "UNKNOWN: 0x%02X",
+ tvb_get_guint8(tvb, offset + 4));
+ proto_tree_add_text(tlv_tree, tvb, offset + 5,
+ length - 5, "Location: %.*s",
+ length - 5,
+ tvb_get_ptr(tvb, offset + 5, length - 5));
+ offset += length;
+ break;