📄 print-lldp.c
字号:
#define LLDP_TIA_APPLICATION_TYPE_VIDEO_CONFERENCING 6#define LLDP_TIA_APPLICATION_TYPE_STREAMING_VIDEO 7#define LLDP_TIA_APPLICATION_TYPE_VIDEO_SIGNALING 8static const struct tok lldp_tia_application_type_values[] = { { LLDP_TIA_APPLICATION_TYPE_VOICE, "voice"}, { LLDP_TIA_APPLICATION_TYPE_VOICE_SIGNALING, "voice signaling"}, { LLDP_TIA_APPLICATION_TYPE_GUEST_VOICE, "guest voice"}, { LLDP_TIA_APPLICATION_TYPE_GUEST_VOICE_SIGNALING, "guest voice signaling"}, { LLDP_TIA_APPLICATION_TYPE_SOFTPHONE_VOICE, "softphone voice"}, { LLDP_TIA_APPLICATION_TYPE_VIDEO_CONFERENCING, "video conferencing"}, { LLDP_TIA_APPLICATION_TYPE_STREAMING_VIDEO, "streaming video"}, { LLDP_TIA_APPLICATION_TYPE_VIDEO_SIGNALING, "video signaling"}, { 0, NULL}};#define LLDP_TIA_NETWORK_POLICY_U_BIT (1 << 5)#define LLDP_TIA_NETWORK_POLICY_T_BIT (1 << 6)#define LLDP_TIA_NETWORK_POLICY_X_BIT (1 << 7)static const struct tok lldp_tia_network_policy_bits_values[] = { { LLDP_TIA_NETWORK_POLICY_U_BIT, "Unknown"}, { LLDP_TIA_NETWORK_POLICY_T_BIT, "Tagged"}, { LLDP_TIA_NETWORK_POLICY_X_BIT, "reserved"}, { 0, NULL}};#define LLDP_EXTRACT_NETWORK_POLICY_VLAN(x) (((x)&0x1ffe)>>1)#define LLDP_EXTRACT_NETWORK_POLICY_L2_PRIORITY(x) (((x)&0x01ff)>>6)#define LLDP_EXTRACT_NETWORK_POLICY_DSCP(x) ((x)&0x003f)#define LLDP_TIA_LOCATION_DATA_FORMAT_COORDINATE_BASED 1#define LLDP_TIA_LOCATION_DATA_FORMAT_CIVIC_ADDRESS 2#define LLDP_TIA_LOCATION_DATA_FORMAT_ECS_ELIN 3static const struct tok lldp_tia_location_data_format_values[] = { { LLDP_TIA_LOCATION_DATA_FORMAT_COORDINATE_BASED, "coordinate-based LCI"}, { LLDP_TIA_LOCATION_DATA_FORMAT_CIVIC_ADDRESS, "civic address LCI"}, { LLDP_TIA_LOCATION_DATA_FORMAT_ECS_ELIN, "ECS ELIN"}, { 0, NULL}};#define LLDP_TIA_LOCATION_DATUM_WGS_84 1#define LLDP_TIA_LOCATION_DATUM_NAD_83_NAVD_88 2#define LLDP_TIA_LOCATION_DATUM_NAD_83_MLLW 3static const struct tok lldp_tia_location_datum_type_values[] = { { LLDP_TIA_LOCATION_DATUM_WGS_84, "World Geodesic System 1984"}, { LLDP_TIA_LOCATION_DATUM_NAD_83_NAVD_88, "North American Datum 1983 (NAVD88)"}, { LLDP_TIA_LOCATION_DATUM_NAD_83_MLLW, "North American Datum 1983 (MLLW)"}, { 0, NULL}};#define LLDP_TIA_POWER_SOURCE_PSE 1#define LLDP_TIA_POWER_SOURCE_LOCAL 2#define LLDP_TIA_POWER_SOURCE_PSE_AND_LOCAL 3static const struct tok lldp_tia_power_source_values[] = { { LLDP_TIA_POWER_SOURCE_PSE, "PSE - primary power source"}, { LLDP_TIA_POWER_SOURCE_LOCAL, "local - backup power source"}, { LLDP_TIA_POWER_SOURCE_PSE_AND_LOCAL, "PSE+local - reserved"}, { 0, NULL}};#define LLDP_TIA_POWER_PRIORITY_CRITICAL 1#define LLDP_TIA_POWER_PRIORITY_HIGH 2#define LLDP_TIA_POWER_PRIORITY_LOW 3static const struct tok lldp_tia_power_priority_values[] = { { LLDP_TIA_POWER_PRIORITY_CRITICAL, "critical"}, { LLDP_TIA_POWER_PRIORITY_HIGH, "high"}, { LLDP_TIA_POWER_PRIORITY_LOW, "low"}, { 0, NULL}};#define LLDP_TIA_POWER_VAL_MAX 1024static const struct tok lldp_tia_inventory_values[] = { { LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_HARDWARE_REV, "Hardware revision" }, { LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_FIRMWARE_REV, "Firmware revision" }, { LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_SOFTWARE_REV, "Software revision" }, { LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_SERIAL_NUMBER, "Serial number" }, { LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_MANUFACTURER_NAME, "Manufacturer name" }, { LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_MODEL_NAME, "Model name" }, { LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_ASSET_ID, "Asset ID" }, { 0, NULL}};/* * From RFC 3636 - ifMauAutoNegCapAdvertisedBits */ #define LLDP_MAU_PMD_OTHER (1 << 15)#define LLDP_MAU_PMD_10BASE_T (1 << 14)#define LLDP_MAU_PMD_10BASE_T_FD (1 << 13)#define LLDP_MAU_PMD_100BASE_T4 (1 << 12)#define LLDP_MAU_PMD_100BASE_TX (1 << 11)#define LLDP_MAU_PMD_100BASE_TX_FD (1 << 10)#define LLDP_MAU_PMD_100BASE_T2 (1 << 9)#define LLDP_MAU_PMD_100BASE_T2_FD (1 << 8)#define LLDP_MAU_PMD_FDXPAUSE (1 << 7)#define LLDP_MAU_PMD_FDXAPAUSE (1 << 6)#define LLDP_MAU_PMD_FDXSPAUSE (1 << 5)#define LLDP_MAU_PMD_FDXBPAUSE (1 << 4)#define LLDP_MAU_PMD_1000BASE_X (1 << 3)#define LLDP_MAU_PMD_1000BASE_X_FD (1 << 2)#define LLDP_MAU_PMD_1000BASE_T (1 << 1)#define LLDP_MAU_PMD_1000BASE_T_FD (1 << 0)static const struct tok lldp_pmd_capability_values[] = { { LLDP_MAU_PMD_10BASE_T, "10BASE-T hdx"}, { LLDP_MAU_PMD_10BASE_T_FD, "10BASE-T fdx"}, { LLDP_MAU_PMD_100BASE_T4, "100BASE-T4"}, { LLDP_MAU_PMD_100BASE_TX, "100BASE-TX hdx"}, { LLDP_MAU_PMD_100BASE_TX_FD, "100BASE-TX fdx"}, { LLDP_MAU_PMD_100BASE_T2, "100BASE-T2 hdx"}, { LLDP_MAU_PMD_100BASE_T2_FD, "100BASE-T2 fdx"}, { LLDP_MAU_PMD_FDXPAUSE, "Pause for fdx links"}, { LLDP_MAU_PMD_FDXAPAUSE, "Asym PAUSE for fdx"}, { LLDP_MAU_PMD_FDXSPAUSE, "Sym PAUSE for fdx"}, { LLDP_MAU_PMD_FDXBPAUSE, "Asym and Sym PAUSE for fdx"}, { LLDP_MAU_PMD_1000BASE_X, "1000BASE-{X LX SX CX} hdx"}, { LLDP_MAU_PMD_1000BASE_X_FD, "1000BASE-{X LX SX CX} fdx"}, { LLDP_MAU_PMD_1000BASE_T, "1000BASE-T hdx"}, { LLDP_MAU_PMD_1000BASE_T_FD, "1000BASE-T fdx"}, { 0, NULL}};#define LLDP_MDI_PORT_CLASS (1 << 0)#define LLDP_MDI_POWER_SUPPORT (1 << 1)#define LLDP_MDI_POWER_STATE (1 << 2)#define LLDP_MDI_PAIR_CONTROL_ABILITY (1 << 3)static const struct tok lldp_mdi_values[] = { { LLDP_MDI_PORT_CLASS, "PSE"}, { LLDP_MDI_POWER_SUPPORT, "supported"}, { LLDP_MDI_POWER_STATE, "enabled"}, { LLDP_MDI_PAIR_CONTROL_ABILITY, "can be controlled"}, { 0, NULL}};#define LLDP_MDI_PSE_PORT_POWER_PAIRS_SIGNAL 1#define LLDP_MDI_PSE_PORT_POWER_PAIRS_SPARE 2static const struct tok lldp_mdi_power_pairs_values[] = { { LLDP_MDI_PSE_PORT_POWER_PAIRS_SIGNAL, "signal"}, { LLDP_MDI_PSE_PORT_POWER_PAIRS_SPARE, "spare"}, { 0, NULL}};#define LLDP_MDI_POWER_CLASS0 1#define LLDP_MDI_POWER_CLASS1 2#define LLDP_MDI_POWER_CLASS2 3#define LLDP_MDI_POWER_CLASS3 4#define LLDP_MDI_POWER_CLASS4 5static const struct tok lldp_mdi_power_class_values[] = { { LLDP_MDI_POWER_CLASS0, "class0"}, { LLDP_MDI_POWER_CLASS1, "class1"}, { LLDP_MDI_POWER_CLASS2, "class2"}, { LLDP_MDI_POWER_CLASS3, "class3"}, { LLDP_MDI_POWER_CLASS4, "class4"}, { 0, NULL}};#define LLDP_AGGREGATION_CAPABILTIY (1 << 0)#define LLDP_AGGREGATION_STATUS (1 << 1)static const struct tok lldp_aggregation_values[] = { { LLDP_AGGREGATION_CAPABILTIY, "supported"}, { LLDP_AGGREGATION_STATUS, "enabled"}, { 0, NULL}};/* * Interface numbering subtypes. */#define LLDP_INTF_NUMB_IFX_SUBTYPE 2#define LLDP_INTF_NUMB_SYSPORT_SUBTYPE 3static const struct tok lldp_intf_numb_subtype_values[] = { { LLDP_INTF_NUMB_IFX_SUBTYPE, "Interface Index" }, { LLDP_INTF_NUMB_SYSPORT_SUBTYPE, "System Port Number" }, { 0, NULL}};#define LLDP_INTF_NUM_LEN 5/* * Print IEEE private extensions. (802.1 annex F) */static intlldp_private_8021_print(const u_char *tptr){ int subtype, hexdump = FALSE; subtype = *(tptr+3); printf("\n\t %s Subtype (%u)", tok2str(lldp_8021_subtype_values, "unknown", subtype), subtype); switch (subtype) { case LLDP_PRIVATE_8021_SUBTYPE_PORT_VLAN_ID: printf("\n\t port vlan id (PVID): %u", EXTRACT_16BITS(tptr+4)); break; case LLDP_PRIVATE_8021_SUBTYPE_PROTOCOL_VLAN_ID: printf("\n\t port and protocol vlan id (PPVID): %u, flags [%s] (0x%02x)", EXTRACT_16BITS(tptr+5), bittok2str(lldp_8021_port_protocol_id_values, "none", *(tptr+4)), *(tptr+4)); break; case LLDP_PRIVATE_8021_SUBTYPE_VLAN_NAME: printf("\n\t vlan id (VID): %u", EXTRACT_16BITS(tptr+4)); printf("\n\t vlan name: "); safeputs((const char *)tptr+7, *(tptr+6)); break; case LLDP_PRIVATE_8021_SUBTYPE_PROTOCOL_IDENTITY: printf("\n\t protocol identity: "); safeputs((const char *)tptr+5, *(tptr+4)); break; default: hexdump = TRUE; break; } return hexdump;}/* * Print IEEE private extensions. (802.3) */static intlldp_private_8023_print(const u_char *tptr){ int subtype, hexdump = FALSE; subtype = *(tptr+3); printf("\n\t %s Subtype (%u)", tok2str(lldp_8023_subtype_values, "unknown", subtype), subtype); switch (subtype) { case LLDP_PRIVATE_8023_SUBTYPE_MACPHY: printf("\n\t autonegotiation [%s] (0x%02x)", bittok2str(lldp_8023_autonegotiation_values, "none", *(tptr+4)), *(tptr+4)); printf("\n\t PMD autoneg capability [%s] (0x%04x)", bittok2str(lldp_pmd_capability_values,"unknown", EXTRACT_16BITS(tptr+5)), EXTRACT_16BITS(tptr+5)); printf("\n\t MAU type %s (0x%04x)", tok2str(lldp_mau_types_values, "unknown", EXTRACT_16BITS(tptr+7)), EXTRACT_16BITS(tptr+7)); break; case LLDP_PRIVATE_8023_SUBTYPE_MDIPOWER: printf("\n\t MDI power support [%s], power pair %s, power class %s", bittok2str(lldp_mdi_values, "none", *(tptr+4)), tok2str(lldp_mdi_power_pairs_values, "unknown", *(tptr+5)), tok2str(lldp_mdi_power_class_values, "unknown", *(tptr+6))); break; case LLDP_PRIVATE_8023_SUBTYPE_LINKAGGR: printf("\n\t aggregation status [%s], aggregation port ID %u", bittok2str(lldp_aggregation_values, "none", *(tptr+4)), EXTRACT_32BITS(tptr+5)); break; case LLDP_PRIVATE_8023_SUBTYPE_MTU: printf("\n\t MTU size %u", EXTRACT_16BITS(tptr+4)); break; default: hexdump = TRUE; break; } return hexdump;}/* * Extract 34bits of latitude/longitude coordinates. */static u_int64_tlldp_extract_latlon(const u_char *tptr){ u_int64_t latlon; latlon = *tptr & 0x3; latlon = (latlon << 32) | EXTRACT_32BITS(tptr+1); return latlon;}/* * Print private TIA extensions. */static intlldp_private_tia_print(const u_char *tptr, u_int tlv_len){ int subtype, hexdump = FALSE; u_int8_t location_format; u_int16_t power_val; u_int8_t lci_len, ca_type, ca_len; subtype = *(tptr+3); printf("\n\t %s Subtype (%u)", tok2str(lldp_tia_subtype_values, "unknown", subtype), subtype); switch (subtype) { case LLDP_PRIVATE_TIA_SUBTYPE_CAPABILITIES: printf("\n\t Media capabilities [%s] (0x%04x)", bittok2str(lldp_tia_capabilities_values, "none", EXTRACT_16BITS(tptr+4)), EXTRACT_16BITS(tptr+4)); printf("\n\t Device type [%s] (0x%02x)", tok2str(lldp_tia_device_type_values, "unknown", *(tptr+6)), *(tptr+6)); break; case LLDP_PRIVATE_TIA_SUBTYPE_NETWORK_POLICY: printf("\n\t Application type [%s] (0x%02x)", tok2str(lldp_tia_application_type_values, "none", *(tptr+4)), *(tptr+4)); printf(", Flags [%s]", bittok2str( lldp_tia_network_policy_bits_values, "none", *(tptr+5))); printf("\n\t Vlan id %u", LLDP_EXTRACT_NETWORK_POLICY_VLAN(EXTRACT_16BITS(tptr+5))); printf(", L2 priority %u", LLDP_EXTRACT_NETWORK_POLICY_L2_PRIORITY(EXTRACT_16BITS(tptr+6))); printf(", DSCP value %u", LLDP_EXTRACT_NETWORK_POLICY_DSCP(EXTRACT_16BITS(tptr+6))); break; case LLDP_PRIVATE_TIA_SUBTYPE_LOCAL_ID: location_format = *(tptr+4); printf("\n\t Location data format %s (0x%02x)", tok2str(lldp_tia_location_data_format_values, "unknown", location_format), location_format); switch (location_format) { case LLDP_TIA_LOCATION_DATA_FORMAT_COORDINATE_BASED: printf("\n\t Latitude resolution %u, latitude value %" PRIu64, (*(tptr+5)>>2), lldp_extract_latlon(tptr+5)); printf("\n\t Longitude resolution %u, longitude value %" PRIu64, (*(tptr+10)>>2), lldp_extract_latlon(tptr+10)); printf("\n\t Altitude type %s (%u)", tok2str(lldp_tia_location_altitude_type_values, "unknown",(*(tptr+15)>>4)), (*(tptr+15)>>4)); printf("\n\t Altitude resolution %u, altitude value 0x%x", (EXTRACT_16BITS(tptr+15)>>6)&0x3f, ((EXTRACT_32BITS(tptr+16)&0x3fffffff))); printf("\n\t Datum %s (0x%02x)", tok2str(lldp_tia_location_datum_type_values, "unknown", *(tptr+20)), *(tptr+20)); break; case LLDP_TIA_LOCATION_DATA_FORMAT_CIVIC_ADDRESS: lci_len = *(tptr+5); printf("\n\t LCI length %u, LCI what %s (0x%02x), Country-code ", lci_len, tok2str(lldp_tia_location_lci_what_values, "unknown", *(tptr+6)), *(tptr+6)); /* Country code */ safeputs((const char *)(tptr+7), 2);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -