⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 print-lldp.c

📁 TCPDUMP的C语言源代码,是在数据链路层的应用
💻 C
📖 第 1 页 / 共 3 页
字号:
#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 + -