📄 print-lldp.c
字号:
/* * Copyright (c) 1998-2007 The TCPDUMP project * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that: (1) source code * distributions retain the above copyright notice and this paragraph * in its entirety, and (2) distributions including binary code include * the above copyright notice and this paragraph in its entirety in * the documentation or other materials provided with the distribution. * THIS SOFTWARE IS PROVIDED ``AS IS'' AND * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE. * * support for the IEEE Link Discovery Protocol as per 802.1ab * * Original code by Hannes Gredler (hannes@juniper.net) * IEEE and TIA extensions by Carles Kishimoto <carles.kishimoto@gmail.com> */#ifndef lintstatic const char rcsid[] _U_ ="@(#) $Header: /tcpdump/master/tcpdump/print-lldp.c,v 1.7.2.3 2008-03-20 09:33:52 hannes Exp $";#endif#ifdef HAVE_CONFIG_H#include "config.h"#endif#include <tcpdump-stdinc.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include "interface.h"#include "extract.h"#include "addrtoname.h"#include "af.h"#include "oui.h"#define LLDP_EXTRACT_TYPE(x) (((x)&0xfe00)>>9) #define LLDP_EXTRACT_LEN(x) ((x)&0x01ff) /* * TLV type codes */#define LLDP_END_TLV 0#define LLDP_CHASSIS_ID_TLV 1#define LLDP_PORT_ID_TLV 2#define LLDP_TTL_TLV 3#define LLDP_PORT_DESCR_TLV 4#define LLDP_SYSTEM_NAME_TLV 5#define LLDP_SYSTEM_DESCR_TLV 6#define LLDP_SYSTEM_CAP_TLV 7#define LLDP_MGMT_ADDR_TLV 8#define LLDP_PRIVATE_TLV 127static const struct tok lldp_tlv_values[] = { { LLDP_END_TLV, "End" }, { LLDP_CHASSIS_ID_TLV, "Chassis ID" }, { LLDP_PORT_ID_TLV, "Port ID" }, { LLDP_TTL_TLV, "Time to Live" }, { LLDP_PORT_DESCR_TLV, "Port Description" }, { LLDP_SYSTEM_NAME_TLV, "System Name" }, { LLDP_SYSTEM_DESCR_TLV, "System Description" }, { LLDP_SYSTEM_CAP_TLV, "System Capabilities" }, { LLDP_MGMT_ADDR_TLV, "Management Address" }, { LLDP_PRIVATE_TLV, "Organization specific" }, { 0, NULL}};/* * Chassis ID subtypes */#define LLDP_CHASSIS_CHASSIS_COMP_SUBTYPE 1#define LLDP_CHASSIS_INTF_ALIAS_SUBTYPE 2#define LLDP_CHASSIS_PORT_COMP_SUBTYPE 3#define LLDP_CHASSIS_MAC_ADDR_SUBTYPE 4#define LLDP_CHASSIS_NETWORK_ADDR_SUBTYPE 5#define LLDP_CHASSIS_INTF_NAME_SUBTYPE 6#define LLDP_CHASSIS_LOCAL_SUBTYPE 7static const struct tok lldp_chassis_subtype_values[] = { { LLDP_CHASSIS_CHASSIS_COMP_SUBTYPE, "Chassis component"}, { LLDP_CHASSIS_INTF_ALIAS_SUBTYPE, "Interface alias"}, { LLDP_CHASSIS_PORT_COMP_SUBTYPE, "Port component"}, { LLDP_CHASSIS_MAC_ADDR_SUBTYPE, "MAC address"}, { LLDP_CHASSIS_NETWORK_ADDR_SUBTYPE, "Network address"}, { LLDP_CHASSIS_INTF_NAME_SUBTYPE, "Interface name"}, { LLDP_CHASSIS_LOCAL_SUBTYPE, "Local"}, { 0, NULL}};/* * Port ID subtypes */#define LLDP_PORT_INTF_ALIAS_SUBTYPE 1#define LLDP_PORT_PORT_COMP_SUBTYPE 2#define LLDP_PORT_MAC_ADDR_SUBTYPE 3#define LLDP_PORT_NETWORK_ADDR_SUBTYPE 4#define LLDP_PORT_INTF_NAME_SUBTYPE 5#define LLDP_PORT_AGENT_CIRC_ID_SUBTYPE 6#define LLDP_PORT_LOCAL_SUBTYPE 7static const struct tok lldp_port_subtype_values[] = { { LLDP_PORT_INTF_ALIAS_SUBTYPE, "Interface alias"}, { LLDP_PORT_PORT_COMP_SUBTYPE, "Port component"}, { LLDP_PORT_MAC_ADDR_SUBTYPE, "MAC address"}, { LLDP_PORT_NETWORK_ADDR_SUBTYPE, "Network Address"}, { LLDP_PORT_INTF_NAME_SUBTYPE, "Interface Name"}, { LLDP_PORT_AGENT_CIRC_ID_SUBTYPE, "Agent circuit ID"}, { LLDP_PORT_LOCAL_SUBTYPE, "Local"}, { 0, NULL}};/* * System Capabilities */#define LLDP_CAP_OTHER (1 << 0)#define LLDP_CAP_REPEATER (1 << 1)#define LLDP_CAP_BRIDGE (1 << 2)#define LLDP_CAP_WLAN_AP (1 << 3)#define LLDP_CAP_ROUTER (1 << 4)#define LLDP_CAP_PHONE (1 << 5)#define LLDP_CAP_DOCSIS (1 << 6)#define LLDP_CAP_STATION_ONLY (1 << 7)static const struct tok lldp_cap_values[] = { { LLDP_CAP_OTHER, "Other"}, { LLDP_CAP_REPEATER, "Repeater"}, { LLDP_CAP_BRIDGE, "Bridge"}, { LLDP_CAP_WLAN_AP, "WLAN AP"}, { LLDP_CAP_ROUTER, "Router"}, { LLDP_CAP_PHONE, "Telephone"}, { LLDP_CAP_DOCSIS, "Docsis"}, { LLDP_CAP_STATION_ONLY, "Station Only"}, { 0, NULL}};#define LLDP_PRIVATE_8021_SUBTYPE_PORT_VLAN_ID 1#define LLDP_PRIVATE_8021_SUBTYPE_PROTOCOL_VLAN_ID 2#define LLDP_PRIVATE_8021_SUBTYPE_VLAN_NAME 3#define LLDP_PRIVATE_8021_SUBTYPE_PROTOCOL_IDENTITY 4static const struct tok lldp_8021_subtype_values[] = { { LLDP_PRIVATE_8021_SUBTYPE_PORT_VLAN_ID, "Port VLAN Id"}, { LLDP_PRIVATE_8021_SUBTYPE_PROTOCOL_VLAN_ID, "Port and Protocol VLAN ID"}, { LLDP_PRIVATE_8021_SUBTYPE_VLAN_NAME, "VLAN name"}, { LLDP_PRIVATE_8021_SUBTYPE_PROTOCOL_IDENTITY, "Protocol Identity"}, { 0, NULL}};#define LLDP_8021_PORT_PROTOCOL_VLAN_SUPPORT (1 << 1)#define LLDP_8021_PORT_PROTOCOL_VLAN_STATUS (1 << 2)static const struct tok lldp_8021_port_protocol_id_values[] = { { LLDP_8021_PORT_PROTOCOL_VLAN_SUPPORT, "supported"}, { LLDP_8021_PORT_PROTOCOL_VLAN_STATUS, "enabled"}, { 0, NULL}};#define LLDP_PRIVATE_8023_SUBTYPE_MACPHY 1#define LLDP_PRIVATE_8023_SUBTYPE_MDIPOWER 2#define LLDP_PRIVATE_8023_SUBTYPE_LINKAGGR 3#define LLDP_PRIVATE_8023_SUBTYPE_MTU 4static const struct tok lldp_8023_subtype_values[] = { { LLDP_PRIVATE_8023_SUBTYPE_MACPHY, "MAC/PHY configuration/status"}, { LLDP_PRIVATE_8023_SUBTYPE_MDIPOWER, "Power via MDI"}, { LLDP_PRIVATE_8023_SUBTYPE_LINKAGGR, "Link aggregation"}, { LLDP_PRIVATE_8023_SUBTYPE_MTU, "Max frame size"}, { 0, NULL}};#define LLDP_PRIVATE_TIA_SUBTYPE_CAPABILITIES 1#define LLDP_PRIVATE_TIA_SUBTYPE_NETWORK_POLICY 2#define LLDP_PRIVATE_TIA_SUBTYPE_LOCAL_ID 3#define LLDP_PRIVATE_TIA_SUBTYPE_EXTENDED_POWER_MDI 4#define LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_HARDWARE_REV 5#define LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_FIRMWARE_REV 6#define LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_SOFTWARE_REV 7#define LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_SERIAL_NUMBER 8#define LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_MANUFACTURER_NAME 9#define LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_MODEL_NAME 10#define LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_ASSET_ID 11static const struct tok lldp_tia_subtype_values[] = { { LLDP_PRIVATE_TIA_SUBTYPE_CAPABILITIES, "LLDP-MED Capabilities" }, { LLDP_PRIVATE_TIA_SUBTYPE_NETWORK_POLICY, "Network policy" }, { LLDP_PRIVATE_TIA_SUBTYPE_LOCAL_ID, "Location identification" }, { LLDP_PRIVATE_TIA_SUBTYPE_EXTENDED_POWER_MDI, "Extended power-via-MDI" }, { LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_HARDWARE_REV, "Inventory - hardware revision" }, { LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_FIRMWARE_REV, "Inventory - firmware revision" }, { LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_SOFTWARE_REV, "Inventory - software revision" }, { LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_SERIAL_NUMBER, "Inventory - serial number" }, { LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_MANUFACTURER_NAME, "Inventory - manufacturer name" }, { LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_MODEL_NAME, "Inventory - model name" }, { LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_ASSET_ID, "Inventory - asset ID" }, { 0, NULL}};#define LLDP_PRIVATE_TIA_LOCATION_ALTITUDE_METERS 1#define LLDP_PRIVATE_TIA_LOCATION_ALTITUDE_FLOORS 2static const struct tok lldp_tia_location_altitude_type_values[] = { { LLDP_PRIVATE_TIA_LOCATION_ALTITUDE_METERS, "meters"}, { LLDP_PRIVATE_TIA_LOCATION_ALTITUDE_FLOORS, "floors"}, { 0, NULL}};/* ANSI/TIA-1057 - Annex B */#define LLDP_PRIVATE_TIA_LOCATION_LCI_CATYPE_A1 1#define LLDP_PRIVATE_TIA_LOCATION_LCI_CATYPE_A2 2#define LLDP_PRIVATE_TIA_LOCATION_LCI_CATYPE_A3 3#define LLDP_PRIVATE_TIA_LOCATION_LCI_CATYPE_A4 4#define LLDP_PRIVATE_TIA_LOCATION_LCI_CATYPE_A5 5#define LLDP_PRIVATE_TIA_LOCATION_LCI_CATYPE_A6 6static const struct tok lldp_tia_location_lci_catype_values[] = { { LLDP_PRIVATE_TIA_LOCATION_LCI_CATYPE_A1, "national subdivisions (state,canton,region,province,prefecture)"}, { LLDP_PRIVATE_TIA_LOCATION_LCI_CATYPE_A2, "county, parish, gun, district"}, { LLDP_PRIVATE_TIA_LOCATION_LCI_CATYPE_A3, "city, township, shi"}, { LLDP_PRIVATE_TIA_LOCATION_LCI_CATYPE_A4, "city division, borough, city district, ward chou"}, { LLDP_PRIVATE_TIA_LOCATION_LCI_CATYPE_A5, "neighborhood, block"}, { LLDP_PRIVATE_TIA_LOCATION_LCI_CATYPE_A6, "street"}, { 0, NULL}};static const struct tok lldp_tia_location_lci_what_values[] = { { 0, "location of DHCP server"}, { 1, "location of the network element believed to be closest to the client"}, { 2, "location of the client"}, { 0, NULL}};/* * From RFC 3636 - dot3MauType */#define LLDP_MAU_TYPE_UNKNOWN 0#define LLDP_MAU_TYPE_AUI 1#define LLDP_MAU_TYPE_10BASE_5 2#define LLDP_MAU_TYPE_FOIRL 3#define LLDP_MAU_TYPE_10BASE_2 4#define LLDP_MAU_TYPE_10BASE_T 5#define LLDP_MAU_TYPE_10BASE_FP 6#define LLDP_MAU_TYPE_10BASE_FB 7#define LLDP_MAU_TYPE_10BASE_FL 8#define LLDP_MAU_TYPE_10BROAD36 9#define LLDP_MAU_TYPE_10BASE_T_HD 10#define LLDP_MAU_TYPE_10BASE_T_FD 11#define LLDP_MAU_TYPE_10BASE_FL_HD 12#define LLDP_MAU_TYPE_10BASE_FL_FD 13#define LLDP_MAU_TYPE_100BASE_T4 14#define LLDP_MAU_TYPE_100BASE_TX_HD 15#define LLDP_MAU_TYPE_100BASE_TX_FD 16#define LLDP_MAU_TYPE_100BASE_FX_HD 17#define LLDP_MAU_TYPE_100BASE_FX_FD 18#define LLDP_MAU_TYPE_100BASE_T2_HD 19#define LLDP_MAU_TYPE_100BASE_T2_FD 20#define LLDP_MAU_TYPE_1000BASE_X_HD 21#define LLDP_MAU_TYPE_1000BASE_X_FD 22#define LLDP_MAU_TYPE_1000BASE_LX_HD 23#define LLDP_MAU_TYPE_1000BASE_LX_FD 24#define LLDP_MAU_TYPE_1000BASE_SX_HD 25#define LLDP_MAU_TYPE_1000BASE_SX_FD 26#define LLDP_MAU_TYPE_1000BASE_CX_HD 27#define LLDP_MAU_TYPE_1000BASE_CX_FD 28#define LLDP_MAU_TYPE_1000BASE_T_HD 29#define LLDP_MAU_TYPE_1000BASE_T_FD 30#define LLDP_MAU_TYPE_10GBASE_X 31#define LLDP_MAU_TYPE_10GBASE_LX4 32#define LLDP_MAU_TYPE_10GBASE_R 33#define LLDP_MAU_TYPE_10GBASE_ER 34#define LLDP_MAU_TYPE_10GBASE_LR 35#define LLDP_MAU_TYPE_10GBASE_SR 36#define LLDP_MAU_TYPE_10GBASE_W 37#define LLDP_MAU_TYPE_10GBASE_EW 38#define LLDP_MAU_TYPE_10GBASE_LW 39#define LLDP_MAU_TYPE_10GBASE_SW 40static const struct tok lldp_mau_types_values[] = { { LLDP_MAU_TYPE_UNKNOWN, "Unknown"}, { LLDP_MAU_TYPE_AUI, "AUI"}, { LLDP_MAU_TYPE_10BASE_5, "10BASE_5"}, { LLDP_MAU_TYPE_FOIRL, "FOIRL"}, { LLDP_MAU_TYPE_10BASE_2, "10BASE2"}, { LLDP_MAU_TYPE_10BASE_T, "10BASET duplex mode unknown"}, { LLDP_MAU_TYPE_10BASE_FP, "10BASEFP"}, { LLDP_MAU_TYPE_10BASE_FB, "10BASEFB"}, { LLDP_MAU_TYPE_10BASE_FL, "10BASEFL duplex mode unknown"}, { LLDP_MAU_TYPE_10BROAD36, "10BROAD36"}, { LLDP_MAU_TYPE_10BASE_T_HD, "10BASET hdx"}, { LLDP_MAU_TYPE_10BASE_T_FD, "10BASET fdx"}, { LLDP_MAU_TYPE_10BASE_FL_HD, "10BASEFL hdx"}, { LLDP_MAU_TYPE_10BASE_FL_FD, "10BASEFL fdx"}, { LLDP_MAU_TYPE_100BASE_T4, "100BASET4"}, { LLDP_MAU_TYPE_100BASE_TX_HD, "100BASETX hdx"}, { LLDP_MAU_TYPE_100BASE_TX_FD, "100BASETX fdx"}, { LLDP_MAU_TYPE_100BASE_FX_HD, "100BASEFX hdx"}, { LLDP_MAU_TYPE_100BASE_FX_FD, "100BASEFX fdx"}, { LLDP_MAU_TYPE_100BASE_T2_HD, "100BASET2 hdx"}, { LLDP_MAU_TYPE_100BASE_T2_FD, "100BASET2 fdx"}, { LLDP_MAU_TYPE_1000BASE_X_HD, "1000BASEX hdx"}, { LLDP_MAU_TYPE_1000BASE_X_FD, "1000BASEX fdx"}, { LLDP_MAU_TYPE_1000BASE_LX_HD, "1000BASELX hdx"}, { LLDP_MAU_TYPE_1000BASE_LX_FD, "1000BASELX fdx"}, { LLDP_MAU_TYPE_1000BASE_SX_HD, "1000BASESX hdx"}, { LLDP_MAU_TYPE_1000BASE_SX_FD, "1000BASESX fdx"}, { LLDP_MAU_TYPE_1000BASE_CX_HD, "1000BASECX hdx"}, { LLDP_MAU_TYPE_1000BASE_CX_FD, "1000BASECX fdx"}, { LLDP_MAU_TYPE_1000BASE_T_HD, "1000BASET hdx"}, { LLDP_MAU_TYPE_1000BASE_T_FD, "1000BASET fdx"}, { LLDP_MAU_TYPE_10GBASE_X, "10GBASEX"}, { LLDP_MAU_TYPE_10GBASE_LX4, "10GBASELX4"}, { LLDP_MAU_TYPE_10GBASE_R, "10GBASER"}, { LLDP_MAU_TYPE_10GBASE_ER, "10GBASEER"}, { LLDP_MAU_TYPE_10GBASE_LR, "10GBASELR"}, { LLDP_MAU_TYPE_10GBASE_SR, "10GBASESR"}, { LLDP_MAU_TYPE_10GBASE_W, "10GBASEW"}, { LLDP_MAU_TYPE_10GBASE_EW, "10GBASEEW"}, { LLDP_MAU_TYPE_10GBASE_LW, "10GBASELW"}, { LLDP_MAU_TYPE_10GBASE_SW, "10GBASESW"}, { 0, NULL}};#define LLDP_8023_AUTONEGOTIATION_SUPPORT (1 << 0)#define LLDP_8023_AUTONEGOTIATION_STATUS (1 << 1)static const struct tok lldp_8023_autonegotiation_values[] = { { LLDP_8023_AUTONEGOTIATION_SUPPORT, "supported"}, { LLDP_8023_AUTONEGOTIATION_STATUS, "enabled"}, { 0, NULL}};#define LLDP_TIA_CAPABILITY_MED (1 << 0)#define LLDP_TIA_CAPABILITY_NETWORK_POLICY (1 << 1)#define LLDP_TIA_CAPABILITY_LOCATION_IDENTIFICATION (1 << 2)#define LLDP_TIA_CAPABILITY_EXTENDED_POWER_MDI_PSE (1 << 3)#define LLDP_TIA_CAPABILITY_EXTENDED_POWER_MDI_PD (1 << 4)#define LLDP_TIA_CAPABILITY_INVENTORY (1 << 5)static const struct tok lldp_tia_capabilities_values[] = { { LLDP_TIA_CAPABILITY_MED, "LLDP-MED capabilities"}, { LLDP_TIA_CAPABILITY_NETWORK_POLICY, "network policy"}, { LLDP_TIA_CAPABILITY_LOCATION_IDENTIFICATION, "location identification"}, { LLDP_TIA_CAPABILITY_EXTENDED_POWER_MDI_PSE, "extended power via MDI-PSE"}, { LLDP_TIA_CAPABILITY_EXTENDED_POWER_MDI_PD, "extended power via MDI-PD"}, { LLDP_TIA_CAPABILITY_INVENTORY, "Inventory"}, { 0, NULL}};#define LLDP_TIA_DEVICE_TYPE_ENDPOINT_CLASS_1 1#define LLDP_TIA_DEVICE_TYPE_ENDPOINT_CLASS_2 2#define LLDP_TIA_DEVICE_TYPE_ENDPOINT_CLASS_3 3#define LLDP_TIA_DEVICE_TYPE_NETWORK_CONNECTIVITY 4static const struct tok lldp_tia_device_type_values[] = { { LLDP_TIA_DEVICE_TYPE_ENDPOINT_CLASS_1, "endpoint class 1"}, { LLDP_TIA_DEVICE_TYPE_ENDPOINT_CLASS_2, "endpoint class 2"}, { LLDP_TIA_DEVICE_TYPE_ENDPOINT_CLASS_3, "endpoint class 3"}, { LLDP_TIA_DEVICE_TYPE_NETWORK_CONNECTIVITY, "network connectivity"}, { 0, NULL}};#define LLDP_TIA_APPLICATION_TYPE_VOICE 1#define LLDP_TIA_APPLICATION_TYPE_VOICE_SIGNALING 2#define LLDP_TIA_APPLICATION_TYPE_GUEST_VOICE 3#define LLDP_TIA_APPLICATION_TYPE_GUEST_VOICE_SIGNALING 4#define LLDP_TIA_APPLICATION_TYPE_SOFTPHONE_VOICE 5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -