/* packet-opa-mad.c * Routines for Omni-Path MAD header and payload dissection * Copyright (c) 2016, Intel Corporation. * * Wireshark - Network traffic analyzer * By Gerald Combs * Copyright 1998 Gerald Combs * * SPDX-License-Identifier: GPL-2.0-or-later */ #include "config.h" #include #include #include #include #include void proto_reg_handoff_opa_mad(void); void proto_register_opa_mad(void); /* MAD Management Classes */ #define SUBN_LID_ROUTED 0x01 #define SUBN_DIRECTED_ROUTE 0x81 #define SUBNADMN 0x03 #define PERF 0x04 #define PERFADMN 0x32 /* Depreciated Management Classes */ #define BM 0x05 #define DEV_MGT 0x06 #define COM_MGT 0x07 #define SNMP 0x08 /* Default Range Strings */ #define OPA_MGMTCLASS_RANGE_STR "0x01,0x03-0x04,0x32,0x81" #define OPA_VENDOR_RANGE_STR "0x09-0x0F" #define OPA_VENDOR_RMPP_RANGE_STR "0x30-0x31,0x33-0x4F" #define OPA_APPLICATION_RANGE_STR "0x10-0x2F" #define OPA_RESERVED_RANGE_STR "0x00,0x02,0x50-0x80,0x82-0xFF" static const value_string MAD_mgmt_names[] = { { SUBN_LID_ROUTED, "Subnet Management (LID Routed)" }, { SUBNADMN, "Subnet Administration" }, { PERF, "Performance Management" }, { BM, "Baseboard Management" }, { DEV_MGT, "Device Management" }, { COM_MGT, "Communication Management" }, { SNMP, "SNMP" }, { 0x09, "VENDOR 0x09" }, { 0x0A, "VENDOR 0x0A" }, { 0x0B, "VENDOR 0x0B" }, { 0x0C, "VENDOR 0x0C" }, { 0x0D, "VENDOR 0x0D" }, { 0x0E, "VENDOR 0x0E" }, { 0x0F, "VENDOR 0x0F" }, { 0x10, "APPLICATION 0x10" }, { 0x11, "APPLICATION 0x11" }, { 0x12, "APPLICATION 0x12" }, { 0x13, "APPLICATION 0x13" }, { 0x14, "APPLICATION 0x14" }, { 0x15, "APPLICATION 0x15" }, { 0x16, "APPLICATION 0x16" }, { 0x17, "APPLICATION 0x17" }, { 0x18, "APPLICATION 0x18" }, { 0x19, "APPLICATION 0x19" }, { 0x1A, "APPLICATION 0x1A" }, { 0x1B, "APPLICATION 0x1B" }, { 0x1C, "APPLICATION 0x1C" }, { 0x1D, "APPLICATION 0x1D" }, { 0x1E, "APPLICATION 0x1E" }, { 0x1F, "APPLICATION 0x1F" }, { 0X20, "APPLICATION 0X20" }, { 0x21, "APPLICATION 0x21" }, { 0x22, "APPLICATION 0x22" }, { 0x23, "APPLICATION 0x23" }, { 0x24, "APPLICATION 0x24" }, { 0x25, "APPLICATION 0x25" }, { 0x26, "APPLICATION 0x26" }, { 0x27, "APPLICATION 0x27" }, { 0x28, "APPLICATION 0x28" }, { 0x29, "APPLICATION 0x29" }, { 0x2A, "APPLICATION 0x2A" }, { 0x2B, "APPLICATION 0x2B" }, { 0x2C, "APPLICATION 0x2C" }, { 0x2D, "APPLICATION 0x2D" }, { 0x2E, "APPLICATION 0x2E" }, { 0x2F, "APPLICATION 0x2F" }, { 0x30, "VENDOR 0x30" }, { 0x31, "VENDOR 0x31" }, { PERFADMN, "Performance Administration" }, { 0x33, "VENDOR 0x33" }, { 0x34, "VENDOR 0x34" }, { 0x35, "VENDOR 0x35" }, { 0x36, "VENDOR 0x36" }, { 0x37, "VENDOR 0x37" }, { 0x38, "VENDOR 0x38" }, { 0x39, "VENDOR 0x39" }, { 0x3A, "VENDOR 0x3A" }, { 0x3B, "VENDOR 0x3B" }, { 0x3C, "VENDOR 0x3C" }, { 0x3D, "VENDOR 0x3D" }, { 0x3E, "VENDOR 0x3E" }, { 0x3F, "VENDOR 0x3F" }, { 0x40, "VENDOR 0x40" }, { 0x41, "VENDOR 0x41" }, { 0x42, "VENDOR 0x42" }, { 0x43, "VENDOR 0x43" }, { 0x44, "VENDOR 0x44" }, { 0x45, "VENDOR 0x45" }, { 0x46, "VENDOR 0x46" }, { 0x47, "VENDOR 0x47" }, { 0x48, "VENDOR 0x48" }, { 0x49, "VENDOR 0x49" }, { 0x4A, "VENDOR 0x4A" }, { 0x4B, "VENDOR 0x4B" }, { 0x4C, "VENDOR 0x4C" }, { 0x4D, "VENDOR 0x4D" }, { 0x4E, "VENDOR 0x4E" }, { 0x4F, "VENDOR 0x4F" }, { SUBN_DIRECTED_ROUTE, "Subnet Management (Direct Routed)" }, { 0, NULL } }; static value_string_ext MAD_mgmt_names_ext = VALUE_STRING_EXT_INIT(MAD_mgmt_names); /* SM Attributes */ #define SM_ATTR_ID_CLASS_PORT_INFO 0x0001 #define SM_ATTR_ID_NOTICE 0x0002 #define SM_ATTR_ID_INFORM_INFO 0x0003 #define SM_ATTR_ID_NODE_DESCRIPTION 0x0010 #define SM_ATTR_ID_NODE_INFO 0x0011 #define SM_ATTR_ID_SWITCH_INFO 0x0012 #define SM_ATTR_ID_PORT_INFO 0x0015 #define SM_ATTR_ID_PART_TABLE 0x0016 #define SM_ATTR_ID_SL_SC_MAPPING_TABLE 0x0017 #define SM_ATTR_ID_VL_ARBITRATION 0x0018 #define SM_ATTR_ID_LINEAR_FWD_TABLE 0x0019 #define SM_ATTR_ID_MCAST_FWD_TABLE 0x001B #define SM_ATTR_ID_SM_INFO 0x0020 #define SM_ATTR_ID_LED_INFO 0x0031 #define SM_ATTR_ID_CABLE_INFO 0x0032 #define SM_ATTR_ID_AGGREGATE 0x0080 #define SM_ATTR_ID_SC_SC_MAPPING_TABLE 0x0081 #define SM_ATTR_ID_SC_SL_MAPPING_TABLE 0x0082 #define SM_ATTR_ID_SC_VLR_MAPPING_TABLE 0x0083 #define SM_ATTR_ID_SC_VLT_MAPPING_TABLE 0x0084 #define SM_ATTR_ID_SC_VLNT_MAPPING_TABLE 0x0085 #define SM_ATTR_ID_PORT_STATE_INFO 0x0087 #define SM_ATTR_ID_PORT_GROUP_FWD_TABLE 0x0088 #define SM_ATTR_ID_PORT_GROUP_TABLE 0x0089 #define SM_ATTR_ID_BUFFER_CONTROL_TABLE 0x008A #define SM_ATTR_ID_CONGESTION_INFO 0x008B #define SM_ATTR_ID_SWITCH_CONGESTION_LOG 0x008C #define SM_ATTR_ID_SWITCH_CONGESTION_SETTING 0x008D #define SM_ATTR_ID_SWITCH_PORT_CONGESTION_SETTING 0x008E #define SM_ATTR_ID_HFI_CONGESTION_LOG 0x008F #define SM_ATTR_ID_HFI_CONGESTION_SETTING 0x0090 #define SM_ATTR_ID_HFI_CONGESTION_CONTROL_TABLE 0x0091 /* SA Attributes */ #define SA_ATTR_ID_CLASS_PORT_INFO 0x0001 #define SA_ATTR_ID_NOTICE 0x0002 #define SA_ATTR_ID_INFORM_INFO 0x0003 #define SA_ATTR_ID_NODE_RECORD 0x0011 #define SA_ATTR_ID_PORTINFO_RECORD 0x0012 #define SA_ATTR_ID_SC_MAPTBL_RECORD 0x0013 #define SA_ATTR_ID_SWITCHINFO_RECORD 0x0014 #define SA_ATTR_ID_LINEAR_FWDTBL_RECORD 0x0015 #define SA_ATTR_ID_MCAST_FWDTBL_RECORD 0x0017 #define SA_ATTR_ID_SMINFO_RECORD 0x0018 #define SA_ATTR_ID_LINK_SPD_WDTH_PAIRS_RECORD 0x0019 #define SA_ATTR_ID_LINK_RECORD 0x0020 #define SA_ATTR_ID_SERVICE_RECORD 0x0031 #define SA_ATTR_ID_P_KEY_TABLE_RECORD 0x0033 #define SA_ATTR_ID_PATH_RECORD 0x0035 #define SA_ATTR_ID_VLARBTABLE_RECORD 0x0036 #define SA_ATTR_ID_MCMEMBER_RECORD 0x0038 #define SA_ATTR_ID_TRACE_RECORD 0x0039 #define SA_ATTR_ID_MULTIPATH_GID_RECORD 0x003A #define SA_ATTR_ID_SERVICEASSOCIATION_RECORD 0x003B #define SA_ATTR_ID_SL2SC_MAPTBL_RECORD 0x0080 #define SA_ATTR_ID_SC2SL_MAPTBL_RECORD 0x0081 #define SA_ATTR_ID_SC_VLNT_MAPTBL_RECORD 0x0082 #define SA_ATTR_ID_SC_VLT_MAPTBL_RECORD 0x0083 #define SA_ATTR_ID_SC_VLR_MAPTBL_RECORD 0x0084 #define SA_ATTR_ID_PGROUP_FWDTBL_RECORD 0x0085 #define SA_ATTR_ID_MULTIPATH_GUID_RECORD 0x0086 #define SA_ATTR_ID_MULTIPATH_LID_RECORD 0x0087 #define SA_ATTR_ID_CABLE_INFO_RECORD 0x0088 #define SA_ATTR_ID_VF_INFO_RECORD 0x0089 #define SA_ATTR_ID_PORTGROUP_TABLE_RECORD 0x008B #define SA_ATTR_ID_BUFF_CTRL_TAB_RECORD 0x008C #define SA_ATTR_ID_FABRICINFO_RECORD 0x008D #define SA_ATTR_ID_QUARANTINED_NODE_RECORD 0x0090 #define SA_ATTR_ID_CONGESTION_INFO_RECORD 0x0091 #define SA_ATTR_ID_SWITCH_CONG_RECORD 0x0092 #define SA_ATTR_ID_SWITCH_PORT_CONG_RECORD 0x0093 #define SA_ATTR_ID_HFI_CONG_RECORD 0x0094 #define SA_ATTR_ID_HFI_CONG_CTRL_RECORD 0x0095 #define SA_ATTR_ID_INFORM_INFO_RECORD 0x00F3 /* Performance Management class Attributes */ #define PM_ATTR_ID_CLASS_PORTINFO 0x0001 #define PM_ATTR_ID_PORT_STATUS 0x0040 #define PM_ATTR_ID_CLEAR_PORT_STATUS 0x0041 #define PM_ATTR_ID_DATA_PORT_COUNTERS 0x0042 #define PM_ATTR_ID_ERROR_PORT_COUNTERS 0x0043 #define PM_ATTR_ID_ERROR_INFO 0x0044 /* Performance Administration class Attributes */ #define PA_ATTR_ID_CLASS_PORTINFO 0x0001 #define PA_ATTR_ID_GET_GRP_LIST 0x00A0 #define PA_ATTR_ID_GET_GRP_INFO 0x00A1 #define PA_ATTR_ID_GET_GRP_CFG 0x00A2 #define PA_ATTR_ID_GET_PORT_CTRS 0x00A3 #define PA_ATTR_ID_CLR_PORT_CTRS 0x00A4 #define PA_ATTR_ID_CLR_ALL_PORT_CTRS 0x00A5 #define PA_ATTR_ID_GET_PM_CFG 0x00A6 #define PA_ATTR_ID_FREEZE_IMAGE 0x00A7 #define PA_ATTR_ID_RELEASE_IMAGE 0x00A8 #define PA_ATTR_ID_RENEW_IMAGE 0x00A9 #define PA_ATTR_ID_GET_FOCUS_PORTS 0x00AA #define PA_ATTR_ID_GET_IMAGE_INFO 0x00AB #define PA_ATTR_ID_MOVE_FREEZE_FRAME 0x00AC #define PA_ATTR_ID_GET_VF_LIST 0x00AD #define PA_ATTR_ID_GET_VF_INFO 0x00AE #define PA_ATTR_ID_GET_VF_CONFIG 0x00AF #define PA_ATTR_ID_GET_VF_PORT_CTRS 0x00B0 #define PA_ATTR_ID_CLR_VF_PORT_CTRS 0x00B1 #define PA_ATTR_ID_GET_VF_FOCUS_PORTS 0x00B2 /* Attributes */ static const value_string SUBM_Attributes[] = { { SM_ATTR_ID_CLASS_PORT_INFO, "Attribute (ClassPortInfo)" }, { SM_ATTR_ID_NOTICE, "Attribute (Notice)" }, { SM_ATTR_ID_INFORM_INFO, "Attribute (InformInfo)" }, { SM_ATTR_ID_NODE_DESCRIPTION, "Attribute (NodeDescription)" }, { SM_ATTR_ID_NODE_INFO, "Attribute (NodeInfo)" }, { SM_ATTR_ID_SWITCH_INFO, "Attribute (SwitchInfo)" }, { SM_ATTR_ID_PORT_INFO, "Attribute (PortInfo)" }, { SM_ATTR_ID_PART_TABLE, "Attribute (PKeyTable)" }, { SM_ATTR_ID_SL_SC_MAPPING_TABLE, "Attribute (SLSCMappingTable)" }, { SM_ATTR_ID_VL_ARBITRATION, "Attribute (VLArbitrationTable)" }, { SM_ATTR_ID_LINEAR_FWD_TABLE, "Attribute (LinearForwardingTable)" }, { SM_ATTR_ID_MCAST_FWD_TABLE, "Attribute (MulticastForwardingTable)" }, { SM_ATTR_ID_SM_INFO, "Attribute (SMInfo)" }, { SM_ATTR_ID_LED_INFO, "Attribute (LedInfo)" }, { SM_ATTR_ID_CABLE_INFO, "Attribute (CableInfo)" }, { SM_ATTR_ID_AGGREGATE, "Attribute (Aggregate)" }, { SM_ATTR_ID_SC_SC_MAPPING_TABLE, "Attribute (SCSCMappingTable)" }, { SM_ATTR_ID_SC_SL_MAPPING_TABLE, "Attribute (SCSLMappingTable)" }, { SM_ATTR_ID_SC_VLR_MAPPING_TABLE, "Attribute (SCVLRMappingTable)" }, { SM_ATTR_ID_SC_VLT_MAPPING_TABLE, "Attribute (SCVLTMappingTable)" }, { SM_ATTR_ID_SC_VLNT_MAPPING_TABLE, "Attribute (SCVLNTMappingTable)" }, { SM_ATTR_ID_PORT_STATE_INFO, "Attribute (PortStateInfo)" }, { SM_ATTR_ID_PORT_GROUP_FWD_TABLE, "Attribute (PortGroupForwardingTable)" }, { SM_ATTR_ID_PORT_GROUP_TABLE, "Attribute (PortGroupTable)" }, { SM_ATTR_ID_BUFFER_CONTROL_TABLE, "Attribute (BufferControlTable)" }, { SM_ATTR_ID_CONGESTION_INFO, "Attribute (CongestionInfo)" }, { SM_ATTR_ID_SWITCH_CONGESTION_LOG, "Attribute (SwitchCongestionLog)" }, { SM_ATTR_ID_SWITCH_CONGESTION_SETTING, "Attribute (SwitchCongestionSetting)" }, { SM_ATTR_ID_SWITCH_PORT_CONGESTION_SETTING, "Attribute (SwitchPortCongestionSetting)" }, { SM_ATTR_ID_HFI_CONGESTION_LOG, "Attribute (HFICongestionLog)" }, { SM_ATTR_ID_HFI_CONGESTION_SETTING, "Attribute (HFICongestionSetting)" }, { SM_ATTR_ID_HFI_CONGESTION_CONTROL_TABLE, "Attribute (HFICongestionControlTable)" }, { 0, NULL } }; static const value_string SUBA_Attributes[] = { { SA_ATTR_ID_CLASS_PORT_INFO, "Attribute (ClassPortInfo)" }, { SA_ATTR_ID_NOTICE, "Attribute (Notice)" }, { SA_ATTR_ID_INFORM_INFO, "Attribute (InformInfo)" }, { SA_ATTR_ID_NODE_RECORD, "Attribute (NodeRecord)" }, { SA_ATTR_ID_PORTINFO_RECORD, "Attribute (PortInfoRecord)" }, { SA_ATTR_ID_SC_MAPTBL_RECORD, "Attribute (SCMappingTableRecord)" }, { SA_ATTR_ID_SWITCHINFO_RECORD, "Attribute (SwitchInfoRecord)" }, { SA_ATTR_ID_LINEAR_FWDTBL_RECORD, "Attribute (LinearForwardingTableRecord)" }, { SA_ATTR_ID_MCAST_FWDTBL_RECORD, "Attribute (MulticastForwardingTableRecord)" }, { SA_ATTR_ID_SMINFO_RECORD, "Attribute (SMInfoRecord)" }, { SA_ATTR_ID_LINK_SPD_WDTH_PAIRS_RECORD, "Attribute (LinkSpeedWidthPairsTableRecord)" }, { SA_ATTR_ID_LINK_RECORD, "Attribute (LinkRecord)" }, { SA_ATTR_ID_SERVICE_RECORD, "Attribute (ServiceRecord)" }, { SA_ATTR_ID_P_KEY_TABLE_RECORD, "Attribute (P_KeyTableRecord)" }, { SA_ATTR_ID_PATH_RECORD, "Attribute (PathRecord)" }, { SA_ATTR_ID_VLARBTABLE_RECORD, "Attribute (VLArbitrationTableRecord)" }, { SA_ATTR_ID_MCMEMBER_RECORD, "Attribute (MulticastMemberRecord)" }, { SA_ATTR_ID_TRACE_RECORD, "Attribute (TraceRecord)" }, { SA_ATTR_ID_MULTIPATH_GID_RECORD, "Attribute (MultiPathRecord)" }, { SA_ATTR_ID_SERVICEASSOCIATION_RECORD, "Attribute (ServiceAssociationRecord)" }, { SA_ATTR_ID_SL2SC_MAPTBL_RECORD, "Attribute (SLtoSCMappingTableRecord)" }, { SA_ATTR_ID_SC2SL_MAPTBL_RECORD, "Attribute (SCtoSLMappingTableRecord)" }, { SA_ATTR_ID_SC_VLNT_MAPTBL_RECORD, "Attribute (SCtoVLNTMappingTableRecord)" }, { SA_ATTR_ID_SC_VLT_MAPTBL_RECORD, "Attribute (SCtoVLTMappingTableRecord)" }, { SA_ATTR_ID_SC_VLR_MAPTBL_RECORD, "Attribute (SCtoVLRMappingTableRecord)" }, { SA_ATTR_ID_PGROUP_FWDTBL_RECORD, "Attribute (PortGroupForwardTableRecord)" }, { SA_ATTR_ID_MULTIPATH_GUID_RECORD, "Attribute (MultipathGUIDRecord)" }, { SA_ATTR_ID_MULTIPATH_LID_RECORD, "Attribute (MultipathLIDRecord)" }, { SA_ATTR_ID_CABLE_INFO_RECORD, "Attribute (CableInfoRecord)" }, { SA_ATTR_ID_VF_INFO_RECORD, "Attribute (VFInfoRecord)" }, { SA_ATTR_ID_PORTGROUP_TABLE_RECORD, "Attribute (PortGroupTableRecord)" }, { SA_ATTR_ID_BUFF_CTRL_TAB_RECORD, "Attribute (BufferControlTableRecord)" }, { SA_ATTR_ID_FABRICINFO_RECORD, "Attribute (FabricInfoRecord)" }, { SA_ATTR_ID_QUARANTINED_NODE_RECORD, "Attribute (QuarantinedNodeRecord)" }, { SA_ATTR_ID_CONGESTION_INFO_RECORD, "Attribute (CongestionInfoRecord)" }, { SA_ATTR_ID_SWITCH_CONG_RECORD, "Attribute (SwitchCongestionRecord)" }, { SA_ATTR_ID_SWITCH_PORT_CONG_RECORD, "Attribute (SwitchPortCongestionRecord)" }, { SA_ATTR_ID_HFI_CONG_RECORD, "Attribute (HFICongestionRecord)" }, { SA_ATTR_ID_HFI_CONG_CTRL_RECORD, "Attribute (HFICongestionControlRecord)" }, { SA_ATTR_ID_INFORM_INFO_RECORD, "Attribute (InformInfoRecord)" }, { 0, NULL } }; static const value_string PM_Attributes[] = { { PM_ATTR_ID_CLASS_PORTINFO, "Attribute (ClassPortInfo)" }, { PM_ATTR_ID_PORT_STATUS, "Attribute (PortStatus)" }, { PM_ATTR_ID_CLEAR_PORT_STATUS, "Attribute (ClearPortStatus)" }, { PM_ATTR_ID_DATA_PORT_COUNTERS, "Attribute (DataPortCounters)" }, { PM_ATTR_ID_ERROR_PORT_COUNTERS, "Attribute (ErrorPortCounters)" }, { PM_ATTR_ID_ERROR_INFO, "Attribute (ErrorInfo)" }, { 0, NULL } }; static const value_string PA_Attributes[] = { { PA_ATTR_ID_CLASS_PORTINFO, "Attribute (ClassPortInfo)" }, { PA_ATTR_ID_GET_GRP_LIST, "Attribute (GetGroupList)" }, { PA_ATTR_ID_GET_GRP_INFO, "Attribute (GetGroupInfo)" }, { PA_ATTR_ID_GET_GRP_CFG, "Attribute (GetGroupConfig)" }, { PA_ATTR_ID_GET_PORT_CTRS, "Attribute (GetPortCounters)" }, { PA_ATTR_ID_CLR_PORT_CTRS, "Attribute (ClearPortCounters)" }, { PA_ATTR_ID_CLR_ALL_PORT_CTRS, "Attribute (ClearAllPortCounters)" }, { PA_ATTR_ID_GET_PM_CFG, "Attribute (GetPerfMgmtConfig)" }, { PA_ATTR_ID_FREEZE_IMAGE, "Attribute (FreezeImage)" }, { PA_ATTR_ID_RELEASE_IMAGE, "Attribute (ReleaseImage)" }, { PA_ATTR_ID_RENEW_IMAGE, "Attribute (RenewImage)" }, { PA_ATTR_ID_GET_FOCUS_PORTS, "Attribute (GetFocusPorts)" }, { PA_ATTR_ID_GET_IMAGE_INFO, "Attribute (GetImageInfo)" }, { PA_ATTR_ID_MOVE_FREEZE_FRAME, "Attribute (MoveFreezeFrame)" }, { PA_ATTR_ID_GET_VF_LIST, "Attribute (GetVFList)" }, { PA_ATTR_ID_GET_VF_INFO, "Attribute (GetVFInfo)" }, { PA_ATTR_ID_GET_VF_CONFIG, "Attribute (GetVFConfig)" }, { PA_ATTR_ID_GET_VF_PORT_CTRS, "Attribute (GetVFPortCounters)" }, { PA_ATTR_ID_CLR_VF_PORT_CTRS, "Attribute (ClearVFPortCounters)" }, { PA_ATTR_ID_GET_VF_FOCUS_PORTS, "Attribute (GetVFFocusPorts)" }, { 0, NULL } }; /* Methods */ #define METHOD_GET 0x01 #define METHOD_SET 0x02 #define METHOD_SEND 0x03 #define METHOD_TRAP 0x05 #define METHOD_REPORT 0x06 #define METHOD_TRAPREPRESS 0x07 #define METHOD_GETTABLE 0x12 #define METHOD_GETTRACETABLE 0x13 #define METHOD_GETMULTI 0x14 #define METHOD_DELETE 0x15 #define METHOD_GET_RESP 0x81 #define METHOD_REPORT_RESP 0x86 #define METHOD_GETTABLE_RESP 0x92 #define METHOD_GETTRACETABLE_RESP 0x93 #define METHOD_GETMULTI_RESP 0x94 #define METHOD_DELETE_RESP 0x95 static const value_string Methods[] = { { METHOD_GET, "Get()" }, { METHOD_GET_RESP, "GetResp()" }, { METHOD_SET, "Set()" }, { METHOD_SEND, "Send()" }, { METHOD_TRAP, "Trap()" }, { METHOD_REPORT, "Report()" }, { METHOD_REPORT_RESP, "ReportResp()" }, { METHOD_TRAPREPRESS, "TrapRepress()" }, { METHOD_GETTABLE, "GetTable()" }, { METHOD_GETTABLE_RESP, "GetTableResp()" }, { METHOD_GETTRACETABLE, "GetTraceTable()" }, { METHOD_GETTRACETABLE_RESP, "GetTraceTableResp()" }, { METHOD_GETMULTI, "GetMulti()" }, { METHOD_GETMULTI_RESP, "GetMultiResp()" }, { METHOD_DELETE, "Delete()" }, { METHOD_DELETE_RESP, "DeleteResp()" }, { 0, NULL } }; static const value_string SUBM_Methods[] = { { METHOD_GET, "SubnGet(" }, { METHOD_SET, "SubnSet(" }, { METHOD_GET_RESP, "SubnGetResp(" }, { METHOD_TRAP, "SubnTrap(" }, { METHOD_TRAPREPRESS, "SubnTrapRepress(" }, { 0, NULL } }; static const value_string SUBA_Methods[] = { { METHOD_GET, "SubnAdmGet(" }, { METHOD_GET_RESP, "SubnAdmGetResp(" }, { METHOD_SET, "SubnAdmSet(" }, { METHOD_REPORT, "SubnAdmReport(" }, { METHOD_REPORT_RESP, "SubnAdmReportResp(" }, { METHOD_GETTABLE, "SubnAdmGetTable(" }, { METHOD_GETTABLE_RESP, "SubnAdmGetTableResp(" }, { METHOD_GETTRACETABLE, "SubnAdmGetTraceTable(" }, { METHOD_GETMULTI, "SubnAdmGetMulti(" }, { METHOD_GETMULTI_RESP, "SubnAdmGetMultiResp(" }, { METHOD_DELETE, "SubnAdmDelete(" }, { METHOD_DELETE_RESP, "SubnAdmDeleteResp(" }, { 0, NULL } }; static const value_string PM_Methods[] = { { METHOD_GET, "PerfGet(" }, { METHOD_SET, "PerfSet(" }, { METHOD_GET_RESP, "PerfGetResp(" }, { 0, NULL } }; static const value_string PA_Methods[] = { { METHOD_GET, "PerfAdmGet(" }, { METHOD_SET, "PerfAdmSet(" }, { METHOD_GET_RESP, "PerfAdmGetResp(" }, { METHOD_GETTABLE, "PerfAdmGetTable(" }, { METHOD_GETTABLE_RESP, "PerfAdmGetTableResp(" }, { 0, NULL } }; /* RMPP Types */ #define RMPP_ILLEGAL 0 #define RMPP_DATA 1 #define RMPP_ACK 2 #define RMPP_STOP 3 #define RMPP_ABORT 4 static const value_string RMPP_Packet_Types[] = { { RMPP_ILLEGAL, "Illegal RMPP Type (0)! " }, { RMPP_DATA, "RMPP (DATA)" }, { RMPP_ACK, "RMPP (ACK)" }, { RMPP_STOP, "RMPP (STOP)" }, { RMPP_ABORT, "RMPP (ABORT)" }, { 0, NULL } }; static const value_string RMPP_Status[] = { { 0, " (Normal)" }, { 1, " (Resources Exhausted)" }, { 118, " (Total Time Too Long)" }, { 119, " (Inconsistent Last and PayloadLength)" }, { 120, " (Inconsistent First and Segment Number)" }, { 121, " (Bad RMPPType)" }, { 122, " (NewWindowLast Too Small)" }, { 123, " (SegmentNumber Too Big)" }, { 124, " (Illegal Status)" }, { 125, " (Unsupported Version)" }, { 126, " (Too Many Retries)" }, { 127, " (Unspecified - Unknown Error Code on ABORT)" }, { 0, NULL } }; /* MAD_t * Structure to hold information from the common MAD header. * This is necessary because the MAD header contains information which significantly changes the dissection algorithm. */ #define STL_MAX_MAD_PAYLOAD 2048 typedef struct _MAD { guint8 BaseVersion; guint8 MgmtClass; guint8 ClassVersion; guint8 Method; guint16 Status; /* D = bit 15 when DR */ guint8 HopPointer; /* Reserved in DR MADs */ guint8 HopCount; /* Reserved in DR MADs */ guint64 TransactionID; guint16 AttributeID; guint16 Reserved2; guint32 AttributeModifier; } MAD_t; #define STL_MAX_RMPP_PAYLOAD 2036 #define RMPP_FLAG_LAST_MASK 0x04 #define RMPP_FLAG_LAST_SHIFT 2 #define RMPP_FLAG_FIRST_MASK 0x02 #define RMPP_FLAG_FIRST_SHIFT 1 #define RMPP_FLAG_ACTIVE_MASK 0x01 #define RMPP_FLAG_ACTIVE_SHIFT 0 typedef struct _RMPP { guint8 Version; guint8 Type; guint8 resptime_flags; guint8 Status; guint32 SegmentNumber; guint32 PayloadLength; } RMPP_t; #define STL_MAX_SA_PA_PAYLOAD 1992 typedef struct _SA_HEADER { guint64 SM_Key; guint16 AttributeOffset; guint16 Reserved; guint64 ComponentMask; } SA_HEADER_t, PA_HEADER_t; /* Trap Type/Descriptions for dissection */ static const value_string NoticeType[] = { { 0, "Fatal" }, { 1, "Urgent" }, { 2, "Security" }, { 3, "SM" }, { 4, "Info" }, { 0, NULL } }; static const value_string Trap_Description[] = { { 64, " (Informational) is now in service" }, { 65, " (Informational) is out of service" }, { 66, " (Informational) New Multicast Group with multicast address is now created" }, { 67, " (Informational) Multicast Group with multicast address is now deleted" }, { 68, " (Informational) Paths indicated by and are no longer valid" }, { 69, " (Informational) Paths indicated by and have been recomputed" }, { 128, " (Urgent) Link State of at least one port of switch at has changed" }, { 129, " (Urgent) Local Link Integrity threshold reached at " }, { 130, " (Urgent) Excessive Buffer OVerrun threshold reached at " }, { 131, " (Urgent) Flow Control Update watchdog timer expired at " }, { 144, " (Informational) CapMask, NodeDesc, LinkWidthEnabled or LinkSpeedEnabled at has been modified" }, { 145, " (Informational) SystemImageGUID at has been modified. New value is " }, { 256, " (Security) Bad M_Key, from attempted with and " }, { 257, " (Security) Bad P_Key, from to on " }, { 258, " (Security) Bad Q_Key, from to on " }, { 259, " (Security) Bad P_Key, from to on at switch " }, { 2048, " (Informational) LinkWidth.Active, LinkWidthDowngrade.TxActive or LinkWidthDowngrade.RxActive of at least one port of switch at has changed" }, { 0, NULL } }; static const value_string RoutingMode[] = { { 0x00, "No change" }, { 0x01, "Linear routing algorithm" }, { 0x02, "Hierarchical routing algorithm" }, { 0, NULL } }; static const value_string AdaptiveRoutingAlgorithm[] = { { 0x0, "Random" }, { 0x1, "Greedy" }, { 0x2, "Random Greedy" }, { 0, NULL } }; static const value_string PortType[] = { { 0, "Unknown" }, { 1, "Disconnected" }, { 2, "Fixed" }, { 3, "Variable" }, { 4, "QSFP" }, { 5, "SiPh_x16" }, { 6, "Reserved" }, { 7, "Reserved" }, { 8, "Reserved" }, { 9, "Reserved" }, { 10, "Reserved" }, { 11, "Reserved" }, { 12, "Reserved" }, { 13, "Reserved" }, { 14, "Reserved" }, { 15, "Reserved" }, { 0, NULL } }; static const value_string NodeType[] = { { 1, "FI" }, { 2, "Switch" }, { 0, NULL } }; static const value_string LinkDownReason[] = { { 0, "No specified reason" }, { 1, "Receive Error 0" }, { 2, "Bad packet length" }, { 3, "Packet too long" }, { 4, "Packet too short" }, { 5, "Bad SLID" }, { 6, "Bad DLID" }, { 7, "Bad L2" }, { 8, "Bad SC" }, { 9, "Receive Error 8" }, { 10, "Bad mid tail" }, { 11, "Receive Error 10" }, { 12, "Preempt error" }, { 13, "Preempt VL15" }, { 14, "Bad VL marker" }, { 15, "Receive Error 14" }, { 16, "Receive Error 15" }, { 17, "Bad head dist" }, { 18, "Bad tail dist" }, { 19, "Bad ctrl dist" }, { 20, "Bad credit ack" }, { 21, "Unsupported VL marker" }, { 22, "Bad preempt" }, { 23, "Bad control flit" }, { 24, "Exceed multicast limit" }, { 25, "Receive Error 24" }, { 26, "Receive Error 25" }, { 27, "Receive Error 26" }, { 28, "Receive Error 27" }, { 29, "Receive Error 28" }, { 30, "Receive Error 29" }, { 31, "Receive Error 30" }, { 32, "Excessive buffer overrun" }, { 33, "Unknown (locally initiated)" }, { 35, "Reboot" }, { 36, "Neighbor Unknown (not locally initiated)" }, { 39, "FM initiated bounce" }, { 40, "Link outside speed policy" }, { 41, "link downgrade outside" }, { 49, "Disconnected" }, { 50, "Local media not installed" }, { 51, "Not installed" }, { 52, "Chassis config" }, { 54, "End to end not installed" }, { 56, "Power policy" }, { 57, "Linkspeed policy" }, { 58, "Linkwidth policy" }, { 60, "Switch management" }, { 61, "Sma disabled" }, { 63, "Transient" }, { 0, NULL } }; static const value_string LinkInitReason[] = { { 0, "No Error" }, { 1, "Link just came up" }, { 2, "FM ignoring flapping port" }, { 8, "FM ignoring, width or speed, outside FM configured policy" }, { 9, "FM ignoring, quarantined for security" }, { 10, "FM ignoring, link has insufficient capabilities for FM configuration" }, { 0, NULL }, }; static const value_string DiagCode[] = { { 0x0000, "Function Ready" }, { 0x0001, "Performing Self Test" }, { 0x0002, "Initializing" }, { 0x0003, "Soft Error - Function has non-fatal error" }, { 0x0004, "Hard Error - Function has fatal error" }, { 0, NULL } }; static const value_string PortFlitDistanceMode[] = { { 0x0000, "No State Change" }, { 0x0001, "STL1 Mode" }, { 0x0002, "STL2 Mode" }, { 0, NULL } }; static const value_string PortState[] = { { 0x0000, "No State Change" }, { 0x0001, "Down (includes failed links)" }, { 0x0002, "Initialized" }, { 0x0003, "Armed" }, { 0x0004, "Active" }, { 0, NULL } }; static const value_string PortPhysicalState[] = { { 0x0000, "No State Change" }, { 0x0002, "Polling" }, { 0x0003, "Disabled" }, { 0x0004, "PortConfigurationTraining" }, { 0x0005, "LinkUp" }, { 0x0006, "LinkErrorRecovery" }, { 0x0009, "Offline" }, { 0x000B, "Test" }, { 0, NULL } }; static const value_string OfflineDisabledReason[] = { { 0x0000, "No reason available" }, { 0x0001, "Disconnected" }, { 0x0002, "Local Media not Installed" }, { 0x0003, "Not Installed" }, { 0x0004, "Chassis Config" }, { 0x0005, "Reserved" }, { 0x0006, "End-to-end not Installed" }, { 0x0007, "Reserved" }, { 0x0008, "Power Policy" }, { 0x0009, "Link Speed Policy" }, { 0x000A, "Link Width Policy" }, { 0x000B, "Reserved" }, { 0x000C, "Switch Mgmt" }, { 0x000D, "SMA Disabled" }, { 0x000E, "Reserved" }, { 0x000F, "Transient" }, { 0, NULL } }; static const value_string MTU[] = { { 0x0001, "256" }, /* IB_MTU_256 */ { 0x0002, "512" }, /* IB_MTU_512 */ { 0x0003, "1024" }, /* IB_MTU_1024 */ { 0x0004, "2048" }, /* IB_MTU_2048 */ { 0x0005, "4096" }, /* IB_MTU_4096 */ { 0x0006, "8192" }, /* STL_MTU_8192 */ { 0x0007, "10240" }, /* STL_MTU_10240 */ { 0, NULL } }; static const value_string Rate[] = { { 11, "12.5 Gbps" }, /* IB_STATIC_RATE_14G */ { 15, "25 Gbps" }, /* IB_STATIC_RATE_25G */ { 7, "37.5 Gbps" }, /* IB_STATIC_RATE_40G */ { 12, "50 Gbps" }, /* IB_STATIC_RATE_56G */ { 9, "75 Gbps" }, /* IB_STATIC_RATE_80G */ { 16, "100 Gbps" }, /* IB_STATIC_RATE_100G */ { 17, "200 Gbps" }, /* IB_STATIC_RATE_200G */ { 0, NULL } }; static const true_false_string tfs_PKeyMembershipType = { "Full", "Limited" }; static const value_string MADAttrModSectionVLarb[] = { { 0, "Arbitration Low Weight Elements" }, { 1, "Arbitration High Weight Elements" }, { 2, "Preemption Weight Elements" }, { 3, "Preemption Matrix" }, { 0, NULL } }; static const value_string MADAttrModSectionVLarb_short[] = { { 0, "Low Weight" }, { 1, "High Weight" }, { 2, "Preemption Weight" }, { 3, "Preemption Matrix" }, { 0, NULL } }; static const value_string SA_SC_VLx[] = { { SA_ATTR_ID_SC_VLNT_MAPTBL_RECORD, "nt" }, { SA_ATTR_ID_SC_VLT_MAPTBL_RECORD, "t" }, { SA_ATTR_ID_SC_VLR_MAPTBL_RECORD, "r" }, { 0, NULL } }; static const value_string SM_SC_VLx[] = { { SM_ATTR_ID_SC_VLNT_MAPPING_TABLE, "nt" }, { SM_ATTR_ID_SC_VLT_MAPPING_TABLE, "t" }, { SM_ATTR_ID_SC_VLR_MAPPING_TABLE, "r" }, { 0, NULL } }; static const value_string GroupTablePosition[] = { { 0, "1-64" }, { 1, "65-128" }, { 2, "129-192" }, { 3, "193-256" }, { 0, NULL }, }; static const value_string AdaptiveRoutingThreshold[] = { { 0, "Default tuning" }, { 1, "Consumed nearly all of the buffering(or Tags) for a VL (~100%)" }, { 2, "90%" }, { 3, "80%" }, { 4, "70%" }, { 5, "65%" }, { 6, "60%" }, { 7, "55%" }, { 0, NULL } }; static const value_string LinkQualityIndicator[] = { { 0, "Down" }, { 1, "Bad" }, { 2, "Poor" }, { 3, "Good" }, { 4, "Very Good" }, { 5, "Excellent" }, { 6, "Reserved" }, { 7, "Reserved" }, { 0, NULL }, }; /*static const value_string LinkQualityIndicatorLong[] = { { 0, "link down" }, { 1, "working far below acceptable link quality, recommend immediate corrective action" }, { 2, "working below acceptable link quality, recommend consider timely corrective action" }, { 3, "working on low end of acceptable link quality, recommended to consider corrective action on next maintenance window" }, { 4, "working slightly below preferred link quality, but no action required" }, { 5, "working at or above preferred link quality, no action needed" }, { 6, "Reserved" }, { 7, "Reserved" }, { 0, NULL }, };*/ static const true_false_string tfs_NeighborFWAuthenBypass = { "Not Authenticated", "Authenticated" }; static const true_false_string tfs_SwPortCongSetting_CtrlType = { "Credit Starvation", "Packet Marketing" }; static const true_false_string tfs_clear_dont_clear = { "Clear", "Don't Clear" }; static const value_string MAD_Status_InvalidField[] = { { 0, "No Invalid Fields" }, { 1, "Bad Version" }, { 2, "Method not supported" }, { 3, "The method/attribute combination is not supported" }, { 4, "Reserved" }, { 5, "Reserved" }, { 6, "Reserved" }, { 7, "One or more fields in the attribute or attribute modifier contain an invalid value" }, { 0, NULL } }; static const true_false_string tfs_busy_not_busy = { "Busy", "Not Busy" }; static const true_false_string tfs_redirect_no_redirect = { "Redirect", "No Redirect" }; static const value_string FocusPortFlags[] = { { 0, "OK" }, { 1, "PMA Ignore" }, { 2, "PMA Failure" }, { 3, "Topo Failure" }, { 0, NULL }, }; #define PM_UTIL_BUCKETS 10 #define PM_ERR_BUCKETS 5 /* Wireshark ID */ static gint proto_opa_mad = -1; /* Variables to hold expansion values between packets */ static gint ett_payload = -1; static gint ett_sm_lid = -1; static gint ett_sm_dr = -1; static gint ett_sa = -1; static gint ett_pm = -1; static gint ett_pa = -1; static gint ett_mad = -1; static gint ett_mad_status = -1; static gint ett_mad_attributemod = -1; static gint ett_rmpp = -1; static gint ett_rmpp_fragment = -1; static gint ett_rmpp_fragments = -1; static gint ett_rmpp_sa_record = -1; /* Common */ static gint ett_noticestraps = -1; static gint ett_datadetails = -1; static gint ett_datadetails_trap259datavalid = -1; static gint ett_informinfo = -1; static gint ett_classportinfo = -1; static gint ett_classportinfo_redirect = -1; static gint ett_classportinfo_trap = -1; /* SM */ static gint ett_nodedescription = -1; static gint ett_nodeinfo = -1; static gint ett_switchinfo = -1; static gint ett_switchinfo_switchcapabilitymask = -1; static gint ett_portinfo = -1; static gint ett_portinfo_vl = -1; static gint ett_portinfo_link = -1; static gint ett_portinfo_portmode = -1; static gint ett_portinfo_flitcontrol = -1; static gint ett_portinfo_porterroraction = -1; static gint ett_portinfo_neighbormtu = -1; static gint ett_portinfo_xmitq = -1; static gint ett_portinfo_capmask = -1; static gint ett_portinfo_capmask3 = -1; static gint ett_portstates = -1; static gint ett_pkeytable = -1; static gint ett_pkeytable_block = -1; static gint ett_sltoscmapping = -1; static gint ett_sltoscmapping_block = -1; static gint ett_sctoscmapping = -1; static gint ett_sctoscmapping_block = -1; static gint ett_sctoslmapping = -1; static gint ett_sctoslmapping_block = -1; static gint ett_sctovlxmappingtable = -1; static gint ett_sctovlxmappingtable_block = -1; static gint ett_vlarbitrationtable = -1; static gint ett_vlarbitrationtable_port = -1; static gint ett_linearforwardingtable = -1; static gint ett_linearforwardingtable_block = -1; static gint ett_multicastforwardingtable = -1; static gint ett_multicastforwardingtable_block = -1; static gint ett_portgroupforwardingtable = -1; static gint ett_portgroupforwardingtable_block = -1; static gint ett_portgrouptable = -1; static gint ett_portgrouptable_block = -1; static gint ett_sminfo = -1; static gint ett_ledinfo = -1; static gint ett_cableinfo = -1; static gint ett_aggregate = -1; static gint ett_buffercontroltable = -1; static gint ett_congestioninfo = -1; static gint ett_switchcongestionlog = -1; static gint ett_switchcongestionlog_entry = -1; static gint ett_switchcongestionsetting = -1; static gint ett_switchportcongestionsetting = -1; static gint ett_switchportcongestionsetting_port = -1; static gint ett_hficongestionlog = -1; static gint ett_hficongestionlog_entry = -1; static gint ett_hficongestionsetting = -1; static gint ett_hficongestioncontroltable = -1; static gint ett_hficongestioncontroltable_block = -1; /* SA */ static gint ett_portinforecord_linkdownreason = -1; static gint ett_portinforecord_linkdownreason_entry = -1; static gint ett_scmappingrecord = -1; static gint ett_lftrecord = -1; static gint ett_linkrecord = -1; static gint ett_servicerecord = -1; static gint ett_pathrecord = -1; static gint ett_pathrecord_dgid = -1; static gint ett_pathrecord_sgid = -1; static gint ett_mcmemberrecord = -1; static gint ett_tracerecord = -1; static gint ett_multipathrecord_gid = -1; static gint ett_multipathrecord_guid = -1; static gint ett_multipathrecord_lid = -1; static gint ett_cableinforecord = -1; static gint ett_serviceassocrecord = -1; static gint ett_sctoslmappingtablerecord = -1; static gint ett_portgroupforwardingtablerecord = -1; static gint ett_vfinforecord = -1; static gint ett_quarantinednoderecord = -1; static gint ett_fabricinforecord = -1; /* PM */ static gint ett_portstatus = -1; static gint ett_portstatus_vl = -1; static gint ett_clearportstatus = -1; static gint ett_clearportstatus_counterselectmask = -1; static gint ett_dataportcounters = -1; static gint ett_dataportcounters_port = -1; static gint ett_dataportcounters_vl = -1; static gint ett_errorportcounters = -1; static gint ett_errorportcounters_port = -1; static gint ett_errorportinfo = -1; static gint ett_errorportinfoport = -1; static gint ett_errorportinfo_portrcverrorinfo = -1; static gint ett_errorportinfo_excessivebufferoverruninfo = -1; static gint ett_errorportinfo_portxmitconstrainterrorinfo = -1; static gint ett_errorportinfo_portrcvconstrainterrorinfo = -1; static gint ett_errorportinfo_portrcvswitchrelayerrorinfo = -1; static gint ett_errorportinfo_uncorrectableerrorinfo = -1; static gint ett_errorportinfo_fmconfigerrorinfo = -1; /* PA */ static gint ett_getgrouplist = -1; static gint ett_getgroupinfo = -1; static gint ett_getgroupinfoutilstats = -1; static gint ett_getgroupinfoutilbuckets = -1; static gint ett_getgroupinfoerrorsummary = -1; static gint ett_getgroupinfoerrintegritybucket = -1; static gint ett_getgroupinfoerrcongestionbucket = -1; static gint ett_getgroupinfoerrsmacongestionbucket = -1; static gint ett_getgroupinfoerrbubblebucket = -1; static gint ett_getgroupinfoerrsecuritybucket = -1; static gint ett_getgroupinfoerrroutingbucket = -1; static gint ett_getportcounters = -1; static gint ett_clearportcounters = -1; static gint ett_clearportcounters_counterselectmask = -1; static gint ett_clearallportcounters = -1; static gint ett_clearallportcounters_counterselectmask = -1; static gint ett_pmconfig = -1; static gint ett_getgroupconfig = -1; static gint ett_getgroupconfigport = -1; static gint ett_movefreezeframeold = -1; static gint ett_movefreezeframenew = -1; static gint ett_getfocusports = -1; static gint ett_getfocusportsport = -1; static gint ett_getimageinfo = -1; static gint ett_getimageinfosm = -1; static gint ett_getvflist = -1; static gint ett_getvfinfo = -1; static gint ett_getvfinfoutilstats = -1; static gint ett_getvfinfoutilbuckets = -1; static gint ett_getvfinfoerrorsummary = -1; static gint ett_getvfinfoerrintegritybucket = -1; static gint ett_getvfinfoerrcongestionbucket = -1; static gint ett_getvfinfoerrsmacongestionbucket = -1; static gint ett_getvfinfoerrbubblebucket = -1; static gint ett_getvfinfoerrsecuritybucket = -1; static gint ett_getvfinfoerrroutingbucket = -1; static gint ett_getvfconfig = -1; static gint ett_getvfconfigport = -1; static gint ett_getvffocusports = -1; static gint ett_getvffocusportsport = -1; static gint ett_getvfportcounters = -1; static gint ett_clearvfportcounters = -1; static gint ett_clearvfportcounters_counterselectmask = -1; /* Reserved Fields */ static gint hf_opa_reserved8 = -1; static gint hf_opa_reserved16 = -1; static gint hf_opa_reserved24 = -1; static gint hf_opa_reserved32 = -1; static gint hf_opa_reserved64 = -1; /* opa_MAD Dissector */ static gint hf_opa_etype = -1; static gint hf_opa_etype_reserved16 = -1; /* SM Header - Lid Routed*/ static gint hf_opa_sm_lid = -1; static gint hf_opa_sm_m_key = -1; /* SM Header - Directed Route */ static gint hf_opa_sm_dr = -1; static gint hf_opa_sm_dr_slid = -1; static gint hf_opa_sm_dr_dlid = -1; static gint hf_opa_sm_dr_initial_path = -1; static gint hf_opa_sm_dr_return_path = -1; static gint hf_opa_sm_dr_reserved64 = -1; /* SA Header */ static gint hf_opa_sa = -1; static gint hf_opa_sa_sm_key = -1; static gint hf_opa_sa_attribute_offset = -1; static gint hf_opa_sa_component_mask = -1; /* PM Header / PA Header */ static gint hf_opa_pm = -1; static gint hf_opa_pa = -1; static gint hf_opa_pa_sm_key = -1; static gint hf_opa_pa_attribute_offset = -1; static gint hf_opa_pa_component_mask = -1; /* Other Vendor Header */ static gint hf_opa_vendor = -1; static gint hf_opa_application = -1; static gint hf_opa_reservedmclass = -1; static gint hf_opa_unknown = -1; /* MAD Header */ static gint hf_opa_mad = -1; static gint hf_opa_mad_base_version = -1; static gint hf_opa_mad_mgmt_class = -1; static gint hf_opa_mad_class_version = -1; static gint hf_opa_mad_method = -1; static gint hf_opa_mad_status = -1; static gint hf_opa_mad_status_DR_D = -1; static gint hf_opa_mad_status_DR_status = -1; static gint hf_opa_mad_status_DR_Hop_Pointer = -1; static gint hf_opa_mad_status_DR_Hop_Count = -1; static gint hf_opa_mad_status_NM_ClassSpecific = -1; static gint hf_opa_mad_status_NM_reserved1 = -1; static gint hf_opa_mad_status_NM_InvalidField = -1; static gint hf_opa_mad_status_NM_RedirectRqrd = -1; static gint hf_opa_mad_status_NM_Busy = -1; static int * const _mad_status[] = { &hf_opa_mad_status_NM_ClassSpecific, &hf_opa_mad_status_NM_reserved1, &hf_opa_mad_status_NM_InvalidField, &hf_opa_mad_status_NM_RedirectRqrd, &hf_opa_mad_status_NM_Busy, NULL }; static gint hf_opa_mad_transaction_id = -1; static gint hf_opa_mad_attribute_id = -1; static gint hf_opa_attribute_modifier = -1; static gint hf_opa_attribute_modifier_A = -1; static gint hf_opa_attribute_modifier_A2 = -1; static gint hf_opa_attribute_modifier_A3 = -1; static gint hf_opa_attribute_modifier_A4 = -1; static gint hf_opa_attribute_modifier_A5 = -1; static gint hf_opa_attribute_modifier_A6 = -1; static gint hf_opa_attribute_modifier_B = -1; static gint hf_opa_attribute_modifier_B2 = -1; static gint hf_opa_attribute_modifier_B3 = -1; static gint hf_opa_attribute_modifier_B4 = -1; static gint hf_opa_attribute_modifier_B5 = -1; static gint hf_opa_attribute_modifier_E = -1; static gint hf_opa_attribute_modifier_I = -1; static gint hf_opa_attribute_modifier_L = -1; static gint hf_opa_attribute_modifier_NP = -1; static gint hf_opa_attribute_modifier_NB = -1; static gint hf_opa_attribute_modifier_N2 = -1; static gint hf_opa_attribute_modifier_P = -1; static gint hf_opa_attribute_modifier_P2 = -1; static gint hf_opa_attribute_modifier_P3 = -1; static gint hf_opa_attribute_modifier_S = -1; static gint hf_opa_attribute_modifier_S2 = -1; static gint hf_opa_attribute_modifier_Y = -1; static int * const _attribute_modifier_Nps2AP[] = { &hf_opa_attribute_modifier_NP, &hf_opa_attribute_modifier_S2, &hf_opa_attribute_modifier_A, &hf_opa_attribute_modifier_P, NULL }; static int * const _attribute_modifier_NpS2P[] = { &hf_opa_attribute_modifier_NP, &hf_opa_attribute_modifier_S2, &hf_opa_attribute_modifier_P, NULL }; static int * const _attribute_modifier_NpAP[] = { &hf_opa_attribute_modifier_NP, &hf_opa_attribute_modifier_A, &hf_opa_attribute_modifier_P, NULL }; static int * const _attribute_modifier_NbP2B[] = { &hf_opa_attribute_modifier_NB, &hf_opa_attribute_modifier_P2, &hf_opa_attribute_modifier_B, NULL }; static int * const _attribute_modifier_NbA2B2IE[] = { &hf_opa_attribute_modifier_NB, &hf_opa_attribute_modifier_A2, &hf_opa_attribute_modifier_B2, &hf_opa_attribute_modifier_I, &hf_opa_attribute_modifier_E, NULL }; static int * const _attribute_modifier_NpSAP[] = { &hf_opa_attribute_modifier_NP, &hf_opa_attribute_modifier_S, &hf_opa_attribute_modifier_A, &hf_opa_attribute_modifier_P, NULL }; static int * const _attribute_modifier_NbA3B3[] = { &hf_opa_attribute_modifier_NB, &hf_opa_attribute_modifier_A3, &hf_opa_attribute_modifier_B3, NULL }; static int * const _attribute_modifier_NbP3A4B4[] = { &hf_opa_attribute_modifier_NB, &hf_opa_attribute_modifier_P3, &hf_opa_attribute_modifier_A4, &hf_opa_attribute_modifier_B4, NULL }; static int * const _attribute_modifier_A5LP[] = { &hf_opa_attribute_modifier_A5, &hf_opa_attribute_modifier_L, &hf_opa_attribute_modifier_P, NULL }; static int * const _attribute_modifier_NbYAP[] = { &hf_opa_attribute_modifier_NB, &hf_opa_attribute_modifier_Y, &hf_opa_attribute_modifier_A, &hf_opa_attribute_modifier_P, NULL }; static int * const _attribute_modifier_NpP[] = { &hf_opa_attribute_modifier_NP, &hf_opa_attribute_modifier_P, NULL }; static int * const _attribute_modifier_NbP[] = { &hf_opa_attribute_modifier_NB, &hf_opa_attribute_modifier_P, NULL }; static int * const _attribute_modifier_NbP3A6B5[] = { &hf_opa_attribute_modifier_NB, &hf_opa_attribute_modifier_P3, &hf_opa_attribute_modifier_A6, &hf_opa_attribute_modifier_B5, NULL }; /* RMPP Header */ static gint hf_opa_rmpp = -1; static gint hf_opa_rmpp_version = -1; static gint hf_opa_rmpp_type = -1; static gint hf_opa_rmpp_r_resp_time = -1; static gint hf_opa_rmpp_flags_last = -1; static gint hf_opa_rmpp_flags_first = -1; static gint hf_opa_rmpp_flags_active = -1; static gint hf_opa_rmpp_status = -1; static gint hf_opa_rmpp_data1 = -1; static gint hf_opa_rmpp_data2 = -1; static gint hf_opa_rmpp_segment_number = -1; static gint hf_opa_rmpp_payload_length32 = -1; static gint hf_opa_rmpp_new_window_last = -1; /* SA Packets */ /* SA RID */ static gint hf_opa_sa_Lid = -1; static gint hf_opa_sa_EndportLID = -1; static gint hf_opa_sa_PortNum = -1; static gint hf_opa_sa_InputPortNum = -1; static gint hf_opa_sa_OutputPortNum = -1; static gint hf_opa_sa_Port = -1; static gint hf_opa_sa_reserved14 = -1; static gint hf_opa_sa_BlockNum_18b = -1; static gint hf_opa_sa_Position = -1; static gint hf_opa_sa_Position_16b = -1; static gint hf_opa_sa_reserved9 = -1; static gint hf_opa_sa_reserved9_16b = -1; static gint hf_opa_sa_BlockNum_21b = -1; static gint hf_opa_sa_BlockNum_8b = -1; static gint hf_opa_sa_BlockNum_16b = -1; static gint hf_opa_sa_BlockNum_5b = -1; static gint hf_opa_sa_SubscriberLID = -1; static gint hf_opa_sa_Enum = -1; static gint hf_opa_sa_FromLID = -1; static gint hf_opa_sa_FromPort = -1; static gint hf_opa_sa_ServiceID = -1; static gint hf_opa_sa_ServiceLID = -1; static gint hf_opa_sa_ServiceP_Key = -1; static gint hf_opa_sa_ServiceGID = -1; static gint hf_opa_sa_MGID = -1; static gint hf_opa_sa_PortGID = -1; /* Attribute Specfic Fields */ static gint hf_opa_Notice = -1; static gint hf_opa_Notice_IsGeneric = -1; static gint hf_opa_Notice_Type = -1; static gint hf_opa_Notice_ProducerType = -1; static gint hf_opa_Notice_TrapNumber = -1; static gint hf_opa_Notice_VendorID = -1; static gint hf_opa_Notice_DeviceID = -1; static gint hf_opa_Notice_IssuerLID = -1; static gint hf_opa_Notice_IssuerGID = -1; static gint hf_opa_Notice_Toggle = -1; static gint hf_opa_Notice_Count = -1; static gint hf_opa_Notice_ClassDataDetails = -1; static gint hf_opa_Trap = -1; static gint hf_opa_Trap_GID = -1; static gint hf_opa_Trap_LID = -1; static gint hf_opa_Trap_PORTNO = -1; static gint hf_opa_Trap_CAPABILITYMASK = -1; static gint hf_opa_Trap_CAPABILITYMASK3 = -1; static gint hf_opa_Trap_144_reserved = -1; static gint hf_opa_Trap_LinkWidthDowngradeEnabledChange = -1; static gint hf_opa_Trap_LinkSpeecEnabledChange = -1; static gint hf_opa_Trap_LinkWidthEnabledChange = -1; static gint hf_opa_Trap_NodeDescriptionChange = -1; static gint hf_opa_Trap_SystemImageGUID = -1; static gint hf_opa_Trap_DRSLID = -1; static gint hf_opa_Trap_Method = -1; static gint hf_opa_Trap_AttributeID = -1; static gint hf_opa_Trap_AttributeModifier = -1; static gint hf_opa_Trap_MKey = -1; static gint hf_opa_Trap_DRNotice = -1; static gint hf_opa_Trap_DRPathTruncated = -1; static gint hf_opa_Trap_DRHopCount = -1; static gint hf_opa_Trap_DRNoticeReturnPath = -1; static gint hf_opa_Trap_Key = -1; static gint hf_opa_Trap_SL = -1; static gint hf_opa_Trap_SL_reserved = -1; static gint hf_opa_Trap_QP = -1; static gint hf_opa_Trap_DataValid = -1; static gint hf_opa_Trap_DataValid_Lid1 = -1; static gint hf_opa_Trap_DataValid_Lid2 = -1; static gint hf_opa_Trap_DataValid_PKey = -1; static gint hf_opa_Trap_DataValid_SL = -1; static gint hf_opa_Trap_DataValid_QP1 = -1; static gint hf_opa_Trap_DataValid_QP2 = -1; static gint hf_opa_Trap_DataValid_Gid1 = -1; static gint hf_opa_Trap_DataValid_Gid2 = -1; static gint hf_opa_Trap_DataValid_Reserved = -1; static int * const _Trap_DataValid[] = { &hf_opa_Trap_DataValid_Lid1, &hf_opa_Trap_DataValid_Lid2, &hf_opa_Trap_DataValid_PKey, &hf_opa_Trap_DataValid_SL, &hf_opa_Trap_DataValid_QP1, &hf_opa_Trap_DataValid_QP2, &hf_opa_Trap_DataValid_Gid1, &hf_opa_Trap_DataValid_Gid2, &hf_opa_Trap_DataValid_Reserved, NULL }; static gint hf_opa_Trap_PKey = -1; static gint hf_opa_ClassPortInfo = -1; static gint hf_opa_ClassPortInfo_BaseVersion = -1; static gint hf_opa_ClassPortInfo_ClassVersion = -1; static gint hf_opa_ClassPortInfo_CapMask = -1; static gint hf_opa_ClassPortInfo_CapMask2 = -1; static gint hf_opa_ClassPortInfo_RespTimeValue = -1; static gint hf_opa_ClassPortInfo_Redirect_GID = -1; static gint hf_opa_ClassPortInfo_Redirect_TClass = -1; static gint hf_opa_ClassPortInfo_Redirect_SL = -1; static gint hf_opa_ClassPortInfo_Redirect_reserved = -1; static gint hf_opa_ClassPortInfo_Redirect_FlowLabel = -1; static gint hf_opa_ClassPortInfo_Redirect_LID = -1; static gint hf_opa_ClassPortInfo_Redirect_reserved2 = -1; static gint hf_opa_ClassPortInfo_Redirect_QP = -1; static gint hf_opa_ClassPortInfo_Redirect_Q_Key = -1; static gint hf_opa_ClassPortInfo_Trap_GID = -1; static gint hf_opa_ClassPortInfo_Trap_TClass = -1; static gint hf_opa_ClassPortInfo_Trap_reserved = -1; static gint hf_opa_ClassPortInfo_Trap_FlowLabel = -1; static gint hf_opa_ClassPortInfo_Trap_LID = -1; static gint hf_opa_ClassPortInfo_Trap_HopLimit = -1; static gint hf_opa_ClassPortInfo_Trap_QP = -1; static gint hf_opa_ClassPortInfo_Trap_Q_Key = -1; static gint hf_opa_ClassPortInfo_Trap_P_Key = -1; static gint hf_opa_ClassPortInfo_Redirect_P_Key = -1; static gint hf_opa_ClassPortInfo_Trap_SL = -1; static gint hf_opa_ClassPortInfo_Trap_reserved2 = -1; static gint hf_opa_InformInfo = -1; static gint hf_opa_InformInfo_GID = -1; static gint hf_opa_InformInfo_LIDRangeBegin = -1; static gint hf_opa_InformInfo_LIDRangeEnd = -1; static gint hf_opa_InformInfo_IsGeneric = -1; static gint hf_opa_InformInfo_Subscribe = -1; static gint hf_opa_InformInfo_Type = -1; static gint hf_opa_InformInfo_TrapNumber = -1; static gint hf_opa_InformInfo_DeviceID = -1; static gint hf_opa_InformInfo_QPN = -1; static gint hf_opa_InformInfo_reserved = -1; static gint hf_opa_InformInfo_RespTimeValue = -1; static gint hf_opa_InformInfo_ProducerType = -1; static gint hf_opa_InformInfo_VendorID = -1; /* SM */ static gint hf_opa_NodeDescription = -1; static gint hf_opa_NodeDescription_NodeString = -1; static gint hf_opa_NodeInfo = -1; static gint hf_opa_NodeInfo_BaseVersion = -1; static gint hf_opa_NodeInfo_ClassVersion = -1; static gint hf_opa_NodeInfo_NodeType = -1; static gint hf_opa_NodeInfo_NumPorts = -1; static gint hf_opa_NodeInfo_SystemImageGUID = -1; static gint hf_opa_NodeInfo_NodeGUID = -1; static gint hf_opa_NodeInfo_PortGUID = -1; static gint hf_opa_NodeInfo_PartitionCap = -1; static gint hf_opa_NodeInfo_DeviceID = -1; static gint hf_opa_NodeInfo_Revision = -1; static gint hf_opa_NodeInfo_LocalPortNum = -1; static gint hf_opa_NodeInfo_VendorID = -1; static gint hf_opa_SwitchInfo = -1; static gint hf_opa_SwitchInfo_LinearFDBCap = -1; static gint hf_opa_SwitchInfo_MulticastFDBCap = -1; static gint hf_opa_SwitchInfo_LinearFDBTop = -1; static gint hf_opa_SwitchInfo_MulticastFDBTop = -1; static gint hf_opa_SwitchInfo_CollectiveCap = -1; static gint hf_opa_SwitchInfo_CollectiveTop = -1; static gint hf_opa_SwitchInfo_IPAddrIPv6 = -1; static gint hf_opa_SwitchInfo_IPAddrIPv4 = -1; static gint hf_opa_SwitchInfo_LifeTimeValue = -1; static gint hf_opa_SwitchInfo_PortStateChange = -1; static gint hf_opa_SwitchInfo_reserved2 = -1; static gint hf_opa_SwitchInfo_PartitionEnforcementCap = -1; static gint hf_opa_SwitchInfo_PortGroupCap = -1; static gint hf_opa_SwitchInfo_PortGroupTop = -1; static gint hf_opa_SwitchInfo_SupportedRoutingMode = -1; static gint hf_opa_SwitchInfo_EnabledRoutingMode = -1; static gint hf_opa_SwitchInfo_reserved3 = -1; static gint hf_opa_SwitchInfo_EnhancedPortZero = -1; static gint hf_opa_SwitchInfo_reserved4 = -1; static gint hf_opa_SwitchInfo_reserved5 = -1; static gint hf_opa_SwitchInfo_CollectiveMask = -1; static gint hf_opa_SwitchInfo_MulticastMask = -1; static gint hf_opa_SwitchInfo_AdaptiveRoutingEnable = -1; static gint hf_opa_SwitchInfo_AdaptiveRoutingPause = -1; static gint hf_opa_SwitchInfo_AdaptiveRoutingAlgorithm = -1; static gint hf_opa_SwitchInfo_AdaptiveRoutingFrequency = -1; static gint hf_opa_SwitchInfo_AdaptiveRoutingLostRoutesOnly = -1; static gint hf_opa_SwitchInfo_AdaptiveRoutingThreshold = -1; static gint hf_opa_SwitchInfo_reserved6 = -1; static int * const _SwitchInfo_AdaptiveRouting[] = { &hf_opa_SwitchInfo_AdaptiveRoutingEnable, &hf_opa_SwitchInfo_AdaptiveRoutingPause, &hf_opa_SwitchInfo_AdaptiveRoutingAlgorithm, &hf_opa_SwitchInfo_AdaptiveRoutingFrequency, &hf_opa_SwitchInfo_AdaptiveRoutingLostRoutesOnly, &hf_opa_SwitchInfo_AdaptiveRoutingThreshold, &hf_opa_SwitchInfo_reserved6, NULL }; static gint hf_opa_SwitchInfo_SwitchCapabilityMask = -1; static gint hf_opa_SwitchInfo_SwitchCapabilityMask_reserved = -1; static gint hf_opa_SwitchInfo_SwitchCapabilityMask_IsAddrRangeConfigSupported = -1; static gint hf_opa_SwitchInfo_SwitchCapabilityMask_reserved2 = -1; static gint hf_opa_SwitchInfo_SwitchCapabilityMask_IsAdaptiveRoutingSupported = -1; static int * const _SwitchInfo_SwitchCapabilityMask[] = { &hf_opa_SwitchInfo_SwitchCapabilityMask_reserved, &hf_opa_SwitchInfo_SwitchCapabilityMask_IsAddrRangeConfigSupported, &hf_opa_SwitchInfo_SwitchCapabilityMask_reserved2, &hf_opa_SwitchInfo_SwitchCapabilityMask_IsAdaptiveRoutingSupported, NULL }; static gint hf_opa_SwitchInfo_CapabilityMaskCollectives = -1; static gint hf_opa_PortInfo = -1; static gint hf_opa_PortInfo_LID = -1; static gint hf_opa_PortInfo_FlowControlMask = -1; static gint hf_opa_PortInfo_VL_PreemptCap = -1; static gint hf_opa_PortInfo_VL_reserved = -1; static gint hf_opa_PortInfo_VL_Cap = -1; static gint hf_opa_PortInfo_VL_HighLimit = -1; static gint hf_opa_PortInfo_VL_PreemptingLimit = -1; static gint hf_opa_PortInfo_VL_ArbitrationHighCap = -1; static gint hf_opa_PortInfo_VL_ArbitrationLowCap = -1; static gint hf_opa_PortInfo_PortPhysConfig_reserved = -1; static gint hf_opa_PortInfo_PortPhysConfig_PortType = -1; static gint hf_opa_PortInfo_MultiCollectMask_reserved = -1; static gint hf_opa_PortInfo_MultiCollectMask_CollectiveMask = -1; static gint hf_opa_PortInfo_MultiCollectMask_MulticastMask = -1; static gint hf_opa_PortInfo_M_KeyProtectBits = -1; static gint hf_opa_PortInfo_S1_reserved = -1; static gint hf_opa_PortInfo_LMC = -1; static gint hf_opa_PortInfo_S2_reserved = -1; static gint hf_opa_PortInfo_MasterSMSL = -1; static gint hf_opa_PortInfo_LinkInitReason = -1; static gint hf_opa_PortInfo_PartitionEnforcementInbound = -1; static gint hf_opa_PortInfo_PartitionEnforcementOutbound = -1; static gint hf_opa_PortInfo_S3_reserved2 = -1; static gint hf_opa_PortInfo_S4_reserved = -1; static gint hf_opa_PortInfo_OperationalVL = -1; static gint hf_opa_PortInfo_P_Keys_P_Key_8B = -1; static gint hf_opa_PortInfo_P_Keys_P_Key_10B = -1; static gint hf_opa_PortInfo_M_KeyViolations = -1; static gint hf_opa_PortInfo_P_KeyViolations = -1; static gint hf_opa_PortInfo_Q_KeyViolations = -1; static gint hf_opa_PortInfo_TrapQueuePair_reserved = -1; static gint hf_opa_PortInfo_TrapQueuePair = -1; static gint hf_opa_PortInfo_SAQueuePair_reserved = -1; static gint hf_opa_PortInfo_SAQueuePair = -1; static gint hf_opa_PortInfo_NeighborPortNum = -1; static gint hf_opa_PortInfo_LinkDownReason = -1; static gint hf_opa_PortInfo_NeighborLinkDownReason = -1; static gint hf_opa_PortInfo_ClientReregister = -1; static gint hf_opa_PortInfo_MulticastPKeyTrapSuppressEnabled = -1; static gint hf_opa_PortInfo_Timeout = -1; static gint hf_opa_PortInfo_LinkSpeedSupported = -1; static gint hf_opa_PortInfo_LinkSpeedEnabled = -1; static gint hf_opa_PortInfo_LinkSpeedActive = -1; static gint hf_opa_PortInfo_LinkWidthSupported = -1; static gint hf_opa_PortInfo_LinkWidthEnabled = -1; static gint hf_opa_PortInfo_LinkWidthActive = -1; static gint hf_opa_PortInfo_LinkWidthDowngrade_Supported = -1; static gint hf_opa_PortInfo_LinkWidthDowngrade_Enabled = -1; static gint hf_opa_PortInfo_LinkWidthDowngrade_TxActive = -1; static gint hf_opa_PortInfo_LinkWidthDowngrade_RxActive = -1; static gint hf_opa_PortInfo_PortLinkMode_reserved = -1; static gint hf_opa_PortInfo_PortLinkMode_Supported = -1; static gint hf_opa_PortInfo_PortLinkMode_Enabled = -1; static gint hf_opa_PortInfo_PortLinkMode_Active = -1; static gint hf_opa_PortInfo_PortLTPCRCMode_reserved = -1; static gint hf_opa_PortInfo_PortLTPCRCMode_Supported = -1; static gint hf_opa_PortInfo_PortLTPCRCMode_Enabled = -1; static gint hf_opa_PortInfo_PortLTPCRCMode_Active = -1; static gint hf_opa_PortInfo_PortMode = -1; static gint hf_opa_PortInfo_PortMode_reserved = -1; static gint hf_opa_PortInfo_PortMode_IsActiveOptimizeEnabled = -1; static gint hf_opa_PortInfo_PortMode_IsPassThroughEnabled = -1; static gint hf_opa_PortInfo_PortMode_IsVLMarkerEnabled = -1; static gint hf_opa_PortInfo_PortMode_reserved2 = -1; static gint hf_opa_PortInfo_PortMode_Is16BTrapQueryEnabled = -1; static gint hf_opa_PortInfo_PortMode_reserved3 = -1; static int * const _PortInfo_PortMode[] = { &hf_opa_PortInfo_PortMode_reserved, &hf_opa_PortInfo_PortMode_IsActiveOptimizeEnabled, &hf_opa_PortInfo_PortMode_IsPassThroughEnabled, &hf_opa_PortInfo_PortMode_IsVLMarkerEnabled, &hf_opa_PortInfo_PortMode_reserved2, &hf_opa_PortInfo_PortMode_Is16BTrapQueryEnabled, &hf_opa_PortInfo_PortMode_reserved3, NULL }; static gint hf_opa_PortInfo_PortPacketFormats_Supported = -1; static gint hf_opa_PortInfo_PortPacketFormats_Enabled = -1; static gint hf_opa_PortInfo_FlitControl_Interleave_reserved = -1; static gint hf_opa_PortInfo_FlitControl_Interleave_DistanceSupported = -1; static gint hf_opa_PortInfo_FlitControl_Interleave_DistanceEnabled = -1; static gint hf_opa_PortInfo_FlitControl_Interleave_MaxNestLevelTxEnabled = -1; static gint hf_opa_PortInfo_FlitControl_Interleave_MaxNestLevelRxSupported = -1; static gint hf_opa_PortInfo_FlitControl_Preemption_MinInitial = -1; static gint hf_opa_PortInfo_FlitControl_Preemption_MinTail = -1; static gint hf_opa_PortInfo_FlitControl_Preemption_LargePacketLimit = -1; static gint hf_opa_PortInfo_FlitControl_Preemption_SmallPacketLimit = -1; static gint hf_opa_PortInfo_FlitControl_Preemption_MaxSmallPacketLimit = -1; static gint hf_opa_PortInfo_FlitControl_Preemption_PreemptionLimit = -1; static gint hf_opa_PortInfo_PortErrorAction = -1; static gint hf_opa_PortInfo_PortErrorAction_ExcessiveBufferOverrun = -1; static gint hf_opa_PortInfo_PortErrorAction_reserved = -1; static gint hf_opa_PortInfo_PortErrorAction_FmConfigErrorExceedMulticastLimit = -1; static gint hf_opa_PortInfo_PortErrorAction_FmConfigErrorBadControlFlit = -1; static gint hf_opa_PortInfo_PortErrorAction_FmConfigErrorBadPreempt = -1; static gint hf_opa_PortInfo_PortErrorAction_FmConfigErrorBadVLMarker = -1; static gint hf_opa_PortInfo_PortErrorAction_FmConfigErrorBadCrdtAck = -1; static gint hf_opa_PortInfo_PortErrorAction_FmConfigErrorBadCtrlDist = -1; static gint hf_opa_PortInfo_PortErrorAction_FmConfigErrorBadTailDist = -1; static gint hf_opa_PortInfo_PortErrorAction_FmConfigErrorBadHeadDist = -1; static gint hf_opa_PortInfo_PortErrorAction_reserved2 = -1; static gint hf_opa_PortInfo_PortErrorAction_PortRcvErrorBadVLMarker = -1; static gint hf_opa_PortInfo_PortErrorAction_PortRcvErrorPreemptVL15 = -1; static gint hf_opa_PortInfo_PortErrorAction_PortRcvErrorPreemptError = -1; static gint hf_opa_PortInfo_PortErrorAction_reserved3 = -1; static gint hf_opa_PortInfo_PortErrorAction_PortRcvErrorBadMidTail = -1; static gint hf_opa_PortInfo_PortErrorAction_PortRcvErrorReserved = -1; static gint hf_opa_PortInfo_PortErrorAction_PortRcvErrorBadSC = -1; static gint hf_opa_PortInfo_PortErrorAction_PortRcvErrorBadL2 = -1; static gint hf_opa_PortInfo_PortErrorAction_PortRcvErrorBadDLID = -1; static gint hf_opa_PortInfo_PortErrorAction_PortRcvErrorBadSLID = -1; static gint hf_opa_PortInfo_PortErrorAction_PortRcvErrorPktLenTooShort = -1; static gint hf_opa_PortInfo_PortErrorAction_PortRcvErrorPktLenTooLong = -1; static gint hf_opa_PortInfo_PortErrorAction_PortRcvErrorBadPktLen = -1; static gint hf_opa_PortInfo_PortErrorAction_reserved4 = -1; static int * const _PortInfo_PortErrorAction[] = { &hf_opa_PortInfo_PortErrorAction_ExcessiveBufferOverrun, &hf_opa_PortInfo_PortErrorAction_reserved, &hf_opa_PortInfo_PortErrorAction_FmConfigErrorExceedMulticastLimit, &hf_opa_PortInfo_PortErrorAction_FmConfigErrorBadControlFlit, &hf_opa_PortInfo_PortErrorAction_FmConfigErrorBadPreempt, &hf_opa_PortInfo_PortErrorAction_FmConfigErrorBadVLMarker, &hf_opa_PortInfo_PortErrorAction_FmConfigErrorBadCrdtAck, &hf_opa_PortInfo_PortErrorAction_FmConfigErrorBadCtrlDist, &hf_opa_PortInfo_PortErrorAction_FmConfigErrorBadTailDist, &hf_opa_PortInfo_PortErrorAction_FmConfigErrorBadHeadDist, &hf_opa_PortInfo_PortErrorAction_reserved2, &hf_opa_PortInfo_PortErrorAction_PortRcvErrorBadVLMarker, &hf_opa_PortInfo_PortErrorAction_PortRcvErrorPreemptVL15, &hf_opa_PortInfo_PortErrorAction_PortRcvErrorPreemptError, &hf_opa_PortInfo_PortErrorAction_reserved3, &hf_opa_PortInfo_PortErrorAction_PortRcvErrorBadMidTail, &hf_opa_PortInfo_PortErrorAction_PortRcvErrorReserved, &hf_opa_PortInfo_PortErrorAction_PortRcvErrorBadSC, &hf_opa_PortInfo_PortErrorAction_PortRcvErrorBadL2, &hf_opa_PortInfo_PortErrorAction_PortRcvErrorBadDLID, &hf_opa_PortInfo_PortErrorAction_PortRcvErrorBadSLID, &hf_opa_PortInfo_PortErrorAction_PortRcvErrorPktLenTooShort, &hf_opa_PortInfo_PortErrorAction_PortRcvErrorPktLenTooLong, &hf_opa_PortInfo_PortErrorAction_PortRcvErrorBadPktLen, &hf_opa_PortInfo_PortErrorAction_reserved4, NULL }; static gint hf_opa_PortInfo_PassThroughControl_EgressPort = -1; static gint hf_opa_PortInfo_PassThroughControl_reserved = -1; static gint hf_opa_PortInfo_PassThroughControl_DRControl = -1; static gint hf_opa_PortInfo_M_KeyLeasePeriod = -1; static gint hf_opa_PortInfo_BufferUnits_reserved = -1; static gint hf_opa_PortInfo_BufferUnits_VL15Init = -1; static gint hf_opa_PortInfo_BufferUnits_VL15CreditRate = -1; static gint hf_opa_PortInfo_BufferUnits_CreditAck = -1; static gint hf_opa_PortInfo_BufferUnits_BufferAlloc = -1; static gint hf_opa_PortInfo_MasterSMLID = -1; static gint hf_opa_PortInfo_M_Key = -1; static gint hf_opa_PortInfo_SubnetPrefix = -1; static gint hf_opa_PortInfo_VL1 = -1; static gint hf_opa_PortInfo_VL2 = -1; static gint hf_opa_PortInfo_XmitQ_VLStallCount = -1; static gint hf_opa_PortInfo_XmitQ_HOQLife = -1; static gint hf_opa_PortInfo_IPAddrIPv6 = -1; static gint hf_opa_PortInfo_IPAddrIPv4 = -1; static gint hf_opa_PortInfo_NeighborNodeGUID = -1; static gint hf_opa_PortInfo_CapabilityMask = -1; static gint hf_opa_PortInfo_CapabilityMask_reserved = -1; static gint hf_opa_PortInfo_CapabilityMask_IsCapabilityMaskNoticeSupported = -1; static gint hf_opa_PortInfo_CapabilityMask_reserved2 = -1; static gint hf_opa_PortInfo_CapabilityMask_IsVendorClassSupported = -1; static gint hf_opa_PortInfo_CapabilityMask_IsDeviceManagementSupported = -1; static gint hf_opa_PortInfo_CapabilityMask_reserved3 = -1; static gint hf_opa_PortInfo_CapabilityMask_IsConnectionManagementSupported = -1; static gint hf_opa_PortInfo_CapabilityMask_reserved4 = -1; static gint hf_opa_PortInfo_CapabilityMask_IsAutomaticMigrationSupported = -1; static gint hf_opa_PortInfo_CapabilityMask_reserved5 = -1; static gint hf_opa_PortInfo_CapabilityMask_IsSM = -1; static gint hf_opa_PortInfo_CapabilityMask_reserved6 = -1; static int * const _PortInfo_CapabilityMask[] = { &hf_opa_PortInfo_CapabilityMask_reserved, &hf_opa_PortInfo_CapabilityMask_IsCapabilityMaskNoticeSupported, &hf_opa_PortInfo_CapabilityMask_reserved2, &hf_opa_PortInfo_CapabilityMask_IsVendorClassSupported, &hf_opa_PortInfo_CapabilityMask_IsDeviceManagementSupported, &hf_opa_PortInfo_CapabilityMask_reserved3, &hf_opa_PortInfo_CapabilityMask_IsConnectionManagementSupported, &hf_opa_PortInfo_CapabilityMask_reserved4, &hf_opa_PortInfo_CapabilityMask_IsAutomaticMigrationSupported, &hf_opa_PortInfo_CapabilityMask_reserved5, &hf_opa_PortInfo_CapabilityMask_IsSM, &hf_opa_PortInfo_CapabilityMask_reserved6, NULL }; static gint hf_opa_PortInfo_CapabilityMask3 = -1; static gint hf_opa_PortInfo_CapabilityMask3_reserved = -1; static gint hf_opa_PortInfo_CapabilityMask3_IsSnoopSupported = -1; static gint hf_opa_PortInfo_CapabilityMask3_IsAsyncSCtoVLSupported = -1; static gint hf_opa_PortInfo_CapabilityMask3_IsAddrRangeConfigSupported = -1; static gint hf_opa_PortInfo_CapabilityMask3_IsPassThroughSupported = -1; static gint hf_opa_PortInfo_CapabilityMask3_IsSharedSpaceSupported = -1; static gint hf_opa_PortInfo_CapabilityMask3_reserved2 = -1; static gint hf_opa_PortInfo_CapabilityMask3_IsVLMarkerSupported = -1; static gint hf_opa_PortInfo_CapabilityMask3_IsVLrSupported = -1; static int * const _PortInfo_CapabilityMask3[] = { &hf_opa_PortInfo_CapabilityMask3_reserved, &hf_opa_PortInfo_CapabilityMask3_IsSnoopSupported, &hf_opa_PortInfo_CapabilityMask3_IsAsyncSCtoVLSupported, &hf_opa_PortInfo_CapabilityMask3_IsAddrRangeConfigSupported, &hf_opa_PortInfo_CapabilityMask3_IsPassThroughSupported, &hf_opa_PortInfo_CapabilityMask3_IsSharedSpaceSupported, &hf_opa_PortInfo_CapabilityMask3_reserved2, &hf_opa_PortInfo_CapabilityMask3_IsVLMarkerSupported, &hf_opa_PortInfo_CapabilityMask3_IsVLrSupported, NULL }; static gint hf_opa_PortInfo_OverallBufferSpace = -1; static gint hf_opa_PortInfo_DiagCode = -1; static gint hf_opa_PortInfo_ReplayDepth_BufferDepth = -1; static gint hf_opa_PortInfo_ReplayDepth_WireDepth = -1; static gint hf_opa_PortInfo_PortNeighborMode_reserved = -1; static gint hf_opa_PortInfo_PortNeighborMode_MgmtAllowed = -1; static gint hf_opa_PortInfo_PortNeighborMode_NeighborFWAuthenBypass = -1; static gint hf_opa_PortInfo_PortNeighborMode_NeighborNodeType = -1; static gint hf_opa_PortInfo_MTU_reserved = -1; static gint hf_opa_PortInfo_MTU_Cap = -1; static gint hf_opa_PortInfo_Resp_reserved = -1; static gint hf_opa_PortInfo_Resp_TimeValue = -1; static gint hf_opa_PortInfo_LocalPortNum = -1; static gint hf_opa_PortStates = -1; static gint hf_opa_PortStates_reserved = -1; static gint hf_opa_PortStates_LEDEnabled = -1; static gint hf_opa_PortStates_IsSMConfigurationStarted = -1; static gint hf_opa_PortStates_NeighborNormal = -1; static gint hf_opa_PortStates_OfflineDisabledReason = -1; static gint hf_opa_PortStates_PortUnsleepState = -1; static gint hf_opa_PortStates_DownDefaultState = -1; static gint hf_opa_PortStates_PortPhysicalState = -1; static gint hf_opa_PortStates_PortState = -1; static int * const _PortStates[] = { &hf_opa_PortStates_reserved, &hf_opa_PortStates_LEDEnabled, &hf_opa_PortStates_IsSMConfigurationStarted, &hf_opa_PortStates_NeighborNormal, &hf_opa_PortStates_OfflineDisabledReason, &hf_opa_PortStates_PortUnsleepState, &hf_opa_PortStates_DownDefaultState, &hf_opa_PortStates_PortPhysicalState, &hf_opa_PortStates_PortState, NULL }; static gint hf_opa_PortStates_LinkWidthDowngradeTxActive = -1; static gint hf_opa_PortStates_LinkWidthDowngradeRxActive = -1; static gint hf_opa_P_KeyTable = -1; static gint hf_opa_P_KeyTable_MembershipType = -1; static gint hf_opa_P_KeyTable_P_KeyBase = -1; static gint hf_opa_SLtoSCMappingTable = -1; static gint hf_opa_SLtoSCMappingTable_SLtoSC_HighBits = -1; static gint hf_opa_SLtoSCMappingTable_SLtoSC_LowBits = -1; static gint hf_opa_SCtoSCMappingTable = -1; static gint hf_opa_SCtoSCMappingTable_SCtoSC_HighBits = -1; static gint hf_opa_SCtoSCMappingTable_SCtoSC_LowBits = -1; static gint hf_opa_SCtoSLMappingTable = -1; static gint hf_opa_SCtoSLMappingTable_SCtoSL_HighBits = -1; static gint hf_opa_SCtoSLMappingTable_SCtoSL_LowBits = -1; static gint hf_opa_SCtoVLxMappingTable = -1; static gint hf_opa_SCtoVLxMappingTable_SCtoVLx_HighBits = -1; static gint hf_opa_SCtoVLxMappingTable_SCtoVLx_LowBits = -1; static gint hf_opa_VLArbitrationTable = -1; static gint hf_opa_VLArbitrationTable_reserved = -1; static gint hf_opa_VLArbitrationTable_VL = -1; static gint hf_opa_VLArbitrationTable_Weight = -1; static gint hf_opa_VLArbitrationTable_Matrix = -1; static gint hf_opa_LinearForwardingTable = -1; static gint hf_opa_LinearForwardingTable_Port = -1; static gint hf_opa_MulticastForwardingTable = -1; static gint hf_opa_MulticastForwardingTable_PortMask = -1; static gint hf_opa_PortGroupForwardingTable = -1; static gint hf_opa_PortGroupForwardingTable_Port = -1; static gint hf_opa_PortGroupTable = -1; static gint hf_opa_PortGroupTable_PortMask = -1; static gint hf_opa_SMInfo = -1; static gint hf_opa_SMInfo_GUID = -1; static gint hf_opa_SMInfo_SM_Key = -1; static gint hf_opa_SMInfo_ActCount = -1; static gint hf_opa_SMInfo_ElapsedTime = -1; static gint hf_opa_SMInfo_Priority = -1; static gint hf_opa_SMInfo_ElevatedPriority = -1; static gint hf_opa_SMInfo_InitialPriority = -1; static gint hf_opa_SMInfo_SMState = -1; static gint hf_opa_LedInfo = -1; static gint hf_opa_LedInfo_LedMask = -1; static gint hf_opa_LedInfo_reserved = -1; static gint hf_opa_CableInfo = -1; static gint hf_opa_CableInfo_Data = -1; static gint hf_opa_CableInfo_DataStream = -1; static gint hf_opa_Aggregate = -1; static gint hf_opa_Aggregate_AttributeID = -1; static gint hf_opa_Aggregate_Error = -1; static gint hf_opa_Aggregate_RequestLength = -1; static gint hf_opa_BufferControlTable = -1; static gint hf_opa_BufferControlTable_TxOverallSharedLimit = -1; static gint hf_opa_BufferControlTable_TxDedicatedLimit = -1; static gint hf_opa_BufferControlTable_TxSharedLimit = -1; static gint hf_opa_CongestionInfo = -1; static gint hf_opa_CongestionInfo_CongestionInfo = -1; static gint hf_opa_CongestionInfo_ControlTableCap = -1; static gint hf_opa_CongestionInfo_CongestionLogLength = -1; static gint hf_opa_SwitchCongestionLog = -1; static gint hf_opa_SwitchCongestionLog_LogType = -1; static gint hf_opa_SwitchCongestionLog_CongestionFlags = -1; static gint hf_opa_SwitchCongestionLog_LogEventsCounter = -1; static gint hf_opa_SwitchCongestionLog_CurrentTimeStamp = -1; static gint hf_opa_SwitchCongestionLog_PortMap = -1; static gint hf_opa_SwitchCongestionLog_SLID = -1; static gint hf_opa_SwitchCongestionLog_DLID = -1; static gint hf_opa_SwitchCongestionLog_SC = -1; static gint hf_opa_SwitchCongestionLog_reserved = -1; static gint hf_opa_SwitchCongestionLog_TimeStamp = -1; static gint hf_opa_SwitchCongestionSetting = -1; static gint hf_opa_SwitchCongestionSetting_Control_Map = -1; static gint hf_opa_SwitchCongestionSetting_Victim_Mask = -1; static gint hf_opa_SwitchCongestionSetting_Credit_Mask = -1; static gint hf_opa_SwitchCongestionSetting_Threshold = -1; static gint hf_opa_SwitchCongestionSetting_reserved1 = -1; static gint hf_opa_SwitchCongestionSetting_Packet_Size = -1; static gint hf_opa_SwitchCongestionSetting_CS_Threshold = -1; static gint hf_opa_SwitchCongestionSetting_reserved2 = -1; static gint hf_opa_SwitchCongestionSetting_CS_ReturnDelay = -1; static gint hf_opa_SwitchCongestionSetting_Marking_Rate = -1; static gint hf_opa_SwitchPortCongestionSetting = -1; static gint hf_opa_SwitchPortCongestionSetting_Valid = -1; static gint hf_opa_SwitchPortCongestionSetting_Control_Type = -1; static gint hf_opa_SwitchPortCongestionSetting_reserved = -1; static gint hf_opa_SwitchPortCongestionSetting_Threshold = -1; static gint hf_opa_SwitchPortCongestionSetting_Packet_Size = -1; static gint hf_opa_SwitchPortCongestionSetting_Marking_Rate = -1; static gint hf_opa_HFICongestionLog = -1; static gint hf_opa_HFICongestionLog_LogType = -1; static gint hf_opa_HFICongestionLog_CongestionFlags = -1; static gint hf_opa_HFICongestionLog_ThresholdEventCounter = -1; static gint hf_opa_HFICongestionLog_CurrentTimeStamp = -1; static gint hf_opa_HFICongestionLog_ThresholdCongestionEventMap = -1; static gint hf_opa_HFICongestionLog_Local_QP_CN_Entry = -1; static gint hf_opa_HFICongestionLog_Remote_QP_Number_CN_Entry = -1; static gint hf_opa_HFICongestionLog_SL_CN_Entry = -1; static gint hf_opa_HFICongestionLog_Service_Type_CN_Entry = -1; static gint hf_opa_HFICongestionLog_Remote_LID_CN_Entry = -1; static gint hf_opa_HFICongestionLog_TimeStamp_CN_Entry = -1; static gint hf_opa_HFICongestionSetting = -1; static gint hf_opa_HFICongestionSetting_Control_Map = -1; static gint hf_opa_HFICongestionSetting_Port_Control = -1; static gint hf_opa_HFICongestionSetting_CCTI_Increase = -1; static gint hf_opa_HFICongestionSetting_CCTI_Timer = -1; static gint hf_opa_HFICongestionSetting_TriggerThreshold = -1; static gint hf_opa_HFICongestionSetting_CCTI_Min = -1; static gint hf_opa_HFICongestionControlTable = -1; static gint hf_opa_HFICongestionControlTable_CCTI_Limit = -1; static gint hf_opa_HFICongestionControlTable_CCT_Shift = -1; static gint hf_opa_HFICongestionControlTable_CCT_Multiplier = -1; /* SA */ static gint hf_opa_PortInfoRecord_LinkDownReason_NeighborLinkDownReason = -1; static gint hf_opa_PortInfoRecord_LinkDownReason_LinkDownReason = -1; static gint hf_opa_PortInfoRecord_LinkDownReason_Timestamp = -1; static gint hf_opa_LinkRecord = -1; static gint hf_opa_LinkRecord_ToPort = -1; static gint hf_opa_LinkRecord_ToLID = -1; static gint hf_opa_ServiceRecord = -1; static gint hf_opa_ServiceRecord_ServiceLease = -1; static gint hf_opa_ServiceRecord_ServiceKey = -1; static gint hf_opa_ServiceRecord_ServiceName = -1; static gint hf_opa_ServiceRecord_ServiceData = -1; static gint hf_opa_ServiceAssociationRecord_ServiceKey = -1; static gint hf_opa_ServiceAssociationRecord_ServiceName = -1; static gint hf_opa_PathRecord = -1; static gint hf_opa_PathRecord_DGID = -1; static gint hf_opa_PathRecord_SGID = -1; static gint hf_opa_PathRecord_DLID = -1; static gint hf_opa_PathRecord_SLID = -1; static gint hf_opa_PathRecord_RawTraffic = -1; static gint hf_opa_PathRecord_reserved = -1; static gint hf_opa_PathRecord_FlowLabel = -1; static gint hf_opa_PathRecord_HopLimit = -1; static gint hf_opa_PathRecord_TClass = -1; static gint hf_opa_PathRecord_Reversible = -1; static gint hf_opa_PathRecord_NumbPath = -1; static gint hf_opa_PathRecord_P_Key = -1; static gint hf_opa_PathRecord_QosType = -1; static gint hf_opa_PathRecord_reserved2 = -1; static gint hf_opa_PathRecord_QosPriority = -1; static gint hf_opa_PathRecord_SL = -1; static gint hf_opa_PathRecord_MTUSelector = -1; static gint hf_opa_PathRecord_MTU = -1; static gint hf_opa_PathRecord_RateSelector = -1; static gint hf_opa_PathRecord_Rate = -1; static gint hf_opa_PathRecord_PacketLifeTimeSelector = -1; static gint hf_opa_PathRecord_PacketLifeTime = -1; static gint hf_opa_PathRecord_Preference = -1; static gint hf_opa_MCMemberRecord = -1; static gint hf_opa_MCMemberRecord_Q_Key = -1; static gint hf_opa_MCMemberRecord_MLID = -1; static gint hf_opa_MCMemberRecord_MTUSelector = -1; static gint hf_opa_MCMemberRecord_MTU = -1; static gint hf_opa_MCMemberRecord_TClass = -1; static gint hf_opa_MCMemberRecord_P_Key = -1; static gint hf_opa_MCMemberRecord_RateSelector = -1; static gint hf_opa_MCMemberRecord_Rate = -1; static gint hf_opa_MCMemberRecord_PacketLifeTimeSelector = -1; static gint hf_opa_MCMemberRecord_PacketLifeTime = -1; static gint hf_opa_MCMemberRecord_SL = -1; static gint hf_opa_MCMemberRecord_reserved = -1; static gint hf_opa_MCMemberRecord_HopLimit = -1; static gint hf_opa_MCMemberRecord_Scope = -1; static gint hf_opa_MCMemberRecord_reserved2 = -1; static gint hf_opa_MCMemberRecord_JoinSendOnlyMember = -1; static gint hf_opa_MCMemberRecord_JoinNonMember = -1; static gint hf_opa_MCMemberRecord_JoinFullMember = -1; static gint hf_opa_MCMemberRecord_ProxyJoin = -1; static gint hf_opa_MCMemberRecord_reserved3 = -1; static gint hf_opa_TraceRecord = -1; static gint hf_opa_TraceRecord_IDGeneration = -1; static gint hf_opa_TraceRecord_NodeType = -1; static gint hf_opa_TraceRecord_NodeID = -1; static gint hf_opa_TraceRecord_ChassisID = -1; static gint hf_opa_TraceRecord_EntryPortID = -1; static gint hf_opa_TraceRecord_ExitPortID = -1; static gint hf_opa_TraceRecord_EntryPort = -1; static gint hf_opa_TraceRecord_ExitPort = -1; static gint hf_opa_MultiPathRecord = -1; static gint hf_opa_MultiPathRecord_reserved = -1; static gint hf_opa_MultiPathRecord_FlowLabel = -1; static gint hf_opa_MultiPathRecord_HopLimit = -1; static gint hf_opa_MultiPathRecord_TClass = -1; static gint hf_opa_MultiPathRecord_Reversible = -1; static gint hf_opa_MultiPathRecord_NumbPath = -1; static gint hf_opa_MultiPathRecord_P_Key = -1; static gint hf_opa_MultiPathRecord_QoSType = -1; static gint hf_opa_MultiPathRecord_QoSPriority = -1; static gint hf_opa_MultiPathRecord_reserved2 = -1; static gint hf_opa_MultiPathRecord_SL = -1; static gint hf_opa_MultiPathRecord_MTUSelector = -1; static gint hf_opa_MultiPathRecord_MTU = -1; static gint hf_opa_MultiPathRecord_RateSelector = -1; static gint hf_opa_MultiPathRecord_Rate = -1; static gint hf_opa_MultiPathRecord_PacketLifeTimeSelector = -1; static gint hf_opa_MultiPathRecord_PacketLifeTime = -1; static gint hf_opa_MultiPathRecord_IndependenceSelector = -1; static gint hf_opa_MultiPathRecord_SGIDScope = -1; static gint hf_opa_MultiPathRecord_DGIDScope = -1; static gint hf_opa_MultiPathRecord_SGIDCount = -1; static gint hf_opa_MultiPathRecord_DGIDCount = -1; static gint hf_opa_MultiPathRecord_SGID = -1; static gint hf_opa_MultiPathRecord_DGID = -1; static gint hf_opa_MultiPathRecord_L2_8B = -1; static gint hf_opa_MultiPathRecord_L2_10B = -1; static gint hf_opa_MultiPathRecord_L2_9B = -1; static gint hf_opa_MultiPathRecord_L2_16B = -1; static gint hf_opa_MultiPathRecord_reserved3 = -1; static gint hf_opa_MultiPathRecord_SGUIDScope = -1; static gint hf_opa_MultiPathRecord_DGUIDScope = -1; static gint hf_opa_MultiPathRecord_SGUIDCount = -1; static gint hf_opa_MultiPathRecord_DGUIDCount = -1; static gint hf_opa_MultiPathRecord_SGUID = -1; static gint hf_opa_MultiPathRecord_DGUID = -1; static gint hf_opa_MultiPathRecord_ServiceID = -1; static gint hf_opa_MultiPathRecord_SubnetPrefix = -1; static gint hf_opa_MultiPathRecord_SLIDCount = -1; static gint hf_opa_MultiPathRecord_DLIDCount = -1; static gint hf_opa_MultiPathRecord_SLID = -1; static gint hf_opa_MultiPathRecord_DLID = -1; static gint hf_opa_CableInfoRecord = -1; static gint hf_opa_CableInfoRecord_Lid = -1; static gint hf_opa_CableInfoRecord_Port = -1; static gint hf_opa_CableInfoRecord_Length = -1; static gint hf_opa_CableInfoRecord_reserved = -1; static gint hf_opa_CableInfoRecord_Address = -1; static gint hf_opa_CableInfoRecord_PortType = -1; static gint hf_opa_CableInfoRecord_Data = -1; static gint hf_opa_VFInfoRecord = -1; static gint hf_opa_VFInfoRecord_vfIndex = -1; static gint hf_opa_VFInfoRecord_pKey = -1; static gint hf_opa_VFInfoRecord_vfName = -1; static gint hf_opa_VFInfoRecord_MGID = -1; static gint hf_opa_VFInfoRecord_SelectFlags = -1; static gint hf_opa_VFInfoRecord_reserved = -1; static gint hf_opa_VFInfoRecord_SL = -1; static gint hf_opa_VFInfoRecord_MTUSpecified = -1; static gint hf_opa_VFInfoRecord_reserved2 = -1; static gint hf_opa_VFInfoRecord_MTU = -1; static gint hf_opa_VFInfoRecord_RateSpecified = -1; static gint hf_opa_VFInfoRecord_reserved4 = -1; static gint hf_opa_VFInfoRecord_Rate = -1; static gint hf_opa_VFInfoRecord_PktLifeSpecified = -1; static gint hf_opa_VFInfoRecord_reserved5 = -1; static gint hf_opa_VFInfoRecord_PktLifeTimeInc = -1; static gint hf_opa_VFInfoRecord_OptionFlags = -1; static gint hf_opa_VFInfoRecord_BandwidthPercent = -1; static gint hf_opa_VFInfoRecord_reserved6 = -1; static gint hf_opa_VFInfoRecord_Priority = -1; static gint hf_opa_VFInfoRecord_RoutingSLs = -1; static gint hf_opa_VFInfoRecord_reserved7 = -1; static gint hf_opa_QuarantinedNodeRecord = -1; static gint hf_opa_QuarantinedNodeRecord_TrustedLid = -1; static gint hf_opa_QuarantinedNodeRecord_TrustedNodeGUID = -1; static gint hf_opa_QuarantinedNodeRecord_TrustedPortNum = -1; static gint hf_opa_QuarantinedNodeRecord_TrustedNeighborNodeGUID = -1; static gint hf_opa_QuarantinedNodeRecord_QuarantineReasons = -1; static gint hf_opa_QuarantinedNodeRecord_ExpectedNodeDesc = -1; static gint hf_opa_QuarantinedNodeRecord_ExpectedNodeGUID = -1; static gint hf_opa_QuarantinedNodeRecord_ExpectedPortGUID = -1; static gint hf_opa_FabricInfoRecord = -1; static gint hf_opa_FabricInfoRecord_NumHFIs = -1; static gint hf_opa_FabricInfoRecord_NumSwitches = -1; static gint hf_opa_FabricInfoRecord_NumInternalHFILinks = -1; static gint hf_opa_FabricInfoRecord_NumExternalHFILinks = -1; static gint hf_opa_FabricInfoRecord_NumInternalISLs = -1; static gint hf_opa_FabricInfoRecord_NumExternalISLs = -1; static gint hf_opa_FabricInfoRecord_NumDegradedHFILinks = -1; static gint hf_opa_FabricInfoRecord_NumDegradedISLs = -1; static gint hf_opa_FabricInfoRecord_NumOmittedHFILinks = -1; static gint hf_opa_FabricInfoRecord_NumOmittedISLs = -1; static gint hf_opa_FabricInfoRecord_Reserved = -1; /* PM */ static gint hf_opa_PortStatus = -1; static gint hf_opa_PortStatus_PortNumber = -1; static gint hf_opa_PortStatus_VLSelectMask = -1; static gint hf_opa_PortStatus_PortXmitData = -1; static gint hf_opa_PortStatus_PortRcvData = -1; static gint hf_opa_PortStatus_PortXmitPkts = -1; static gint hf_opa_PortStatus_PortRcvPkts = -1; static gint hf_opa_PortStatus_PortMulticastXmitPkts = -1; static gint hf_opa_PortStatus_PortMulticastRcvPkts = -1; static gint hf_opa_PortStatus_PortXmitWait = -1; static gint hf_opa_PortStatus_SwPortCongestion = -1; static gint hf_opa_PortStatus_PortRcvFECN = -1; static gint hf_opa_PortStatus_PortRcvBECN = -1; static gint hf_opa_PortStatus_PortXmitTimeCong = -1; static gint hf_opa_PortStatus_PortXmitWastedBW = -1; static gint hf_opa_PortStatus_PortXmitWaitData = -1; static gint hf_opa_PortStatus_PortRcvBubble = -1; static gint hf_opa_PortStatus_PortMarkFECN = -1; static gint hf_opa_PortStatus_PortRcvConstraintErrors = -1; static gint hf_opa_PortStatus_PortRcvSwitchRelayErrors = -1; static gint hf_opa_PortStatus_PortXmitDiscards = -1; static gint hf_opa_PortStatus_PortXmitConstraintErrors = -1; static gint hf_opa_PortStatus_PortRcvRemotePhysicalErrors = -1; static gint hf_opa_PortStatus_LocalLinkIntegrityErrors = -1; static gint hf_opa_PortStatus_PortRcvErrors = -1; static gint hf_opa_PortStatus_ExcessiveBufferOverruns = -1; static gint hf_opa_PortStatus_FMConfigErrors = -1; static gint hf_opa_PortStatus_LinkErrorRecovery = -1; static gint hf_opa_PortStatus_LinkDowned = -1; static gint hf_opa_PortStatus_UncorrectableErrors = -1; static gint hf_opa_PortStatus_reserved = -1; static gint hf_opa_PortStatus_LinkQualityIndicator = -1; static gint hf_opa_PortStatus_PortVLXmitData = -1; static gint hf_opa_PortStatus_PortVLRcvData = -1; static gint hf_opa_PortStatus_PortVLXmitPkts = -1; static gint hf_opa_PortStatus_PortVLRcvPkts = -1; static gint hf_opa_PortStatus_PortVLXmitWait = -1; static gint hf_opa_PortStatus_SwPortVLCongestion = -1; static gint hf_opa_PortStatus_PortVLRcvFECN = -1; static gint hf_opa_PortStatus_PortVLRcvBECN = -1; static gint hf_opa_PortStatus_PortVLXmitTimeCong = -1; static gint hf_opa_PortStatus_PortVLXmitWastedBW = -1; static gint hf_opa_PortStatus_PortVLXmitWaitData = -1; static gint hf_opa_PortStatus_PortVLRcvBubble = -1; static gint hf_opa_PortStatus_PortVLMarkFECN = -1; static gint hf_opa_PortStatus_PortVLXmitDiscards = -1; static gint hf_opa_ClearPortStatus = -1; static gint hf_opa_ClearPortStatus_PortSelectMask = -1; static gint hf_opa_ClearPortStatus_PortXmitData = -1; static gint hf_opa_ClearPortStatus_PortRcvData = -1; static gint hf_opa_ClearPortStatus_PortXmitPkts = -1; static gint hf_opa_ClearPortStatus_PortRcvPkts = -1; static gint hf_opa_ClearPortStatus_PortMulticastXmitPkts = -1; static gint hf_opa_ClearPortStatus_PortMulticastRcvPkts = -1; static gint hf_opa_ClearPortStatus_PortXmitWait = -1; static gint hf_opa_ClearPortStatus_SwPortCongestion = -1; static gint hf_opa_ClearPortStatus_PortRcvFECN = -1; static gint hf_opa_ClearPortStatus_PortRcvBECN = -1; static gint hf_opa_ClearPortStatus_PortXmitTimeCong = -1; static gint hf_opa_ClearPortStatus_PortXmitWastedBW = -1; static gint hf_opa_ClearPortStatus_PortXmitWaitData = -1; static gint hf_opa_ClearPortStatus_PortRcvBubble = -1; static gint hf_opa_ClearPortStatus_PortMarkFECN = -1; static gint hf_opa_ClearPortStatus_PortRcvConstraintErrors = -1; static gint hf_opa_ClearPortStatus_PortRcvSwitchRelayErrors = -1; static gint hf_opa_ClearPortStatus_PortXmitDiscards = -1; static gint hf_opa_ClearPortStatus_PortXmitConstraintErrors = -1; static gint hf_opa_ClearPortStatus_PortRcvRemotePhysicalErrors = -1; static gint hf_opa_ClearPortStatus_LocalLinkIntegrityErrors = -1; static gint hf_opa_ClearPortStatus_PortRcvErrors = -1; static gint hf_opa_ClearPortStatus_ExcessiveBufferOverruns = -1; static gint hf_opa_ClearPortStatus_FMConfigErrors = -1; static gint hf_opa_ClearPortStatus_LinkErrorRecovery = -1; static gint hf_opa_ClearPortStatus_LinkDowned = -1; static gint hf_opa_ClearPortStatus_UncorrectableErrors = -1; static gint hf_opa_ClearPortStatus_reserved = -1; static gint hf_opa_ClearPortStatus_CounterSelectMask = -1; static int * const _ClearPortStatus_CounterSelectMask[] = { &hf_opa_ClearPortStatus_PortXmitData, &hf_opa_ClearPortStatus_PortRcvData, &hf_opa_ClearPortStatus_PortXmitPkts, &hf_opa_ClearPortStatus_PortRcvPkts, &hf_opa_ClearPortStatus_PortMulticastXmitPkts, &hf_opa_ClearPortStatus_PortMulticastRcvPkts, &hf_opa_ClearPortStatus_PortXmitWait, &hf_opa_ClearPortStatus_SwPortCongestion, &hf_opa_ClearPortStatus_PortRcvFECN, &hf_opa_ClearPortStatus_PortRcvBECN, &hf_opa_ClearPortStatus_PortXmitTimeCong, &hf_opa_ClearPortStatus_PortXmitWastedBW, &hf_opa_ClearPortStatus_PortXmitWaitData, &hf_opa_ClearPortStatus_PortRcvBubble, &hf_opa_ClearPortStatus_PortMarkFECN, &hf_opa_ClearPortStatus_PortRcvConstraintErrors, &hf_opa_ClearPortStatus_PortRcvSwitchRelayErrors, &hf_opa_ClearPortStatus_PortXmitDiscards, &hf_opa_ClearPortStatus_PortXmitConstraintErrors, &hf_opa_ClearPortStatus_PortRcvRemotePhysicalErrors, &hf_opa_ClearPortStatus_LocalLinkIntegrityErrors, &hf_opa_ClearPortStatus_PortRcvErrors, &hf_opa_ClearPortStatus_ExcessiveBufferOverruns, &hf_opa_ClearPortStatus_FMConfigErrors, &hf_opa_ClearPortStatus_LinkErrorRecovery, &hf_opa_ClearPortStatus_LinkDowned, &hf_opa_ClearPortStatus_UncorrectableErrors, &hf_opa_ClearPortStatus_reserved, NULL }; static gint hf_opa_DataPortCounters = -1; static gint hf_opa_DataPortCounters_PortSelectMask = -1; static gint hf_opa_DataPortCounters_VLSelectMask = -1; static gint hf_opa_DataPortCounters_resolution_reserved = -1; static gint hf_opa_DataPortCounters_LocalLinkIntegrityResolution = -1; static gint hf_opa_DataPortCounters_LinkErrorRecoveryResolution = -1; static gint hf_opa_DataPortCounters_PortNumber = -1; static gint hf_opa_DataPortCounters_lqi_reserved = -1; static gint hf_opa_DataPortCounters_LinkQualityIndicator = -1; static gint hf_opa_DataPortCounters_PortXmitData = -1; static gint hf_opa_DataPortCounters_PortRcvData = -1; static gint hf_opa_DataPortCounters_PortXmitPkts = -1; static gint hf_opa_DataPortCounters_PortRcvPkts = -1; static gint hf_opa_DataPortCounters_PortMulticastXmitPkts = -1; static gint hf_opa_DataPortCounters_PortMulticastRcvPkts = -1; static gint hf_opa_DataPortCounters_PortXmitWait = -1; static gint hf_opa_DataPortCounters_SwPortCongestion = -1; static gint hf_opa_DataPortCounters_PortRcvFECN = -1; static gint hf_opa_DataPortCounters_PortRcvBECN = -1; static gint hf_opa_DataPortCounters_PortXmitTimeCong = -1; static gint hf_opa_DataPortCounters_PortXmitWastedBW = -1; static gint hf_opa_DataPortCounters_PortXmitWaitData = -1; static gint hf_opa_DataPortCounters_PortRcvBubble = -1; static gint hf_opa_DataPortCounters_PortMarkFECN = -1; static gint hf_opa_DataPortCounters_PortErrorCounterSummary = -1; static gint hf_opa_DataPortCounters_PortVLXmitData = -1; static gint hf_opa_DataPortCounters_PortVLRcvData = -1; static gint hf_opa_DataPortCounters_PortVLXmitPkts = -1; static gint hf_opa_DataPortCounters_PortVLRcvPkts = -1; static gint hf_opa_DataPortCounters_PortVLXmitWait = -1; static gint hf_opa_DataPortCounters_SwPortVLCongestion = -1; static gint hf_opa_DataPortCounters_PortVLRcvFECN = -1; static gint hf_opa_DataPortCounters_PortVLRcvBECN = -1; static gint hf_opa_DataPortCounters_PortVLXmitTimeCong = -1; static gint hf_opa_DataPortCounters_PortVLXmitWastedBW = -1; static gint hf_opa_DataPortCounters_PortVLXmitWaitData = -1; static gint hf_opa_DataPortCounters_PortVLRcvBubble = -1; static gint hf_opa_DataPortCounters_PortVLMarkFECN = -1; static gint hf_opa_ErrorPortCounters = -1; static gint hf_opa_ErrorPortCounters_PortSelectMask = -1; static gint hf_opa_ErrorPortCounters_VLSelectMask = -1; static gint hf_opa_ErrorPortCounters_PortNumber = -1; static gint hf_opa_ErrorPortCounters_PortRcvConstraintErrors = -1; static gint hf_opa_ErrorPortCounters_PortRcvSwitchRelayErrors = -1; static gint hf_opa_ErrorPortCounters_PortXmitDiscards = -1; static gint hf_opa_ErrorPortCounters_PortXmitConstraintErrors = -1; static gint hf_opa_ErrorPortCounters_PortRcvRemotePhysicalErrors = -1; static gint hf_opa_ErrorPortCounters_LocalLinkIntegrityErrors = -1; static gint hf_opa_ErrorPortCounters_PortRcvErrors = -1; static gint hf_opa_ErrorPortCounters_ExcessiveBufferOverruns = -1; static gint hf_opa_ErrorPortCounters_FMConfigErrors = -1; static gint hf_opa_ErrorPortCounters_LinkErrorRecovery = -1; static gint hf_opa_ErrorPortCounters_LinkDowned = -1; static gint hf_opa_ErrorPortCounters_UncorrectableErrors = -1; static gint hf_opa_ErrorPortCounters_PortVLXmitDiscards = -1; static gint hf_opa_ErrorPortInfo = -1; static gint hf_opa_ErrorPortInfo_PortSelectMask = -1; static gint hf_opa_ErrorPortInfo_ErrorInfoSelectMask_PortRcvErrorInfo = -1; static gint hf_opa_ErrorPortInfo_ErrorInfoSelectMask_ExcessiveBufferOverrunInfo = -1; static gint hf_opa_ErrorPortInfo_ErrorInfoSelectMask_PortXmitConstraintErrorInfo = -1; static gint hf_opa_ErrorPortInfo_ErrorInfoSelectMask_PortRcvConstraintErrorInfo = -1; static gint hf_opa_ErrorPortInfo_ErrorInfoSelectMask_PortRcvSwitchRelayErrorInfo = -1; static gint hf_opa_ErrorPortInfo_ErrorInfoSelectMask_UncorrectableErrorInfo = -1; static gint hf_opa_ErrorPortInfo_ErrorInfoSelectMask_FMConfigErrorInfo = -1; static gint hf_opa_ErrorPortInfo_ErrorInfoSelectMask_reserved = -1; static int * const _ErrorPortInfo_ErrorInfoSelectMask[] = { &hf_opa_ErrorPortInfo_ErrorInfoSelectMask_PortRcvErrorInfo, &hf_opa_ErrorPortInfo_ErrorInfoSelectMask_ExcessiveBufferOverrunInfo, &hf_opa_ErrorPortInfo_ErrorInfoSelectMask_PortXmitConstraintErrorInfo, &hf_opa_ErrorPortInfo_ErrorInfoSelectMask_PortRcvConstraintErrorInfo, &hf_opa_ErrorPortInfo_ErrorInfoSelectMask_PortRcvSwitchRelayErrorInfo, &hf_opa_ErrorPortInfo_ErrorInfoSelectMask_UncorrectableErrorInfo, &hf_opa_ErrorPortInfo_ErrorInfoSelectMask_FMConfigErrorInfo, &hf_opa_ErrorPortInfo_ErrorInfoSelectMask_reserved, NULL }; static gint hf_opa_ErrorPortInfo_PortNumber = -1; static gint hf_opa_ErrorPortInfo_PortRcvErrorInfo_Status = -1; static gint hf_opa_ErrorPortInfo_PortRcvErrorInfo_reserved = -1; static gint hf_opa_ErrorPortInfo_PortRcvErrorInfo_ErrorCode = -1; static gint hf_opa_ErrorPortInfo_PortRcvErrorInfo_PacketFlit1 = -1; static gint hf_opa_ErrorPortInfo_PortRcvErrorInfo_PacketFlit2 = -1; static gint hf_opa_ErrorPortInfo_PortRcvErrorInfo_Flit1Bits = -1; static gint hf_opa_ErrorPortInfo_PortRcvErrorInfo_Flit2Bits = -1; static gint hf_opa_ErrorPortInfo_PortRcvErrorInfo_reserved2 = -1; static gint hf_opa_ErrorPortInfo_PortRcvErrorInfo_PacketBytes = -1; static gint hf_opa_ErrorPortInfo_PortRcvErrorInfo_FlitBits = -1; static gint hf_opa_ErrorPortInfo_PortRcvErrorInfo_reserved3 = -1; static gint hf_opa_ErrorPortInfo_PortRcvErrorInfo_reserved4 = -1; static gint hf_opa_ErrorPortInfo_ExcessiveBufferOverrunErrorInfo_Status = -1; static gint hf_opa_ErrorPortInfo_ExcessiveBufferOverrunErrorInfo_SC = -1; static gint hf_opa_ErrorPortInfo_ExcessiveBufferOverrunErrorInfo_reserved = -1; static gint hf_opa_ErrorPortInfo_PortXmitConstraintErrorInfo_Status = -1; static gint hf_opa_ErrorPortInfo_PortXmitConstraintErrorInfo_reserved = -1; static gint hf_opa_ErrorPortInfo_PortXmitConstraintErrorInfo_P_Key = -1; static gint hf_opa_ErrorPortInfo_PortXmitConstraintErrorInfo_SLID = -1; static gint hf_opa_ErrorPortInfo_PortRcvConstraintErrorInfo_Status = -1; static gint hf_opa_ErrorPortInfo_PortRcvConstraintErrorInfo_reserved = -1; static gint hf_opa_ErrorPortInfo_PortRcvConstraintErrorInfo_P_Key = -1; static gint hf_opa_ErrorPortInfo_PortRcvConstraintErrorInfo_SLID = -1; static gint hf_opa_ErrorPortInfo_PortRcvSwitchRelayErrorInfo_Status = -1; static gint hf_opa_ErrorPortInfo_PortRcvSwitchRelayErrorInfo_reserved = -1; static gint hf_opa_ErrorPortInfo_PortRcvSwitchRelayErrorInfo_ErrorCode = -1; static gint hf_opa_ErrorPortInfo_PortRcvSwitchRelayErrorInfo_DLID = -1; static gint hf_opa_ErrorPortInfo_PortRcvSwitchRelayErrorInfo_EgressPortNum = -1; static gint hf_opa_ErrorPortInfo_PortRcvSwitchRelayErrorInfo_SC = -1; static gint hf_opa_ErrorPortInfo_UncorrectableErrorInfo_Status = -1; static gint hf_opa_ErrorPortInfo_UncorrectableErrorInfo_reserved = -1; static gint hf_opa_ErrorPortInfo_UncorrectableErrorInfo_ErrorCode = -1; static gint hf_opa_ErrorPortInfo_FMConfigErrorInfo_Status = -1; static gint hf_opa_ErrorPortInfo_FMConfigErrorInfo_reserved = -1; static gint hf_opa_ErrorPortInfo_FMConfigErrorInfo_ErrorCode = -1; static gint hf_opa_ErrorPortInfo_FMConfigErrorInfo_VL = -1; static gint hf_opa_ErrorPortInfo_FMConfigErrorInfo_Distance = -1; static gint hf_opa_ErrorPortInfo_FMConfigErrorInfo_BadFlitBits = -1; static gint hf_opa_ErrorPortInfo_FMConfigErrorInfo_SC = -1; /* PA */ static gint hf_opa_ImageID_imageNumber = -1; static gint hf_opa_ImageID_imageOffset = -1; static gint hf_opa_GetGroupList = -1; static gint hf_opa_GetGroupList_groupName = -1; static gint hf_opa_GetGroupInfo = -1; static gint hf_opa_GetGroupInfo_groupName = -1; static gint hf_opa_GetGroupInfo_numInternalPorts = -1; static gint hf_opa_GetGroupInfo_numExternalPorts = -1; static gint hf_opa_GetGroupInfo_totalMBps = -1; static gint hf_opa_GetGroupInfo_totalKPps = -1; static gint hf_opa_GetGroupInfo_avgMBps = -1; static gint hf_opa_GetGroupInfo_minMBps = -1; static gint hf_opa_GetGroupInfo_maxMBps = -1; static gint hf_opa_GetGroupInfo_numBWBuckets = -1; static gint hf_opa_GetGroupInfo_BWBuckets = -1; static gint hf_opa_GetGroupInfo_avgKPps = -1; static gint hf_opa_GetGroupInfo_minKPps = -1; static gint hf_opa_GetGroupInfo_maxKPps = -1; static gint hf_opa_GetGroupInfo_pmaFailedPorts = -1; static gint hf_opa_GetGroupInfo_topoFailedPorts = -1; static gint hf_opa_GetGroupInfo_integrityErrors = -1; static gint hf_opa_GetGroupInfo_congestionErrors = -1; static gint hf_opa_GetGroupInfo_smaCongestionErrors = -1; static gint hf_opa_GetGroupInfo_bubbleErrors = -1; static gint hf_opa_GetGroupInfo_securityErrors = -1; static gint hf_opa_GetGroupInfo_routingErrors = -1; static gint hf_opa_GetGroupInfo_utilizationPct10 = -1; static gint hf_opa_GetGroupInfo_discardsPct10 = -1; static gint hf_opa_GetGroupInfo_maxInternalRate = -1; static gint hf_opa_GetGroupInfo_minInternalRate = -1; static gint hf_opa_GetGroupInfo_maxExternalRate = -1; static gint hf_opa_GetGroupInfo_minExternalRate = -1; static gint hf_opa_GetGroupInfo_maxInternalMBps = -1; static gint hf_opa_GetGroupInfo_maxExternalMBps = -1; static gint hf_opa_GetGroupConfig = -1; static gint hf_opa_GetGroupConfig_groupName = -1; static gint hf_opa_GetGroupConfig_Port_NodeGUID = -1; static gint hf_opa_GetGroupConfig_Port_nodeDesc = -1; static gint hf_opa_GetGroupConfig_Port_NodeLID = -1; static gint hf_opa_GetGroupConfig_Port_PortNumber = -1; static gint hf_opa_GetPortCounters = -1; static gint hf_opa_GetPortCounters_nodeLID = -1; static gint hf_opa_GetPortCounters_PortNumber = -1; static gint hf_opa_GetPortCounters_flags = -1; static gint hf_opa_GetPortCounters_PortXmitData = -1; static gint hf_opa_GetPortCounters_PortRcvData = -1; static gint hf_opa_GetPortCounters_PortXmitPkts = -1; static gint hf_opa_GetPortCounters_PortRcvPkts = -1; static gint hf_opa_GetPortCounters_PortMulticastXmitPkts = -1; static gint hf_opa_GetPortCounters_PortMulticastRcvPkts = -1; static gint hf_opa_GetPortCounters_LocalLinkIntegrityErrors = -1; static gint hf_opa_GetPortCounters_FMConfigErrors = -1; static gint hf_opa_GetPortCounters_PortRcvErrors = -1; static gint hf_opa_GetPortCounters_ExcessiveBufferOverruns = -1; static gint hf_opa_GetPortCounters_PortRcvConstraintErrors = -1; static gint hf_opa_GetPortCounters_PortRcvSwitchRelayErrors = -1; static gint hf_opa_GetPortCounters_PortXmitDiscards = -1; static gint hf_opa_GetPortCounters_PortXmitConstraintErrors = -1; static gint hf_opa_GetPortCounters_PortRcvRemotePhysicalErrors = -1; static gint hf_opa_GetPortCounters_SwPortCongestion = -1; static gint hf_opa_GetPortCounters_PortXmitWait = -1; static gint hf_opa_GetPortCounters_PortRcvFECN = -1; static gint hf_opa_GetPortCounters_PortRcvBECN = -1; static gint hf_opa_GetPortCounters_PortXmitTimeCong = -1; static gint hf_opa_GetPortCounters_PortXmitWastedBW = -1; static gint hf_opa_GetPortCounters_PortXmitWaitData = -1; static gint hf_opa_GetPortCounters_PortRcvBubble = -1; static gint hf_opa_GetPortCounters_PortMarkFECN = -1; static gint hf_opa_GetPortCounters_LinkErrorRecovery = -1; static gint hf_opa_GetPortCounters_LinkDowned = -1; static gint hf_opa_GetPortCounters_UncorrectableErrors = -1; static gint hf_opa_GetPortCounters_NumLanesDown = -1; static gint hf_opa_GetPortCounters_reserved = -1; static gint hf_opa_GetPortCounters_LinkQualityIndicator = -1; static gint hf_opa_ClearPortCounters = -1; static gint hf_opa_ClearPortCounters_nodeLID = -1; static gint hf_opa_ClearPortCounters_PortNumber = -1; static gint hf_opa_ClearPortCounters_PortXmitData = -1; static gint hf_opa_ClearPortCounters_PortRcvData = -1; static gint hf_opa_ClearPortCounters_PortXmitPkts = -1; static gint hf_opa_ClearPortCounters_PortRcvPkts = -1; static gint hf_opa_ClearPortCounters_PortMulticastXmitPkts = -1; static gint hf_opa_ClearPortCounters_PortMulticastRcvPkts = -1; static gint hf_opa_ClearPortCounters_LocalLinkIntegrityErrors = -1; static gint hf_opa_ClearPortCounters_FMConfigErrors = -1; static gint hf_opa_ClearPortCounters_PortRcvErrors = -1; static gint hf_opa_ClearPortCounters_ExcessiveBufferOverruns = -1; static gint hf_opa_ClearPortCounters_PortRcvConstraintErrors = -1; static gint hf_opa_ClearPortCounters_PortRcvSwitchRelayErrors = -1; static gint hf_opa_ClearPortCounters_PortXmitDiscards = -1; static gint hf_opa_ClearPortCounters_PortXmitConstraintErrors = -1; static gint hf_opa_ClearPortCounters_PortRcvRemotePhysicalErrors = -1; static gint hf_opa_ClearPortCounters_SwPortCongestion = -1; static gint hf_opa_ClearPortCounters_PortXmitWait = -1; static gint hf_opa_ClearPortCounters_PortRcvFECN = -1; static gint hf_opa_ClearPortCounters_PortRcvBECN = -1; static gint hf_opa_ClearPortCounters_PortXmitTimeCong = -1; static gint hf_opa_ClearPortCounters_PortXmitWastedBW = -1; static gint hf_opa_ClearPortCounters_PortXmitWaitData = -1; static gint hf_opa_ClearPortCounters_PortRcvBubble = -1; static gint hf_opa_ClearPortCounters_PortMarkFECN = -1; static gint hf_opa_ClearPortCounters_LinkErrorRecovery = -1; static gint hf_opa_ClearPortCounters_LinkDowned = -1; static gint hf_opa_ClearPortCounters_UncorrectableErrors = -1; static gint hf_opa_ClearPortCounters_reserved = -1; static gint hf_opa_ClearPortCounters_CounterSelectMask = -1; static int * const _ClearPortCounters_CounterSelectMask[] = { &hf_opa_ClearPortCounters_PortXmitData, &hf_opa_ClearPortCounters_PortRcvData, &hf_opa_ClearPortCounters_PortXmitPkts, &hf_opa_ClearPortCounters_PortRcvPkts, &hf_opa_ClearPortCounters_PortMulticastXmitPkts, &hf_opa_ClearPortCounters_PortMulticastRcvPkts, &hf_opa_ClearPortCounters_LocalLinkIntegrityErrors, &hf_opa_ClearPortCounters_FMConfigErrors, &hf_opa_ClearPortCounters_PortRcvErrors, &hf_opa_ClearPortCounters_ExcessiveBufferOverruns, &hf_opa_ClearPortCounters_PortRcvConstraintErrors, &hf_opa_ClearPortCounters_PortRcvSwitchRelayErrors, &hf_opa_ClearPortCounters_PortXmitDiscards, &hf_opa_ClearPortCounters_PortXmitConstraintErrors, &hf_opa_ClearPortCounters_PortRcvRemotePhysicalErrors, &hf_opa_ClearPortCounters_SwPortCongestion, &hf_opa_ClearPortCounters_PortXmitWait, &hf_opa_ClearPortCounters_PortRcvFECN, &hf_opa_ClearPortCounters_PortRcvBECN, &hf_opa_ClearPortCounters_PortXmitTimeCong, &hf_opa_ClearPortCounters_PortXmitWastedBW, &hf_opa_ClearPortCounters_PortXmitWaitData, &hf_opa_ClearPortCounters_PortRcvBubble, &hf_opa_ClearPortCounters_PortMarkFECN, &hf_opa_ClearPortCounters_LinkErrorRecovery, &hf_opa_ClearPortCounters_LinkDowned, &hf_opa_ClearPortCounters_UncorrectableErrors, &hf_opa_ClearPortCounters_reserved, NULL }; static gint hf_opa_ClearAllPortCounters = -1; static gint hf_opa_ClearAllPortCounters_PortXmitData = -1; static gint hf_opa_ClearAllPortCounters_PortRcvData = -1; static gint hf_opa_ClearAllPortCounters_PortXmitPkts = -1; static gint hf_opa_ClearAllPortCounters_PortRcvPkts = -1; static gint hf_opa_ClearAllPortCounters_PortMulticastXmitPkts = -1; static gint hf_opa_ClearAllPortCounters_PortMulticastRcvPkts = -1; static gint hf_opa_ClearAllPortCounters_LocalLinkIntegrityErrors = -1; static gint hf_opa_ClearAllPortCounters_FMConfigErrors = -1; static gint hf_opa_ClearAllPortCounters_PortRcvErrors = -1; static gint hf_opa_ClearAllPortCounters_ExcessiveBufferOverruns = -1; static gint hf_opa_ClearAllPortCounters_PortRcvConstraintErrors = -1; static gint hf_opa_ClearAllPortCounters_PortRcvSwitchRelayErrors = -1; static gint hf_opa_ClearAllPortCounters_PortXmitDiscards = -1; static gint hf_opa_ClearAllPortCounters_PortXmitConstraintErrors = -1; static gint hf_opa_ClearAllPortCounters_PortRcvRemotePhysicalErrors = -1; static gint hf_opa_ClearAllPortCounters_SwPortCongestion = -1; static gint hf_opa_ClearAllPortCounters_PortXmitWait = -1; static gint hf_opa_ClearAllPortCounters_PortRcvFECN = -1; static gint hf_opa_ClearAllPortCounters_PortRcvBECN = -1; static gint hf_opa_ClearAllPortCounters_PortXmitTimeCong = -1; static gint hf_opa_ClearAllPortCounters_PortXmitWastedBW = -1; static gint hf_opa_ClearAllPortCounters_PortXmitWaitData = -1; static gint hf_opa_ClearAllPortCounters_PortRcvBubble = -1; static gint hf_opa_ClearAllPortCounters_PortMarkFECN = -1; static gint hf_opa_ClearAllPortCounters_LinkErrorRecovery = -1; static gint hf_opa_ClearAllPortCounters_LinkDowned = -1; static gint hf_opa_ClearAllPortCounters_UncorrectableErrors = -1; static gint hf_opa_ClearAllPortCounters_reserved = -1; static gint hf_opa_ClearAllPortCounters_CounterSelectMask = -1; static int * const _ClearAllPortCounters_CounterSelectMask[] = { &hf_opa_ClearAllPortCounters_PortXmitData, &hf_opa_ClearAllPortCounters_PortRcvData, &hf_opa_ClearAllPortCounters_PortXmitPkts, &hf_opa_ClearAllPortCounters_PortRcvPkts, &hf_opa_ClearAllPortCounters_PortMulticastXmitPkts, &hf_opa_ClearAllPortCounters_PortMulticastRcvPkts, &hf_opa_ClearAllPortCounters_LocalLinkIntegrityErrors, &hf_opa_ClearAllPortCounters_FMConfigErrors, &hf_opa_ClearAllPortCounters_PortRcvErrors, &hf_opa_ClearAllPortCounters_ExcessiveBufferOverruns, &hf_opa_ClearAllPortCounters_PortRcvConstraintErrors, &hf_opa_ClearAllPortCounters_PortRcvSwitchRelayErrors, &hf_opa_ClearAllPortCounters_PortXmitDiscards, &hf_opa_ClearAllPortCounters_PortXmitConstraintErrors, &hf_opa_ClearAllPortCounters_PortRcvRemotePhysicalErrors, &hf_opa_ClearAllPortCounters_SwPortCongestion, &hf_opa_ClearAllPortCounters_PortXmitWait, &hf_opa_ClearAllPortCounters_PortRcvFECN, &hf_opa_ClearAllPortCounters_PortRcvBECN, &hf_opa_ClearAllPortCounters_PortXmitTimeCong, &hf_opa_ClearAllPortCounters_PortXmitWastedBW, &hf_opa_ClearAllPortCounters_PortXmitWaitData, &hf_opa_ClearAllPortCounters_PortRcvBubble, &hf_opa_ClearAllPortCounters_PortMarkFECN, &hf_opa_ClearAllPortCounters_LinkErrorRecovery, &hf_opa_ClearAllPortCounters_LinkDowned, &hf_opa_ClearAllPortCounters_UncorrectableErrors, &hf_opa_ClearAllPortCounters_reserved, NULL }; static gint hf_opa_PMConfig = -1; static gint hf_opa_PMConfig_sweepInterval = -1; static gint hf_opa_PMConfig_maxClients = -1; static gint hf_opa_PMConfig_sizeHistory = -1; static gint hf_opa_PMConfig_sizeFreeze = -1; static gint hf_opa_PMConfig_lease = -1; static gint hf_opa_PMConfig_pmFlags = -1; static gint hf_opa_PMConfig_PortXmitWait = -1; static gint hf_opa_PMConfig_SwPortCongestion = -1; static gint hf_opa_PMConfig_PortRcvFECN = -1; static gint hf_opa_PMConfig_PortRcvBECN = -1; static gint hf_opa_PMConfig_PortXmitTimeCong = -1; static gint hf_opa_PMConfig_PortMarkFECN = -1; static gint hf_opa_PMConfig_integrityErrors = -1; static gint hf_opa_PMConfig_congestionErrors = -1; static gint hf_opa_PMConfig_smaCongestionErrors = -1; static gint hf_opa_PMConfig_bubbleErrors = -1; static gint hf_opa_PMConfig_securityErrors = -1; static gint hf_opa_PMConfig_routingErrors = -1; static gint hf_opa_PMConfig_LocalLinkIntegrityErrors = -1; static gint hf_opa_PMConfig_PortRcvErrors = -1; static gint hf_opa_PMConfig_ExcessiveBufferOverrunErrors = -1; static gint hf_opa_PMConfig_LinkErrorRecovery = -1; static gint hf_opa_PMConfig_LinkDowned = -1; static gint hf_opa_PMConfig_UncorrectableErrors = -1; static gint hf_opa_PMConfig_FMConfigErrors = -1; static gint hf_opa_PMConfig_LinkQualityIndicator = -1; static gint hf_opa_PMConfig_LinkWidthDowngrade = -1; static gint hf_opa_PMConfig_memoryFootprint = -1; static gint hf_opa_PMConfig_maxAttempts = -1; static gint hf_opa_PMConfig_respTimeout = -1; static gint hf_opa_PMConfig_minRespTimeout = -1; static gint hf_opa_PMConfig_maxParallelNodes = -1; static gint hf_opa_PMConfig_pmaBatchSize = -1; static gint hf_opa_PMConfig_errorClear = -1; static gint hf_opa_MoveFreezeFrame_old = -1; static gint hf_opa_MoveFreezeFrame_new = -1; static gint hf_opa_GetFocusPorts = -1; static gint hf_opa_GetFocusPorts_groupName = -1; static gint hf_opa_GetFocusPorts_select = -1; static gint hf_opa_GetFocusPorts_start = -1; static gint hf_opa_GetFocusPorts_range = -1; static gint hf_opa_GetFocusPorts_nodeLID = -1; static gint hf_opa_GetFocusPorts_portNumber = -1; static gint hf_opa_GetFocusPorts_rate = -1; static gint hf_opa_GetFocusPorts_mtu = -1; static gint hf_opa_GetFocusPorts_localFlags = -1; static gint hf_opa_GetFocusPorts_neighborFlags = -1; static gint hf_opa_GetFocusPorts_value = -1; static gint hf_opa_GetFocusPorts_nodeGUID = -1; static gint hf_opa_GetFocusPorts_nodeDesc = -1; static gint hf_opa_GetFocusPorts_neighborLid = -1; static gint hf_opa_GetFocusPorts_neighborPortNumber = -1; static gint hf_opa_GetFocusPorts_neighborValue = -1; static gint hf_opa_GetFocusPorts_neighborGuid = -1; static gint hf_opa_GetFocusPorts_neighborNodeDesc = -1; static gint hf_opa_GetImageInfo = -1; static gint hf_opa_GetImageInfo_sweepStart = -1; static gint hf_opa_GetImageInfo_sweepDuration = -1; static gint hf_opa_GetImageInfo_numHFIPorts = -1; static gint hf_opa_GetImageInfo_numSwitchNodes = -1; static gint hf_opa_GetImageInfo_numSwitchPorts = -1; static gint hf_opa_GetImageInfo_numLinks = -1; static gint hf_opa_GetImageInfo_numSMs = -1; static gint hf_opa_GetImageInfo_numFailedNodes = -1; static gint hf_opa_GetImageInfo_numFailedPorts = -1; static gint hf_opa_GetImageInfo_numSkippedNodes = -1; static gint hf_opa_GetImageInfo_numSkippedPorts = -1; static gint hf_opa_GetImageInfo_numUnexpectedClearPorts = -1; static gint hf_opa_GetImageInfo_imageInterval = -1; static gint hf_opa_GetImageInfo_smPortGuid = -1; static gint hf_opa_GetImageInfo_smNodeDesc = -1; static gint hf_opa_GetImageInfo_lid = -1; static gint hf_opa_GetImageInfo_state = -1; static gint hf_opa_GetImageInfo_priority = -1; static gint hf_opa_GetImageInfo_portNumber = -1; static gint hf_opa_GetVFList = -1; static gint hf_opa_GetVFList_vfName = -1; static gint hf_opa_GetVFInfo = -1; static gint hf_opa_GetVFInfo_vfName = -1; static gint hf_opa_GetVFInfo_numPorts = -1; static gint hf_opa_GetVFInfo_totalMBps = -1; static gint hf_opa_GetVFInfo_totalKPps = -1; static gint hf_opa_GetVFInfo_avgMBps = -1; static gint hf_opa_GetVFInfo_minMBps = -1; static gint hf_opa_GetVFInfo_maxMBps = -1; static gint hf_opa_GetVFInfo_numBWBuckets = -1; static gint hf_opa_GetVFInfo_BWBuckets = -1; static gint hf_opa_GetVFInfo_avgKPps = -1; static gint hf_opa_GetVFInfo_minKPps = -1; static gint hf_opa_GetVFInfo_maxKPps = -1; static gint hf_opa_GetVFInfo_pmaFailedPorts = -1; static gint hf_opa_GetVFInfo_topoFailedPorts = -1; static gint hf_opa_GetVFInfo_integrityErrors = -1; static gint hf_opa_GetVFInfo_congestionErrors = -1; static gint hf_opa_GetVFInfo_smaCongestionErrors = -1; static gint hf_opa_GetVFInfo_bubbleErrors = -1; static gint hf_opa_GetVFInfo_securityErrors = -1; static gint hf_opa_GetVFInfo_routingErrors = -1; static gint hf_opa_GetVFInfo_utilizationPct10 = -1; static gint hf_opa_GetVFInfo_discardsPct10 = -1; static gint hf_opa_GetVFInfo_maxInternalRate = -1; static gint hf_opa_GetVFInfo_minInternalRate = -1; static gint hf_opa_GetVFInfo_maxInternalMBps = -1; static gint hf_opa_GetVFConfig = -1; static gint hf_opa_GetVFConfig_vfName = -1; static gint hf_opa_GetVFConfig_Port_NodeGUID = -1; static gint hf_opa_GetVFConfig_Port_nodeDesc = -1; static gint hf_opa_GetVFConfig_Port_NodeLID = -1; static gint hf_opa_GetVFConfig_Port_PortNumber = -1; static gint hf_opa_GetVFPortCounters = -1; static gint hf_opa_GetVFPortCounters_vfName = -1; static gint hf_opa_GetVFPortCounters_nodeLID = -1; static gint hf_opa_GetVFPortCounters_PortNumber = -1; static gint hf_opa_GetVFPortCounters_flags = -1; static gint hf_opa_GetVFPortCounters_PortVFXmitData = -1; static gint hf_opa_GetVFPortCounters_PortVFRcvData = -1; static gint hf_opa_GetVFPortCounters_PortVFXmitPkts = -1; static gint hf_opa_GetVFPortCounters_PortVFRcvPkts = -1; static gint hf_opa_GetVFPortCounters_PortVFXmitDiscards = -1; static gint hf_opa_GetVFPortCounters_SwPortVFCongestion = -1; static gint hf_opa_GetVFPortCounters_PortVFXmitWait = -1; static gint hf_opa_GetVFPortCounters_PortVFRcvFECN = -1; static gint hf_opa_GetVFPortCounters_PortVFRcvBECN = -1; static gint hf_opa_GetVFPortCounters_PortVFXmitTimeCong = -1; static gint hf_opa_GetVFPortCounters_PortVFXmitWastedBW = -1; static gint hf_opa_GetVFPortCounters_PortVFXmitWaitData = -1; static gint hf_opa_GetVFPortCounters_PortVFRcvBubble = -1; static gint hf_opa_GetVFPortCounters_PortVFMarkFECN = -1; static gint hf_opa_ClearVFPortCounters = -1; static gint hf_opa_ClearVFPortCounters_vfName = -1; static gint hf_opa_ClearVFPortCounters_nodeLID = -1; static gint hf_opa_ClearVFPortCounters_PortNumber = -1; static gint hf_opa_ClearVFPortCounters_PortVFXmitData = -1; static gint hf_opa_ClearVFPortCounters_PortVFRcvData = -1; static gint hf_opa_ClearVFPortCounters_PortVFXmitPkts = -1; static gint hf_opa_ClearVFPortCounters_PortVFRcvPkts = -1; static gint hf_opa_ClearVFPortCounters_PortVFXmitDiscards = -1; static gint hf_opa_ClearVFPortCounters_SwPortVFCongestion = -1; static gint hf_opa_ClearVFPortCounters_PortVFXmitWait = -1; static gint hf_opa_ClearVFPortCounters_PortVFRcvFECN = -1; static gint hf_opa_ClearVFPortCounters_PortVFRcvBECN = -1; static gint hf_opa_ClearVFPortCounters_PortVFXmitTimeCong = -1; static gint hf_opa_ClearVFPortCounters_PortVFXmitWastedBW = -1; static gint hf_opa_ClearVFPortCounters_PortVFXmitWaitData = -1; static gint hf_opa_ClearVFPortCounters_PortVFRcvBubble = -1; static gint hf_opa_ClearVFPortCounters_PortVFMarkFECN = -1; static gint hf_opa_ClearVFPortCounters_reserved = -1; static gint hf_opa_ClearVFPortCounters_CounterSelectMask = -1; static int * const _ClearVFPortCounters_CounterSelectMask[] = { &hf_opa_ClearVFPortCounters_PortVFXmitData, &hf_opa_ClearVFPortCounters_PortVFRcvData, &hf_opa_ClearVFPortCounters_PortVFXmitPkts, &hf_opa_ClearVFPortCounters_PortVFRcvPkts, &hf_opa_ClearVFPortCounters_PortVFXmitDiscards, &hf_opa_ClearVFPortCounters_SwPortVFCongestion, &hf_opa_ClearVFPortCounters_PortVFXmitWait, &hf_opa_ClearVFPortCounters_PortVFRcvFECN, &hf_opa_ClearVFPortCounters_PortVFRcvBECN, &hf_opa_ClearVFPortCounters_PortVFXmitTimeCong, &hf_opa_ClearVFPortCounters_PortVFXmitWastedBW, &hf_opa_ClearVFPortCounters_PortVFXmitWaitData, &hf_opa_ClearVFPortCounters_PortVFRcvBubble, &hf_opa_ClearVFPortCounters_PortVFMarkFECN, &hf_opa_ClearVFPortCounters_reserved, NULL }; static gint hf_opa_GetVFFocusPorts = -1; static gint hf_opa_GetVFFocusPorts_vfName = -1; static gint hf_opa_GetVFFocusPorts_select = -1; static gint hf_opa_GetVFFocusPorts_start = -1; static gint hf_opa_GetVFFocusPorts_range = -1; static gint hf_opa_GetVFFocusPorts_nodeLID = -1; static gint hf_opa_GetVFFocusPorts_portNumber = -1; static gint hf_opa_GetVFFocusPorts_rate = -1; static gint hf_opa_GetVFFocusPorts_mtu = -1; static gint hf_opa_GetVFFocusPorts_localFlags = -1; static gint hf_opa_GetVFFocusPorts_neighborFlags = -1; static gint hf_opa_GetVFFocusPorts_value = -1; static gint hf_opa_GetVFFocusPorts_nodeGUID = -1; static gint hf_opa_GetVFFocusPorts_nodeDesc = -1; static gint hf_opa_GetVFFocusPorts_neighborLid = -1; static gint hf_opa_GetVFFocusPorts_neighborPortNumber = -1; static gint hf_opa_GetVFFocusPorts_neighborValue = -1; static gint hf_opa_GetVFFocusPorts_neighborGuid = -1; static gint hf_opa_GetVFFocusPorts_neighborNodeDesc = -1; /* Expert Info */ static expert_field ei_opa_mad_error = EI_INIT; static expert_field ei_opa_mad_no_attribute_dissector = EI_INIT; static expert_field ei_opa_mad_attribute_modifier_error_nonzero = EI_INIT; static expert_field ei_opa_rmpp_undecoded = EI_INIT; static expert_field ei_opa_aggregate_error = EI_INIT; /* Fragments */ static gint hf_opa_rmpp_fragments = -1; static gint hf_opa_rmpp_fragment = -1; static gint hf_opa_rmpp_fragment_overlap = -1; static gint hf_opa_rmpp_fragment_overlap_conflicts = -1; static gint hf_opa_rmpp_fragment_multiple_tails = -1; static gint hf_opa_rmpp_fragment_too_long_fragment = -1; static gint hf_opa_rmpp_fragment_error = -1; static gint hf_opa_rmpp_fragment_count = -1; static gint hf_opa_rmpp_reassembled_in = -1; static gint hf_opa_rmpp_reassembled_length = -1; static const fragment_items opa_rmpp_frag_items = { &ett_rmpp_fragment, &ett_rmpp_fragments, &hf_opa_rmpp_fragments, &hf_opa_rmpp_fragment, &hf_opa_rmpp_fragment_overlap, &hf_opa_rmpp_fragment_overlap_conflicts, &hf_opa_rmpp_fragment_multiple_tails, &hf_opa_rmpp_fragment_too_long_fragment, &hf_opa_rmpp_fragment_error, &hf_opa_rmpp_fragment_count, &hf_opa_rmpp_reassembled_in, &hf_opa_rmpp_reassembled_length, NULL, "RMPP Fragments" }; /** * Builds a range string from a PortSelectMask * * @param[in] tvb pointer to packet buffer * @param[in] offset offset into packet buffer where port select mask begins * @param[out] port_list optional: pointer to an arrray of ports, allocated by * wmem_alloc(wmem_packet_scope(), 256) * @param[out] num_ports optional: pointer to a number of ports in set in port * select mask and portlist if provided. * @return gchar* pointer to range string allocated using * wmem_strbuf_new_sized(wmem_packet_scope(),...) */ static gchar *opa_format_port_select_mask(tvbuff_t *tvb, gint offset, guint8 **port_list, guint8 *num_ports) { gint i, j, port, last = -1, first = 0, ports = 0; guint64 mask, psm[4]; wmem_strbuf_t *buf = NULL; guint8 *portlist = NULL; if (!tvb_bytes_exist(tvb, offset, 32)) { return (gchar *)"Invalid Length: Requires 32 bytes"; } psm[0] = tvb_get_ntoh64(tvb, offset); psm[1] = tvb_get_ntoh64(tvb, offset + 8); psm[2] = tvb_get_ntoh64(tvb, offset + 16); psm[3] = tvb_get_ntoh64(tvb, offset + 24); buf = wmem_strbuf_create(wmem_packet_scope()); if (port_list) { /* Allocate list of ports; max = 256 = 64 * 4 */ portlist = (guint8 *)wmem_alloc(wmem_packet_scope(), 256); memset(portlist, 0xFF, 256); } for (i = 0; i < 4; i++) { mask = psm[3 - i]; for (j = 0; mask && j < 64; j++, mask >>= 1) { if ((mask & (guint64)0x1) == 0) continue; port = (i * 64) + j; if (portlist) portlist[ports] = port; if (last == -1) { wmem_strbuf_append_printf(buf, "%d", port); last = first = port; } else if ((port - last) > 1) { if (first == last) wmem_strbuf_append_printf(buf, ",%d", port); else wmem_strbuf_append_printf(buf, "-%d,%d", last, port); last = first = port; } else { last = port; } ports++; } } if (first != last && last != -1) { wmem_strbuf_append_printf(buf, "-%d", last); } if (wmem_strbuf_get_len(buf) == 0) { wmem_strbuf_append(buf, ""); } if (num_ports) *num_ports = ports; if (port_list) *port_list = portlist; return (gchar *)wmem_strbuf_finalize(buf); } /* Custom Functions */ static void cf_opa_mad_swinfo_ar_frequency(gchar *buf, guint16 value) { snprintf(buf, ITEM_LABEL_LENGTH, "%u ms", 2 ^ (value)*64); } static void cf_opa_mad_linkspeed(gchar *buf, guint16 value) { int len = 0; if (value & 0x1) /* 12.5 Gbps */ len = snprintf(buf, ITEM_LABEL_LENGTH, "12.5"); if (value & 0x2) /* 25.78125 Gbps */ len += snprintf(&buf[len], ITEM_LABEL_LENGTH - len, "%s25.78125", (len ? ", " : "")); if (len) snprintf(&buf[len], ITEM_LABEL_LENGTH - len, " Gbps"); else snprintf(buf, ITEM_LABEL_LENGTH, "No State Change"); } static void cf_opa_mad_linkwidth(gchar *buf, guint16 value) { int len = 0; if (value & 0x1) /* 1x */ len = snprintf(buf, ITEM_LABEL_LENGTH, "1X"); if (value & 0x2) /* 2x */ len += snprintf(&buf[len], ITEM_LABEL_LENGTH - len, "%s2X", (len ? ", " : "")); if (value & 0x4) /* 3x */ len += snprintf(&buf[len], ITEM_LABEL_LENGTH - len, "%s3X", (len ? ", " : "")); if (value & 0x8) /* 4x */ len += snprintf(&buf[len], ITEM_LABEL_LENGTH - len, "%s4X", (len ? ", " : "")); if (!len) snprintf(buf, ITEM_LABEL_LENGTH, "No State Change"); } static void cf_opa_mad_portlinkmode(gchar *buf, guint16 value) { int len = 0; if (value & 0x1) /* Reserved */ len = snprintf(buf, ITEM_LABEL_LENGTH, "Reserved"); if (value & 0x2) /* Ethernet */ len += snprintf(&buf[len], ITEM_LABEL_LENGTH - len, "%sEthernet", (len ? ", " : "")); if (value & 0x4) /* STL */ len += snprintf(&buf[len], ITEM_LABEL_LENGTH - len, "%sSTL", (len ? ", " : "")); if (!len) snprintf(buf, ITEM_LABEL_LENGTH, "No State Change"); } static void cf_opa_mad_portltpcrcmode(gchar *buf, guint16 value) { int len = 0; if (value & 0x1) /* 14-bit */ len = snprintf(buf, ITEM_LABEL_LENGTH, "14-bit"); if (value & 0x2) /* 16-bit */ len += snprintf(&buf[len], ITEM_LABEL_LENGTH - len, "%s16-bit", (len ? ", " : "")); if (value & 0x4) /* 48-bit */ len += snprintf(&buf[len], ITEM_LABEL_LENGTH - len, "%s48-bit overlapping", (len ? ", " : "")); if (value & 0x8) /* 12 to 16 bit per lane */ len += snprintf(&buf[len], ITEM_LABEL_LENGTH - len, "%s[12,16]-bit per lane", (len ? ", " : "")); if (len) snprintf(&buf[len], ITEM_LABEL_LENGTH - len, " LTP CRC Mode"); else snprintf(buf, ITEM_LABEL_LENGTH, "No State Change"); } static void cf_opa_mad_packetformat(gchar *buf, guint16 value) { int len = 0; if (value & 0x1) /* 8B */ len = snprintf(buf, ITEM_LABEL_LENGTH, "8B"); if (value & 0x2) /* 9B */ len += snprintf(&buf[len], ITEM_LABEL_LENGTH - len, "%s9B", (len ? ", " : "")); if (value & 0x4) /* 10B */ len += snprintf(&buf[len], ITEM_LABEL_LENGTH - len, "%s10B", (len ? ", " : "")); if (value & 0x8) /* 16B */ len += snprintf(&buf[len], ITEM_LABEL_LENGTH - len, "%s16B", (len ? ", " : "")); if (len) snprintf(&buf[len], ITEM_LABEL_LENGTH - len, " Format%s", (len > 4 ? "s" : "")); else snprintf(buf, ITEM_LABEL_LENGTH, "No State Change"); } static void cf_opa_mad_swcongestionsetting_controlmap(gchar *buf, guint32 value) { int len = 0; if (value & 0x1) /* Victim */ len = snprintf(buf, ITEM_LABEL_LENGTH, "Victim"); if (value & 0x2) /* Credit */ len += snprintf(&buf[len], ITEM_LABEL_LENGTH - len, "%sCredit", (len ? ", " : "")); if (value & 0x4) /* Threshold & PacketSize */ len += snprintf(&buf[len], ITEM_LABEL_LENGTH - len, "%sThreshold & PacketSize", (len ? ", " : "")); if (value & 0x8) /* CS_threshold & CS_ReturnDelay */ len += snprintf(&buf[len], ITEM_LABEL_LENGTH - len, "%sCS_threshold & CS_ReturnDelay", (len ? ", " : "")); if (value & 0x10) /* Marking Rate */ len += snprintf(&buf[len], ITEM_LABEL_LENGTH - len, "%sMarking Rate", (len ? ", " : "")); if (!len) snprintf(buf, ITEM_LABEL_LENGTH, "No Valid Fields"); } static void cf_opa_mad_32b_mask(gchar *buf, guint32 value) { int len = 0; guint32 i, mask; for (i = 0, mask = value; mask && i < 32 && len < ITEM_LABEL_LENGTH; i++, mask >>= 1) { if (mask & 1) { len += snprintf(&buf[len], ITEM_LABEL_LENGTH - len, "%s%u", (len ? ", " : ""), i); } } if (!len) { snprintf(buf, ITEM_LABEL_LENGTH, " "); } } static void cf_opa_mad_computed_pct10(gchar *buf, guint16 value) { snprintf(buf, ITEM_LABEL_LENGTH, "%u.%01u", value / 10, value % 10); } /* Dissector Declarations */ static dissector_handle_t opa_mad_handle; static dissector_table_t ethertype_dissector_table; static reassembly_table opa_mad_rmpp_reassembly_table; static gboolean pref_parse_on_mad_status_error = FALSE; static gboolean pref_attempt_rmpp_defragment = TRUE; static range_t *global_mad_vendor_class = NULL; static range_t *global_mad_vendor_rmpp_class = NULL; static range_t *global_mad_application_class = NULL; static range_t *global_mad_reserved_class = NULL; static range_t *global_mad_opa_class = NULL; static gint parse_MAD_AttributeModifier(proto_tree *MAD_tree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { proto_tree *AttributeModifier_tree; proto_item *AttributeModifier_item; gint local_offset = *offset; AttributeModifier_item = proto_tree_add_item(MAD_tree, hf_opa_attribute_modifier, tvb, local_offset, 4, ENC_BIG_ENDIAN); AttributeModifier_tree = proto_item_add_subtree(AttributeModifier_item, ett_mad_attributemod); switch (MAD->MgmtClass) { case SUBN_LID_ROUTED: case SUBN_DIRECTED_ROUTE: switch (MAD->AttributeID) { case SM_ATTR_ID_CLASS_PORT_INFO: /* Shall be 0 */ case SM_ATTR_ID_NOTICE: case SM_ATTR_ID_NODE_DESCRIPTION: case SM_ATTR_ID_NODE_INFO: case SM_ATTR_ID_SWITCH_INFO: case SM_ATTR_ID_SL_SC_MAPPING_TABLE: case SM_ATTR_ID_SC_SL_MAPPING_TABLE: case SM_ATTR_ID_SM_INFO: case SM_ATTR_ID_CONGESTION_INFO: case SM_ATTR_ID_SWITCH_CONGESTION_LOG: case SM_ATTR_ID_SWITCH_CONGESTION_SETTING: case SM_ATTR_ID_HFI_CONGESTION_LOG: case SM_ATTR_ID_HFI_CONGESTION_SETTING: if (MAD->AttributeModifier) expert_add_info(NULL, AttributeModifier_item, &ei_opa_mad_attribute_modifier_error_nonzero); break; case SM_ATTR_ID_PORT_INFO: /* NNNN NNNN 0000 0000 0000 00SA PPPP PPPP */ proto_tree_add_bitmask_list(AttributeModifier_tree, tvb, local_offset, 4, _attribute_modifier_Nps2AP, ENC_BIG_ENDIAN); break; case SM_ATTR_ID_PORT_STATE_INFO: /* NNNN NNNN 0000 0000 0000 00S0 PPPP PPPP */ proto_tree_add_bitmask_list(AttributeModifier_tree, tvb, local_offset, 4, _attribute_modifier_NpS2P, ENC_BIG_ENDIAN); break; case SM_ATTR_ID_LED_INFO: /* NNNN NNNN 0000 0000 0000 000A PPPP PPPP */ case SM_ATTR_ID_BUFFER_CONTROL_TABLE: proto_tree_add_bitmask_list(AttributeModifier_tree, tvb, local_offset, 4, _attribute_modifier_NpAP, ENC_BIG_ENDIAN); break; case SM_ATTR_ID_PART_TABLE: /* NNNN NNNN PPPP PPPP 0000 0BBB BBBB BBBB */ proto_tree_add_bitmask_list(AttributeModifier_tree, tvb, local_offset, 4, _attribute_modifier_NbP2B, ENC_BIG_ENDIAN); break; case SM_ATTR_ID_SC_SC_MAPPING_TABLE: /* NNNN NNNN 0000 00AB IIII IIII EEEE EEEE */ proto_tree_add_bitmask_list(AttributeModifier_tree, tvb, local_offset, 4, _attribute_modifier_NbA2B2IE, ENC_BIG_ENDIAN); break; case SM_ATTR_ID_VL_ARBITRATION: /* NNNN NNNN SSSS SSSS 0000 000A PPPP PPPP */ proto_tree_add_bitmask_list(AttributeModifier_tree, tvb, local_offset, 4, _attribute_modifier_NpSAP, ENC_BIG_ENDIAN); break; case SM_ATTR_ID_LINEAR_FWD_TABLE: /* NNNN NNNN 0000 0ABB BBBB BBBB BBBB BBBB */ case SM_ATTR_ID_PORT_GROUP_FWD_TABLE: proto_tree_add_bitmask_list(AttributeModifier_tree, tvb, local_offset, 4, _attribute_modifier_NbA3B3, ENC_BIG_ENDIAN); break; case SM_ATTR_ID_MCAST_FWD_TABLE: /* NNNN NNNN PP0A BBBB BBBB BBBB BBBB BBBB */ proto_tree_add_bitmask_list(AttributeModifier_tree, tvb, local_offset, 4, _attribute_modifier_NbP3A4B4, ENC_BIG_ENDIAN); break; case SM_ATTR_ID_CABLE_INFO: /* 0AAA AAAA AAAA ALLL LLL0 0000 PPPP PPPP */ proto_tree_add_bitmask_list(AttributeModifier_tree, tvb, local_offset, 4, _attribute_modifier_A5LP, ENC_BIG_ENDIAN); break; case SM_ATTR_ID_AGGREGATE: /* 0000 0000 0000 0000 0000 0000 NNNN NNNN */ proto_tree_add_item(AttributeModifier_tree, hf_opa_attribute_modifier_N2, tvb, local_offset, 4, ENC_BIG_ENDIAN); break; case SM_ATTR_ID_SC_VLR_MAPPING_TABLE: /* NNNN NNNN 0000 0000 000Y 000A PPPP PPPP */ case SM_ATTR_ID_SC_VLT_MAPPING_TABLE: case SM_ATTR_ID_SC_VLNT_MAPPING_TABLE: proto_tree_add_bitmask_list(AttributeModifier_tree, tvb, local_offset, 4, _attribute_modifier_NbYAP, ENC_BIG_ENDIAN); break; case SM_ATTR_ID_SWITCH_PORT_CONGESTION_SETTING: /* NNNN NNNN 0000 0000 0000 0000 PPPP PPPP */ proto_tree_add_bitmask_list(AttributeModifier_tree, tvb, local_offset, 4, _attribute_modifier_NpP, ENC_BIG_ENDIAN); break; case SM_ATTR_ID_HFI_CONGESTION_CONTROL_TABLE: /* NNNN NNNN 0000 0000 0000 0000 PPPP PPPP */ proto_tree_add_bitmask_list(AttributeModifier_tree, tvb, local_offset, 4, _attribute_modifier_NbP, ENC_BIG_ENDIAN); break; case SM_ATTR_ID_PORT_GROUP_TABLE: /* NNNN NNNN PP00 0000 0000 0000 00AB BBBB */ proto_tree_add_bitmask_list(AttributeModifier_tree, tvb, local_offset, 4, _attribute_modifier_NbP3A6B5, ENC_BIG_ENDIAN); break; default: if (MAD->AttributeModifier) expert_add_info(NULL, AttributeModifier_item, &ei_opa_mad_attribute_modifier_error_nonzero); break; } break; case PERF: switch (MAD->AttributeID) { case PM_ATTR_ID_CLASS_PORTINFO: /* 0 */ if (MAD->AttributeModifier) expert_add_info(NULL, AttributeModifier_item, &ei_opa_mad_attribute_modifier_error_nonzero); break; case PM_ATTR_ID_PORT_STATUS: /* PPPP PPPP 0000 0000 0000 0000 0000 0000 */ case PM_ATTR_ID_CLEAR_PORT_STATUS: case PM_ATTR_ID_DATA_PORT_COUNTERS: case PM_ATTR_ID_ERROR_PORT_COUNTERS: proto_tree_add_item(AttributeModifier_tree, hf_opa_attribute_modifier_NP, tvb, local_offset, 4, ENC_BIG_ENDIAN); break; case PM_ATTR_ID_ERROR_INFO: default: if (MAD->AttributeModifier) expert_add_info(NULL, AttributeModifier_item, &ei_opa_mad_attribute_modifier_error_nonzero); break; } break; case PERFADMN: case SUBNADMN: if (MAD->AttributeModifier) expert_add_info(NULL, AttributeModifier_item, &ei_opa_mad_attribute_modifier_error_nonzero); break; default: break; } local_offset += 4; return local_offset; } /* Parse the common MAD Header */ static gboolean parse_MAD_Common(proto_tree *parentTree, packet_info *pinfo, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { gint local_offset = *offset; proto_item *MAD_header_item; proto_tree *MAD_header_tree; proto_item *MAD_Status_item; if (MAD == NULL) { return FALSE; } /* Get the Management Class to decide between LID Routed and Direct Route */ /* Populate the Dissector Tree */ MAD_header_item = proto_tree_add_item(parentTree, hf_opa_mad, tvb, local_offset, 24, ENC_NA); MAD_header_tree = proto_item_add_subtree(MAD_header_item, ett_mad); proto_tree_add_item(MAD_header_tree, hf_opa_mad_base_version, tvb, local_offset, 1, ENC_BIG_ENDIAN); MAD->BaseVersion = tvb_get_guint8(tvb, local_offset); local_offset += 1; proto_tree_add_item(MAD_header_tree, hf_opa_mad_mgmt_class, tvb, local_offset, 1, ENC_BIG_ENDIAN); MAD->MgmtClass = tvb_get_guint8(tvb, local_offset); local_offset += 1; proto_tree_add_item(MAD_header_tree, hf_opa_mad_class_version, tvb, local_offset, 1, ENC_BIG_ENDIAN); MAD->ClassVersion = tvb_get_guint8(tvb, local_offset); local_offset += 1; proto_tree_add_item(MAD_header_tree, hf_opa_mad_method, tvb, local_offset, 1, ENC_BIG_ENDIAN); MAD->Method = tvb_get_guint8(tvb, local_offset); local_offset += 1; if (MAD->MgmtClass == SUBN_DIRECTED_ROUTE) { proto_tree_add_item(MAD_header_tree, hf_opa_mad_status_DR_D, tvb, local_offset, 2, ENC_BIG_ENDIAN); MAD_Status_item = proto_tree_add_item(MAD_header_tree, hf_opa_mad_status_DR_status, tvb, local_offset, 2, ENC_BIG_ENDIAN); MAD->Status = tvb_get_ntohs(tvb, local_offset); local_offset += 2; if (MAD->Status & 0x7FFF) { proto_item_append_text(MAD_header_item, " Error: 0x%04x", MAD->Status & 0x7FFF); expert_add_info_format(pinfo, MAD_Status_item, &ei_opa_mad_error, "Mad Status Error (0x%04x)", MAD->Status & 0x7FFF); } proto_tree_add_item(MAD_header_tree, hf_opa_mad_status_DR_Hop_Pointer, tvb, local_offset, 1, ENC_BIG_ENDIAN); MAD->HopPointer = tvb_get_guint8(tvb, local_offset); local_offset += 1; proto_tree_add_item(MAD_header_tree, hf_opa_mad_status_DR_Hop_Count, tvb, local_offset, 1, ENC_BIG_ENDIAN); MAD->HopCount = tvb_get_guint8(tvb, local_offset); local_offset += 1; } else { MAD_Status_item = proto_tree_add_bitmask(MAD_header_tree, tvb, local_offset, hf_opa_mad_status, ett_mad_status, _mad_status, ENC_BIG_ENDIAN); MAD->Status = tvb_get_ntohs(tvb, local_offset); local_offset += 2; if (MAD->Status) { proto_item_append_text(MAD_header_item, " Error: 0x%04x", MAD->Status); expert_add_info_format(pinfo, MAD_Status_item, &ei_opa_mad_error, "Mad Status Error (0x%04x)", MAD->Status); } proto_tree_add_item(MAD_header_tree, hf_opa_reserved16, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; } proto_tree_add_item(MAD_header_tree, hf_opa_mad_transaction_id, tvb, local_offset, 8, ENC_BIG_ENDIAN); MAD->TransactionID = tvb_get_ntoh64(tvb, local_offset); local_offset += 8; proto_tree_add_item(MAD_header_tree, hf_opa_mad_attribute_id, tvb, local_offset, 2, ENC_BIG_ENDIAN); MAD->AttributeID = tvb_get_ntohs(tvb, local_offset); local_offset += 2; proto_tree_add_item(MAD_header_tree, hf_opa_reserved16, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; MAD->AttributeModifier = tvb_get_ntohl(tvb, local_offset); *offset = parse_MAD_AttributeModifier(MAD_header_tree, tvb, &local_offset, MAD); return TRUE; } /* Parse the RMPP (Reliable Multi-Packet Transaction Protocol) */ static gboolean parse_RMPP(proto_tree *parentTree, packet_info *pinfo, tvbuff_t *tvb, gint *offset, RMPP_t *RMPP) { gint local_offset = *offset; proto_item *RMPP_header_item; proto_item *RMPP_type_item; proto_item *RMPP_segment_number_item; proto_tree *RMPP_header_tree; RMPP_header_item = proto_tree_add_item(parentTree, hf_opa_rmpp, tvb, local_offset, 12, ENC_NA); RMPP_header_tree = proto_item_add_subtree(RMPP_header_item, ett_rmpp); proto_tree_add_item(RMPP_header_tree, hf_opa_rmpp_version, tvb, local_offset, 1, ENC_BIG_ENDIAN); RMPP->Version = tvb_get_guint8(tvb, local_offset); local_offset += 1; RMPP_type_item = proto_tree_add_item(RMPP_header_tree, hf_opa_rmpp_type, tvb, local_offset, 1, ENC_BIG_ENDIAN); RMPP->Type = tvb_get_guint8(tvb, local_offset); local_offset += 1; proto_tree_add_item(RMPP_header_tree, hf_opa_rmpp_r_resp_time, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(RMPP_header_tree, hf_opa_rmpp_flags_last, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(RMPP_header_tree, hf_opa_rmpp_flags_first, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(RMPP_header_tree, hf_opa_rmpp_flags_active, tvb, local_offset, 1, ENC_BIG_ENDIAN); RMPP->resptime_flags = tvb_get_guint8(tvb, local_offset); local_offset += 1; proto_tree_add_item(RMPP_header_tree, hf_opa_rmpp_status, tvb, local_offset, 1, ENC_BIG_ENDIAN); RMPP->Status = tvb_get_guint8(tvb, local_offset); local_offset += 1; if (!(RMPP->resptime_flags & RMPP_FLAG_ACTIVE_MASK) && RMPP->Type == RMPP_ILLEGAL) { proto_item_set_text(RMPP_header_item, "%s%s", "RMPP (Empty)", " - Reliable Multi-Packet Transaction Protocol"); proto_item_append_text(RMPP_type_item, " %s", "RMPP (Empty)"); } else { proto_item_set_text(RMPP_header_item, "%s%s", val_to_str(RMPP->Type, RMPP_Packet_Types, "RMPP (Reserved 0x%02x)"), " - Reliable Multi-Packet Transaction Protocol"); proto_item_append_text(RMPP_type_item, " %s", val_to_str(RMPP->Type, RMPP_Packet_Types, "RMPP (Reserved 0x%02x)")); } RMPP->PayloadLength = 0; switch (RMPP->Type) { case RMPP_ILLEGAL: proto_tree_add_item(RMPP_header_tree, hf_opa_rmpp_data1, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(RMPP_header_tree, hf_opa_rmpp_data2, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; break; case RMPP_DATA: RMPP_segment_number_item = proto_tree_add_item(RMPP_header_tree, hf_opa_rmpp_segment_number, tvb, local_offset, 4, ENC_BIG_ENDIAN); RMPP->SegmentNumber = tvb_get_ntohl(tvb, local_offset); if (!pref_attempt_rmpp_defragment && RMPP->SegmentNumber > 1) { expert_add_info_format(pinfo, RMPP_segment_number_item, &ei_opa_rmpp_undecoded, "Parsing Disabled for RMPP Data Segments greater than 1 (%u)", RMPP->SegmentNumber); } local_offset += 4; proto_tree_add_item(RMPP_header_tree, hf_opa_rmpp_payload_length32, tvb, local_offset, 4, ENC_BIG_ENDIAN); RMPP->PayloadLength = tvb_get_ntohl(tvb, local_offset); local_offset += 4; break; case RMPP_ACK: proto_tree_add_item(RMPP_header_tree, hf_opa_rmpp_segment_number, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(RMPP_header_tree, hf_opa_rmpp_new_window_last, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; break; case RMPP_STOP: case RMPP_ABORT: proto_tree_add_item(RMPP_header_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_NA); local_offset += 4; proto_tree_add_item(RMPP_header_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_NA); local_offset += 4; break; default: return FALSE; } *offset = local_offset; return TRUE; } /* Parse NoticeDataDetails Attribute Field */ static gint parse_NoticeDataDetails(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, guint16 trapNumber) { gint local_offset = *offset; proto_item *DataDetails_header_item; proto_tree *DataDetails_header_tree; if (!parentTree) return 0; DataDetails_header_item = proto_tree_add_item(parentTree, hf_opa_Trap, tvb, local_offset, 64, ENC_NA); DataDetails_header_tree = proto_item_add_subtree(DataDetails_header_item, ett_datadetails); proto_item_append_text(DataDetails_header_item, " %u DataDetails", trapNumber); switch (trapNumber) { case 64: case 65: case 66: case 67: proto_tree_add_item(DataDetails_header_tree, hf_opa_Trap_GID, tvb, local_offset, 16, ENC_NA); local_offset += 16; break; case 128: case 2048: proto_tree_add_item(DataDetails_header_tree, hf_opa_Trap_LID, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; break; case 129: case 130: case 131: proto_tree_add_item(DataDetails_header_tree, hf_opa_Trap_LID, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(DataDetails_header_tree, hf_opa_Trap_PORTNO, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; break; case 144: proto_tree_add_item(DataDetails_header_tree, hf_opa_Trap_LID, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(DataDetails_header_tree, hf_opa_Trap_CAPABILITYMASK, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(DataDetails_header_tree, hf_opa_reserved16, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(DataDetails_header_tree, hf_opa_Trap_CAPABILITYMASK3, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(DataDetails_header_tree, hf_opa_reserved8, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(DataDetails_header_tree, hf_opa_Trap_144_reserved, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(DataDetails_header_tree, hf_opa_Trap_LinkWidthDowngradeEnabledChange, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(DataDetails_header_tree, hf_opa_Trap_LinkSpeecEnabledChange, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(DataDetails_header_tree, hf_opa_Trap_LinkWidthEnabledChange, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(DataDetails_header_tree, hf_opa_Trap_NodeDescriptionChange, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; break; case 145: proto_tree_add_item(DataDetails_header_tree, hf_opa_Trap_SystemImageGUID, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(DataDetails_header_tree, hf_opa_Trap_LID, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; break; case 256: proto_tree_add_item(DataDetails_header_tree, hf_opa_Trap_LID, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(DataDetails_header_tree, hf_opa_Trap_DRSLID, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(DataDetails_header_tree, hf_opa_Trap_Method, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(DataDetails_header_tree, hf_opa_Trap_DRNotice, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(DataDetails_header_tree, hf_opa_Trap_DRPathTruncated, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(DataDetails_header_tree, hf_opa_Trap_DRHopCount, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(DataDetails_header_tree, hf_opa_Trap_AttributeID, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(DataDetails_header_tree, hf_opa_Trap_AttributeModifier, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(DataDetails_header_tree, hf_opa_Trap_MKey, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(DataDetails_header_tree, hf_opa_Trap_DRNoticeReturnPath, tvb, local_offset, 30, ENC_NA); local_offset += 30; break; case 257: case 258: proto_tree_add_item(DataDetails_header_tree, hf_opa_Trap_LID, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(DataDetails_header_tree, hf_opa_Trap_LID, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(DataDetails_header_tree, hf_opa_Trap_Key, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(DataDetails_header_tree, hf_opa_Trap_SL, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(DataDetails_header_tree, hf_opa_Trap_SL_reserved, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(DataDetails_header_tree, hf_opa_reserved24, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; proto_tree_add_item(DataDetails_header_tree, hf_opa_Trap_GID, tvb, local_offset, 16, ENC_NA); local_offset += 16; proto_tree_add_item(DataDetails_header_tree, hf_opa_Trap_GID, tvb, local_offset, 16, ENC_NA); local_offset += 16; proto_tree_add_item(DataDetails_header_tree, hf_opa_reserved8, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(DataDetails_header_tree, hf_opa_Trap_QP, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; proto_tree_add_item(DataDetails_header_tree, hf_opa_reserved8, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(DataDetails_header_tree, hf_opa_Trap_QP, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; break; case 259: proto_tree_add_bitmask(DataDetails_header_tree, tvb, local_offset, hf_opa_Trap_DataValid, ett_datadetails_trap259datavalid, _Trap_DataValid, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(DataDetails_header_tree, hf_opa_Trap_PKey, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(DataDetails_header_tree, hf_opa_Trap_LID, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(DataDetails_header_tree, hf_opa_Trap_LID, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(DataDetails_header_tree, hf_opa_Trap_SL, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(DataDetails_header_tree, hf_opa_Trap_SL_reserved, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(DataDetails_header_tree, hf_opa_reserved24, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; proto_tree_add_item(DataDetails_header_tree, hf_opa_Trap_GID, tvb, local_offset, 16, ENC_NA); local_offset += 16; proto_tree_add_item(DataDetails_header_tree, hf_opa_Trap_GID, tvb, local_offset, 16, ENC_NA); local_offset += 16; proto_tree_add_item(DataDetails_header_tree, hf_opa_Trap_QP, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; proto_tree_add_item(DataDetails_header_tree, hf_opa_reserved8, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(DataDetails_header_tree, hf_opa_Trap_QP, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; proto_tree_add_item(DataDetails_header_tree, hf_opa_reserved8, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; break; default: break; } return local_offset; } /* Parse NoticesAndTraps Attribute */ static gint parse_NoticesAndTraps(proto_tree *parentTree, tvbuff_t *tvb, gint *offset) { gint local_offset = *offset; proto_item *NoticesAndTraps_header_item; proto_tree *NoticesAndTraps_header_tree; gboolean isGeneric = tvb_get_bits8(tvb, local_offset * 8, 1); guint16 trapNumber = tvb_get_ntohs(tvb, local_offset + 4); if (!parentTree) return *offset; NoticesAndTraps_header_item = proto_tree_add_item(parentTree, hf_opa_Notice, tvb, local_offset, 96, ENC_NA); proto_item_set_text(NoticesAndTraps_header_item, "%s", val_to_str(trapNumber, Trap_Description, "Unknown or Vendor Specific Trap Number! (0x%02x)")); NoticesAndTraps_header_tree = proto_item_add_subtree(NoticesAndTraps_header_item, ett_noticestraps); proto_tree_add_item(NoticesAndTraps_header_tree, hf_opa_Notice_IsGeneric, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(NoticesAndTraps_header_tree, hf_opa_Notice_Type, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; if (isGeneric) { proto_tree_add_item(NoticesAndTraps_header_tree, hf_opa_Notice_ProducerType, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; proto_tree_add_item(NoticesAndTraps_header_tree, hf_opa_Notice_TrapNumber, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; } else { proto_tree_add_item(NoticesAndTraps_header_tree, hf_opa_Notice_VendorID, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; proto_tree_add_item(NoticesAndTraps_header_tree, hf_opa_Notice_DeviceID, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; } proto_tree_add_item(NoticesAndTraps_header_tree, hf_opa_Notice_Toggle, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(NoticesAndTraps_header_tree, hf_opa_Notice_Count, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(NoticesAndTraps_header_tree, hf_opa_Notice_IssuerLID, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(NoticesAndTraps_header_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(NoticesAndTraps_header_tree, hf_opa_Notice_IssuerGID, tvb, local_offset, 16, ENC_NA); local_offset += 16; if (isGeneric) { parse_NoticeDataDetails(NoticesAndTraps_header_tree, tvb, &local_offset, trapNumber); local_offset += 64; if (tvb_bytes_exist(tvb, local_offset, 8)) { proto_tree_add_item(NoticesAndTraps_header_tree, hf_opa_Notice_ClassDataDetails, tvb, local_offset, -1, ENC_NA); } } else { local_offset += 64; } return local_offset; } /* Parse InformInfo Attribute*/ static gint parse_InformInfo(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { gint local_offset = *offset; proto_item *InformInfo_header_item; proto_tree *InformInfo_header_tree; gboolean isGeneric; if (!parentTree || MAD->Method == METHOD_GET || MAD->Method == METHOD_GETTABLE) return *offset; InformInfo_header_item = proto_tree_add_item(parentTree, hf_opa_InformInfo, tvb, local_offset, 40, ENC_NA); InformInfo_header_tree = proto_item_add_subtree(InformInfo_header_item, ett_informinfo); proto_tree_add_item(InformInfo_header_tree, hf_opa_InformInfo_GID, tvb, local_offset, 16, ENC_NA); local_offset += 16; proto_tree_add_item(InformInfo_header_tree, hf_opa_InformInfo_LIDRangeBegin, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(InformInfo_header_tree, hf_opa_InformInfo_LIDRangeEnd, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; isGeneric = (gboolean)tvb_get_bits8(tvb, local_offset * 8 + 7, 1); proto_tree_add_item(InformInfo_header_tree, hf_opa_InformInfo_IsGeneric, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(InformInfo_header_tree, hf_opa_InformInfo_Subscribe, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(InformInfo_header_tree, hf_opa_InformInfo_Type, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(InformInfo_header_tree, hf_opa_reserved16, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; if (isGeneric) { proto_tree_add_item(InformInfo_header_tree, hf_opa_InformInfo_TrapNumber, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; } else { proto_tree_add_item(InformInfo_header_tree, hf_opa_InformInfo_DeviceID, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; } proto_tree_add_item(InformInfo_header_tree, hf_opa_InformInfo_QPN, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; proto_tree_add_item(InformInfo_header_tree, hf_opa_InformInfo_reserved, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(InformInfo_header_tree, hf_opa_InformInfo_RespTimeValue, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(InformInfo_header_tree, hf_opa_reserved8, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; if (isGeneric) { proto_tree_add_item(InformInfo_header_tree, hf_opa_InformInfo_ProducerType, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; } else { proto_tree_add_item(InformInfo_header_tree, hf_opa_InformInfo_VendorID, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; } return local_offset; } /* Parse ClassPortInfo MAD from the ALL classes. */ static gint parse_ClassPortInfo(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { proto_item *ClassPortInfo_item; proto_tree *ClassPortInfo_tree; proto_tree *ClassPortInfo_Redirect_tree; proto_tree *ClassPortInfo_Trap_tree; gint local_offset = *offset; if (!parentTree || MAD->Method == METHOD_GET || MAD->Method == METHOD_GETTABLE) return *offset; ClassPortInfo_item = proto_tree_add_item(parentTree, hf_opa_ClassPortInfo, tvb, local_offset, 80, ENC_NA); ClassPortInfo_tree = proto_item_add_subtree(ClassPortInfo_item, ett_classportinfo); proto_tree_add_item(ClassPortInfo_tree, hf_opa_ClassPortInfo_BaseVersion, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(ClassPortInfo_tree, hf_opa_ClassPortInfo_ClassVersion, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(ClassPortInfo_tree, hf_opa_ClassPortInfo_CapMask, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(ClassPortInfo_tree, hf_opa_ClassPortInfo_CapMask2, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_tree_add_item(ClassPortInfo_tree, hf_opa_ClassPortInfo_RespTimeValue, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; ClassPortInfo_Redirect_tree = proto_tree_add_subtree(ClassPortInfo_tree, tvb, local_offset, 32, ett_classportinfo_redirect, NULL, "Redirect"); proto_tree_add_item(ClassPortInfo_Redirect_tree, hf_opa_ClassPortInfo_Redirect_GID, tvb, local_offset, 16, ENC_NA); local_offset += 16; proto_tree_add_item(ClassPortInfo_Redirect_tree, hf_opa_ClassPortInfo_Redirect_TClass, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(ClassPortInfo_Redirect_tree, hf_opa_ClassPortInfo_Redirect_reserved, tvb, local_offset, 3, ENC_BIG_ENDIAN); proto_tree_add_item(ClassPortInfo_Redirect_tree, hf_opa_ClassPortInfo_Redirect_FlowLabel, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; proto_tree_add_item(ClassPortInfo_Redirect_tree, hf_opa_ClassPortInfo_Redirect_LID, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(ClassPortInfo_Redirect_tree, hf_opa_ClassPortInfo_Redirect_SL, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(ClassPortInfo_Redirect_tree, hf_opa_ClassPortInfo_Redirect_reserved2, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(ClassPortInfo_Redirect_tree, hf_opa_ClassPortInfo_Redirect_QP, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; proto_tree_add_item(ClassPortInfo_Redirect_tree, hf_opa_ClassPortInfo_Redirect_Q_Key, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; ClassPortInfo_Trap_tree = proto_tree_add_subtree(ClassPortInfo_tree, tvb, local_offset, 32, ett_classportinfo_trap, NULL, "Trap"); proto_tree_add_item(ClassPortInfo_Trap_tree, hf_opa_ClassPortInfo_Trap_GID, tvb, local_offset, 16, ENC_NA); local_offset += 16; proto_tree_add_item(ClassPortInfo_Trap_tree, hf_opa_ClassPortInfo_Trap_TClass, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(ClassPortInfo_Trap_tree, hf_opa_ClassPortInfo_Trap_reserved, tvb, local_offset, 3, ENC_BIG_ENDIAN); proto_tree_add_item(ClassPortInfo_Trap_tree, hf_opa_ClassPortInfo_Trap_FlowLabel, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; proto_tree_add_item(ClassPortInfo_Trap_tree, hf_opa_ClassPortInfo_Trap_LID, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(ClassPortInfo_Trap_tree, hf_opa_ClassPortInfo_Trap_HopLimit, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(ClassPortInfo_Trap_tree, hf_opa_ClassPortInfo_Trap_QP, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; proto_tree_add_item(ClassPortInfo_Trap_tree, hf_opa_ClassPortInfo_Trap_Q_Key, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(ClassPortInfo_Trap_tree, hf_opa_ClassPortInfo_Trap_P_Key, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(ClassPortInfo_Redirect_tree, hf_opa_ClassPortInfo_Redirect_P_Key, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(ClassPortInfo_Trap_tree, hf_opa_ClassPortInfo_Trap_SL, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(ClassPortInfo_Trap_tree, hf_opa_ClassPortInfo_Trap_reserved2, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(ClassPortInfo_tree, hf_opa_reserved24, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; return local_offset; } /* Parse NodeDescription Attribute */ static gint parse_NodeDescription(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { gint local_offset = *offset; proto_tree *NodeDescription_header_tree = parentTree; proto_item *NodeDescription_header_item; if (!parentTree || MAD->Method == METHOD_GET || MAD->Method == METHOD_GETTABLE) return *offset; NodeDescription_header_item = proto_tree_add_item(NodeDescription_header_tree, hf_opa_NodeDescription, tvb, local_offset, 64, ENC_NA); NodeDescription_header_tree = proto_item_add_subtree(NodeDescription_header_item, ett_nodedescription); proto_tree_add_item(NodeDescription_header_tree, hf_opa_NodeDescription_NodeString, tvb, local_offset, 64, ENC_ASCII | ENC_NA); local_offset += 64; return local_offset; } /* Parse NodeInfo Attribute */ static gint parse_NodeInfo(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { gint local_offset = *offset; proto_tree *NodeInfo_header_tree = parentTree; proto_item *NodeInfo_header_item; if (!parentTree || MAD->Method == METHOD_GET || MAD->Method == METHOD_GETTABLE) return *offset; NodeInfo_header_item = proto_tree_add_item(NodeInfo_header_tree, hf_opa_NodeInfo, tvb, local_offset, 44, ENC_NA); NodeInfo_header_tree = proto_item_add_subtree(NodeInfo_header_item, ett_nodeinfo); proto_tree_add_item(NodeInfo_header_tree, hf_opa_NodeInfo_BaseVersion, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(NodeInfo_header_tree, hf_opa_NodeInfo_ClassVersion, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(NodeInfo_header_tree, hf_opa_NodeInfo_NodeType, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(NodeInfo_header_tree, hf_opa_NodeInfo_NumPorts, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(NodeInfo_header_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(NodeInfo_header_tree, hf_opa_NodeInfo_SystemImageGUID, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(NodeInfo_header_tree, hf_opa_NodeInfo_NodeGUID, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(NodeInfo_header_tree, hf_opa_NodeInfo_PortGUID, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(NodeInfo_header_tree, hf_opa_NodeInfo_PartitionCap, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(NodeInfo_header_tree, hf_opa_NodeInfo_DeviceID, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(NodeInfo_header_tree, hf_opa_NodeInfo_Revision, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(NodeInfo_header_tree, hf_opa_NodeInfo_LocalPortNum, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(NodeInfo_header_tree, hf_opa_NodeInfo_VendorID, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; return local_offset; } /* Parse SwitchInfo Attribute */ static gint parse_SwitchInfo(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { gint local_offset = *offset; proto_tree *SwitchInfo_header_tree = parentTree; proto_item *SwitchInfo_header_item; if (!parentTree || MAD->Method == METHOD_GET || MAD->Method == METHOD_GETTABLE) return *offset; SwitchInfo_header_item = proto_tree_add_item(SwitchInfo_header_tree, hf_opa_SwitchInfo, tvb, local_offset, 84, ENC_NA); SwitchInfo_header_tree = proto_item_add_subtree(SwitchInfo_header_item, ett_switchinfo); proto_tree_add_item(SwitchInfo_header_tree, hf_opa_SwitchInfo_LinearFDBCap, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(SwitchInfo_header_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(SwitchInfo_header_tree, hf_opa_SwitchInfo_MulticastFDBCap, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(SwitchInfo_header_tree, hf_opa_SwitchInfo_LinearFDBTop, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(SwitchInfo_header_tree, hf_opa_SwitchInfo_MulticastFDBTop, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(SwitchInfo_header_tree, hf_opa_SwitchInfo_CollectiveCap, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(SwitchInfo_header_tree, hf_opa_SwitchInfo_CollectiveTop, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(SwitchInfo_header_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(SwitchInfo_header_tree, hf_opa_SwitchInfo_IPAddrIPv6, tvb, local_offset, 16, ENC_NA); local_offset += 16; proto_tree_add_item(SwitchInfo_header_tree, hf_opa_SwitchInfo_IPAddrIPv4, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(SwitchInfo_header_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(SwitchInfo_header_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(SwitchInfo_header_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(SwitchInfo_header_tree, hf_opa_reserved24, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; proto_tree_add_item(SwitchInfo_header_tree, hf_opa_SwitchInfo_LifeTimeValue, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(SwitchInfo_header_tree, hf_opa_SwitchInfo_PortStateChange, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(SwitchInfo_header_tree, hf_opa_SwitchInfo_reserved2, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(SwitchInfo_header_tree, hf_opa_reserved16, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(SwitchInfo_header_tree, hf_opa_SwitchInfo_PartitionEnforcementCap, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(SwitchInfo_header_tree, hf_opa_SwitchInfo_PortGroupCap, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(SwitchInfo_header_tree, hf_opa_SwitchInfo_PortGroupTop, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(SwitchInfo_header_tree, hf_opa_SwitchInfo_SupportedRoutingMode, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(SwitchInfo_header_tree, hf_opa_SwitchInfo_EnabledRoutingMode, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(SwitchInfo_header_tree, hf_opa_SwitchInfo_reserved3, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(SwitchInfo_header_tree, hf_opa_SwitchInfo_EnhancedPortZero, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(SwitchInfo_header_tree, hf_opa_SwitchInfo_reserved4, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(SwitchInfo_header_tree, hf_opa_SwitchInfo_reserved5, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(SwitchInfo_header_tree, hf_opa_SwitchInfo_CollectiveMask, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(SwitchInfo_header_tree, hf_opa_SwitchInfo_MulticastMask, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_bitmask_list(SwitchInfo_header_tree, tvb, local_offset, 2, _SwitchInfo_AdaptiveRouting, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_bitmask(SwitchInfo_header_tree, tvb, local_offset, hf_opa_SwitchInfo_SwitchCapabilityMask, ett_switchinfo_switchcapabilitymask, _SwitchInfo_SwitchCapabilityMask, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(SwitchInfo_header_tree, hf_opa_SwitchInfo_CapabilityMaskCollectives, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; return local_offset; } /* Parse PortInfo Attribute */ static gint parse_PortInfo(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { gint local_offset = *offset; proto_tree *PortInfo_header_tree = parentTree, *PortInfo_VL_tree, *PortInfo_Link_tree, *PortInfo_FlitControl_tree, *PortInfo_NeighborMTU_tree, *PortInfo_XmitQ_tree; proto_item * PortInfo_header_item, *PortInfo_PortWdthSpeedActive_item; proto_item *temp_item; guint p, i, Num_ports, Port_num; guint16 active; gint block_length = 242; gint block_pad_len = 8 - (block_length & 7); /* Padding to add */ if (MAD->MgmtClass == SUBNADMN) { Num_ports = 1; Port_num = tvb_get_guint8(tvb, local_offset - 4); } else { Num_ports = (MAD->AttributeModifier & 0xFF000000) >> 24; Port_num = (MAD->AttributeModifier & 0x000000FF); } if (!parentTree || MAD->Method == METHOD_GET || MAD->Method == METHOD_GETTABLE) return *offset; for (p = Port_num; p < (Port_num + Num_ports);) { PortInfo_header_item = proto_tree_add_item(parentTree, hf_opa_PortInfo, tvb, local_offset, block_length, ENC_NA); proto_item_set_text(PortInfo_header_item, "PortInfo on Port %d", p); PortInfo_header_tree = proto_item_add_subtree(PortInfo_header_item, ett_portinfo); proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_LID, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_FlowControlMask, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; /* VL */ PortInfo_VL_tree = proto_tree_add_subtree(PortInfo_header_tree, tvb, local_offset, 8, ett_portinfo_vl, NULL, "VL Info"); proto_tree_add_item(PortInfo_VL_tree, hf_opa_PortInfo_VL_PreemptCap, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PortInfo_VL_tree, hf_opa_PortInfo_VL_reserved, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(PortInfo_VL_tree, hf_opa_PortInfo_VL_Cap, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PortInfo_VL_tree, hf_opa_PortInfo_VL_HighLimit, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(PortInfo_VL_tree, hf_opa_PortInfo_VL_PreemptingLimit, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(PortInfo_VL_tree, hf_opa_PortInfo_VL_ArbitrationHighCap, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PortInfo_VL_tree, hf_opa_PortInfo_VL_ArbitrationLowCap, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; /* Port States */ proto_tree_add_bitmask_list(PortInfo_header_tree, tvb, local_offset, 4, _PortStates, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_PortPhysConfig_reserved, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_PortPhysConfig_PortType, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; /* MultiCollectMask */ proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_MultiCollectMask_reserved, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_MultiCollectMask_CollectiveMask, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_MultiCollectMask_MulticastMask, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_M_KeyProtectBits, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_S1_reserved, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_LMC, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_S2_reserved, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_MasterSMSL, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_LinkInitReason, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_PartitionEnforcementInbound, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_PartitionEnforcementOutbound, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_S3_reserved2, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_S4_reserved, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_OperationalVL, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; /* P_Keys */ proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_P_Keys_P_Key_8B, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_P_Keys_P_Key_10B, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; /* Violations */ proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_M_KeyViolations, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_P_KeyViolations, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_Q_KeyViolations, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_TrapQueuePair_reserved, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_TrapQueuePair, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_SAQueuePair_reserved, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_SAQueuePair, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_NeighborPortNum, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; /*STL Linkdown reason */ proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_LinkDownReason, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; /*STL NeighborLinkdown reason */ proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_NeighborLinkDownReason, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; /* Subnet */ proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_ClientReregister, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_MulticastPKeyTrapSuppressEnabled, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_Timeout, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; PortInfo_Link_tree = proto_tree_add_subtree(PortInfo_header_tree, tvb, local_offset, 22, ett_portinfo_link, NULL, "Link Info"); /* LinkSpeed */ proto_tree_add_item(PortInfo_Link_tree, hf_opa_PortInfo_LinkSpeedSupported, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(PortInfo_Link_tree, hf_opa_PortInfo_LinkSpeedEnabled, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; active = tvb_get_ntohs(tvb, local_offset); PortInfo_PortWdthSpeedActive_item = proto_tree_add_item(PortInfo_Link_tree, hf_opa_PortInfo_LinkSpeedActive, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; if (!active && (MAD->Method == METHOD_GET_RESP || MAD->Method == METHOD_GETTABLE_RESP)) proto_item_set_text(PortInfo_PortWdthSpeedActive_item, "None"); /* LinkWidth */ proto_tree_add_item(PortInfo_Link_tree, hf_opa_PortInfo_LinkWidthSupported, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(PortInfo_Link_tree, hf_opa_PortInfo_LinkWidthEnabled, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; active = tvb_get_ntohs(tvb, local_offset); PortInfo_PortWdthSpeedActive_item = proto_tree_add_item(PortInfo_Link_tree, hf_opa_PortInfo_LinkWidthActive, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; if (!active && (MAD->Method == METHOD_GET_RESP || MAD->Method == METHOD_GETTABLE_RESP)) proto_item_set_text(PortInfo_PortWdthSpeedActive_item, "None"); /* LinkWidthDowngrade */ proto_tree_add_item(PortInfo_Link_tree, hf_opa_PortInfo_LinkWidthDowngrade_Supported, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(PortInfo_Link_tree, hf_opa_PortInfo_LinkWidthDowngrade_Enabled, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; active = tvb_get_ntohs(tvb, local_offset); PortInfo_PortWdthSpeedActive_item = proto_tree_add_item(PortInfo_Link_tree, hf_opa_PortInfo_LinkWidthDowngrade_TxActive, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; if (!active && (MAD->Method == METHOD_GET_RESP || MAD->Method == METHOD_GETTABLE_RESP)) proto_item_set_text(PortInfo_PortWdthSpeedActive_item, "None");; active = tvb_get_ntohs(tvb, local_offset); PortInfo_PortWdthSpeedActive_item = proto_tree_add_item(PortInfo_Link_tree, hf_opa_PortInfo_LinkWidthDowngrade_RxActive, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; if (!active && (MAD->Method == METHOD_GET_RESP || MAD->Method == METHOD_GETTABLE_RESP)) proto_item_set_text(PortInfo_PortWdthSpeedActive_item, "None"); /*PortLinkMode */ proto_tree_add_item(PortInfo_Link_tree, hf_opa_PortInfo_PortLinkMode_reserved, tvb, local_offset, 2, ENC_BIG_ENDIAN); proto_tree_add_item(PortInfo_Link_tree, hf_opa_PortInfo_PortLinkMode_Supported, tvb, local_offset, 2, ENC_BIG_ENDIAN); proto_tree_add_item(PortInfo_Link_tree, hf_opa_PortInfo_PortLinkMode_Enabled, tvb, local_offset, 2, ENC_BIG_ENDIAN); proto_tree_add_item(PortInfo_Link_tree, hf_opa_PortInfo_PortLinkMode_Active, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; /*PortLTPCRCMode */ proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_PortLTPCRCMode_reserved, tvb, local_offset, 2, ENC_BIG_ENDIAN); proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_PortLTPCRCMode_Supported, tvb, local_offset, 2, ENC_BIG_ENDIAN); proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_PortLTPCRCMode_Enabled, tvb, local_offset, 2, ENC_BIG_ENDIAN); proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_PortLTPCRCMode_Active, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; /*PortMode*/ proto_tree_add_bitmask(PortInfo_header_tree, tvb, local_offset, hf_opa_PortInfo_PortMode, ett_portinfo_portmode, _PortInfo_PortMode, ENC_BIG_ENDIAN); local_offset += 2; /* PortPacketFormats */ proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_PortPacketFormats_Supported, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_PortPacketFormats_Enabled, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; /* Flit Control */ PortInfo_FlitControl_tree = proto_tree_add_subtree(PortInfo_header_tree, tvb, local_offset, 10, ett_portinfo_flitcontrol, NULL, "Flit Control"); proto_tree_add_item(PortInfo_FlitControl_tree, hf_opa_PortInfo_FlitControl_Interleave_reserved, tvb, local_offset, 2, ENC_BIG_ENDIAN); proto_tree_add_item(PortInfo_FlitControl_tree, hf_opa_PortInfo_FlitControl_Interleave_DistanceSupported, tvb, local_offset, 2, ENC_BIG_ENDIAN); proto_tree_add_item(PortInfo_FlitControl_tree, hf_opa_PortInfo_FlitControl_Interleave_DistanceEnabled, tvb, local_offset, 2, ENC_BIG_ENDIAN); proto_tree_add_item(PortInfo_FlitControl_tree, hf_opa_PortInfo_FlitControl_Interleave_MaxNestLevelTxEnabled, tvb, local_offset, 2, ENC_BIG_ENDIAN); proto_tree_add_item(PortInfo_FlitControl_tree, hf_opa_PortInfo_FlitControl_Interleave_MaxNestLevelRxSupported, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(PortInfo_FlitControl_tree, hf_opa_PortInfo_FlitControl_Preemption_MinInitial, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(PortInfo_FlitControl_tree, hf_opa_PortInfo_FlitControl_Preemption_MinTail, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(PortInfo_FlitControl_tree, hf_opa_PortInfo_FlitControl_Preemption_LargePacketLimit, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PortInfo_FlitControl_tree, hf_opa_PortInfo_FlitControl_Preemption_SmallPacketLimit, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PortInfo_FlitControl_tree, hf_opa_PortInfo_FlitControl_Preemption_MaxSmallPacketLimit, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PortInfo_FlitControl_tree, hf_opa_PortInfo_FlitControl_Preemption_PreemptionLimit, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PortInfo_header_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; /*PortErrorAction*/ proto_tree_add_bitmask(PortInfo_header_tree, tvb, local_offset, hf_opa_PortInfo_PortErrorAction, ett_portinfo_porterroraction, _PortInfo_PortErrorAction, ENC_BIG_ENDIAN); local_offset += 4; /* PassThroughControl */ proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_PassThroughControl_EgressPort, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_PassThroughControl_reserved, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_PassThroughControl_DRControl, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_M_KeyLeasePeriod, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; /* BufferUnits */ proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_BufferUnits_reserved, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_BufferUnits_VL15Init, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_BufferUnits_VL15CreditRate, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_BufferUnits_CreditAck, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_BufferUnits_BufferAlloc, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(PortInfo_header_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_MasterSMLID, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_M_Key, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_SubnetPrefix, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; /*NeighborMTU */ PortInfo_NeighborMTU_tree = proto_tree_add_subtree(PortInfo_header_tree, tvb, local_offset, 32 / 2, ett_portinfo_neighbormtu, NULL, "NeighborMTU"); for (i = 0; i < (32 / 2); i++) { temp_item = proto_tree_add_item(PortInfo_NeighborMTU_tree, hf_opa_PortInfo_VL1, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_item_prepend_text(temp_item, "%3u: ", 2 * i); temp_item = proto_tree_add_item(PortInfo_NeighborMTU_tree, hf_opa_PortInfo_VL2, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_item_prepend_text(temp_item, "%3u: ", 2 * i + 1); } /*XmitQ*/ PortInfo_XmitQ_tree = proto_tree_add_subtree(PortInfo_header_tree, tvb, local_offset, 32, ett_portinfo_xmitq, NULL, "XmitQ"); for (i = 0; i < 32; i++) { temp_item = proto_tree_add_item(PortInfo_XmitQ_tree, hf_opa_PortInfo_XmitQ_VLStallCount, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_item_prepend_text(temp_item, "%3u: ", i); temp_item = proto_tree_add_item(PortInfo_XmitQ_tree, hf_opa_PortInfo_XmitQ_HOQLife, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_item_prepend_text(temp_item, " "); } proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_IPAddrIPv6, tvb, local_offset, 16, ENC_NA); local_offset += 16; proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_IPAddrIPv4, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(PortInfo_header_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(PortInfo_header_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(PortInfo_header_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_NeighborNodeGUID, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; /* Capability Mask Flags */ proto_tree_add_bitmask(PortInfo_header_tree, tvb, local_offset, hf_opa_PortInfo_CapabilityMask, ett_portinfo_capmask, _PortInfo_CapabilityMask, ENC_BIG_ENDIAN); local_offset += 4; /* End Capability Mask Flags */ proto_tree_add_item(PortInfo_header_tree, hf_opa_reserved16, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; /* CapabilityMask3 */ proto_tree_add_bitmask(PortInfo_header_tree, tvb, local_offset, hf_opa_PortInfo_CapabilityMask3, ett_portinfo_capmask3, _PortInfo_CapabilityMask3, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(PortInfo_header_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_OverallBufferSpace, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(PortInfo_header_tree, hf_opa_reserved16, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; /* Diag Code */ proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_DiagCode, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; /* End Diag Code */ /* Replay Depth */ proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_ReplayDepth_BufferDepth, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_ReplayDepth_WireDepth, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; /* PortNeighborMode */ proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_PortNeighborMode_reserved, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_PortNeighborMode_MgmtAllowed, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_PortNeighborMode_NeighborFWAuthenBypass, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_PortNeighborMode_NeighborNodeType, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; /* MTU */ proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_MTU_reserved, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_MTU_Cap, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_Resp_reserved, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_Resp_TimeValue, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PortInfo_header_tree, hf_opa_PortInfo_LocalPortNum, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PortInfo_header_tree, hf_opa_reserved16, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; /* If Not last block add byte padding */ if ((++p) < (Port_num + Num_ports)) { local_offset += block_pad_len; } } return local_offset; } /* Parse PortStateInfo Attribute */ static gint parse_PortStateInfo(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { gint local_offset = *offset; proto_item *PortStates_header_item; proto_tree *PortStates_header_tree; guint i, Num_ports, Port_num; if (!parentTree || MAD->Method == METHOD_GET || MAD->Method == METHOD_GETTABLE) return *offset; Num_ports = (MAD->AttributeModifier & 0xFF000000) >> 24; Port_num = (MAD->AttributeModifier & 0x000000FF); for (i = Port_num; i < Port_num + Num_ports; i++) { PortStates_header_item = proto_tree_add_item(parentTree, hf_opa_PortStates, tvb, local_offset, 4, ENC_NA); proto_item_set_text(PortStates_header_item, "Port Sate Info on Port %d", i); PortStates_header_tree = proto_item_add_subtree(PortStates_header_item, ett_portstates); proto_tree_add_bitmask_list(PortStates_header_tree, tvb, local_offset, 4, _PortStates, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(PortStates_header_tree, hf_opa_PortStates_LinkWidthDowngradeTxActive, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(PortStates_header_tree, hf_opa_PortStates_LinkWidthDowngradeRxActive, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; } return local_offset; } /* Parse P_KeyTable Attribute */ static gint parse_P_KeyTable(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { gint local_offset = *offset; proto_item *P_KeyTable_header_item; proto_tree *P_KeyTable_header_tree; proto_tree *tempBlock_tree; proto_item *tempItemLow; proto_item *tempItemHigh; guint i, b, Num_blocks, Block_num/*, Port_num*/; if (!parentTree || MAD->Method == METHOD_GET || MAD->Method == METHOD_GETTABLE) return *offset; if (MAD->MgmtClass == SUBNADMN) { Num_blocks = 1; Block_num = tvb_get_ntohs(tvb, local_offset - 4); /*Port_num = tvb_get_guint8(tvb, local_offset - 2);*/ } else { Num_blocks = (MAD->AttributeModifier & 0xFF000000) >> 24; Block_num = (MAD->AttributeModifier & 0x000007FF); /*Port_num = (MAD->AttributeModifier & 0x00FF0000) >> 16;*/ } P_KeyTable_header_item = proto_tree_add_item(parentTree, hf_opa_P_KeyTable, tvb, local_offset, 64 * Num_blocks, ENC_NA); P_KeyTable_header_tree = proto_item_add_subtree(P_KeyTable_header_item, ett_pkeytable); for (b = Block_num; b < Block_num + Num_blocks; b++) { tempBlock_tree = proto_tree_add_subtree_format(P_KeyTable_header_tree, tvb, local_offset, 64, ett_pkeytable_block, NULL, "PKey Table Block %u", b); for (i = 0; i < 32; i++) { tempItemHigh = proto_tree_add_item(tempBlock_tree, hf_opa_P_KeyTable_MembershipType, tvb, local_offset, 2, ENC_BIG_ENDIAN); tempItemLow = proto_tree_add_item(tempBlock_tree, hf_opa_P_KeyTable_P_KeyBase, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_item_prepend_text(tempItemHigh, "%3u: ", i); proto_item_prepend_text(tempItemLow, " "); } } return local_offset; } /* Parse SLtoSC Mapping Table Attribute */ static gint parse_SLtoSCMappingTable(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { gint local_offset = *offset; proto_item *SLtoSCMappingTable_header_item; proto_tree *SLtoSCMappingTable_header_tree; proto_item *tempItemHigh; proto_item *tempItemLow; guint i; if (!parentTree || MAD->Method == METHOD_GET || MAD->Method == METHOD_GETTABLE) return *offset; SLtoSCMappingTable_header_item = proto_tree_add_item(parentTree, hf_opa_SLtoSCMappingTable, tvb, local_offset, 32, ENC_NA); SLtoSCMappingTable_header_tree = proto_item_add_subtree(SLtoSCMappingTable_header_item, ett_sltoscmapping); for (i = 0; i < 32; i++) { tempItemHigh = proto_tree_add_item(SLtoSCMappingTable_header_tree, hf_opa_SLtoSCMappingTable_SLtoSC_HighBits, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_item_prepend_text(tempItemHigh, "%3u: ", i); tempItemLow = proto_tree_add_item(SLtoSCMappingTable_header_tree, hf_opa_SLtoSCMappingTable_SLtoSC_LowBits, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_item_prepend_text(tempItemLow, " "); local_offset += 1; } return local_offset; } /* Parse SCtoSC Mapping Table Attribute */ static gint parse_SCtoSCMappingTable(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { gint local_offset = *offset; proto_item *SCtoSCMappingTable_header_item; proto_tree *SCtoSCMappingTable_header_tree; proto_item *tempItemHigh; proto_item *tempItemLow; proto_tree *tempBlock_tree; guint i, b, i_block, e_block, Num_blocks, Block_num; gboolean B; if (!parentTree || MAD->Method == METHOD_GET || MAD->Method == METHOD_GETTABLE) return *offset; if (MAD->MgmtClass == SUBNADMN) { Num_blocks = 1; B = FALSE; i_block = tvb_get_guint8(tvb, local_offset - 4); e_block = tvb_get_guint8(tvb, local_offset - 3); Block_num = e_block; } else { Num_blocks = (MAD->AttributeModifier & 0xFF000000) >> 24; B = (gboolean)((MAD->AttributeModifier & 0x00010000) >> 16); i_block = (MAD->AttributeModifier & 0x0000FF00) >> 8; e_block = (MAD->AttributeModifier & 0x000000FF); Block_num = (B ? i_block : e_block); } SCtoSCMappingTable_header_item = proto_tree_add_item(parentTree, hf_opa_SCtoSCMappingTable, tvb, local_offset, 32 * Num_blocks, ENC_NA); SCtoSCMappingTable_header_tree = proto_item_add_subtree(SCtoSCMappingTable_header_item, ett_sctoscmapping); for (b = Block_num; b < (Block_num + Num_blocks); b++) { tempBlock_tree = proto_tree_add_subtree_format(SCtoSCMappingTable_header_tree, tvb, local_offset, 32, ett_sctoscmapping_block, NULL, "SC to SC Mapping Table for InPort %u, OutPort %u", (B ? b : i_block), (B ? e_block : b)); for (i = 0; i < 32; i++) { tempItemHigh = proto_tree_add_item(tempBlock_tree, hf_opa_SCtoSCMappingTable_SCtoSC_HighBits, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_item_prepend_text(tempItemHigh, "%3u: ", i); tempItemLow = proto_tree_add_item(tempBlock_tree, hf_opa_SCtoSCMappingTable_SCtoSC_LowBits, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_item_prepend_text(tempItemLow, " "); local_offset += 1; } } return local_offset; } /* Parse SCtoSL Mapping Table Attribute */ static gint parse_SCtoSLMappingTable(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { gint local_offset = *offset; proto_item *SCtoSLMappingTable_header_item; proto_tree *SCtoSLMappingTable_header_tree; proto_item *tempItemHigh; proto_item *tempItemLow; guint i; if (!parentTree || MAD->Method == METHOD_GET || MAD->Method == METHOD_GETTABLE) return *offset; SCtoSLMappingTable_header_item = proto_tree_add_item(parentTree, hf_opa_SCtoSLMappingTable, tvb, local_offset, 32, ENC_NA); SCtoSLMappingTable_header_tree = proto_item_add_subtree(SCtoSLMappingTable_header_item, ett_sctoslmapping); for (i = 0; i < 32; i++) { tempItemHigh = proto_tree_add_item(SCtoSLMappingTable_header_tree, hf_opa_SCtoSLMappingTable_SCtoSL_HighBits, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_item_prepend_text(tempItemHigh, "%3u: ", i); tempItemLow = proto_tree_add_item(SCtoSLMappingTable_header_tree, hf_opa_SCtoSLMappingTable_SCtoSL_LowBits, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_item_prepend_text(tempItemLow, " "); local_offset += 1; } return local_offset; } /* Parse SCtoVLx Mapping Table Attribute */ static gint parse_SCtoVLxMappingTable(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { gint local_offset = *offset; proto_item *SCtoVLxMappingTable_header_item; proto_tree *SCtoVLxMappingTable_header_tree; proto_item *tempItemLow; proto_item *tempItemHigh; proto_tree *tempBlock_tree; guint p, v, Port_num, Num_ports; const gchar *VLx; if (!parentTree || MAD->Method == METHOD_GET || MAD->Method == METHOD_GETTABLE) return *offset; if (MAD->MgmtClass == SUBNADMN) { Num_ports = 1; Port_num = tvb_get_guint8(tvb, local_offset - 4); VLx = val_to_str_const(MAD->AttributeID, SA_SC_VLx, "x"); } else { Num_ports = (MAD->AttributeModifier & 0xFF000000) >> 24; Port_num = (MAD->AttributeModifier & 0x000000FF); VLx = val_to_str_const(MAD->AttributeID, SM_SC_VLx, "x"); } SCtoVLxMappingTable_header_item = proto_tree_add_item(parentTree, hf_opa_SCtoVLxMappingTable, tvb, local_offset, 32 * Num_ports, ENC_NA); proto_item_set_text(SCtoVLxMappingTable_header_item, "SC to VL%s Mapping Table", VLx); SCtoVLxMappingTable_header_tree = proto_item_add_subtree(SCtoVLxMappingTable_header_item, ett_sctovlxmappingtable); for (p = Port_num; p < (Port_num + Num_ports); p++) { tempBlock_tree = proto_tree_add_subtree_format(SCtoVLxMappingTable_header_tree, tvb, local_offset, 32, ett_sctovlxmappingtable_block, NULL, "SC to VL%s Mapping Table for Port %u", VLx, p); for (v = 0; v < 32; v++) { tempItemHigh = proto_tree_add_item(tempBlock_tree, hf_opa_SCtoVLxMappingTable_SCtoVLx_HighBits, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_item_prepend_text(tempItemHigh, "%3u: ", v); tempItemLow = proto_tree_add_item(tempBlock_tree, hf_opa_SCtoVLxMappingTable_SCtoVLx_LowBits, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_item_prepend_text(tempItemLow, " "); local_offset += 1; } } return local_offset; } /* Parse VLArbitrationTable Attribute */ static gint parse_VLArbitrationTable(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { gint local_offset = *offset; proto_item *VLArbitrationTable_header_item; proto_tree * VLArbitrationTable_header_tree,*VLArbitrationTable_port_tree; proto_item *tempItemHigh; proto_item *tempItemLow; proto_item *tempItem; guint i, p, Section, Num_ports, Port_num; const gchar *TableType; if (!parentTree || MAD->Method == METHOD_GET || MAD->Method == METHOD_GETTABLE) return *offset; if (MAD->MgmtClass == SUBNADMN) { Num_ports = 1; Section = tvb_get_guint8(tvb, local_offset - 3); Port_num = tvb_get_guint8(tvb, local_offset - 4); } else { Num_ports = (MAD->AttributeModifier & 0xFF000000) >> 24; Section = (MAD->AttributeModifier & 0x00FF0000) >> 16; Port_num = (MAD->AttributeModifier & 0x000000FF); } TableType = val_to_str_const(Section, MADAttrModSectionVLarb_short, "Reserved"); VLArbitrationTable_header_item = proto_tree_add_item(parentTree, hf_opa_VLArbitrationTable, tvb, local_offset, 256 * Num_ports, ENC_NA); VLArbitrationTable_header_tree = proto_item_add_subtree(VLArbitrationTable_header_item, ett_vlarbitrationtable); for (p = Port_num; p < (Port_num + Num_ports); p++) { VLArbitrationTable_port_tree = proto_tree_add_subtree_format(VLArbitrationTable_header_tree, tvb, local_offset, 256, ett_vlarbitrationtable_port, NULL, "%s VL Arbitration Table on Port %u", TableType, p); if (Section < 3) { for (i = 0; i < 128; i++) { tempItemHigh = proto_tree_add_item(VLArbitrationTable_port_tree, hf_opa_VLArbitrationTable_reserved, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_item_prepend_text(tempItemHigh, "%3u: ", i); tempItemLow = proto_tree_add_item(VLArbitrationTable_port_tree, hf_opa_VLArbitrationTable_VL, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_item_prepend_text(tempItemLow, " "); local_offset += 1; tempItem = proto_tree_add_item(VLArbitrationTable_port_tree, hf_opa_VLArbitrationTable_Weight, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_item_prepend_text(tempItem, " "); } } else if (Section == 3) { for (i = 0; i < 32; i++) { tempItemLow = proto_tree_add_item(VLArbitrationTable_port_tree, hf_opa_VLArbitrationTable_Matrix, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_item_prepend_text(tempItemLow, "%3u: ", i); } local_offset += 128; } else { local_offset += 256; } } return local_offset; } /* Parse LinearForwardingTable Attribute */ static gint parse_LinearForwardingTable(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { gint local_offset = *offset; proto_item *LinearForwardingTable_header_item; proto_tree *LinearForwardingTable_header_tree; proto_item *tempItemLow; proto_tree *tempBlock_tree; guint b, i, Block_num, Num_blocks; if (!parentTree || MAD->Method == METHOD_GET || MAD->Method == METHOD_GETTABLE) return *offset; if (MAD->MgmtClass == SUBNADMN) { Num_blocks = 1; Block_num = tvb_get_ntohl(tvb, local_offset - 4) & 0x0003FFFF; } else { Num_blocks = (MAD->AttributeModifier & 0xFF000000) >> 24; Block_num = (MAD->AttributeModifier & 0x0003FFFF); } LinearForwardingTable_header_item = proto_tree_add_item(parentTree, hf_opa_LinearForwardingTable, tvb, local_offset, 64 * Num_blocks, ENC_NA); LinearForwardingTable_header_tree = proto_item_add_subtree(LinearForwardingTable_header_item, ett_linearforwardingtable); for (b = Block_num; b < (Block_num + Num_blocks); b++) { tempBlock_tree = proto_tree_add_subtree_format(LinearForwardingTable_header_tree, tvb, local_offset, 64, ett_linearforwardingtable_block, NULL, "Linear Forwarding Table Block %u", b); for (i = 0; i < 64; i++) { tempItemLow = proto_tree_add_item(tempBlock_tree, hf_opa_LinearForwardingTable_Port, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_item_prepend_text(tempItemLow, "%3u: ", i); } } return local_offset; } /* Parse MulticastForwardingTable Attribute */ static gint parse_MulticastForwardingTable(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { gint local_offset = *offset; proto_item *MulticastForwardingTable_header_item; proto_tree *MulticastForwardingTable_header_tree; proto_item *tempItem; proto_tree *tempBlock_tree; guint b, i, Block_num, Num_blocks, Pos; const gchar *Position; if (!parentTree || MAD->Method == METHOD_GET || MAD->Method == METHOD_GETTABLE) return *offset; if (MAD->MgmtClass == SUBNADMN) { Num_blocks = 1; Pos = 0; Block_num = tvb_get_ntohl(tvb, local_offset - 4) & 0x001FFFFF; } else { Num_blocks = (MAD->AttributeModifier & 0xFF000000) >> 24; Pos = (MAD->AttributeModifier & 0x00C00000) >> 22; Block_num = (MAD->AttributeModifier & 0x000FFFFF); } Position = val_to_str_const(Pos, GroupTablePosition, "Unknown"); MulticastForwardingTable_header_item = proto_tree_add_item(parentTree, hf_opa_MulticastForwardingTable, tvb, local_offset, 64 * Num_blocks, ENC_NA); MulticastForwardingTable_header_tree = proto_item_add_subtree(MulticastForwardingTable_header_item, ett_multicastforwardingtable); for (b = Block_num; b < (Block_num + Num_blocks); b++) { tempBlock_tree = proto_tree_add_subtree_format(MulticastForwardingTable_header_tree, tvb, local_offset, 64, ett_multicastforwardingtable_block, NULL, "Multicast Forwarding Table Block %u, Ports %s", b, Position); for (i = 0; i < 8; i++) { tempItem = proto_tree_add_item(tempBlock_tree, hf_opa_MulticastForwardingTable_PortMask, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_item_prepend_text(tempItem, "%3u: ", i); } } return local_offset; } /* Parse PortGroupForwardingTable Attribute */ static gint parse_PortGroupForwardingTable(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { gint local_offset = *offset; proto_item *PortGroupForwardingTable_header_item; proto_tree *PortGroupForwardingTable_header_tree; proto_item *tempItemLow; proto_tree *tempBlock_tree; guint b, i, Block_num, Num_blocks; if (!parentTree || MAD->Method == METHOD_GET || MAD->Method == METHOD_GETTABLE) return *offset; if (MAD->MgmtClass == SUBNADMN) { Num_blocks = 1; Block_num = tvb_get_ntohl(tvb, local_offset - 4) & 0x0003FFFF; } else { Num_blocks = (MAD->AttributeModifier & 0xFF000000) >> 24; Block_num = (MAD->AttributeModifier & 0x0003FFFF); } PortGroupForwardingTable_header_item = proto_tree_add_item(parentTree, hf_opa_PortGroupForwardingTable, tvb, local_offset, 64 * Num_blocks, ENC_NA); PortGroupForwardingTable_header_tree = proto_item_add_subtree(PortGroupForwardingTable_header_item, ett_portgroupforwardingtable); for (b = Block_num; b < (Block_num + Num_blocks); b++) { tempBlock_tree = proto_tree_add_subtree_format(PortGroupForwardingTable_header_tree, tvb, local_offset, 64, ett_portgroupforwardingtable_block, NULL, "Port Group Forwarding Table Block %u", b); for (i = 0; i < 64; i++) { tempItemLow = proto_tree_add_item(tempBlock_tree, hf_opa_PortGroupForwardingTable_Port, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_item_prepend_text(tempItemLow, "%3u: ", i); } } return local_offset; } /* Parse PortGroupTable Attribute */ static gint parse_PortGroupTable(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { gint local_offset = *offset; proto_item *PortGroupTable_header_item; proto_tree *PortGroupTable_header_tree; proto_item *tempItemLow; proto_tree *tempBlock_tree; guint b, i, Block_num, Num_blocks, Pos; const gchar *Position; if (!parentTree || MAD->Method == METHOD_GET || MAD->Method == METHOD_GETTABLE) return *offset; if (MAD->MgmtClass == SUBNADMN) { Num_blocks = 1; Pos = 0; Block_num = tvb_get_guint8(tvb, local_offset - 3) & 0x1F; } else { Num_blocks = (MAD->AttributeModifier & 0xFF000000) >> 24; Pos = (MAD->AttributeModifier & 0x00C00000) >> 22; Block_num = (MAD->AttributeModifier & 0x0000001F); } Position = val_to_str_const(Pos, GroupTablePosition, "Unknown"); PortGroupTable_header_item = proto_tree_add_item(parentTree, hf_opa_PortGroupTable, tvb, local_offset, 64 * Num_blocks, ENC_NA); PortGroupTable_header_tree = proto_item_add_subtree(PortGroupTable_header_item, ett_portgrouptable); for (b = Block_num; b < (Block_num + Num_blocks); b++) { tempBlock_tree = proto_tree_add_subtree_format(PortGroupTable_header_tree, tvb, local_offset, 64, ett_portgrouptable_block, NULL, "Port Group Table Block %u, Ports %s", b, Position); for (i = 0; i < 8; i++) { tempItemLow = proto_tree_add_item(tempBlock_tree, hf_opa_PortGroupTable_PortMask, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_item_prepend_text(tempItemLow, "%3u: ", i); } } return local_offset; } /* Parse SMInfo Attribute */ static gint parse_SMInfo(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { gint local_offset = *offset; proto_item *SMInfo_header_item; proto_tree *SMInfo_header_tree; if (!parentTree || MAD->Method == METHOD_GET || MAD->Method == METHOD_GETTABLE) return *offset; SMInfo_header_item = proto_tree_add_item(parentTree, hf_opa_SMInfo, tvb, local_offset, 26, ENC_NA); SMInfo_header_tree = proto_item_add_subtree(SMInfo_header_item, ett_sminfo); proto_tree_add_item(SMInfo_header_tree, hf_opa_SMInfo_GUID, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(SMInfo_header_tree, hf_opa_SMInfo_SM_Key, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(SMInfo_header_tree, hf_opa_SMInfo_ActCount, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(SMInfo_header_tree, hf_opa_SMInfo_ElapsedTime, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(SMInfo_header_tree, hf_opa_SMInfo_Priority, tvb, local_offset, 2, ENC_BIG_ENDIAN); proto_tree_add_item(SMInfo_header_tree, hf_opa_SMInfo_ElevatedPriority, tvb, local_offset, 2, ENC_BIG_ENDIAN); proto_tree_add_item(SMInfo_header_tree, hf_opa_SMInfo_InitialPriority, tvb, local_offset, 2, ENC_BIG_ENDIAN); proto_tree_add_item(SMInfo_header_tree, hf_opa_SMInfo_SMState, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; return local_offset; } /* Parse LedInfo Attribute */ static gint parse_LedInfo(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { gint local_offset = *offset; proto_item *LedInfo_header_item; proto_tree *LedInfo_header_tree; proto_item *tempItemHigh; proto_item *tempItemLow; guint p, Port_num, Num_ports; if (!parentTree || MAD->Method == METHOD_GET || MAD->Method == METHOD_GETTABLE) return *offset; Num_ports = (MAD->AttributeModifier & 0xFF000000) >> 24; Port_num = (MAD->AttributeModifier & 0x000000FF); LedInfo_header_item = proto_tree_add_item(parentTree, hf_opa_LedInfo, tvb, local_offset, 8 * Num_ports, ENC_NA); LedInfo_header_tree = proto_item_add_subtree(LedInfo_header_item, ett_ledinfo); for (p = Port_num; p < (Port_num + Num_ports); p++) { tempItemHigh = proto_tree_add_item(LedInfo_header_tree, hf_opa_LedInfo_LedMask, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_item_prepend_text(tempItemHigh, "Port %3u: ", p); tempItemLow = proto_tree_add_item(LedInfo_header_tree, hf_opa_LedInfo_reserved, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_item_prepend_text(tempItemLow, " "); local_offset += 4; proto_tree_add_item(LedInfo_header_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; } return local_offset; } /* Parse CableInfo Attribute */ static gint parse_CableInfo(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { gint local_offset = *offset; proto_item *CableInfo_header_item; proto_tree *CableInfo_header_tree; proto_item *tempItemLow; guint i, Port_num, Data_Len, start_addr; if (!parentTree || MAD->Method == METHOD_GET || MAD->Method == METHOD_GETTABLE) return *offset; start_addr = (MAD->AttributeModifier & 0x7FF80000) >> 19; Port_num = (MAD->AttributeModifier & 0x000000FF); Data_Len = ((MAD->AttributeModifier & 0x0007E000) >> 13) + 1; CableInfo_header_item = proto_tree_add_item(parentTree, hf_opa_CableInfo, tvb, local_offset, Data_Len, ENC_NA); proto_item_set_text(CableInfo_header_item, "Cable Info on Port %u", Port_num); CableInfo_header_tree = proto_item_add_subtree(CableInfo_header_item, ett_cableinfo); proto_tree_add_item(CableInfo_header_tree, hf_opa_CableInfo_DataStream, tvb, local_offset, Data_Len, ENC_ASCII | ENC_NA); for (i = 0; i < Data_Len; i++) { tempItemLow = proto_tree_add_item(CableInfo_header_tree, hf_opa_CableInfo_Data, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_item_prepend_text(tempItemLow, "0x%04X: ", i + start_addr); local_offset += 1; } return local_offset; } /* Parse BufferControlTable Attribute */ static gint parse_BufferControlTable(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { gint local_offset = *offset; proto_item *BCT_header_item; proto_tree *BCT_header_tree; proto_item *tempItemLow; proto_item *tempItemHigh; guint p, i, Port_num, Num_ports; gint block_length = 4 + (32 * 4); gint block_pad_len = 8 - (block_length & 7); /* Padding to add */ if (!parentTree || MAD->Method == METHOD_GET || MAD->Method == METHOD_GETTABLE) return *offset; if (MAD->MgmtClass == SUBNADMN) { Num_ports = 1; Port_num = tvb_get_guint8(tvb, local_offset - 4); } else { Num_ports = (MAD->AttributeModifier & 0xFF000000) >> 24; Port_num = (MAD->AttributeModifier & 0x000000FF); } for (p = Port_num; p < (Port_num + Num_ports);) { BCT_header_item = proto_tree_add_item(parentTree, hf_opa_BufferControlTable, tvb, local_offset, block_length, ENC_NA); proto_item_append_text(BCT_header_item, " Port %u", p); BCT_header_tree = proto_item_add_subtree(BCT_header_item, ett_buffercontroltable); proto_tree_add_item(BCT_header_tree, hf_opa_reserved16, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(BCT_header_tree, hf_opa_BufferControlTable_TxOverallSharedLimit, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; for (i = 0; i < 32; i++) { tempItemHigh = proto_tree_add_item(BCT_header_tree, hf_opa_BufferControlTable_TxSharedLimit, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; tempItemLow = proto_tree_add_item(BCT_header_tree, hf_opa_BufferControlTable_TxDedicatedLimit, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_item_prepend_text(tempItemHigh, "VL %2u: ", i); proto_item_prepend_text(tempItemLow, " "); } /* If Not last block add byte padding */ if ((++p) < (Port_num + Num_ports)) { local_offset += block_pad_len; } } return local_offset; } /* Parse CongestionInfo Attribute */ static gint parse_CongestionInfo(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { gint local_offset = *offset; proto_item *CongestionInfo_header_item; proto_tree *CongestionInfo_header_tree; if (!parentTree || MAD->Method == METHOD_GET || MAD->Method == METHOD_GETTABLE) return *offset; CongestionInfo_header_item = proto_tree_add_item(parentTree, hf_opa_CongestionInfo, tvb, local_offset, 4, ENC_NA); CongestionInfo_header_tree = proto_item_add_subtree(CongestionInfo_header_item, ett_congestioninfo); proto_tree_add_item(CongestionInfo_header_tree, hf_opa_CongestionInfo_CongestionInfo, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(CongestionInfo_header_tree, hf_opa_CongestionInfo_ControlTableCap, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(CongestionInfo_header_tree, hf_opa_CongestionInfo_CongestionLogLength, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; return local_offset; } /* Parse SwitchCongestionLog Attribute */ static gint parse_SwitchCongestionLog(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { gint local_offset = *offset; proto_item *SwitchCongestionLog_header_item; proto_tree *SwitchCongestionLog_header_tree; proto_tree *SwitchCongestionLog_Entry_tree; guint i; if (!parentTree || MAD->Method == METHOD_GET || MAD->Method == METHOD_GETTABLE) return *offset; SwitchCongestionLog_header_item = proto_tree_add_item(parentTree, hf_opa_SwitchCongestionLog, tvb, local_offset, 40 + (96 * 16), ENC_NA); SwitchCongestionLog_header_tree = proto_item_add_subtree(SwitchCongestionLog_header_item, ett_switchcongestionlog); proto_tree_add_item(SwitchCongestionLog_header_tree, hf_opa_SwitchCongestionLog_LogType, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(SwitchCongestionLog_header_tree, hf_opa_SwitchCongestionLog_CongestionFlags, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(SwitchCongestionLog_header_tree, hf_opa_SwitchCongestionLog_LogEventsCounter, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(SwitchCongestionLog_header_tree, hf_opa_SwitchCongestionLog_CurrentTimeStamp, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(SwitchCongestionLog_header_tree, hf_opa_SwitchCongestionLog_PortMap, tvb, local_offset, 32, ENC_NA); local_offset += 32; for (i = 0; i < 96; i++) { SwitchCongestionLog_Entry_tree = proto_tree_add_subtree_format(SwitchCongestionLog_header_tree, tvb, local_offset, 16, ett_switchcongestionlog_entry, NULL, "Switch Congestion Log Entry %u", i); proto_tree_add_item(SwitchCongestionLog_Entry_tree, hf_opa_SwitchCongestionLog_SLID, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(SwitchCongestionLog_Entry_tree, hf_opa_SwitchCongestionLog_DLID, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(SwitchCongestionLog_Entry_tree, hf_opa_SwitchCongestionLog_SC, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(SwitchCongestionLog_Entry_tree, hf_opa_SwitchCongestionLog_reserved, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(SwitchCongestionLog_Entry_tree, hf_opa_reserved24, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; proto_tree_add_item(SwitchCongestionLog_Entry_tree, hf_opa_SwitchCongestionLog_TimeStamp, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; } return local_offset; } /* Parse SwitchCongestionSetting Attribute */ static gint parse_SwitchCongestionSetting(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { gint local_offset = *offset; proto_item *SwitchCongestionSetting_header_item; proto_tree *SwitchCongestionSetting_header_tree; if (!parentTree || MAD->Method == METHOD_GET || MAD->Method == METHOD_GETTABLE) return *offset; SwitchCongestionSetting_header_item = proto_tree_add_item(parentTree, hf_opa_SwitchCongestionSetting, tvb, local_offset, 64, ENC_NA); SwitchCongestionSetting_header_tree = proto_item_add_subtree(SwitchCongestionSetting_header_item, ett_switchcongestionsetting); proto_tree_add_item(SwitchCongestionSetting_header_tree, hf_opa_SwitchCongestionSetting_Control_Map, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(SwitchCongestionSetting_header_tree, hf_opa_SwitchCongestionSetting_Victim_Mask, tvb, local_offset, 32, ENC_NA); local_offset += 32; proto_tree_add_item(SwitchCongestionSetting_header_tree, hf_opa_SwitchCongestionSetting_Credit_Mask, tvb, local_offset, 32, ENC_NA); local_offset += 32; proto_tree_add_item(SwitchCongestionSetting_header_tree, hf_opa_SwitchCongestionSetting_Threshold, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(SwitchCongestionSetting_header_tree, hf_opa_SwitchCongestionSetting_reserved1, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(SwitchCongestionSetting_header_tree, hf_opa_SwitchCongestionSetting_Packet_Size, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(SwitchCongestionSetting_header_tree, hf_opa_SwitchCongestionSetting_CS_Threshold, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(SwitchCongestionSetting_header_tree, hf_opa_SwitchCongestionSetting_reserved2, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(SwitchCongestionSetting_header_tree, hf_opa_reserved8, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(SwitchCongestionSetting_header_tree, hf_opa_SwitchCongestionSetting_CS_ReturnDelay, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(SwitchCongestionSetting_header_tree, hf_opa_SwitchCongestionSetting_Marking_Rate, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; return local_offset; } /* Parse SwitchPortCongestionSetting Attribute */ static gint parse_SwitchPortCongestionSetting(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { gint local_offset = *offset; proto_item *SwitchPortCongestionSetting_header_item; proto_tree *SwitchPortCongestionSetting_header_tree; proto_tree *SwitchPortCongestionSetting_Port_tree; guint p, Num_ports, Port_num; if (!parentTree || MAD->Method == METHOD_GET || MAD->Method == METHOD_GETTABLE) return *offset; if (MAD->MgmtClass == SUBNADMN) { Num_ports = 1; Port_num = tvb_get_guint8(tvb, local_offset - 4); } else { Num_ports = (MAD->AttributeModifier & 0xFF000000) >> 24; Port_num = (MAD->AttributeModifier & 0x000000FF); } SwitchPortCongestionSetting_header_item = proto_tree_add_item(parentTree, hf_opa_SwitchPortCongestionSetting, tvb, local_offset, 4 * Num_ports, ENC_NA); SwitchPortCongestionSetting_header_tree = proto_item_add_subtree(SwitchPortCongestionSetting_header_item, ett_switchportcongestionsetting); for (p = Port_num; p < Port_num + Num_ports; p++) { SwitchPortCongestionSetting_Port_tree = proto_tree_add_subtree_format(SwitchPortCongestionSetting_header_tree, tvb, local_offset, 4, ett_switchportcongestionsetting_port, NULL, "Switch Port Congestion Setting on Port %u", p); proto_tree_add_item(SwitchPortCongestionSetting_Port_tree, hf_opa_SwitchPortCongestionSetting_Valid, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(SwitchPortCongestionSetting_Port_tree, hf_opa_SwitchPortCongestionSetting_Control_Type, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(SwitchPortCongestionSetting_Port_tree, hf_opa_SwitchPortCongestionSetting_reserved, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(SwitchPortCongestionSetting_Port_tree, hf_opa_SwitchPortCongestionSetting_Threshold, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(SwitchPortCongestionSetting_Port_tree, hf_opa_SwitchPortCongestionSetting_Packet_Size, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(SwitchPortCongestionSetting_Port_tree, hf_opa_SwitchPortCongestionSetting_Marking_Rate, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; } return local_offset; } /* Parse HFICongestionLog Attribute */ static gint parse_HFICongestionLog(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { gint local_offset = *offset; proto_item *HFICongestionLog_header_item; proto_tree *HFICongestionLog_header_tree; proto_tree *HFICongestionLog_Entry_tree; guint i; if (!parentTree || MAD->Method == METHOD_GET || MAD->Method == METHOD_GETTABLE) return *offset; HFICongestionLog_header_item = proto_tree_add_item(parentTree, hf_opa_HFICongestionLog, tvb, local_offset, 12 + (96 * 16), ENC_NA); HFICongestionLog_header_tree = proto_item_add_subtree(HFICongestionLog_header_item, ett_hficongestionlog); proto_tree_add_item(HFICongestionLog_header_tree, hf_opa_HFICongestionLog_LogType, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(HFICongestionLog_header_tree, hf_opa_HFICongestionLog_CongestionFlags, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(HFICongestionLog_header_tree, hf_opa_HFICongestionLog_ThresholdEventCounter, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(HFICongestionLog_header_tree, hf_opa_HFICongestionLog_CurrentTimeStamp, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(HFICongestionLog_header_tree, hf_opa_HFICongestionLog_ThresholdCongestionEventMap, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; for (i = 0; i < 96; i++) { HFICongestionLog_Entry_tree = proto_tree_add_subtree_format(HFICongestionLog_header_tree, tvb, local_offset, 16, ett_hficongestionlog_entry, NULL, "HFI Congestion Log Entry %u", i); proto_tree_add_item(HFICongestionLog_Entry_tree, hf_opa_HFICongestionLog_Local_QP_CN_Entry, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; proto_tree_add_item(HFICongestionLog_Entry_tree, hf_opa_HFICongestionLog_Remote_QP_Number_CN_Entry, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; proto_tree_add_item(HFICongestionLog_Entry_tree, hf_opa_HFICongestionLog_SL_CN_Entry, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(HFICongestionLog_Entry_tree, hf_opa_HFICongestionLog_Service_Type_CN_Entry, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(HFICongestionLog_Entry_tree, hf_opa_reserved8, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(HFICongestionLog_Entry_tree, hf_opa_HFICongestionLog_Remote_LID_CN_Entry, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(HFICongestionLog_Entry_tree, hf_opa_HFICongestionLog_TimeStamp_CN_Entry, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; } return local_offset; } /* Parse HFICongestionSetting Attribute*/ static gint parse_HFICongestionSetting(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { gint i; gint local_offset = *offset; proto_item *HFICongestionSetting_header_item; proto_tree *HFICongestionSetting_header_tree; proto_item *tempItem; if (!parentTree || MAD->Method == METHOD_GET || MAD->Method == METHOD_GETTABLE) return *offset; HFICongestionSetting_header_item = proto_tree_add_item(parentTree, hf_opa_HFICongestionSetting, tvb, local_offset, 6 + 32 * 6, ENC_NA); HFICongestionSetting_header_tree = proto_item_add_subtree(HFICongestionSetting_header_item, ett_hficongestionsetting); proto_tree_add_item(HFICongestionSetting_header_tree, hf_opa_HFICongestionSetting_Control_Map, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(HFICongestionSetting_header_tree, hf_opa_HFICongestionSetting_Port_Control, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; for (i = 0; i < 32; i++) { tempItem = proto_tree_add_item(HFICongestionSetting_header_tree, hf_opa_HFICongestionSetting_CCTI_Increase, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_item_prepend_text(tempItem, "%3u: ", i); local_offset += 1; tempItem = proto_tree_add_item(HFICongestionSetting_header_tree, hf_opa_reserved8, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_item_prepend_text(tempItem, " "); local_offset += 1; tempItem = proto_tree_add_item(HFICongestionSetting_header_tree, hf_opa_HFICongestionSetting_CCTI_Timer, tvb, local_offset, 2, ENC_BIG_ENDIAN); proto_item_prepend_text(tempItem, " "); local_offset += 2; tempItem = proto_tree_add_item(HFICongestionSetting_header_tree, hf_opa_HFICongestionSetting_TriggerThreshold, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_item_prepend_text(tempItem, " "); local_offset += 1; tempItem = proto_tree_add_item(HFICongestionSetting_header_tree, hf_opa_HFICongestionSetting_CCTI_Min, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_item_prepend_text(tempItem, " "); local_offset += 1; } return local_offset; } /* Parse HFICongestionControlTable Attribute*/ static gint parse_HFICongestionControlTable(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { gint local_offset = *offset; proto_item *HFICongestionControlTable_header_item; proto_tree *HFICongestionControlTable_header_tree; proto_item *tempItem; proto_tree *tempBlock_tree; guint b, i, Num_blocks, Block_Num; if (!parentTree || MAD->Method == METHOD_GET || MAD->Method == METHOD_GETTABLE) return *offset; if (MAD->MgmtClass == SUBNADMN) { Num_blocks = 1; Block_Num = tvb_get_ntohs(tvb, local_offset - 4); } else { /* SM LID and SM DR */ Num_blocks = (MAD->AttributeModifier & 0xFF000000) >> 24; Block_Num = (MAD->AttributeModifier & 0x000000FF); } HFICongestionControlTable_header_item = proto_tree_add_item(parentTree, hf_opa_HFICongestionControlTable, tvb, local_offset, 2 + ((64 * 2) * Num_blocks), ENC_NA); HFICongestionControlTable_header_tree = proto_item_add_subtree(HFICongestionControlTable_header_item, ett_hficongestioncontroltable); proto_tree_add_item(HFICongestionControlTable_header_tree, hf_opa_HFICongestionControlTable_CCTI_Limit, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; for (b = Block_Num; b < Block_Num + Num_blocks; b++) { tempBlock_tree = proto_tree_add_subtree_format(HFICongestionControlTable_header_tree, tvb, local_offset, 128, ett_hficongestioncontroltable_block, NULL, "HFI Congestion Control Table Block %u", b); for (i = 0; i < 64; i++) { tempItem = proto_tree_add_item(tempBlock_tree, hf_opa_HFICongestionControlTable_CCT_Shift, tvb, local_offset, 2, ENC_BIG_ENDIAN); proto_item_prepend_text(tempItem, "%3u: ", i); tempItem = proto_tree_add_item(tempBlock_tree, hf_opa_HFICongestionControlTable_CCT_Multiplier, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_item_prepend_text(tempItem, " "); } } return local_offset; } /* Call appropriate parsing function */ static gboolean call_SUBM_Parser(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD, guint16 AttributeID) { proto_tree *SUBM_Attribute_header_tree = parentTree; gint local_offset = *offset; if (!tvb_bytes_exist(tvb, local_offset, 8)) return TRUE; switch (AttributeID) { case SM_ATTR_ID_CLASS_PORT_INFO: local_offset = parse_ClassPortInfo(SUBM_Attribute_header_tree, tvb, offset, MAD); break; case SM_ATTR_ID_NOTICE: local_offset = parse_NoticesAndTraps(SUBM_Attribute_header_tree, tvb, offset); break; case SM_ATTR_ID_NODE_DESCRIPTION: local_offset = parse_NodeDescription(SUBM_Attribute_header_tree, tvb, offset, MAD); break; case SM_ATTR_ID_NODE_INFO: local_offset = parse_NodeInfo(SUBM_Attribute_header_tree, tvb, offset, MAD); break; case SM_ATTR_ID_SWITCH_INFO: local_offset = parse_SwitchInfo(SUBM_Attribute_header_tree, tvb, offset, MAD); break; case SM_ATTR_ID_PORT_INFO: local_offset = parse_PortInfo(SUBM_Attribute_header_tree, tvb, offset, MAD); break; case SM_ATTR_ID_PART_TABLE: local_offset = parse_P_KeyTable(SUBM_Attribute_header_tree, tvb, offset, MAD); break; case SM_ATTR_ID_SL_SC_MAPPING_TABLE: local_offset = parse_SLtoSCMappingTable(SUBM_Attribute_header_tree, tvb, offset, MAD); break; case SM_ATTR_ID_VL_ARBITRATION: local_offset = parse_VLArbitrationTable(SUBM_Attribute_header_tree, tvb, offset, MAD); break; case SM_ATTR_ID_LINEAR_FWD_TABLE: local_offset = parse_LinearForwardingTable(SUBM_Attribute_header_tree, tvb, offset, MAD); break; case SM_ATTR_ID_MCAST_FWD_TABLE: local_offset = parse_MulticastForwardingTable(SUBM_Attribute_header_tree, tvb, offset, MAD); break; case SM_ATTR_ID_SM_INFO: local_offset = parse_SMInfo(SUBM_Attribute_header_tree, tvb, offset, MAD); break; case SM_ATTR_ID_LED_INFO: local_offset = parse_LedInfo(SUBM_Attribute_header_tree, tvb, offset, MAD); break; case SM_ATTR_ID_CABLE_INFO: local_offset = parse_CableInfo(SUBM_Attribute_header_tree, tvb, offset, MAD); break; case SM_ATTR_ID_SC_SC_MAPPING_TABLE: local_offset = parse_SCtoSCMappingTable(SUBM_Attribute_header_tree, tvb, offset, MAD); break; case SM_ATTR_ID_SC_SL_MAPPING_TABLE: local_offset = parse_SCtoSLMappingTable(SUBM_Attribute_header_tree, tvb, offset, MAD); break; case SM_ATTR_ID_SC_VLR_MAPPING_TABLE: case SM_ATTR_ID_SC_VLT_MAPPING_TABLE: case SM_ATTR_ID_SC_VLNT_MAPPING_TABLE: local_offset = parse_SCtoVLxMappingTable(SUBM_Attribute_header_tree, tvb, offset, MAD); break; case SM_ATTR_ID_PORT_STATE_INFO: local_offset = parse_PortStateInfo(SUBM_Attribute_header_tree, tvb, offset, MAD); break; case SM_ATTR_ID_PORT_GROUP_FWD_TABLE: local_offset = parse_PortGroupForwardingTable(SUBM_Attribute_header_tree, tvb, offset, MAD); break; case SM_ATTR_ID_PORT_GROUP_TABLE: local_offset = parse_PortGroupTable(SUBM_Attribute_header_tree, tvb, offset, MAD); break; case SM_ATTR_ID_BUFFER_CONTROL_TABLE: local_offset = parse_BufferControlTable(SUBM_Attribute_header_tree, tvb, offset, MAD); break; case SM_ATTR_ID_CONGESTION_INFO: local_offset = parse_CongestionInfo(SUBM_Attribute_header_tree, tvb, offset, MAD); break; case SM_ATTR_ID_SWITCH_CONGESTION_LOG: local_offset = parse_SwitchCongestionLog(SUBM_Attribute_header_tree, tvb, offset, MAD); break; case SM_ATTR_ID_SWITCH_CONGESTION_SETTING: local_offset = parse_SwitchCongestionSetting(SUBM_Attribute_header_tree, tvb, offset, MAD); break; case SM_ATTR_ID_SWITCH_PORT_CONGESTION_SETTING: local_offset = parse_SwitchPortCongestionSetting(SUBM_Attribute_header_tree, tvb, offset, MAD); break; case SM_ATTR_ID_HFI_CONGESTION_LOG: local_offset = parse_HFICongestionLog(SUBM_Attribute_header_tree, tvb, offset, MAD); break; case SM_ATTR_ID_HFI_CONGESTION_SETTING: local_offset = parse_HFICongestionSetting(SUBM_Attribute_header_tree, tvb, offset, MAD); break; case SM_ATTR_ID_HFI_CONGESTION_CONTROL_TABLE: local_offset = parse_HFICongestionControlTable(SUBM_Attribute_header_tree, tvb, offset, MAD); break; default: return FALSE; } *offset = local_offset; return TRUE; } /* Parse Aggregate Attribute */ static gint parse_Aggregate(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { gint i; guint requestLength; gint numAttributes; gint local_offset = *offset; gint saved_offset; guint16 LocalAttributeID = 0; gboolean AggregatError = FALSE; proto_item *Aggregate_header_item; proto_item *Aggregate_Length_item; proto_item *Aggregate_Error_item; proto_tree *Aggregate_header_tree; if (!parentTree) return *offset; numAttributes = MAD->AttributeModifier & 0x000000FF; for (i = 0; i < numAttributes; i++) { requestLength = (tvb_get_guint8(tvb, local_offset + 3) & 0x7F) * 8; if (i == numAttributes - 1 && MAD->Method == METHOD_GET) { Aggregate_header_item = proto_tree_add_item(parentTree, hf_opa_Aggregate, tvb, local_offset, 8, ENC_NA); } else { Aggregate_header_item = proto_tree_add_item(parentTree, hf_opa_Aggregate, tvb, local_offset, requestLength + 8, ENC_NA); } Aggregate_header_tree = proto_item_add_subtree(Aggregate_header_item, ett_aggregate); proto_tree_add_item(Aggregate_header_tree, hf_opa_Aggregate_AttributeID, tvb, local_offset, 2, ENC_BIG_ENDIAN); LocalAttributeID = tvb_get_ntohs(tvb, local_offset); local_offset += 2; proto_item_set_text(Aggregate_header_item, "Aggregate %u: %s", i + 1, val_to_str(LocalAttributeID, SUBM_Attributes, "Unknown Attribute Type! (0x%02x)")); AggregatError = (gboolean)tvb_get_bits(tvb, local_offset * 8, 1, ENC_BIG_ENDIAN); Aggregate_Error_item = proto_tree_add_item(Aggregate_header_tree, hf_opa_Aggregate_Error, tvb, local_offset, 2, ENC_BIG_ENDIAN); if (AggregatError) expert_add_info(NULL, Aggregate_Error_item, &ei_opa_aggregate_error); Aggregate_Length_item = proto_tree_add_item(Aggregate_header_tree, hf_opa_Aggregate_RequestLength, tvb, local_offset, 2, ENC_BIG_ENDIAN); proto_item_append_text(Aggregate_Length_item, " (%u Bytes)", requestLength); local_offset += 2; MAD->AttributeModifier = tvb_get_ntohl(tvb, local_offset); MAD->AttributeID = LocalAttributeID; local_offset = parse_MAD_AttributeModifier(Aggregate_header_tree, tvb, &local_offset, MAD); if (i == numAttributes - 1 && MAD->Method == METHOD_GET) { /* Do Nothing */ } else { saved_offset = local_offset; call_SUBM_Parser(Aggregate_header_tree, tvb, &local_offset, MAD, LocalAttributeID); if (local_offset != (saved_offset + (gint)requestLength)) { local_offset = saved_offset + (gint)requestLength; } } } return local_offset; } /* Parse the attribute from a Subnet Management Packet. */ static gboolean parse_SUBM_Attribute(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { gint local_offset = *offset; if (MAD->AttributeID == SM_ATTR_ID_AGGREGATE) { *offset = parse_Aggregate(parentTree, tvb, &local_offset, MAD); return TRUE; } else return call_SUBM_Parser(parentTree, tvb, offset, MAD, MAD->AttributeID); } /* Parse the Method from the MAD Common Header. */ static void label_SUBM_Method(proto_item *SubMItem, MAD_t *MAD, packet_info *pinfo) { const gchar *label = val_to_str_const(MAD->Method, SUBM_Methods, "(Unknown SM Method!)"); proto_item_append_text(SubMItem, " %s", label); col_append_str(pinfo->cinfo, COL_INFO, label); } /* Parse the Attribute from the MAD Common Header */ static void label_SUBM_Attribute(proto_item *SubMItem, MAD_t *MAD, packet_info *pinfo) { const gchar *label = val_to_str_const(MAD->AttributeID, SUBM_Attributes, "Attribute (Unknown SM Attribute!)"); proto_item_append_text(SubMItem, "%s", &label[11]); col_append_str(pinfo->cinfo, COL_INFO, &label[11]); } /* Parse Subnet Management (LID Routed) */ static void parse_SUBN_LID_ROUTED(proto_tree *parentTree, packet_info *pinfo, tvbuff_t *tvb, gint *offset) { MAD_t MAD; gint local_offset; proto_item *SM_LID_header_item; proto_tree *SM_LID_header_tree; if (!parse_MAD_Common(parentTree, pinfo, tvb, offset, &MAD)) { return; } local_offset = *offset; SM_LID_header_item = proto_tree_add_item(parentTree, hf_opa_sm_lid, tvb, local_offset, -1, ENC_NA); SM_LID_header_tree = proto_item_add_subtree(SM_LID_header_item, ett_sm_lid); proto_tree_add_item(SM_LID_header_tree, hf_opa_sm_m_key, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; label_SUBM_Method(SM_LID_header_item, &MAD, pinfo); label_SUBM_Attribute(SM_LID_header_item, &MAD, pinfo); *offset = local_offset; if (!pref_parse_on_mad_status_error && MAD.Status) { local_offset += tvb_captured_length_remaining(tvb, *offset); } else if (!parse_SUBM_Attribute(SM_LID_header_tree, tvb, &local_offset, &MAD)) { expert_add_info_format(pinfo, NULL, &ei_opa_mad_no_attribute_dissector, "Attribute Dissector Not Implemented (0x%x)", MAD.AttributeID); local_offset += tvb_captured_length_remaining(tvb, *offset); } *offset = local_offset; } /* Parse Subnet Management (Directed Route) */ static void parse_SUBN_DIRECTED_ROUTE(proto_tree *parentTree, packet_info *pinfo, tvbuff_t *tvb, gint *offset) { MAD_t MAD; gint local_offset; proto_item *SM_DR_header_item; proto_tree *SM_DR_header_tree; if (!parse_MAD_Common(parentTree, pinfo, tvb, offset, &MAD)) { return; } local_offset = *offset; SM_DR_header_item = proto_tree_add_item(parentTree, hf_opa_sm_dr, tvb, local_offset, -1, ENC_NA); SM_DR_header_tree = proto_item_add_subtree(SM_DR_header_item, ett_sm_dr); proto_tree_add_item(SM_DR_header_item, hf_opa_sm_m_key, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; label_SUBM_Method(SM_DR_header_item, &MAD, pinfo); label_SUBM_Attribute(SM_DR_header_item, &MAD, pinfo); proto_tree_add_item(SM_DR_header_tree, hf_opa_sm_dr_slid, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(SM_DR_header_tree, hf_opa_sm_dr_dlid, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(SM_DR_header_tree, hf_opa_sm_dr_initial_path, tvb, local_offset, 64, ENC_NA); local_offset += 64; proto_tree_add_item(SM_DR_header_tree, hf_opa_sm_dr_return_path, tvb, local_offset, 64, ENC_NA); local_offset += 64; proto_tree_add_item(SM_DR_header_tree, hf_opa_sm_dr_reserved64, tvb, local_offset, 8, ENC_NA); local_offset += 8; *offset = local_offset; if (!pref_parse_on_mad_status_error && (MAD.Status & 0x7FFF)) { local_offset += tvb_captured_length_remaining(tvb, *offset); } else if (!parse_SUBM_Attribute(SM_DR_header_tree, tvb, &local_offset, &MAD)) { expert_add_info_format(pinfo, NULL, &ei_opa_mad_no_attribute_dissector, "Attribute Dissector Not Implemented (0x%x)", MAD.AttributeID); local_offset += tvb_captured_length_remaining(tvb, *offset); return; } *offset = local_offset; } static gint parse_PortInfoRecord(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { gint local_offset = *offset; proto_tree * PortInfoRecord_LinkDownReason_tree, *PortInfoRecord_LinkDownReason_Entry_tree; gint i; local_offset = parse_PortInfo(parentTree, tvb, &local_offset, MAD); PortInfoRecord_LinkDownReason_tree = proto_tree_add_subtree(parentTree, tvb, local_offset, 8 * 16, ett_portinforecord_linkdownreason, NULL, "Port Info Record LinkDown Reason"); for (i = 0; i < 8; i++) { PortInfoRecord_LinkDownReason_Entry_tree = proto_tree_add_subtree_format(PortInfoRecord_LinkDownReason_tree, tvb, local_offset, 16, ett_portinforecord_linkdownreason_entry, NULL, "Link Down Reason Entry %u", i); proto_tree_add_item(PortInfoRecord_LinkDownReason_Entry_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_NA); local_offset += 4; proto_tree_add_item(PortInfoRecord_LinkDownReason_Entry_tree, hf_opa_reserved16, tvb, local_offset, 2, ENC_NA); local_offset += 2; proto_tree_add_item(PortInfoRecord_LinkDownReason_Entry_tree, hf_opa_PortInfoRecord_LinkDownReason_NeighborLinkDownReason, tvb, local_offset, 1, ENC_NA); local_offset += 1; proto_tree_add_item(PortInfoRecord_LinkDownReason_Entry_tree, hf_opa_PortInfoRecord_LinkDownReason_LinkDownReason, tvb, local_offset, 1, ENC_NA); local_offset += 1; proto_tree_add_item(PortInfoRecord_LinkDownReason_Entry_tree, hf_opa_PortInfoRecord_LinkDownReason_Timestamp, tvb, local_offset, 8, ENC_NA); local_offset += 8; } return local_offset; } /* Parse LinkRecord Attribute*/ static gint parse_LinkRecord(proto_tree *parentTree, tvbuff_t *tvb, gint *offset) { gint local_offset = *offset; proto_item *LinkRecord_header_item; proto_tree *LinkRecord_header_tree; if (!parentTree) { return *offset; } LinkRecord_header_item = proto_tree_add_item(parentTree, hf_opa_LinkRecord, tvb, local_offset, 7, ENC_NA); LinkRecord_header_tree = proto_item_add_subtree(LinkRecord_header_item, ett_linkrecord); proto_tree_add_item(LinkRecord_header_tree, hf_opa_LinkRecord_ToPort, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(LinkRecord_header_tree, hf_opa_reserved16, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(LinkRecord_header_tree, hf_opa_LinkRecord_ToLID, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; return local_offset; } /* Parse ServiceRecord Attribute*/ static gint parse_ServiceRecord(proto_tree *parentTree, tvbuff_t *tvb, gint *offset) { gint local_offset = *offset; proto_item *ServiceRecord_header_item; proto_tree *ServiceRecord_header_tree; proto_item *tempData; if (!parentTree) { return *offset; } ServiceRecord_header_item = proto_tree_add_item(parentTree, hf_opa_ServiceRecord, tvb, local_offset, 152, ENC_NA); ServiceRecord_header_tree = proto_item_add_subtree(ServiceRecord_header_item, ett_servicerecord); proto_tree_add_item(ServiceRecord_header_tree, hf_opa_ServiceRecord_ServiceLease, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(ServiceRecord_header_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(ServiceRecord_header_tree, hf_opa_ServiceRecord_ServiceKey, tvb, local_offset, 16, ENC_NA); local_offset += 16; proto_tree_add_item(ServiceRecord_header_tree, hf_opa_ServiceRecord_ServiceName, tvb, local_offset, 64, ENC_ASCII | ENC_NA); local_offset += 64; tempData = proto_tree_add_item(ServiceRecord_header_tree, hf_opa_ServiceRecord_ServiceData, tvb, local_offset, 16, ENC_NA); local_offset += 16; proto_item_append_text(tempData, "(ServiceData 8.1, 8.16)"); tempData = proto_tree_add_item(ServiceRecord_header_tree, hf_opa_ServiceRecord_ServiceData, tvb, local_offset, 16, ENC_NA); local_offset += 16; proto_item_append_text(tempData, "(ServiceData 16.1, 16.8)"); tempData = proto_tree_add_item(ServiceRecord_header_tree, hf_opa_ServiceRecord_ServiceData, tvb, local_offset, 16, ENC_NA); local_offset += 16; proto_item_append_text(tempData, "(ServiceData 32.1, 32.4)"); tempData = proto_tree_add_item(ServiceRecord_header_tree, hf_opa_ServiceRecord_ServiceData, tvb, local_offset, 16, ENC_NA); local_offset += 16; proto_item_append_text(tempData, "(ServiceData 64.1, 64.2)"); return local_offset; } /* Parse PathRecord Attribute*/ static gint parse_PathRecord(proto_tree *parentTree, tvbuff_t *tvb, gint *offset) { gint local_offset = *offset; proto_item * PathRecord_header_item; proto_tree * PathRecord_header_tree; if (!parentTree) { return *offset; } PathRecord_header_item = proto_tree_add_item(parentTree, hf_opa_PathRecord, tvb, local_offset, 64, ENC_NA); PathRecord_header_tree = proto_item_add_subtree(PathRecord_header_item, ett_pathrecord); proto_tree_add_item(PathRecord_header_tree, hf_opa_reserved64, tvb, local_offset, 8, ENC_NA); local_offset += 8; proto_tree_add_item(PathRecord_header_tree, hf_opa_PathRecord_DGID, tvb, local_offset, 16, ENC_NA); local_offset += 16; proto_tree_add_item(PathRecord_header_tree, hf_opa_PathRecord_SGID, tvb, local_offset, 16, ENC_NA); local_offset += 16; proto_tree_add_item(PathRecord_header_tree, hf_opa_PathRecord_DLID, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(PathRecord_header_tree, hf_opa_PathRecord_SLID, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(PathRecord_header_tree, hf_opa_PathRecord_RawTraffic, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_tree_add_item(PathRecord_header_tree, hf_opa_PathRecord_reserved, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_tree_add_item(PathRecord_header_tree, hf_opa_PathRecord_FlowLabel, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_tree_add_item(PathRecord_header_tree, hf_opa_PathRecord_HopLimit, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(PathRecord_header_tree, hf_opa_PathRecord_TClass, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PathRecord_header_tree, hf_opa_PathRecord_Reversible, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(PathRecord_header_tree, hf_opa_PathRecord_NumbPath, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PathRecord_header_tree, hf_opa_PathRecord_P_Key, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(PathRecord_header_tree, hf_opa_PathRecord_QosType, tvb, local_offset, 2, ENC_BIG_ENDIAN); proto_tree_add_item(PathRecord_header_tree, hf_opa_PathRecord_reserved2, tvb, local_offset, 2, ENC_BIG_ENDIAN); proto_tree_add_item(PathRecord_header_tree, hf_opa_PathRecord_QosPriority, tvb, local_offset, 2, ENC_BIG_ENDIAN); proto_tree_add_item(PathRecord_header_tree, hf_opa_PathRecord_SL, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(PathRecord_header_tree, hf_opa_PathRecord_MTUSelector, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(PathRecord_header_tree, hf_opa_PathRecord_MTU, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PathRecord_header_tree, hf_opa_PathRecord_RateSelector, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(PathRecord_header_tree, hf_opa_PathRecord_Rate, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PathRecord_header_tree, hf_opa_PathRecord_PacketLifeTimeSelector, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(PathRecord_header_tree, hf_opa_PathRecord_PacketLifeTime, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PathRecord_header_tree, hf_opa_PathRecord_Preference, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PathRecord_header_tree, hf_opa_reserved16, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(PathRecord_header_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; return local_offset; } /* Parse MCMemberRecord Attribute*/ static gint parse_MCMemberRecord(proto_tree *parentTree, tvbuff_t *tvb, gint *offset) { gint local_offset = *offset; proto_item *MCMemberRecord_header_item; proto_tree *MCMemberRecord_header_tree; if (!parentTree) { return *offset; } MCMemberRecord_header_item = proto_tree_add_item(parentTree, hf_opa_MCMemberRecord, tvb, local_offset, 24, ENC_NA); MCMemberRecord_header_tree = proto_item_add_subtree(MCMemberRecord_header_item, ett_mcmemberrecord); proto_tree_add_item(MCMemberRecord_header_tree, hf_opa_MCMemberRecord_Q_Key, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(MCMemberRecord_header_tree, hf_opa_reserved16, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(MCMemberRecord_header_tree, hf_opa_MCMemberRecord_MTUSelector, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(MCMemberRecord_header_tree, hf_opa_MCMemberRecord_MTU, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(MCMemberRecord_header_tree, hf_opa_MCMemberRecord_TClass, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(MCMemberRecord_header_tree, hf_opa_MCMemberRecord_P_Key, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(MCMemberRecord_header_tree, hf_opa_MCMemberRecord_RateSelector, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(MCMemberRecord_header_tree, hf_opa_MCMemberRecord_Rate, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(MCMemberRecord_header_tree, hf_opa_MCMemberRecord_PacketLifeTimeSelector, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(MCMemberRecord_header_tree, hf_opa_MCMemberRecord_PacketLifeTime, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(MCMemberRecord_header_tree, hf_opa_MCMemberRecord_SL, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_tree_add_item(MCMemberRecord_header_tree, hf_opa_MCMemberRecord_reserved, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_tree_add_item(MCMemberRecord_header_tree, hf_opa_MCMemberRecord_HopLimit, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(MCMemberRecord_header_tree, hf_opa_MCMemberRecord_Scope, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(MCMemberRecord_header_tree, hf_opa_MCMemberRecord_reserved2, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(MCMemberRecord_header_tree, hf_opa_MCMemberRecord_JoinSendOnlyMember, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(MCMemberRecord_header_tree, hf_opa_MCMemberRecord_JoinNonMember, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(MCMemberRecord_header_tree, hf_opa_MCMemberRecord_JoinFullMember, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(MCMemberRecord_header_tree, hf_opa_MCMemberRecord_ProxyJoin, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(MCMemberRecord_header_tree, hf_opa_MCMemberRecord_reserved3, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(MCMemberRecord_header_tree, hf_opa_reserved16, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(MCMemberRecord_header_tree, hf_opa_MCMemberRecord_MLID, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; return local_offset; } /* Parse TraceRecord Attribute*/ static gint parse_TraceRecord(proto_tree *parentTree, tvbuff_t *tvb, gint *offset) { gint local_offset = *offset; proto_item *TraceRecord_header_item; proto_tree *TraceRecord_header_tree; if (!parentTree) { return *offset; } TraceRecord_header_item = proto_tree_add_item(parentTree, hf_opa_TraceRecord, tvb, local_offset, 40, ENC_NA); TraceRecord_header_tree = proto_item_add_subtree(TraceRecord_header_item, ett_tracerecord); proto_tree_add_item(TraceRecord_header_tree, hf_opa_TraceRecord_IDGeneration, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(TraceRecord_header_tree, hf_opa_reserved8, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(TraceRecord_header_tree, hf_opa_TraceRecord_NodeType, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(TraceRecord_header_tree, hf_opa_TraceRecord_EntryPort, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(TraceRecord_header_tree, hf_opa_TraceRecord_ExitPort, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(TraceRecord_header_tree, hf_opa_reserved16, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(TraceRecord_header_tree, hf_opa_TraceRecord_NodeID, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(TraceRecord_header_tree, hf_opa_TraceRecord_ChassisID, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(TraceRecord_header_tree, hf_opa_TraceRecord_EntryPortID, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(TraceRecord_header_tree, hf_opa_TraceRecord_ExitPortID, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; return local_offset; } /* Parse MultiPathRecord Attribute*/ static gint parse_MultiPathRecord_GID(proto_tree *parentTree, tvbuff_t *tvb, gint *offset) { gint local_offset = *offset; proto_item *MultiPathRecord_header_item; proto_tree *MultiPathRecord_header_tree; proto_item *SDGID; guint8 SGIDCount; guint8 DGIDCount; guint32 i; if (!parentTree) return *offset; SGIDCount = tvb_get_guint8(tvb, local_offset + 14); DGIDCount = tvb_get_guint8(tvb, local_offset + 15); MultiPathRecord_header_item = proto_tree_add_item(parentTree, hf_opa_MultiPathRecord, tvb, local_offset, 32 + (SGIDCount + DGIDCount) * 16, ENC_NA); proto_item_append_text(MultiPathRecord_header_item, " (GID)"); MultiPathRecord_header_tree = proto_item_add_subtree(MultiPathRecord_header_item, ett_multipathrecord_gid); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_reserved, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_FlowLabel, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_HopLimit, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_TClass, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_Reversible, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_NumbPath, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_P_Key, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_QoSType, tvb, local_offset, 2, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_QoSPriority, tvb, local_offset, 2, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_reserved2, tvb, local_offset, 2, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_SL, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_MTUSelector, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_MTU, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_RateSelector, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_Rate, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_PacketLifeTimeSelector, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_PacketLifeTime, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_IndependenceSelector, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_SGIDScope, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_DGIDScope, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_SGIDCount, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_DGIDCount, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_sa_ServiceID, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_L2_8B, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_L2_10B, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_L2_9B, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_L2_16B, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_reserved3, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_reserved24, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; for (i = 0; i < SGIDCount; i++) { SDGID = proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_SGID, tvb, local_offset, 16, ENC_NA); local_offset += 16; proto_item_prepend_text(SDGID, "%u: ", i); } for (i = 0; i < DGIDCount; i++) { SDGID = proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_DGID, tvb, local_offset, 16, ENC_NA); local_offset += 16; proto_item_prepend_text(SDGID, "%u: ", i); } return local_offset; } /* Parse MultiPathRecord Attribute*/ static gint parse_MultiPathRecord_GUID(proto_tree *parentTree, tvbuff_t *tvb, gint *offset) { gint local_offset = *offset; proto_item *MultiPathRecord_header_item; proto_tree *MultiPathRecord_header_tree; proto_item *SDGUID; guint16 SGUIDCount; guint16 DGUIDCount; guint32 i; if (!parentTree) return *offset; SGUIDCount = tvb_get_ntohs(tvb, local_offset + 14); DGUIDCount = tvb_get_ntohs(tvb, local_offset + 16); MultiPathRecord_header_item = proto_tree_add_item(parentTree, hf_opa_MultiPathRecord, tvb, local_offset, 40 + (SGUIDCount + DGUIDCount) * 8, ENC_NA); proto_item_append_text(MultiPathRecord_header_item, " (GUID)"); MultiPathRecord_header_tree = proto_item_add_subtree(MultiPathRecord_header_item, ett_multipathrecord_guid); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_reserved, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_FlowLabel, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_HopLimit, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_TClass, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_Reversible, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_NumbPath, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_P_Key, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_QoSType, tvb, local_offset, 2, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_QoSPriority, tvb, local_offset, 2, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_reserved2, tvb, local_offset, 2, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_SL, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_MTUSelector, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_MTU, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_RateSelector, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_Rate, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_PacketLifeTimeSelector, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_PacketLifeTime, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_IndependenceSelector, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_SGUIDScope, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_DGUIDScope, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_SGUIDCount, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_DGUIDCount, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_L2_8B, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_L2_10B, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_L2_9B, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_L2_16B, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_reserved3, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_reserved8, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_ServiceID, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_SubnetPrefix, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; for (i = 0; i < SGUIDCount; i++) { SDGUID = proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_SGUID, tvb, local_offset, 8, ENC_NA); local_offset += 8; proto_item_prepend_text(SDGUID, "%u: ", i); } for (i = 0; i < DGUIDCount; i++) { SDGUID = proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_DGUID, tvb, local_offset, 8, ENC_NA); local_offset += 8; proto_item_prepend_text(SDGUID, "%u: ", i); } return local_offset; } /* Parse MultiPathRecord Attribute*/ static gint parse_MultiPathRecord_lid(proto_tree *parentTree, tvbuff_t *tvb, gint *offset) { gint local_offset = *offset; proto_item *MultiPathRecord_header_item; proto_tree *MultiPathRecord_header_tree; proto_item *SDLID; guint16 SLIDCount; guint16 DLIDCount; guint32 i; if (!parentTree) return *offset; SLIDCount = tvb_get_ntohs(tvb, local_offset + 14); DLIDCount = tvb_get_ntohs(tvb, local_offset + 16); MultiPathRecord_header_item = proto_tree_add_item(parentTree, hf_opa_MultiPathRecord, tvb, local_offset, 40 + (SLIDCount + DLIDCount) * 4, ENC_NA); MultiPathRecord_header_tree = proto_item_add_subtree(MultiPathRecord_header_item, ett_multipathrecord_lid); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_reserved, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_FlowLabel, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_HopLimit, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_TClass, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_Reversible, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_NumbPath, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_P_Key, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_QoSType, tvb, local_offset, 2, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_QoSPriority, tvb, local_offset, 2, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_reserved2, tvb, local_offset, 2, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_SL, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_MTUSelector, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_MTU, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_RateSelector, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_Rate, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_PacketLifeTimeSelector, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_PacketLifeTime, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_IndependenceSelector, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_SGUIDScope, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_DGUIDScope, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_SLIDCount, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_DLIDCount, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_L2_8B, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_L2_10B, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_L2_9B, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_L2_16B, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_reserved3, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_reserved8, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_ServiceID, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_SubnetPrefix, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; for (i = 0; i < SLIDCount; i++) { SDLID = proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_SLID, tvb, local_offset, 4, ENC_NA); local_offset += 4; proto_item_prepend_text(SDLID, "%u: ", i); } for (i = 0; i < DLIDCount; i++) { SDLID = proto_tree_add_item(MultiPathRecord_header_tree, hf_opa_MultiPathRecord_DLID, tvb, local_offset, 4, ENC_NA); local_offset += 4; proto_item_prepend_text(SDLID, "%u: ", i); } return local_offset; } /* Parse CableInfoRecord Attribute*/ static gint parse_CableInfoRecord(proto_tree *parentTree, tvbuff_t *tvb, gint *offset) { gint local_offset = *offset; proto_item *CableInfoRecord_header_item; proto_tree *CableInfoRecord_header_tree; if (!parentTree) return *offset; CableInfoRecord_header_item = proto_tree_add_item(parentTree, hf_opa_CableInfoRecord, tvb, local_offset, 72, ENC_NA); CableInfoRecord_header_tree = proto_item_add_subtree(CableInfoRecord_header_item, ett_cableinforecord); proto_tree_add_item(CableInfoRecord_header_tree, hf_opa_CableInfoRecord_Lid, tvb, local_offset, 4, ENC_NA); local_offset += 4; proto_tree_add_item(CableInfoRecord_header_tree, hf_opa_CableInfoRecord_Port, tvb, local_offset, 1, ENC_NA); local_offset += 1; proto_tree_add_item(CableInfoRecord_header_tree, hf_opa_CableInfoRecord_Length, tvb, local_offset, 1, ENC_NA); proto_tree_add_item(CableInfoRecord_header_tree, hf_opa_CableInfoRecord_reserved, tvb, local_offset, 1, ENC_NA); local_offset += 1; proto_tree_add_item(CableInfoRecord_header_tree, hf_opa_CableInfoRecord_Address, tvb, local_offset, 2, ENC_NA); proto_tree_add_item(CableInfoRecord_header_tree, hf_opa_CableInfoRecord_PortType, tvb, local_offset, 2, ENC_NA); local_offset += 2; proto_tree_add_item(CableInfoRecord_header_tree, hf_opa_CableInfoRecord_Data, tvb, local_offset, 64, ENC_NA); local_offset += 64; return local_offset; } /* Parse ServiceAssociationRecord Attribute*/ static gint parse_ServiceAssociationRecord(proto_tree *parentTree, tvbuff_t *tvb, gint *offset) { gint local_offset = *offset; /* proto_item *ServiceAssociationRecord_header_item; */ proto_tree *ServiceAssociationRecord_header_tree; if (!parentTree) { return *offset; } /* ServiceAssociationRecord_header_item = proto_tree_add_item(parentTree, hf_opa_sapa, tvb, local_offset, 80, ENC_NA); */ /* proto_item_set_text(ServiceAssociationRecord_header_item, "%s", "ServiceAssociationRecord"); */ ServiceAssociationRecord_header_tree = parentTree; /* proto_item_add_subtree(ServiceAssociationRecord_header_item, ett_serviceassocrecord); */ proto_tree_add_item(ServiceAssociationRecord_header_tree, hf_opa_ServiceAssociationRecord_ServiceKey, tvb, local_offset, 16, ENC_NA); local_offset += 16; proto_tree_add_item(ServiceAssociationRecord_header_tree, hf_opa_ServiceAssociationRecord_ServiceName, tvb, local_offset, 64, ENC_ASCII | ENC_NA); local_offset += 64; return local_offset; } static gint parse_VFInfoRecord(proto_tree *parentTree, tvbuff_t *tvb, gint *offset) { gint local_offset = *offset; proto_item *VFInfoRecord_header_item; proto_tree *VFInfoRecord_header_tree; if (!parentTree) return *offset; VFInfoRecord_header_item = proto_tree_add_item(parentTree, hf_opa_VFInfoRecord, tvb, local_offset, 128, ENC_NA); VFInfoRecord_header_tree = proto_item_add_subtree(VFInfoRecord_header_item, ett_vfinforecord); proto_tree_add_item(VFInfoRecord_header_tree, hf_opa_VFInfoRecord_vfIndex, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(VFInfoRecord_header_tree, hf_opa_VFInfoRecord_pKey, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(VFInfoRecord_header_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(VFInfoRecord_header_tree, hf_opa_VFInfoRecord_vfName, tvb, local_offset, 64, ENC_ASCII | ENC_NA); local_offset += 64; proto_tree_add_item(VFInfoRecord_header_tree, hf_opa_sa_ServiceID, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(VFInfoRecord_header_tree, hf_opa_VFInfoRecord_MGID, tvb, local_offset, 16, ENC_NA); local_offset += 16; proto_tree_add_item(VFInfoRecord_header_tree, hf_opa_VFInfoRecord_SelectFlags, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(VFInfoRecord_header_tree, hf_opa_VFInfoRecord_reserved, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(VFInfoRecord_header_tree, hf_opa_VFInfoRecord_SL, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(VFInfoRecord_header_tree, hf_opa_VFInfoRecord_MTUSpecified, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(VFInfoRecord_header_tree, hf_opa_VFInfoRecord_reserved2, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(VFInfoRecord_header_tree, hf_opa_VFInfoRecord_MTU, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(VFInfoRecord_header_tree, hf_opa_VFInfoRecord_RateSpecified, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(VFInfoRecord_header_tree, hf_opa_VFInfoRecord_reserved4, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(VFInfoRecord_header_tree, hf_opa_VFInfoRecord_Rate, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(VFInfoRecord_header_tree, hf_opa_VFInfoRecord_PktLifeSpecified, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(VFInfoRecord_header_tree, hf_opa_VFInfoRecord_reserved5, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(VFInfoRecord_header_tree, hf_opa_VFInfoRecord_PktLifeTimeInc, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(VFInfoRecord_header_tree, hf_opa_VFInfoRecord_OptionFlags, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(VFInfoRecord_header_tree, hf_opa_VFInfoRecord_BandwidthPercent, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(VFInfoRecord_header_tree, hf_opa_VFInfoRecord_reserved6, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(VFInfoRecord_header_tree, hf_opa_VFInfoRecord_Priority, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(VFInfoRecord_header_tree, hf_opa_VFInfoRecord_RoutingSLs, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(VFInfoRecord_header_tree, hf_opa_VFInfoRecord_reserved7, tvb, local_offset, 24, ENC_NA); local_offset += 24; return local_offset; } static gint parse_QuarantinedNodeRecord(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { gint local_offset = *offset; proto_item *QuarantinedNodeRecord_header_item; proto_tree *QuarantinedNodeRecord_header_tree; if (!parentTree || MAD->Method == METHOD_GET || MAD->Method == METHOD_GETTABLE) return *offset; QuarantinedNodeRecord_header_item = proto_tree_add_item(parentTree, hf_opa_QuarantinedNodeRecord, tvb, local_offset, 213, ENC_NA); QuarantinedNodeRecord_header_tree = proto_item_add_subtree(QuarantinedNodeRecord_header_item, ett_quarantinednoderecord); proto_tree_add_item(QuarantinedNodeRecord_header_tree, hf_opa_QuarantinedNodeRecord_TrustedLid, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(QuarantinedNodeRecord_header_tree, hf_opa_QuarantinedNodeRecord_TrustedPortNum, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(QuarantinedNodeRecord_header_tree, hf_opa_reserved24, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; proto_tree_add_item(QuarantinedNodeRecord_header_tree, hf_opa_QuarantinedNodeRecord_TrustedNodeGUID, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(QuarantinedNodeRecord_header_tree, hf_opa_QuarantinedNodeRecord_TrustedNeighborNodeGUID, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; local_offset = parse_NodeDescription(QuarantinedNodeRecord_header_tree, tvb, &local_offset, MAD); local_offset = parse_NodeInfo(QuarantinedNodeRecord_header_tree, tvb, &local_offset, MAD); proto_tree_add_item(QuarantinedNodeRecord_header_tree, hf_opa_QuarantinedNodeRecord_QuarantineReasons, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(QuarantinedNodeRecord_header_tree, hf_opa_QuarantinedNodeRecord_ExpectedNodeDesc, tvb, local_offset, 64, ENC_BIG_ENDIAN); local_offset += 64; proto_tree_add_item(QuarantinedNodeRecord_header_tree, hf_opa_QuarantinedNodeRecord_ExpectedNodeGUID, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(QuarantinedNodeRecord_header_tree, hf_opa_QuarantinedNodeRecord_ExpectedPortGUID, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; return local_offset; } static gint parse_FabricInfoRecord(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { gint local_offset = *offset; proto_item *FabricInfoRecord_header_item; proto_tree *FabricInfoRecord_header_tree; if (!parentTree || MAD->Method == METHOD_GET || MAD->Method == METHOD_GETTABLE) return *offset; FabricInfoRecord_header_item = proto_tree_add_item(parentTree, hf_opa_FabricInfoRecord, tvb, local_offset, 132, ENC_NA); FabricInfoRecord_header_tree = proto_item_add_subtree(FabricInfoRecord_header_item, ett_fabricinforecord); proto_tree_add_item(FabricInfoRecord_header_tree, hf_opa_FabricInfoRecord_NumHFIs, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(FabricInfoRecord_header_tree, hf_opa_FabricInfoRecord_NumSwitches, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(FabricInfoRecord_header_tree, hf_opa_FabricInfoRecord_NumInternalHFILinks, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(FabricInfoRecord_header_tree, hf_opa_FabricInfoRecord_NumExternalHFILinks, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(FabricInfoRecord_header_tree, hf_opa_FabricInfoRecord_NumInternalISLs, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(FabricInfoRecord_header_tree, hf_opa_FabricInfoRecord_NumExternalISLs, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(FabricInfoRecord_header_tree, hf_opa_FabricInfoRecord_NumDegradedHFILinks, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(FabricInfoRecord_header_tree, hf_opa_FabricInfoRecord_NumDegradedISLs, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(FabricInfoRecord_header_tree, hf_opa_FabricInfoRecord_NumOmittedHFILinks, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(FabricInfoRecord_header_tree, hf_opa_FabricInfoRecord_NumOmittedISLs, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(FabricInfoRecord_header_tree, hf_opa_FabricInfoRecord_Reserved, tvb, local_offset, 92, ENC_NA); local_offset += 92; return local_offset; } /* Parse RID Field from Subnet Administration Packets. */ static void parse_RID(proto_tree *SA_header_tree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { gint local_offset = *offset; if (!SA_header_tree) return; switch (MAD->AttributeID) { case SA_ATTR_ID_CLASS_PORT_INFO: break; case SA_ATTR_ID_NOTICE: break; case SA_ATTR_ID_NODE_RECORD: /* NodeRecord */ proto_tree_add_item(SA_header_tree, hf_opa_sa_Lid, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; break; case SA_ATTR_ID_PORTINFO_RECORD: /* PortInfoRecord */ proto_tree_add_item(SA_header_tree, hf_opa_sa_EndportLID, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(SA_header_tree, hf_opa_sa_PortNum, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(SA_header_tree, hf_opa_reserved8, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; break; case SA_ATTR_ID_SC_MAPTBL_RECORD: /* SCMappingTableRecord */ proto_tree_add_item(SA_header_tree, hf_opa_sa_Lid, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(SA_header_tree, hf_opa_sa_InputPortNum, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(SA_header_tree, hf_opa_sa_OutputPortNum, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; break; case SA_ATTR_ID_SL2SC_MAPTBL_RECORD: case SA_ATTR_ID_SC2SL_MAPTBL_RECORD: proto_tree_add_item(SA_header_tree, hf_opa_sa_Lid, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(SA_header_tree, hf_opa_reserved16, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; break; case SA_ATTR_ID_SC_VLNT_MAPTBL_RECORD: case SA_ATTR_ID_SC_VLT_MAPTBL_RECORD: case SA_ATTR_ID_SC_VLR_MAPTBL_RECORD: proto_tree_add_item(SA_header_tree, hf_opa_sa_Lid, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(SA_header_tree, hf_opa_sa_Port, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; break; case SA_ATTR_ID_SWITCHINFO_RECORD: /* SwitchInfoRecord */ proto_tree_add_item(SA_header_tree, hf_opa_sa_Lid, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; break; case SA_ATTR_ID_LINEAR_FWDTBL_RECORD: /* LinearForwardingTableRecord */ proto_tree_add_item(SA_header_tree, hf_opa_sa_Lid, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(SA_header_tree, hf_opa_sa_reserved14, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_tree_add_item(SA_header_tree, hf_opa_sa_BlockNum_18b, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; break; case SA_ATTR_ID_MCAST_FWDTBL_RECORD: /* MulticastForwardingTableRecord */ proto_tree_add_item(SA_header_tree, hf_opa_sa_Lid, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(SA_header_tree, hf_opa_sa_Position, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_tree_add_item(SA_header_tree, hf_opa_sa_reserved9, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_tree_add_item(SA_header_tree, hf_opa_sa_BlockNum_21b, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; break; case SA_ATTR_ID_VLARBTABLE_RECORD: /*VLArbitrationTableRecord */ proto_tree_add_item(SA_header_tree, hf_opa_sa_Lid, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(SA_header_tree, hf_opa_sa_OutputPortNum, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(SA_header_tree, hf_opa_sa_BlockNum_8b, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; break; case SA_ATTR_ID_SMINFO_RECORD: /* SMInfoRecord */ proto_tree_add_item(SA_header_tree, hf_opa_sa_Lid, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; break; case SA_ATTR_ID_P_KEY_TABLE_RECORD: /* P_KeyTableRecord */ proto_tree_add_item(SA_header_tree, hf_opa_sa_Lid, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(SA_header_tree, hf_opa_sa_BlockNum_16b, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(SA_header_tree, hf_opa_sa_PortNum, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; break; case SA_ATTR_ID_INFORM_INFO_RECORD: /* InformInfoRecord */ proto_tree_add_item(SA_header_tree, hf_opa_sa_SubscriberLID, tvb, local_offset, 4, ENC_NA); local_offset += 4; proto_tree_add_item(SA_header_tree, hf_opa_sa_Enum, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; break; case SA_ATTR_ID_LINK_RECORD: /* LinkRecord */ proto_tree_add_item(SA_header_tree, hf_opa_sa_FromLID, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(SA_header_tree, hf_opa_sa_FromPort, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; break; case SA_ATTR_ID_SERVICE_RECORD: /* ServiceRecord */ proto_tree_add_item(SA_header_tree, hf_opa_sa_ServiceID, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(SA_header_tree, hf_opa_sa_ServiceLID, tvb, local_offset, 4, ENC_NA); local_offset += 4; proto_tree_add_item(SA_header_tree, hf_opa_sa_ServiceP_Key, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(SA_header_tree, hf_opa_reserved16, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(SA_header_tree, hf_opa_sa_ServiceGID, tvb, local_offset, 16, ENC_NA); local_offset += 16; break; case SA_ATTR_ID_PATH_RECORD: /* PathRecord */ break; case SA_ATTR_ID_MCMEMBER_RECORD: /* MCMemberRecord */ proto_tree_add_item(SA_header_tree, hf_opa_sa_MGID, tvb, local_offset, 16, ENC_NA); local_offset += 16; proto_tree_add_item(SA_header_tree, hf_opa_sa_PortGID, tvb, local_offset, 16, ENC_NA); local_offset += 16; break; case SA_ATTR_ID_TRACE_RECORD: break; case SA_ATTR_ID_MULTIPATH_GID_RECORD: break; case SA_ATTR_ID_MULTIPATH_GUID_RECORD: break; case SA_ATTR_ID_MULTIPATH_LID_RECORD: break; case SA_ATTR_ID_CABLE_INFO_RECORD: break; case SA_ATTR_ID_VF_INFO_RECORD: break; case SA_ATTR_ID_PORTGROUP_TABLE_RECORD: proto_tree_add_item(SA_header_tree, hf_opa_sa_Lid, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(SA_header_tree, hf_opa_sa_Position_16b, tvb, local_offset, 2, ENC_BIG_ENDIAN); proto_tree_add_item(SA_header_tree, hf_opa_sa_reserved9_16b, tvb, local_offset, 2, ENC_BIG_ENDIAN); proto_tree_add_item(SA_header_tree, hf_opa_sa_BlockNum_5b, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; break; case SA_ATTR_ID_QUARANTINED_NODE_RECORD: break; case SA_ATTR_ID_CONGESTION_INFO_RECORD: proto_tree_add_item(SA_header_tree, hf_opa_sa_Lid, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; break; case SA_ATTR_ID_SWITCH_CONG_RECORD: proto_tree_add_item(SA_header_tree, hf_opa_sa_Lid, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; break; case SA_ATTR_ID_SWITCH_PORT_CONG_RECORD: proto_tree_add_item(SA_header_tree, hf_opa_sa_Lid, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(SA_header_tree, hf_opa_sa_Port, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; break; case SA_ATTR_ID_HFI_CONG_RECORD: proto_tree_add_item(SA_header_tree, hf_opa_sa_Lid, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; break; case SA_ATTR_ID_HFI_CONG_CTRL_RECORD: proto_tree_add_item(SA_header_tree, hf_opa_sa_Lid, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(SA_header_tree, hf_opa_sa_BlockNum_16b, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; break; case SA_ATTR_ID_BUFF_CTRL_TAB_RECORD: proto_tree_add_item(SA_header_tree, hf_opa_sa_Lid, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(SA_header_tree, hf_opa_sa_Port, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; break; case SA_ATTR_ID_FABRICINFO_RECORD: break; default: break; } *offset = local_offset; } /* Parse the attribute from a Subnet Administration Packet. */ static gboolean parse_SUBA_Attribute(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD, RMPP_t *RMPP, SA_HEADER_t *SA_HEADER) { proto_tree *SUBA_Attribute_header_tree = parentTree; gint local_offset = *offset; if (RMPP->Type == RMPP_ACK || SA_HEADER->AttributeOffset == 0 || (RMPP->PayloadLength <= 20 && RMPP->Type == RMPP_DATA) || (!pref_attempt_rmpp_defragment && RMPP->Type == RMPP_DATA && RMPP->SegmentNumber != 1)) return TRUE; /* Skim off the RID fields should they be present */ parse_RID(SUBA_Attribute_header_tree, tvb, &local_offset, MAD); /* Parse the rest of the attributes */ switch (MAD->AttributeID) { case SA_ATTR_ID_CLASS_PORT_INFO: /* (ClassPortInfo) */ local_offset = parse_ClassPortInfo(SUBA_Attribute_header_tree, tvb, &local_offset, MAD); break; case SA_ATTR_ID_NOTICE: /* (Notice) */ local_offset = parse_NoticesAndTraps(SUBA_Attribute_header_tree, tvb, &local_offset); break; case SA_ATTR_ID_INFORM_INFO: /* (InformInfo) */ local_offset = parse_InformInfo(SUBA_Attribute_header_tree, tvb, &local_offset, MAD); break; case SA_ATTR_ID_NODE_RECORD: /* (NodeRecord) */ proto_tree_add_item(SUBA_Attribute_header_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; local_offset = parse_NodeInfo(SUBA_Attribute_header_tree, tvb, &local_offset, MAD); local_offset = parse_NodeDescription(SUBA_Attribute_header_tree, tvb, &local_offset, MAD); break; case SA_ATTR_ID_PORTINFO_RECORD: /* (PortInfoRecord) */ proto_tree_add_item(SUBA_Attribute_header_tree, hf_opa_reserved16, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; local_offset = parse_PortInfoRecord(SUBA_Attribute_header_tree, tvb, &local_offset, MAD); break; case SA_ATTR_ID_SL2SC_MAPTBL_RECORD: proto_tree_add_item(SUBA_Attribute_header_tree, hf_opa_reserved16, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; local_offset = parse_SLtoSCMappingTable(SUBA_Attribute_header_tree, tvb, &local_offset, MAD); break; case SA_ATTR_ID_SC_MAPTBL_RECORD: proto_tree_add_item(SUBA_Attribute_header_tree, hf_opa_reserved16, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; local_offset = parse_SCtoSCMappingTable(SUBA_Attribute_header_tree, tvb, &local_offset, MAD); break; case SA_ATTR_ID_SC2SL_MAPTBL_RECORD: proto_tree_add_item(SUBA_Attribute_header_tree, hf_opa_reserved16, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; local_offset = parse_SCtoSLMappingTable(SUBA_Attribute_header_tree, tvb, &local_offset, MAD); break; case SA_ATTR_ID_SC_VLNT_MAPTBL_RECORD: case SA_ATTR_ID_SC_VLT_MAPTBL_RECORD: case SA_ATTR_ID_SC_VLR_MAPTBL_RECORD: proto_tree_add_item(SUBA_Attribute_header_tree, hf_opa_reserved24, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; local_offset = parse_SCtoVLxMappingTable(SUBA_Attribute_header_tree, tvb, &local_offset, MAD); break; case SA_ATTR_ID_SWITCHINFO_RECORD: /* (SwitchInfoRecord) */ proto_tree_add_item(SUBA_Attribute_header_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; local_offset = parse_SwitchInfo(SUBA_Attribute_header_tree, tvb, &local_offset, MAD); break; case SA_ATTR_ID_LINEAR_FWDTBL_RECORD: /*(LinearForwardingTableRecord) */ local_offset = parse_LinearForwardingTable(SUBA_Attribute_header_tree, tvb, &local_offset, MAD); break; case SA_ATTR_ID_MCAST_FWDTBL_RECORD: /* (MulticastForwardingTableRecord) */ local_offset = parse_MulticastForwardingTable(SUBA_Attribute_header_tree, tvb, &local_offset, MAD); break; case SA_ATTR_ID_VLARBTABLE_RECORD: /* (VLArbitrationTableRecord) */ proto_tree_add_item(SUBA_Attribute_header_tree, hf_opa_reserved16, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; local_offset = parse_VLArbitrationTable(SUBA_Attribute_header_tree, tvb, &local_offset, MAD); break; case SA_ATTR_ID_SMINFO_RECORD: /* (SMInfoRecord) */ proto_tree_add_item(SUBA_Attribute_header_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; local_offset = parse_SMInfo(SUBA_Attribute_header_tree, tvb, &local_offset, MAD); break; case SA_ATTR_ID_P_KEY_TABLE_RECORD: /* (P_KeyTableRecord) */ proto_tree_add_item(SUBA_Attribute_header_tree, hf_opa_reserved8, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; local_offset = parse_P_KeyTable(SUBA_Attribute_header_tree, tvb, &local_offset, MAD); break; case SA_ATTR_ID_INFORM_INFO_RECORD: /*(InformInfoRecord) */ proto_tree_add_item(SUBA_Attribute_header_tree, hf_opa_reserved16, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; local_offset = parse_InformInfo(SUBA_Attribute_header_tree, tvb, &local_offset, MAD); break; case SA_ATTR_ID_LINK_RECORD: /* (LinkRecord) */ local_offset = parse_LinkRecord(SUBA_Attribute_header_tree, tvb, &local_offset); break; case SA_ATTR_ID_SERVICE_RECORD: /*(ServiceRecord) */ local_offset = parse_ServiceRecord(SUBA_Attribute_header_tree, tvb, &local_offset); break; case SA_ATTR_ID_PATH_RECORD: /* (PathRecord) */ local_offset = parse_PathRecord(SUBA_Attribute_header_tree, tvb, &local_offset); break; case SA_ATTR_ID_MCMEMBER_RECORD: /* (MCMemberRecord) */ local_offset = parse_MCMemberRecord(SUBA_Attribute_header_tree, tvb, &local_offset); break; case SA_ATTR_ID_TRACE_RECORD: /* (TraceRecord) */ local_offset = parse_TraceRecord(SUBA_Attribute_header_tree, tvb, &local_offset); break; case SA_ATTR_ID_MULTIPATH_GID_RECORD: /* (MultiPathRecord) */ local_offset = parse_MultiPathRecord_GID(SUBA_Attribute_header_tree, tvb, &local_offset); break; case SA_ATTR_ID_MULTIPATH_GUID_RECORD: local_offset = parse_MultiPathRecord_GUID(SUBA_Attribute_header_tree, tvb, &local_offset); break; case SA_ATTR_ID_MULTIPATH_LID_RECORD: local_offset = parse_MultiPathRecord_lid(SUBA_Attribute_header_tree, tvb, &local_offset); break; case SA_ATTR_ID_SERVICEASSOCIATION_RECORD: /* (ServiceAssociationRecord) */ local_offset = parse_ServiceAssociationRecord(SUBA_Attribute_header_tree, tvb, &local_offset); break; case SA_ATTR_ID_PGROUP_FWDTBL_RECORD: local_offset = parse_PortGroupForwardingTable(SUBA_Attribute_header_tree, tvb, &local_offset, MAD); break; case SA_ATTR_ID_CABLE_INFO_RECORD: /* (CableInfoRecord) */ local_offset = parse_CableInfoRecord(SUBA_Attribute_header_tree, tvb, &local_offset); break; case SA_ATTR_ID_VF_INFO_RECORD: local_offset = parse_VFInfoRecord(SUBA_Attribute_header_tree, tvb, &local_offset); break; case SA_ATTR_ID_PORTGROUP_TABLE_RECORD: proto_tree_add_item(SUBA_Attribute_header_tree, hf_opa_reserved16, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; local_offset = parse_PortGroupTable(SUBA_Attribute_header_tree, tvb, &local_offset, MAD); break; case SA_ATTR_ID_QUARANTINED_NODE_RECORD: local_offset = parse_QuarantinedNodeRecord(SUBA_Attribute_header_tree, tvb, &local_offset, MAD); break; case SA_ATTR_ID_CONGESTION_INFO_RECORD: proto_tree_add_item(SUBA_Attribute_header_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; local_offset = parse_CongestionInfo(SUBA_Attribute_header_tree, tvb, &local_offset, MAD); break; case SA_ATTR_ID_SWITCH_CONG_RECORD: proto_tree_add_item(SUBA_Attribute_header_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; local_offset = parse_SwitchCongestionSetting(SUBA_Attribute_header_tree, tvb, &local_offset, MAD); break; case SA_ATTR_ID_SWITCH_PORT_CONG_RECORD: proto_tree_add_item(SUBA_Attribute_header_tree, hf_opa_reserved24, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; local_offset = parse_SwitchPortCongestionSetting(SUBA_Attribute_header_tree, tvb, &local_offset, MAD); break; case SA_ATTR_ID_HFI_CONG_RECORD: proto_tree_add_item(SUBA_Attribute_header_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; local_offset = parse_HFICongestionSetting(SUBA_Attribute_header_tree, tvb, &local_offset, MAD); break; case SA_ATTR_ID_HFI_CONG_CTRL_RECORD: proto_tree_add_item(SUBA_Attribute_header_tree, hf_opa_reserved16, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; local_offset = parse_HFICongestionControlTable(SUBA_Attribute_header_tree, tvb, &local_offset, MAD); break; case SA_ATTR_ID_BUFF_CTRL_TAB_RECORD: proto_tree_add_item(SUBA_Attribute_header_tree, hf_opa_reserved24, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; local_offset = parse_BufferControlTable(SUBA_Attribute_header_tree, tvb, &local_offset, MAD); break; case SA_ATTR_ID_FABRICINFO_RECORD: local_offset = parse_FabricInfoRecord(SUBA_Attribute_header_tree, tvb, &local_offset, MAD); break; default: return FALSE; } *offset = local_offset; return TRUE; } /* Parse the SA Method from the MAD Common Header. */ static void label_SUBA_Method(proto_item *SubAItem, MAD_t *MAD, packet_info *pinfo) { const gchar *label = val_to_str_const(MAD->Method, SUBA_Methods, "(Unknown SA Method!)"); proto_item_append_text(SubAItem, " %s", label); col_append_str(pinfo->cinfo, COL_INFO, label); } /* Parse the SA Attribute from the MAD Common Header */ static void label_SUBA_Attribute(proto_item *SubAItem, MAD_t *MAD, packet_info *pinfo) { const gchar *label = val_to_str_const(MAD->AttributeID, SUBA_Attributes, "Attribute (Unknown SA Attribute!)"); proto_item_append_text(SubAItem, "%s", &label[11]); col_append_str(pinfo->cinfo, COL_INFO, &label[11]); } /* Parse the SA_HEADER * IN: parentTree to add the dissection to * IN: tvb - the data buffer from wireshark * IN/OUT: The current and updated offset */ static gboolean parse_SA_HEADER(proto_tree *parentTree, packet_info *pinfo, tvbuff_t *tvb, gint *offset, MAD_t *MAD, SA_HEADER_t *SA_HEADER) { gint local_offset = *offset; proto_item *SA_HEADER_header_item; proto_tree *SA_HEADER_header_tree; SA_HEADER_header_item = proto_tree_add_item(parentTree, hf_opa_sa, tvb, local_offset, 20, ENC_NA); SA_HEADER_header_tree = proto_item_add_subtree(SA_HEADER_header_item, ett_sa); SA_HEADER->SM_Key = tvb_get_ntoh64(tvb, local_offset); proto_tree_add_item(SA_HEADER_header_tree, hf_opa_sa_sm_key, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; SA_HEADER->AttributeOffset = tvb_get_ntohs(tvb, local_offset); proto_tree_add_item(SA_HEADER_header_tree, hf_opa_sa_attribute_offset, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; SA_HEADER->Reserved = tvb_get_ntohs(tvb, local_offset); proto_tree_add_item(SA_HEADER_header_tree, hf_opa_reserved16, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; SA_HEADER->ComponentMask = tvb_get_ntoh64(tvb, local_offset); proto_tree_add_item(SA_HEADER_header_tree, hf_opa_sa_component_mask, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; label_SUBA_Method(SA_HEADER_header_item, MAD, pinfo); label_SUBA_Attribute(SA_HEADER_header_item, MAD, pinfo); *offset = local_offset; return TRUE; } /* Parse Subnet Administration */ static void parse_SUBNADMN(proto_tree *parentTree, packet_info *pinfo, tvbuff_t *tvb, gint *offset) { MAD_t MAD; RMPP_t RMPP; SA_HEADER_t SA_HEADER; fragment_head *frag_head = NULL; tvbuff_t *old_tvb = NULL; gint old_offset; guint r, records, length; proto_tree *SA_record_tree; const gchar *label; gboolean parent_was_opa_fe = proto_is_frame_protocol(pinfo->layers, "opa.fe"); if (!parse_MAD_Common(parentTree, pinfo, tvb, offset, &MAD)) { return; } if (!parse_RMPP(parentTree, pinfo, tvb, offset, &RMPP)) { return; } if (!parse_SA_HEADER(parentTree, pinfo, tvb, offset, &MAD, &SA_HEADER)) { return; } if ((!pref_parse_on_mad_status_error && MAD.Status) || RMPP.Type == RMPP_ACK) { *offset += tvb_captured_length_remaining(tvb, *offset); return; } if (!parent_was_opa_fe && pref_attempt_rmpp_defragment && (RMPP.resptime_flags & RMPP_FLAG_ACTIVE_MASK) && (RMPP.Type == RMPP_DATA) && !((RMPP.resptime_flags & RMPP_FLAG_FIRST_MASK) && (RMPP.resptime_flags & RMPP_FLAG_LAST_MASK))) { frag_head = fragment_add_seq_check(&opa_mad_rmpp_reassembly_table, tvb, *offset, pinfo, (guint32)MAD.TransactionID, NULL, RMPP.SegmentNumber - 1, ((RMPP.resptime_flags & RMPP_FLAG_LAST_MASK) ? RMPP.PayloadLength - 20 : (guint32)tvb_captured_length_remaining(tvb, *offset)), (gboolean)!(RMPP.resptime_flags & RMPP_FLAG_LAST_MASK)); /* Back up tvb & offset */ old_tvb = tvb; old_offset = *offset; /* Create new tvb from reassembled data */ tvb = process_reassembled_data(old_tvb, old_offset, pinfo, "Reassembled RMPP Packet", frag_head, &opa_rmpp_frag_items, NULL, parentTree); if (tvb == NULL) { return; } *offset = 0; } length = tvb_captured_length_remaining(tvb, *offset); records = (SA_HEADER.AttributeOffset ? length / (SA_HEADER.AttributeOffset * 8) : 0); for (r = 0; r < records; r++) { old_offset = *offset; label = val_to_str_const(MAD.AttributeID, SUBA_Attributes, "Attribute (Unknown SA Attribute!)"); SA_record_tree = proto_tree_add_subtree_format(parentTree, tvb, old_offset, (SA_HEADER.AttributeOffset * 8), ett_rmpp_sa_record, NULL, "%s Record %u: ", label, r); if (!parse_SUBA_Attribute(SA_record_tree, tvb, offset, &MAD, &RMPP, &SA_HEADER)) { expert_add_info_format(pinfo, NULL, &ei_opa_mad_no_attribute_dissector, "Attribute Dissector Not Implemented (0x%x)", MAD.AttributeID); *offset += tvb_captured_length_remaining(tvb, *offset); return; } *offset = old_offset + (SA_HEADER.AttributeOffset * 8); } return; } /* Parse PortStatus MAD from the Performance management class. */ static gint parse_PortStatus(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { proto_item *PortStatus_header_item; proto_tree *PortStatus_header_tree; proto_tree *PortStatus_VL_tree; gint local_offset = *offset; guint32 VLSelectMask; guint i, VLs; guint32 vlSelMskTmp; if (!parentTree) return *offset; VLSelectMask = tvb_get_ntohl(tvb, local_offset + 4); for (i = 0, VLs = 0, vlSelMskTmp = VLSelectMask; vlSelMskTmp && i < 32; i++, vlSelMskTmp >>= 1) { VLs = VLs + (vlSelMskTmp & 0x1); } if (MAD->Method == METHOD_GET) { /* Get() */ PortStatus_header_item = proto_tree_add_item(parentTree, hf_opa_PortStatus, tvb, local_offset, 8, ENC_NA); } else if (MAD->Method == METHOD_GET_RESP) { /* GetResp(): */ PortStatus_header_item = proto_tree_add_item(parentTree, hf_opa_PortStatus, tvb, local_offset, 208 + VLs * 112, ENC_NA); } else { return *offset; } PortStatus_header_tree = proto_item_add_subtree(PortStatus_header_item, ett_portstatus); proto_tree_add_item(PortStatus_header_tree, hf_opa_PortStatus_PortNumber, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PortStatus_header_tree, hf_opa_reserved24, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; proto_tree_add_item(PortStatus_header_tree, hf_opa_PortStatus_VLSelectMask, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; if (MAD->Method == METHOD_GET) return local_offset; proto_tree_add_item(PortStatus_header_tree, hf_opa_PortStatus_PortXmitData, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(PortStatus_header_tree, hf_opa_PortStatus_PortRcvData, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(PortStatus_header_tree, hf_opa_PortStatus_PortXmitPkts, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(PortStatus_header_tree, hf_opa_PortStatus_PortRcvPkts, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(PortStatus_header_tree, hf_opa_PortStatus_PortMulticastXmitPkts, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(PortStatus_header_tree, hf_opa_PortStatus_PortMulticastRcvPkts, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(PortStatus_header_tree, hf_opa_PortStatus_PortXmitWait, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(PortStatus_header_tree, hf_opa_PortStatus_SwPortCongestion, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(PortStatus_header_tree, hf_opa_PortStatus_PortRcvFECN, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(PortStatus_header_tree, hf_opa_PortStatus_PortRcvBECN, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(PortStatus_header_tree, hf_opa_PortStatus_PortXmitTimeCong, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(PortStatus_header_tree, hf_opa_PortStatus_PortXmitWastedBW, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(PortStatus_header_tree, hf_opa_PortStatus_PortXmitWaitData, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(PortStatus_header_tree, hf_opa_PortStatus_PortRcvBubble, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(PortStatus_header_tree, hf_opa_PortStatus_PortMarkFECN, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(PortStatus_header_tree, hf_opa_PortStatus_PortRcvConstraintErrors, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(PortStatus_header_tree, hf_opa_PortStatus_PortRcvSwitchRelayErrors, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(PortStatus_header_tree, hf_opa_PortStatus_PortXmitDiscards, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(PortStatus_header_tree, hf_opa_PortStatus_PortXmitConstraintErrors, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(PortStatus_header_tree, hf_opa_PortStatus_PortRcvRemotePhysicalErrors, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(PortStatus_header_tree, hf_opa_PortStatus_LocalLinkIntegrityErrors, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(PortStatus_header_tree, hf_opa_PortStatus_PortRcvErrors, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(PortStatus_header_tree, hf_opa_PortStatus_ExcessiveBufferOverruns, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(PortStatus_header_tree, hf_opa_PortStatus_FMConfigErrors, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(PortStatus_header_tree, hf_opa_PortStatus_LinkErrorRecovery, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(PortStatus_header_tree, hf_opa_PortStatus_LinkDowned, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(PortStatus_header_tree, hf_opa_PortStatus_UncorrectableErrors, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PortStatus_header_tree, hf_opa_PortStatus_reserved, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(PortStatus_header_tree, hf_opa_PortStatus_LinkQualityIndicator, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PortStatus_header_tree, hf_opa_reserved16, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(PortStatus_header_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; for (i = 0, vlSelMskTmp = VLSelectMask; vlSelMskTmp && i < 32; i++, vlSelMskTmp >>= 1) { if (vlSelMskTmp & 0x1) { PortStatus_VL_tree = proto_tree_add_subtree_format(PortStatus_header_tree, tvb, local_offset, 112, ett_portstatus_vl, NULL, "VL %u", i); proto_tree_add_item(PortStatus_VL_tree, hf_opa_PortStatus_PortVLXmitData, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(PortStatus_VL_tree, hf_opa_PortStatus_PortVLRcvData, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(PortStatus_VL_tree, hf_opa_PortStatus_PortVLXmitPkts, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(PortStatus_VL_tree, hf_opa_PortStatus_PortVLRcvPkts, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(PortStatus_VL_tree, hf_opa_PortStatus_PortVLXmitWait, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(PortStatus_VL_tree, hf_opa_PortStatus_SwPortVLCongestion, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(PortStatus_VL_tree, hf_opa_PortStatus_PortVLRcvFECN, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(PortStatus_VL_tree, hf_opa_PortStatus_PortVLRcvBECN, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(PortStatus_VL_tree, hf_opa_PortStatus_PortVLXmitTimeCong, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(PortStatus_VL_tree, hf_opa_PortStatus_PortVLXmitWastedBW, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(PortStatus_VL_tree, hf_opa_PortStatus_PortVLXmitWaitData, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(PortStatus_VL_tree, hf_opa_PortStatus_PortVLRcvBubble, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(PortStatus_VL_tree, hf_opa_PortStatus_PortVLMarkFECN, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(PortStatus_VL_tree, hf_opa_PortStatus_PortVLXmitDiscards, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; } } return local_offset; } /* Parse ClearPortStatus MAD from the Performance management class.*/ static gint parse_ClearPortStatus(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { proto_item *ClearPortStatus_header_item; proto_tree *ClearPortStatus_header_tree; proto_item *ClearPortStatus_PortSelectMask_item; gint local_offset = *offset; if (!parentTree) return *offset; if (MAD->Method == METHOD_SET || MAD->Method == METHOD_GET_RESP) { /* Only Set()/GetResp() is supported. */ ClearPortStatus_header_item = proto_tree_add_item(parentTree, hf_opa_ClearPortStatus, tvb, local_offset, 36, ENC_NA); } else return *offset; ClearPortStatus_header_tree = proto_item_add_subtree(ClearPortStatus_header_item, ett_clearportstatus); ClearPortStatus_PortSelectMask_item = proto_tree_add_item(ClearPortStatus_header_tree, hf_opa_ClearPortStatus_PortSelectMask, tvb, local_offset, 32, ENC_NA); proto_item_append_text(ClearPortStatus_PortSelectMask_item, ": %s", opa_format_port_select_mask(tvb, local_offset, NULL, NULL)); local_offset += 32; proto_tree_add_bitmask(ClearPortStatus_header_tree, tvb, local_offset, hf_opa_ClearPortStatus_CounterSelectMask, ett_clearportstatus_counterselectmask, _ClearPortStatus_CounterSelectMask, ENC_BIG_ENDIAN); local_offset += 4; return local_offset; } /* Parse DataPortCounters MAD from the Performance management class.*/ static gint parse_DataPortCounters(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { proto_item *DataPortCounters_header_item; proto_item *DataPortCounters_PortSelectMask_item; proto_tree *DataPortCounters_header_tree; proto_tree *DataPortCounters_Port_tree; proto_tree *DataPortCounters_VL_tree; gint local_offset = *offset; guint32 VLSelectMask, vlSelMskTmp; guint VLs, i, p; guint Num_Ports = (MAD->AttributeModifier >> 24) & 0xFF; if (!parentTree) return *offset; VLSelectMask = tvb_get_ntohl(tvb, local_offset + 32); for (i = 0, VLs = 0, vlSelMskTmp = VLSelectMask; vlSelMskTmp && i < 32; i++, vlSelMskTmp >>= 1) { VLs += (vlSelMskTmp & 0x1); } if (MAD->Method == METHOD_GET) { /* Get() */ DataPortCounters_header_item = proto_tree_add_item(parentTree, hf_opa_DataPortCounters, tvb, local_offset, 40, ENC_NA); } else if (MAD->Method == METHOD_GET_RESP) { /* GetResp(): */ DataPortCounters_header_item = proto_tree_add_item(parentTree, hf_opa_DataPortCounters, tvb, local_offset, 40 + Num_Ports * (136 + VLs * 104), ENC_NA); } else { /* Set() */ return *offset; } DataPortCounters_header_tree = proto_item_add_subtree(DataPortCounters_header_item, ett_dataportcounters); DataPortCounters_PortSelectMask_item = proto_tree_add_item(DataPortCounters_header_tree, hf_opa_DataPortCounters_PortSelectMask, tvb, local_offset, 32, ENC_NA); proto_item_append_text(DataPortCounters_PortSelectMask_item, ": %s", opa_format_port_select_mask(tvb, local_offset, NULL, NULL)); local_offset += 32; proto_tree_add_item(DataPortCounters_header_tree, hf_opa_DataPortCounters_VLSelectMask, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(DataPortCounters_header_tree, hf_opa_DataPortCounters_resolution_reserved, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_tree_add_item(DataPortCounters_header_tree, hf_opa_DataPortCounters_LocalLinkIntegrityResolution, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_tree_add_item(DataPortCounters_header_tree, hf_opa_DataPortCounters_LinkErrorRecoveryResolution, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; if (MAD->Method == METHOD_GET) return local_offset; for (p = 0; p < Num_Ports; p++) { DataPortCounters_Port_tree = proto_tree_add_subtree_format(DataPortCounters_header_tree, tvb, local_offset, (1 + 3 + 4 + (8 * 16) + VLs * (8 * 13)), ett_dataportcounters_port, NULL, "Port %u", tvb_get_guint8(tvb, local_offset)); proto_tree_add_item(DataPortCounters_Port_tree, hf_opa_DataPortCounters_PortNumber, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(DataPortCounters_Port_tree, hf_opa_reserved24, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; proto_tree_add_item(DataPortCounters_Port_tree, hf_opa_DataPortCounters_lqi_reserved, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_tree_add_item(DataPortCounters_Port_tree, hf_opa_DataPortCounters_LinkQualityIndicator, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(DataPortCounters_Port_tree, hf_opa_DataPortCounters_PortXmitData, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(DataPortCounters_Port_tree, hf_opa_DataPortCounters_PortRcvData, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(DataPortCounters_Port_tree, hf_opa_DataPortCounters_PortXmitPkts, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(DataPortCounters_Port_tree, hf_opa_DataPortCounters_PortRcvPkts, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(DataPortCounters_Port_tree, hf_opa_DataPortCounters_PortMulticastXmitPkts, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(DataPortCounters_Port_tree, hf_opa_DataPortCounters_PortMulticastRcvPkts, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(DataPortCounters_Port_tree, hf_opa_DataPortCounters_PortXmitWait, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(DataPortCounters_Port_tree, hf_opa_DataPortCounters_SwPortCongestion, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(DataPortCounters_Port_tree, hf_opa_DataPortCounters_PortRcvFECN, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(DataPortCounters_Port_tree, hf_opa_DataPortCounters_PortRcvBECN, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(DataPortCounters_Port_tree, hf_opa_DataPortCounters_PortXmitTimeCong, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(DataPortCounters_Port_tree, hf_opa_DataPortCounters_PortXmitWastedBW, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(DataPortCounters_Port_tree, hf_opa_DataPortCounters_PortXmitWaitData, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(DataPortCounters_Port_tree, hf_opa_DataPortCounters_PortRcvBubble, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(DataPortCounters_Port_tree, hf_opa_DataPortCounters_PortMarkFECN, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(DataPortCounters_Port_tree, hf_opa_DataPortCounters_PortErrorCounterSummary, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; for (i = 0, vlSelMskTmp = VLSelectMask; vlSelMskTmp && i < 32; i++, vlSelMskTmp >>= 1) { if (vlSelMskTmp & 0x1) { DataPortCounters_VL_tree = proto_tree_add_subtree_format(DataPortCounters_Port_tree, tvb, local_offset, 8 * 13, ett_dataportcounters_vl, NULL, "VL %u", i); proto_tree_add_item(DataPortCounters_VL_tree, hf_opa_DataPortCounters_PortVLXmitData, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(DataPortCounters_VL_tree, hf_opa_DataPortCounters_PortVLRcvData, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(DataPortCounters_VL_tree, hf_opa_DataPortCounters_PortVLXmitPkts, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(DataPortCounters_VL_tree, hf_opa_DataPortCounters_PortVLRcvPkts, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(DataPortCounters_VL_tree, hf_opa_DataPortCounters_PortVLXmitWait, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(DataPortCounters_VL_tree, hf_opa_DataPortCounters_SwPortVLCongestion, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(DataPortCounters_VL_tree, hf_opa_DataPortCounters_PortVLRcvFECN, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(DataPortCounters_VL_tree, hf_opa_DataPortCounters_PortVLRcvBECN, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(DataPortCounters_VL_tree, hf_opa_DataPortCounters_PortVLXmitTimeCong, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(DataPortCounters_VL_tree, hf_opa_DataPortCounters_PortVLXmitWastedBW, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(DataPortCounters_VL_tree, hf_opa_DataPortCounters_PortVLXmitWaitData, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(DataPortCounters_VL_tree, hf_opa_DataPortCounters_PortVLRcvBubble, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(DataPortCounters_VL_tree, hf_opa_DataPortCounters_PortVLMarkFECN, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; } } } return local_offset; } /* Parse ErrorPortCounters MAD from the Performance management class.*/ static gint parse_ErrorPortCounters(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { proto_item *ErrorPortCounters_header_item; proto_item *ErrorPortCounters_PortSelectMask_item; proto_item *ErrorPortCounters_VL_item; proto_tree *ErrorPortCounters_header_tree; proto_tree *ErrorPortCounters_Port_tree; gint local_offset = *offset; guint32 VLSelectMask, vlSelMskTmp; guint VLs, i, p; guint Num_Ports = (MAD->AttributeModifier & 0xFF000000) >> 24; if (!parentTree) return *offset; VLSelectMask = tvb_get_ntohl(tvb, local_offset + 32); for (i = 0, VLs = 0, vlSelMskTmp = VLSelectMask; vlSelMskTmp && i < 32; i++, vlSelMskTmp >>= 1) { VLs += (vlSelMskTmp & 0x1); } if (MAD->Method == METHOD_GET) { /* Get() */ ErrorPortCounters_header_item = proto_tree_add_item(parentTree, hf_opa_ErrorPortCounters, tvb, local_offset, 40, ENC_NA); } else if (MAD->Method == METHOD_GET_RESP) { /* GetResp(): */ ErrorPortCounters_header_item = proto_tree_add_item(parentTree, hf_opa_ErrorPortCounters, tvb, local_offset, 40 + Num_Ports * (96 + VLs * 8), ENC_NA); } else { /* Set() */ return *offset; } ErrorPortCounters_header_tree = proto_item_add_subtree(ErrorPortCounters_header_item, ett_errorportcounters); ErrorPortCounters_PortSelectMask_item = proto_tree_add_item(ErrorPortCounters_header_tree, hf_opa_ErrorPortCounters_PortSelectMask, tvb, local_offset, 32, ENC_NA); proto_item_append_text(ErrorPortCounters_PortSelectMask_item, ": %s", opa_format_port_select_mask(tvb, local_offset, NULL, NULL)); local_offset += 32; proto_tree_add_item(ErrorPortCounters_header_tree, hf_opa_ErrorPortCounters_VLSelectMask, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(ErrorPortCounters_header_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; if (MAD->Method == METHOD_GET) return local_offset; for (p = 0; p < Num_Ports; p++) { ErrorPortCounters_Port_tree = proto_tree_add_subtree_format(ErrorPortCounters_header_tree, tvb, local_offset, (96 + VLs * 8), ett_errorportcounters_port, NULL, "Port %u", tvb_get_guint8(tvb, local_offset)); proto_tree_add_item(ErrorPortCounters_Port_tree, hf_opa_ErrorPortCounters_PortNumber, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(ErrorPortCounters_Port_tree, hf_opa_reserved24, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; proto_tree_add_item(ErrorPortCounters_Port_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(ErrorPortCounters_Port_tree, hf_opa_ErrorPortCounters_PortRcvConstraintErrors, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(ErrorPortCounters_Port_tree, hf_opa_ErrorPortCounters_PortRcvSwitchRelayErrors, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(ErrorPortCounters_Port_tree, hf_opa_ErrorPortCounters_PortXmitDiscards, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(ErrorPortCounters_Port_tree, hf_opa_ErrorPortCounters_PortXmitConstraintErrors, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(ErrorPortCounters_Port_tree, hf_opa_ErrorPortCounters_PortRcvRemotePhysicalErrors, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(ErrorPortCounters_Port_tree, hf_opa_ErrorPortCounters_LocalLinkIntegrityErrors, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(ErrorPortCounters_Port_tree, hf_opa_ErrorPortCounters_PortRcvErrors, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(ErrorPortCounters_Port_tree, hf_opa_ErrorPortCounters_ExcessiveBufferOverruns, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(ErrorPortCounters_Port_tree, hf_opa_ErrorPortCounters_FMConfigErrors, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(ErrorPortCounters_Port_tree, hf_opa_ErrorPortCounters_LinkErrorRecovery, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(ErrorPortCounters_Port_tree, hf_opa_ErrorPortCounters_LinkDowned, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(ErrorPortCounters_Port_tree, hf_opa_ErrorPortCounters_UncorrectableErrors, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(ErrorPortCounters_Port_tree, hf_opa_reserved24, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; proto_tree_add_item(ErrorPortCounters_Port_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; for (i = 0, vlSelMskTmp = VLSelectMask; vlSelMskTmp && i < 32; i++, vlSelMskTmp >>= 1) { if (vlSelMskTmp & 0x1) { ErrorPortCounters_VL_item = proto_tree_add_item(ErrorPortCounters_Port_tree, hf_opa_ErrorPortCounters_PortVLXmitDiscards, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_item_prepend_text(ErrorPortCounters_VL_item, "%3u: ", i); } } } return local_offset; } /* Parse ErrorPortInfo MAD from the Performance management class.*/ static gint parse_ErrorPortInfo(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { proto_item *ErrorPortInfo_header_item; proto_item *ErrorPortInfo_PortSelectMask_item; proto_tree *ErrorPortInfo_header_tree; proto_tree *ErrorPortInfo_Port_tree; proto_tree * PortRcvErrorInfo_tree, *ExcessiveBufferOverrunInfo_tree, *PortXmitConstraintErrorInfo_tree, *PortRcvConstraintErrorInfo_tree, *PortRcvSwitchRelayErrorInfo_tree, *UncorrectableErrorInfo_tree, *FMConfigErrorInfo_tree; gint local_offset = *offset; guint p, ErrorCode; guint Num_Ports = (MAD->AttributeModifier & 0xFF000000) >> 24; if (!parentTree) return *offset; if (MAD->Method == METHOD_GET_RESP) { ErrorPortInfo_header_item = proto_tree_add_item(parentTree, hf_opa_ErrorPortInfo, tvb, local_offset, -1, ENC_NA); } else if (MAD->Method == METHOD_SET) { ErrorPortInfo_header_item = proto_tree_add_item(parentTree, hf_opa_ErrorPortInfo, tvb, local_offset, 40, ENC_NA); } else { /* GET */ ErrorPortInfo_header_item = proto_tree_add_item(parentTree, hf_opa_ErrorPortInfo, tvb, local_offset, 32, ENC_NA); } ErrorPortInfo_header_tree = proto_item_add_subtree(ErrorPortInfo_header_item, ett_errorportinfo); ErrorPortInfo_PortSelectMask_item = proto_tree_add_item(ErrorPortInfo_header_tree, hf_opa_ErrorPortInfo_PortSelectMask, tvb, local_offset, 32, ENC_NA); proto_item_append_text(ErrorPortInfo_PortSelectMask_item, ": %s", opa_format_port_select_mask(tvb, local_offset, NULL, NULL)); local_offset += 32; if (MAD->Method == METHOD_GET) return local_offset; /* ErrorInfoSelectMask */ proto_tree_add_bitmask_list(ErrorPortInfo_header_tree, tvb, local_offset, 4, _ErrorPortInfo_ErrorInfoSelectMask, ENC_BIG_ENDIAN); local_offset += 4; if (MAD->Method == METHOD_SET /* GetResp packet from a Set operation will contain 1 zeroed port struct */ || (MAD->Method == METHOD_GET_RESP && Num_Ports > 1 && tvb_reported_length_remaining(tvb, local_offset) < (72 * 2))) return local_offset; proto_tree_add_item(ErrorPortInfo_header_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; for (p = 0; p < Num_Ports; p++) { ErrorPortInfo_Port_tree = proto_tree_add_subtree_format(ErrorPortInfo_header_tree, tvb, local_offset, 72, ett_errorportinfoport, NULL, "Port %u", tvb_get_guint8(tvb, local_offset)); proto_tree_add_item(ErrorPortInfo_Port_tree, hf_opa_ErrorPortInfo_PortNumber, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(ErrorPortInfo_Port_tree, hf_opa_reserved24, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; proto_tree_add_item(ErrorPortInfo_Port_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; /* PortRcvErrorInfo */ PortRcvErrorInfo_tree = proto_tree_add_subtree(ErrorPortInfo_Port_tree, tvb, local_offset, 24, ett_errorportinfo_portrcverrorinfo, NULL, "PortRcv Error Info"); proto_tree_add_item(PortRcvErrorInfo_tree, hf_opa_ErrorPortInfo_PortRcvErrorInfo_Status, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(PortRcvErrorInfo_tree, hf_opa_ErrorPortInfo_PortRcvErrorInfo_reserved, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(PortRcvErrorInfo_tree, hf_opa_ErrorPortInfo_PortRcvErrorInfo_ErrorCode, tvb, local_offset, 1, ENC_BIG_ENDIAN); ErrorCode = tvb_get_guint8(tvb, local_offset) & 0x0F; local_offset += 1; if (ErrorCode >= 1 && ErrorCode <= 12) { proto_tree_add_item(PortRcvErrorInfo_tree, hf_opa_ErrorPortInfo_PortRcvErrorInfo_PacketFlit1, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(PortRcvErrorInfo_tree, hf_opa_ErrorPortInfo_PortRcvErrorInfo_PacketFlit2, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(PortRcvErrorInfo_tree, hf_opa_ErrorPortInfo_PortRcvErrorInfo_Flit1Bits, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(PortRcvErrorInfo_tree, hf_opa_ErrorPortInfo_PortRcvErrorInfo_Flit2Bits, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(PortRcvErrorInfo_tree, hf_opa_ErrorPortInfo_PortRcvErrorInfo_reserved2, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; } else if (ErrorCode == 13) { proto_tree_add_item(PortRcvErrorInfo_tree, hf_opa_ErrorPortInfo_PortRcvErrorInfo_PacketBytes, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(PortRcvErrorInfo_tree, hf_opa_ErrorPortInfo_PortRcvErrorInfo_FlitBits, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(PortRcvErrorInfo_tree, hf_opa_ErrorPortInfo_PortRcvErrorInfo_reserved3, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PortRcvErrorInfo_tree, hf_opa_reserved64, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; } else { proto_tree_add_item(PortRcvErrorInfo_tree, hf_opa_ErrorPortInfo_PortRcvErrorInfo_reserved4, tvb, local_offset, 17, ENC_NA); local_offset += 17; } proto_tree_add_item(PortRcvErrorInfo_tree, hf_opa_reserved16, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(PortRcvErrorInfo_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; /* ExcessiveBufferOverrunErrorInfo */ ExcessiveBufferOverrunInfo_tree = proto_tree_add_subtree(ErrorPortInfo_Port_tree, tvb, local_offset, 8, ett_errorportinfo_excessivebufferoverruninfo, NULL, "ExcessiveBufferOverrun Error Info"); proto_tree_add_item(ExcessiveBufferOverrunInfo_tree, hf_opa_ErrorPortInfo_ExcessiveBufferOverrunErrorInfo_Status, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(ExcessiveBufferOverrunInfo_tree, hf_opa_ErrorPortInfo_ExcessiveBufferOverrunErrorInfo_SC, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(ExcessiveBufferOverrunInfo_tree, hf_opa_ErrorPortInfo_ExcessiveBufferOverrunErrorInfo_reserved, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(ExcessiveBufferOverrunInfo_tree, hf_opa_reserved24, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; proto_tree_add_item(ExcessiveBufferOverrunInfo_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; /* PortXmitConstraintErrorInfo */ PortXmitConstraintErrorInfo_tree = proto_tree_add_subtree(ErrorPortInfo_Port_tree, tvb, local_offset, 8, ett_errorportinfo_portxmitconstrainterrorinfo, NULL, "PortXmitConstraint Error Info"); proto_tree_add_item(PortXmitConstraintErrorInfo_tree, hf_opa_ErrorPortInfo_PortXmitConstraintErrorInfo_Status, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(PortXmitConstraintErrorInfo_tree, hf_opa_ErrorPortInfo_PortXmitConstraintErrorInfo_reserved, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PortXmitConstraintErrorInfo_tree, hf_opa_reserved8, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PortXmitConstraintErrorInfo_tree, hf_opa_ErrorPortInfo_PortXmitConstraintErrorInfo_P_Key, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(PortXmitConstraintErrorInfo_tree, hf_opa_ErrorPortInfo_PortXmitConstraintErrorInfo_SLID, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; /* PortRcvConstraintErrorInfo */ PortRcvConstraintErrorInfo_tree = proto_tree_add_subtree(ErrorPortInfo_Port_tree, tvb, local_offset, 8, ett_errorportinfo_portrcvconstrainterrorinfo, NULL, "PortRcvConstraint Error Info"); proto_tree_add_item(PortRcvConstraintErrorInfo_tree, hf_opa_ErrorPortInfo_PortRcvConstraintErrorInfo_Status, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(PortRcvConstraintErrorInfo_tree, hf_opa_ErrorPortInfo_PortRcvConstraintErrorInfo_reserved, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PortRcvConstraintErrorInfo_tree, hf_opa_reserved8, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PortRcvConstraintErrorInfo_tree, hf_opa_ErrorPortInfo_PortRcvConstraintErrorInfo_P_Key, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(PortRcvConstraintErrorInfo_tree, hf_opa_ErrorPortInfo_PortRcvConstraintErrorInfo_SLID, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; /* PortRcvSwitchRelayErrorInfo */ PortRcvSwitchRelayErrorInfo_tree = proto_tree_add_subtree(ErrorPortInfo_Port_tree, tvb, local_offset, 8, ett_errorportinfo_portrcvswitchrelayerrorinfo, NULL, "PortRcvSwitchRelay Error Info"); proto_tree_add_item(PortRcvSwitchRelayErrorInfo_tree, hf_opa_ErrorPortInfo_PortRcvSwitchRelayErrorInfo_Status, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(PortRcvSwitchRelayErrorInfo_tree, hf_opa_ErrorPortInfo_PortRcvSwitchRelayErrorInfo_reserved, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(PortRcvSwitchRelayErrorInfo_tree, hf_opa_ErrorPortInfo_PortRcvSwitchRelayErrorInfo_ErrorCode, tvb, local_offset, 1, ENC_BIG_ENDIAN); ErrorCode = tvb_get_guint8(tvb, local_offset) & 0x0F; local_offset += 1; proto_tree_add_item(PortRcvSwitchRelayErrorInfo_tree, hf_opa_reserved24, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; switch (ErrorCode) { case 0: proto_tree_add_item(PortRcvSwitchRelayErrorInfo_tree, hf_opa_ErrorPortInfo_PortRcvSwitchRelayErrorInfo_DLID, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; break; case 2: proto_tree_add_item(PortRcvSwitchRelayErrorInfo_tree, hf_opa_ErrorPortInfo_PortRcvSwitchRelayErrorInfo_EgressPortNum, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PortRcvSwitchRelayErrorInfo_tree, hf_opa_reserved24, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; break; case 3: proto_tree_add_item(PortRcvSwitchRelayErrorInfo_tree, hf_opa_ErrorPortInfo_PortRcvSwitchRelayErrorInfo_EgressPortNum, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PortRcvSwitchRelayErrorInfo_tree, hf_opa_ErrorPortInfo_PortRcvSwitchRelayErrorInfo_SC, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PortRcvSwitchRelayErrorInfo_tree, hf_opa_reserved16, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; break; default: proto_tree_add_item(PortRcvSwitchRelayErrorInfo_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; break; } /* UncorrectableErrorInfo */ UncorrectableErrorInfo_tree = proto_tree_add_subtree(ErrorPortInfo_Port_tree, tvb, local_offset, 2, ett_errorportinfo_uncorrectableerrorinfo, NULL, "Uncorrectable Error Info"); proto_tree_add_item(UncorrectableErrorInfo_tree, hf_opa_ErrorPortInfo_UncorrectableErrorInfo_Status, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(UncorrectableErrorInfo_tree, hf_opa_ErrorPortInfo_UncorrectableErrorInfo_reserved, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(UncorrectableErrorInfo_tree, hf_opa_ErrorPortInfo_UncorrectableErrorInfo_ErrorCode, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(UncorrectableErrorInfo_tree, hf_opa_reserved8, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; /* FMConfigErrorInfo */ FMConfigErrorInfo_tree = proto_tree_add_subtree(ErrorPortInfo_Port_tree, tvb, local_offset, 6, ett_errorportinfo_fmconfigerrorinfo, NULL, "FMConfig Error Info"); proto_tree_add_item(FMConfigErrorInfo_tree, hf_opa_ErrorPortInfo_FMConfigErrorInfo_Status, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(FMConfigErrorInfo_tree, hf_opa_ErrorPortInfo_FMConfigErrorInfo_reserved, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(FMConfigErrorInfo_tree, hf_opa_ErrorPortInfo_FMConfigErrorInfo_ErrorCode, tvb, local_offset, 1, ENC_BIG_ENDIAN); ErrorCode = tvb_get_guint8(tvb, local_offset) & 0x0F; local_offset += 1; switch (ErrorCode) { case 0: case 1: case 2: proto_tree_add_item(FMConfigErrorInfo_tree, hf_opa_ErrorPortInfo_FMConfigErrorInfo_Distance, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; break; case 3: case 4: case 5: proto_tree_add_item(FMConfigErrorInfo_tree, hf_opa_ErrorPortInfo_FMConfigErrorInfo_VL, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; break; case 6: proto_tree_add_item(FMConfigErrorInfo_tree, hf_opa_ErrorPortInfo_FMConfigErrorInfo_BadFlitBits, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; break; case 7: proto_tree_add_item(FMConfigErrorInfo_tree, hf_opa_ErrorPortInfo_FMConfigErrorInfo_SC, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; break; default: proto_tree_add_item(FMConfigErrorInfo_tree, hf_opa_reserved8, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; break; } proto_tree_add_item(FMConfigErrorInfo_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; } return local_offset; } static gboolean parse_PM_Attribute(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { gint local_offset = *offset; switch (MAD->AttributeID) { /* Mgmt */ case PA_ATTR_ID_CLASS_PORTINFO: local_offset = parse_ClassPortInfo(parentTree, tvb, &local_offset, MAD); break; case PM_ATTR_ID_PORT_STATUS: local_offset = parse_PortStatus(parentTree, tvb, &local_offset, MAD); break; case PM_ATTR_ID_CLEAR_PORT_STATUS: local_offset = parse_ClearPortStatus(parentTree, tvb, &local_offset, MAD); break; case PM_ATTR_ID_DATA_PORT_COUNTERS: local_offset = parse_DataPortCounters(parentTree, tvb, &local_offset, MAD); break; case PM_ATTR_ID_ERROR_PORT_COUNTERS: local_offset = parse_ErrorPortCounters(parentTree, tvb, &local_offset, MAD); break; case PM_ATTR_ID_ERROR_INFO: local_offset = parse_ErrorPortInfo(parentTree, tvb, &local_offset, MAD); break; default: return FALSE; } *offset = local_offset; return TRUE; } /* Parse the Method from the MAD Common Header. */ static void label_PM_Method(proto_item *PMItem, MAD_t *MAD, packet_info *pinfo) { const gchar *label = val_to_str_const(MAD->Method, PM_Methods, "(Unknown Perf Method!)"); proto_item_append_text(PMItem, " %s", label); col_append_str(pinfo->cinfo, COL_INFO, label); } /* Parse the Attribute from the MAD Common Header */ static void label_PM_Attribute(proto_item *PMItem, MAD_t *MAD, packet_info *pinfo) { const gchar *label = val_to_str_const(MAD->AttributeID, PM_Attributes, "Attribute (Unknown Perf Attribute!)"); proto_item_append_text(PMItem, "%s", &label[11]); col_append_str(pinfo->cinfo, COL_INFO, &label[11]); } /* Parse Performance Management */ static void parse_PERF(proto_tree *parentTree, packet_info *pinfo, tvbuff_t *tvb, gint *offset) { MAD_t MAD; proto_item *PM_header_item; proto_tree *PM_header_tree; if (!parse_MAD_Common(parentTree, pinfo, tvb, offset, &MAD)) { return; } PM_header_item = proto_tree_add_item(parentTree, hf_opa_pm, tvb, *offset, -1, ENC_NA); PM_header_tree = proto_item_add_subtree(PM_header_item, ett_pm); label_PM_Method(PM_header_item, &MAD, pinfo); label_PM_Attribute(PM_header_item, &MAD, pinfo); if (!pref_parse_on_mad_status_error && MAD.Status) { *offset += tvb_captured_length_remaining(tvb, *offset); return; } if (!parse_PM_Attribute(PM_header_tree, tvb, offset, &MAD)) { expert_add_info_format(pinfo, NULL, &ei_opa_mad_no_attribute_dissector, "Attribute Dissector Not Implemented (0x%x)", MAD.AttributeID); *offset += tvb_captured_length_remaining(tvb, *offset); return; } } /* Parse Image MAD from the Performance Admin class. */ static gint parse_Image(proto_tree *parentTree, tvbuff_t *tvb, gint *offset) { proto_tree *Image_header_tree = parentTree; gint local_offset = *offset; if (!parentTree) return *offset; /* ImageID */ proto_tree_add_item(Image_header_tree, hf_opa_ImageID_imageNumber, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(Image_header_tree, hf_opa_ImageID_imageOffset, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(Image_header_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; /* End ImageID */ return local_offset; } /* Parse GetGroupList MAD from the Performance Admin class.*/ static gint parse_GetGroupList(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD, RMPP_t *RMPP, PA_HEADER_t *PA_HEADER) { proto_item *GetGroupList_GroupName_item; proto_tree *GetGroupList_header_tree; proto_item *GetGroupList_header_item; gint local_offset = *offset; guint i; guint length = tvb_captured_length_remaining(tvb, local_offset); guint records = (PA_HEADER->AttributeOffset ? length / (PA_HEADER->AttributeOffset * 8) : 0); if (!parentTree || RMPP->Type != RMPP_DATA || (MAD->Method != METHOD_GET_RESP && MAD->Method != METHOD_GETTABLE_RESP)) { return *offset; } GetGroupList_header_item = proto_tree_add_item(parentTree, hf_opa_GetGroupList, tvb, local_offset, length, ENC_NA); GetGroupList_header_tree = proto_item_add_subtree(GetGroupList_header_item, ett_getgrouplist); proto_tree_add_none_format(GetGroupList_header_tree, hf_opa_GetGroupList, tvb, local_offset, length, "Number of Groups: %u", records); for (i = 0; i < records; i++) { GetGroupList_GroupName_item = proto_tree_add_item(GetGroupList_header_tree, hf_opa_GetGroupList_groupName, tvb, local_offset, 64, ENC_ASCII | ENC_NA); local_offset += 64; proto_item_prepend_text(GetGroupList_GroupName_item, "%3u: ", i + 1); } return local_offset; } /* Parse GetGroupInfo MAD from the Performance Admin class.*/ static gint parse_GetGroupInfo(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD, RMPP_t *RMPP, PA_HEADER_t *PA_HEADER) { proto_tree *GetGroupInfo_header_tree; proto_tree *GetGroupInfo_header_item; proto_tree *GetGroupInfo_Util_Stats_tree; proto_item *GetGroupInfo_Util_Stats_Buckets_item; proto_tree *GetGroupInfo_Util_Stats_Buckets_tree; proto_item *GetGroupInfo_Util_Stats_Bucket_item; proto_tree *GetGroupInfo_Error_Summary_tree; proto_tree *GetGroupInfo_Error_Integrity_Buckets_tree; proto_tree *GetGroupInfo_Error_Congestion_Buckets_tree; proto_tree *GetGroupInfo_Error_SmaCongestion_Buckets_tree; proto_tree *GetGroupInfo_Error_Bubble_Buckets_tree; proto_tree *GetGroupInfo_Error_Security_Buckets_tree; proto_tree *GetGroupInfo_Error_Routing_Buckets_tree; proto_item *GetGroupInfo_Error_Stats_Integrity_Buckets_item; proto_item *GetGroupInfo_Error_Stats_Congestion_Buckets_item; proto_item *GetGroupInfo_Error_Stats_SmaCongestion_Buckets_item; proto_item *GetGroupInfo_Error_Stats_Bubble_Buckets_item; proto_item *GetGroupInfo_Error_Stats_Security_Buckets_item; proto_item *GetGroupInfo_Error_Stats_Routing_Buckets_item; proto_item *GetGroupInfo_Error_Stats_Bucket_item; gint local_offset = *offset; guint i, r; guint length = tvb_captured_length_remaining(tvb, local_offset); guint records = (PA_HEADER->AttributeOffset ? length / (PA_HEADER->AttributeOffset * 8) : 0); guint util = 100 / PM_UTIL_BUCKETS; /* 0%+ 10%+ 20%+ ... 80%+ 90%+ */ guint err = 100 / (PM_ERR_BUCKETS - 1); /* 0%+ 25%+ 50%+ 75%+ 100%+ */ if (!parentTree || (!pref_attempt_rmpp_defragment && RMPP->Type == RMPP_DATA && RMPP->SegmentNumber != 1)) return *offset; if (MAD->Method == METHOD_GET || MAD->Method == METHOD_GETTABLE) { GetGroupInfo_header_item = proto_tree_add_item(parentTree, hf_opa_GetGroupInfo, tvb, local_offset, 64 + 16, ENC_NA); proto_item_set_text(GetGroupInfo_header_item, "GroupInfo for %s", tvb_get_string_enc(wmem_file_scope(), tvb, local_offset, 64, ENC_ASCII)); GetGroupInfo_header_tree = proto_item_add_subtree(GetGroupInfo_header_item, ett_getgroupinfo); proto_tree_add_item(GetGroupInfo_header_tree, hf_opa_GetGroupInfo_groupName, tvb, local_offset, 64, ENC_ASCII | ENC_NA); local_offset += 64; /* ImageID */ local_offset = parse_Image(GetGroupInfo_header_tree, tvb, &local_offset); return local_offset; } for (r = 0; r < records; r++) { GetGroupInfo_header_item = proto_tree_add_item(parentTree, hf_opa_GetGroupInfo, tvb, local_offset, 64 + 16, ENC_NA); proto_item_set_text(GetGroupInfo_header_item, "GroupInfo for %s", tvb_get_string_enc(wmem_file_scope(), tvb, local_offset, 64, ENC_ASCII)); GetGroupInfo_header_tree = proto_item_add_subtree(GetGroupInfo_header_item, ett_getgroupinfo); proto_tree_add_item(GetGroupInfo_header_tree, hf_opa_GetGroupInfo_groupName, tvb, local_offset, 64, ENC_ASCII | ENC_NA); local_offset += 64; /* ImageID */ local_offset = parse_Image(GetGroupInfo_header_tree, tvb, &local_offset); proto_tree_add_item(GetGroupInfo_header_tree, hf_opa_GetGroupInfo_numInternalPorts, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetGroupInfo_header_tree, hf_opa_GetGroupInfo_numExternalPorts, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; /* internalUtilStats */ GetGroupInfo_Util_Stats_tree = proto_tree_add_subtree(GetGroupInfo_header_tree, tvb, local_offset, 48 + PM_UTIL_BUCKETS * 4, ett_getgroupinfoutilstats, NULL, "Internal Utilization Statistics"); proto_tree_add_item(GetGroupInfo_Util_Stats_tree, hf_opa_GetGroupInfo_totalMBps, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetGroupInfo_Util_Stats_tree, hf_opa_GetGroupInfo_totalKPps, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetGroupInfo_Util_Stats_tree, hf_opa_GetGroupInfo_avgMBps, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetGroupInfo_Util_Stats_tree, hf_opa_GetGroupInfo_minMBps, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetGroupInfo_Util_Stats_tree, hf_opa_GetGroupInfo_maxMBps, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; GetGroupInfo_Util_Stats_Buckets_item = proto_tree_add_item(GetGroupInfo_Util_Stats_tree, hf_opa_GetGroupInfo_numBWBuckets, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; GetGroupInfo_Util_Stats_Buckets_tree = proto_item_add_subtree(GetGroupInfo_Util_Stats_Buckets_item, ett_getgroupinfoutilbuckets); for (i = 0; i < PM_UTIL_BUCKETS; i++) { GetGroupInfo_Util_Stats_Bucket_item = proto_tree_add_item(GetGroupInfo_Util_Stats_Buckets_tree, hf_opa_GetGroupInfo_BWBuckets, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_item_set_text(GetGroupInfo_Util_Stats_Bucket_item, "Bucket %u: %3u%%+: %u", i, i * util, tvb_get_ntohl(tvb, local_offset)); local_offset += 4; } proto_tree_add_item(GetGroupInfo_Util_Stats_tree, hf_opa_GetGroupInfo_avgKPps, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetGroupInfo_Util_Stats_tree, hf_opa_GetGroupInfo_minKPps, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetGroupInfo_Util_Stats_tree, hf_opa_GetGroupInfo_maxKPps, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetGroupInfo_Util_Stats_tree, hf_opa_GetGroupInfo_pmaFailedPorts, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(GetGroupInfo_Util_Stats_tree, hf_opa_GetGroupInfo_topoFailedPorts, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; /* sendUtilStats */ GetGroupInfo_Util_Stats_tree = proto_tree_add_subtree(GetGroupInfo_header_tree, tvb, local_offset, 48 + PM_UTIL_BUCKETS * 4, ett_getgroupinfoutilstats, NULL, "External Send Utilization Statistics"); proto_tree_add_item(GetGroupInfo_Util_Stats_tree, hf_opa_GetGroupInfo_totalMBps, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetGroupInfo_Util_Stats_tree, hf_opa_GetGroupInfo_totalKPps, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetGroupInfo_Util_Stats_tree, hf_opa_GetGroupInfo_avgMBps, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetGroupInfo_Util_Stats_tree, hf_opa_GetGroupInfo_minMBps, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetGroupInfo_Util_Stats_tree, hf_opa_GetGroupInfo_maxMBps, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; GetGroupInfo_Util_Stats_Buckets_item = proto_tree_add_item(GetGroupInfo_Util_Stats_tree, hf_opa_GetGroupInfo_numBWBuckets, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; GetGroupInfo_Util_Stats_Buckets_tree = proto_item_add_subtree(GetGroupInfo_Util_Stats_Buckets_item, ett_getgroupinfoutilbuckets); for (i = 0; i < PM_UTIL_BUCKETS; i++) { GetGroupInfo_Util_Stats_Bucket_item = proto_tree_add_item(GetGroupInfo_Util_Stats_Buckets_tree, hf_opa_GetGroupInfo_BWBuckets, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_item_set_text(GetGroupInfo_Util_Stats_Bucket_item, "Bucket %u: %3u%%+: %u", i, i * util, tvb_get_ntohl(tvb, local_offset)); local_offset += 4; } proto_tree_add_item(GetGroupInfo_Util_Stats_tree, hf_opa_GetGroupInfo_avgKPps, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetGroupInfo_Util_Stats_tree, hf_opa_GetGroupInfo_minKPps, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetGroupInfo_Util_Stats_tree, hf_opa_GetGroupInfo_maxKPps, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetGroupInfo_Util_Stats_tree, hf_opa_GetGroupInfo_pmaFailedPorts, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(GetGroupInfo_Util_Stats_tree, hf_opa_GetGroupInfo_topoFailedPorts, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; /* recvUtilStats */ GetGroupInfo_Util_Stats_tree = proto_tree_add_subtree(GetGroupInfo_header_tree, tvb, local_offset, 48 + PM_UTIL_BUCKETS * 4, ett_getgroupinfoutilstats, NULL, "External Receive Utilization Statistics"); proto_tree_add_item(GetGroupInfo_Util_Stats_tree, hf_opa_GetGroupInfo_totalMBps, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetGroupInfo_Util_Stats_tree, hf_opa_GetGroupInfo_totalKPps, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetGroupInfo_Util_Stats_tree, hf_opa_GetGroupInfo_avgMBps, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetGroupInfo_Util_Stats_tree, hf_opa_GetGroupInfo_minMBps, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetGroupInfo_Util_Stats_tree, hf_opa_GetGroupInfo_maxMBps, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; GetGroupInfo_Util_Stats_Buckets_item = proto_tree_add_item(GetGroupInfo_Util_Stats_tree, hf_opa_GetGroupInfo_numBWBuckets, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; GetGroupInfo_Util_Stats_Buckets_tree = proto_item_add_subtree(GetGroupInfo_Util_Stats_Buckets_item, ett_getgroupinfoutilbuckets); for (i = 0; i < PM_UTIL_BUCKETS; i++) { GetGroupInfo_Util_Stats_Bucket_item = proto_tree_add_item(GetGroupInfo_Util_Stats_Buckets_tree, hf_opa_GetGroupInfo_BWBuckets, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_item_set_text(GetGroupInfo_Util_Stats_Bucket_item, "Bucket %u: %3u%%+: %u", i, i * util, tvb_get_ntohl(tvb, local_offset)); local_offset += 4; } proto_tree_add_item(GetGroupInfo_Util_Stats_tree, hf_opa_GetGroupInfo_avgKPps, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetGroupInfo_Util_Stats_tree, hf_opa_GetGroupInfo_minKPps, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetGroupInfo_Util_Stats_tree, hf_opa_GetGroupInfo_maxKPps, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetGroupInfo_Util_Stats_tree, hf_opa_GetGroupInfo_pmaFailedPorts, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(GetGroupInfo_Util_Stats_tree, hf_opa_GetGroupInfo_topoFailedPorts, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; /* internalErrors */ GetGroupInfo_Error_Summary_tree = proto_tree_add_subtree(GetGroupInfo_header_tree, tvb, local_offset, 40 + PM_ERR_BUCKETS * 24, ett_getgroupinfoerrorsummary, NULL, "Internal Error Statistics"); GetGroupInfo_Error_Stats_Integrity_Buckets_item = proto_tree_add_item(GetGroupInfo_Error_Summary_tree, hf_opa_GetGroupInfo_integrityErrors, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; GetGroupInfo_Error_Stats_Congestion_Buckets_item = proto_tree_add_item(GetGroupInfo_Error_Summary_tree, hf_opa_GetGroupInfo_congestionErrors, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; GetGroupInfo_Error_Stats_SmaCongestion_Buckets_item = proto_tree_add_item(GetGroupInfo_Error_Summary_tree, hf_opa_GetGroupInfo_smaCongestionErrors, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; GetGroupInfo_Error_Stats_Bubble_Buckets_item = proto_tree_add_item(GetGroupInfo_Error_Summary_tree, hf_opa_GetGroupInfo_bubbleErrors, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; GetGroupInfo_Error_Stats_Security_Buckets_item = proto_tree_add_item(GetGroupInfo_Error_Summary_tree, hf_opa_GetGroupInfo_securityErrors, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; GetGroupInfo_Error_Stats_Routing_Buckets_item = proto_tree_add_item(GetGroupInfo_Error_Summary_tree, hf_opa_GetGroupInfo_routingErrors, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetGroupInfo_Error_Summary_tree, hf_opa_GetGroupInfo_utilizationPct10, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(GetGroupInfo_Error_Summary_tree, hf_opa_GetGroupInfo_discardsPct10, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(GetGroupInfo_Error_Summary_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetGroupInfo_Error_Summary_tree, hf_opa_reserved64, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; GetGroupInfo_Error_Integrity_Buckets_tree = proto_item_add_subtree(GetGroupInfo_Error_Stats_Integrity_Buckets_item, ett_getgroupinfoerrintegritybucket); GetGroupInfo_Error_Congestion_Buckets_tree = proto_item_add_subtree(GetGroupInfo_Error_Stats_Congestion_Buckets_item, ett_getgroupinfoerrcongestionbucket); GetGroupInfo_Error_SmaCongestion_Buckets_tree = proto_item_add_subtree(GetGroupInfo_Error_Stats_SmaCongestion_Buckets_item, ett_getgroupinfoerrsmacongestionbucket); GetGroupInfo_Error_Bubble_Buckets_tree = proto_item_add_subtree(GetGroupInfo_Error_Stats_Bubble_Buckets_item, ett_getgroupinfoerrbubblebucket); GetGroupInfo_Error_Security_Buckets_tree = proto_item_add_subtree(GetGroupInfo_Error_Stats_Security_Buckets_item, ett_getgroupinfoerrsecuritybucket); GetGroupInfo_Error_Routing_Buckets_tree = proto_item_add_subtree(GetGroupInfo_Error_Stats_Routing_Buckets_item, ett_getgroupinfoerrroutingbucket); for (i = 0; i < PM_ERR_BUCKETS; i++) { GetGroupInfo_Error_Stats_Bucket_item = proto_tree_add_item(GetGroupInfo_Error_Integrity_Buckets_tree, hf_opa_GetGroupInfo_BWBuckets, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_item_set_text(GetGroupInfo_Error_Stats_Bucket_item, "Bucket %u: %3u%%+: %u", i, i * err, tvb_get_ntohl(tvb, local_offset)); local_offset += 4; GetGroupInfo_Error_Stats_Bucket_item = proto_tree_add_item(GetGroupInfo_Error_Congestion_Buckets_tree, hf_opa_GetGroupInfo_BWBuckets, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_item_set_text(GetGroupInfo_Error_Stats_Bucket_item, "Bucket %u: %3u%%+: %u", i, i * err, tvb_get_ntohl(tvb, local_offset)); local_offset += 4; GetGroupInfo_Error_Stats_Bucket_item = proto_tree_add_item(GetGroupInfo_Error_SmaCongestion_Buckets_tree, hf_opa_GetGroupInfo_BWBuckets, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_item_set_text(GetGroupInfo_Error_Stats_Bucket_item, "Bucket %u: %3u%%+: %u", i, i * err, tvb_get_ntohl(tvb, local_offset)); local_offset += 4; GetGroupInfo_Error_Stats_Bucket_item = proto_tree_add_item(GetGroupInfo_Error_Bubble_Buckets_tree, hf_opa_GetGroupInfo_BWBuckets, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_item_set_text(GetGroupInfo_Error_Stats_Bucket_item, "Bucket %u: %3u%%+: %u", i, i * err, tvb_get_ntohl(tvb, local_offset)); local_offset += 4; GetGroupInfo_Error_Stats_Bucket_item = proto_tree_add_item(GetGroupInfo_Error_Security_Buckets_tree, hf_opa_GetGroupInfo_BWBuckets, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_item_set_text(GetGroupInfo_Error_Stats_Bucket_item, "Bucket %u: %3u%%+: %u", i, i * err, tvb_get_ntohl(tvb, local_offset)); local_offset += 4; GetGroupInfo_Error_Stats_Bucket_item = proto_tree_add_item(GetGroupInfo_Error_Routing_Buckets_tree, hf_opa_GetGroupInfo_BWBuckets, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_item_set_text(GetGroupInfo_Error_Stats_Bucket_item, "Bucket %u: %3u%%+: %u", i, i * err, tvb_get_ntohl(tvb, local_offset)); local_offset += 4; } /* externalErrors */ GetGroupInfo_Error_Summary_tree = proto_tree_add_subtree(GetGroupInfo_header_tree, tvb, local_offset, 40 + PM_ERR_BUCKETS * 24, ett_getgroupinfoerrorsummary, NULL, "External Error Statistics"); GetGroupInfo_Error_Stats_Integrity_Buckets_item = proto_tree_add_item(GetGroupInfo_Error_Summary_tree, hf_opa_GetGroupInfo_integrityErrors, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; GetGroupInfo_Error_Stats_Congestion_Buckets_item = proto_tree_add_item(GetGroupInfo_Error_Summary_tree, hf_opa_GetGroupInfo_congestionErrors, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; GetGroupInfo_Error_Stats_SmaCongestion_Buckets_item = proto_tree_add_item(GetGroupInfo_Error_Summary_tree, hf_opa_GetGroupInfo_smaCongestionErrors, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; GetGroupInfo_Error_Stats_Bubble_Buckets_item = proto_tree_add_item(GetGroupInfo_Error_Summary_tree, hf_opa_GetGroupInfo_bubbleErrors, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; GetGroupInfo_Error_Stats_Security_Buckets_item = proto_tree_add_item(GetGroupInfo_Error_Summary_tree, hf_opa_GetGroupInfo_securityErrors, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; GetGroupInfo_Error_Stats_Routing_Buckets_item = proto_tree_add_item(GetGroupInfo_Error_Summary_tree, hf_opa_GetGroupInfo_routingErrors, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetGroupInfo_Error_Summary_tree, hf_opa_GetGroupInfo_utilizationPct10, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(GetGroupInfo_Error_Summary_tree, hf_opa_GetGroupInfo_discardsPct10, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(GetGroupInfo_Error_Summary_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetGroupInfo_Error_Summary_tree, hf_opa_reserved64, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; GetGroupInfo_Error_Integrity_Buckets_tree = proto_item_add_subtree(GetGroupInfo_Error_Stats_Integrity_Buckets_item, ett_getgroupinfoerrintegritybucket); GetGroupInfo_Error_Congestion_Buckets_tree = proto_item_add_subtree(GetGroupInfo_Error_Stats_Congestion_Buckets_item, ett_getgroupinfoerrcongestionbucket); GetGroupInfo_Error_SmaCongestion_Buckets_tree = proto_item_add_subtree(GetGroupInfo_Error_Stats_SmaCongestion_Buckets_item, ett_getgroupinfoerrsmacongestionbucket); GetGroupInfo_Error_Bubble_Buckets_tree = proto_item_add_subtree(GetGroupInfo_Error_Stats_Bubble_Buckets_item, ett_getgroupinfoerrbubblebucket); GetGroupInfo_Error_Security_Buckets_tree = proto_item_add_subtree(GetGroupInfo_Error_Stats_Security_Buckets_item, ett_getgroupinfoerrsecuritybucket); GetGroupInfo_Error_Routing_Buckets_tree = proto_item_add_subtree(GetGroupInfo_Error_Stats_Routing_Buckets_item, ett_getgroupinfoerrroutingbucket); for (i = 0; i < PM_ERR_BUCKETS; i++) { GetGroupInfo_Error_Stats_Bucket_item = proto_tree_add_item(GetGroupInfo_Error_Integrity_Buckets_tree, hf_opa_GetGroupInfo_BWBuckets, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_item_set_text(GetGroupInfo_Error_Stats_Bucket_item, "Bucket %u: %3u%%+: %u", i, i * err, tvb_get_ntohl(tvb, local_offset)); local_offset += 4; GetGroupInfo_Error_Stats_Bucket_item = proto_tree_add_item(GetGroupInfo_Error_Congestion_Buckets_tree, hf_opa_GetGroupInfo_BWBuckets, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_item_set_text(GetGroupInfo_Error_Stats_Bucket_item, "Bucket %u: %3u%%+: %u", i, i * err, tvb_get_ntohl(tvb, local_offset)); local_offset += 4; GetGroupInfo_Error_Stats_Bucket_item = proto_tree_add_item(GetGroupInfo_Error_SmaCongestion_Buckets_tree, hf_opa_GetGroupInfo_BWBuckets, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_item_set_text(GetGroupInfo_Error_Stats_Bucket_item, "Bucket %u: %3u%%+: %u", i, i * err, tvb_get_ntohl(tvb, local_offset)); local_offset += 4; GetGroupInfo_Error_Stats_Bucket_item = proto_tree_add_item(GetGroupInfo_Error_Bubble_Buckets_tree, hf_opa_GetGroupInfo_BWBuckets, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_item_set_text(GetGroupInfo_Error_Stats_Bucket_item, "Bucket %u: %3u%%+: %u", i, i * err, tvb_get_ntohl(tvb, local_offset)); local_offset += 4; GetGroupInfo_Error_Stats_Bucket_item = proto_tree_add_item(GetGroupInfo_Error_Security_Buckets_tree, hf_opa_GetGroupInfo_BWBuckets, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_item_set_text(GetGroupInfo_Error_Stats_Bucket_item, "Bucket %u: %3u%%+: %u", i, i * err, tvb_get_ntohl(tvb, local_offset)); local_offset += 4; GetGroupInfo_Error_Stats_Bucket_item = proto_tree_add_item(GetGroupInfo_Error_Routing_Buckets_tree, hf_opa_GetGroupInfo_BWBuckets, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_item_set_text(GetGroupInfo_Error_Stats_Bucket_item, "Bucket %u: %3u%%+: %u", i, i * err, tvb_get_ntohl(tvb, local_offset)); local_offset += 4; } proto_tree_add_item(GetGroupInfo_header_tree, hf_opa_GetGroupInfo_maxInternalRate, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(GetGroupInfo_header_tree, hf_opa_GetGroupInfo_minInternalRate, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(GetGroupInfo_header_tree, hf_opa_GetGroupInfo_maxExternalRate, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(GetGroupInfo_header_tree, hf_opa_GetGroupInfo_minExternalRate, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(GetGroupInfo_header_tree, hf_opa_GetGroupInfo_maxInternalMBps, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetGroupInfo_header_tree, hf_opa_GetGroupInfo_maxExternalMBps, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; } return local_offset; } /* Parse GetGroupConfig MAD from the Performance Admin class.*/ static gint parse_GetGroupConfig(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD, RMPP_t *RMPP, PA_HEADER_t *PA_HEADER) { proto_item *GetGroupConfig_header_item; proto_tree *GetGroupConfig_header_tree = parentTree; proto_item *GetGroupConfig_Port_item; proto_tree *GetGroupConfig_Port_tree; gint local_offset = *offset; guint i; guint length = tvb_captured_length_remaining(tvb, local_offset); guint records = (PA_HEADER->AttributeOffset ? length / (PA_HEADER->AttributeOffset * 8) : 0); if (!parentTree || (!pref_attempt_rmpp_defragment && RMPP->Type == RMPP_DATA && RMPP->SegmentNumber != 1)) return *offset; if (MAD->Method == METHOD_GET || MAD->Method == METHOD_GETTABLE) { GetGroupConfig_header_item = proto_tree_add_item(parentTree, hf_opa_GetGroupConfig, tvb, local_offset, 64 + 16, ENC_NA); proto_item_set_text(GetGroupConfig_header_item, "GroupConfig for %s", tvb_get_string_enc(wmem_file_scope(), tvb, local_offset, 64, ENC_ASCII)); GetGroupConfig_header_tree = proto_item_add_subtree(GetGroupConfig_header_item, ett_getgroupconfig); proto_tree_add_item(GetGroupConfig_header_tree, hf_opa_GetGroupConfig_groupName, tvb, local_offset, 64, ENC_ASCII | ENC_NA); local_offset += 64; local_offset = parse_Image(GetGroupConfig_header_tree, tvb, &local_offset); } else if (MAD->Method == METHOD_GET_RESP || MAD->Method == METHOD_GETTABLE_RESP) { GetGroupConfig_header_item = proto_tree_add_item(parentTree, hf_opa_GetGroupConfig, tvb, local_offset, records * PA_HEADER->AttributeOffset * 8, ENC_NA); GetGroupConfig_header_tree = proto_item_add_subtree(GetGroupConfig_header_item, ett_getgroupconfig); for (i = 0; i < records; i++) { GetGroupConfig_Port_tree = proto_tree_add_subtree_format(GetGroupConfig_header_tree, tvb, local_offset, PA_HEADER->AttributeOffset * 8, ett_getgroupconfigport, &GetGroupConfig_Port_item, "%3u: ", i); local_offset = parse_Image(GetGroupConfig_Port_tree, tvb, &local_offset); proto_tree_add_item(GetGroupConfig_Port_tree, hf_opa_GetGroupConfig_Port_NodeGUID, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetGroupConfig_Port_tree, hf_opa_GetGroupConfig_Port_nodeDesc, tvb, local_offset, 64, ENC_ASCII | ENC_NA); local_offset += 64; proto_item_append_text(GetGroupConfig_Port_item, "LID: 0x%04x, Port: %u", tvb_get_ntohl(tvb, local_offset), tvb_get_guint8(tvb, local_offset + 4)); proto_tree_add_item(GetGroupConfig_Port_tree, hf_opa_GetGroupConfig_Port_NodeLID, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetGroupConfig_Port_tree, hf_opa_GetGroupConfig_Port_PortNumber, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(GetGroupConfig_Port_tree, hf_opa_reserved24, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; } } return local_offset; } /* Parse GetPortCounters MAD from the Performance Admin class.*/ static gint parse_GetPortCounters(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { proto_tree *GetPortCounters_header_tree; proto_item *GetPortCounters_header_item; gint local_offset = *offset; if (!parentTree) return *offset; GetPortCounters_header_item = proto_tree_add_item(parentTree, hf_opa_GetPortCounters, tvb, local_offset, 232 + 16, ENC_NA); proto_item_set_text(GetPortCounters_header_item, "Port Counters for LID: 0x%x Port: %u", tvb_get_ntohl(tvb, local_offset), tvb_get_guint8(tvb, local_offset + 4)); GetPortCounters_header_tree = proto_item_add_subtree(GetPortCounters_header_item, ett_getportcounters); proto_tree_add_item(GetPortCounters_header_tree, hf_opa_GetPortCounters_nodeLID, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetPortCounters_header_tree, hf_opa_GetPortCounters_PortNumber, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(GetPortCounters_header_tree, hf_opa_reserved24, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; proto_tree_add_item(GetPortCounters_header_tree, hf_opa_GetPortCounters_flags, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetPortCounters_header_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetPortCounters_header_tree, hf_opa_reserved64, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; /* ImageID */ local_offset = parse_Image(GetPortCounters_header_tree, tvb, &local_offset); if (MAD->Method == METHOD_GET_RESP || MAD->Method == METHOD_GETTABLE_RESP) { proto_tree_add_item(GetPortCounters_header_tree, hf_opa_GetPortCounters_PortXmitData, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetPortCounters_header_tree, hf_opa_GetPortCounters_PortRcvData, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetPortCounters_header_tree, hf_opa_GetPortCounters_PortXmitPkts, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetPortCounters_header_tree, hf_opa_GetPortCounters_PortRcvPkts, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetPortCounters_header_tree, hf_opa_GetPortCounters_PortMulticastXmitPkts, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetPortCounters_header_tree, hf_opa_GetPortCounters_PortMulticastRcvPkts, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetPortCounters_header_tree, hf_opa_GetPortCounters_LocalLinkIntegrityErrors, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetPortCounters_header_tree, hf_opa_GetPortCounters_FMConfigErrors, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetPortCounters_header_tree, hf_opa_GetPortCounters_PortRcvErrors, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetPortCounters_header_tree, hf_opa_GetPortCounters_ExcessiveBufferOverruns, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetPortCounters_header_tree, hf_opa_GetPortCounters_PortRcvConstraintErrors, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetPortCounters_header_tree, hf_opa_GetPortCounters_PortRcvSwitchRelayErrors, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetPortCounters_header_tree, hf_opa_GetPortCounters_PortXmitDiscards, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetPortCounters_header_tree, hf_opa_GetPortCounters_PortXmitConstraintErrors, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetPortCounters_header_tree, hf_opa_GetPortCounters_PortRcvRemotePhysicalErrors, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetPortCounters_header_tree, hf_opa_GetPortCounters_SwPortCongestion, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetPortCounters_header_tree, hf_opa_GetPortCounters_PortXmitWait, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetPortCounters_header_tree, hf_opa_GetPortCounters_PortRcvFECN, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetPortCounters_header_tree, hf_opa_GetPortCounters_PortRcvBECN, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetPortCounters_header_tree, hf_opa_GetPortCounters_PortXmitTimeCong, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetPortCounters_header_tree, hf_opa_GetPortCounters_PortXmitWastedBW, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetPortCounters_header_tree, hf_opa_GetPortCounters_PortXmitWaitData, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetPortCounters_header_tree, hf_opa_GetPortCounters_PortRcvBubble, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetPortCounters_header_tree, hf_opa_GetPortCounters_PortMarkFECN, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetPortCounters_header_tree, hf_opa_GetPortCounters_LinkErrorRecovery, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetPortCounters_header_tree, hf_opa_GetPortCounters_LinkDowned, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetPortCounters_header_tree, hf_opa_GetPortCounters_UncorrectableErrors, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(GetPortCounters_header_tree, hf_opa_GetPortCounters_NumLanesDown, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(GetPortCounters_header_tree, hf_opa_GetPortCounters_reserved, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(GetPortCounters_header_tree, hf_opa_GetPortCounters_LinkQualityIndicator, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(GetPortCounters_header_tree, hf_opa_reserved16, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(GetPortCounters_header_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; } else { local_offset += 208; } return local_offset; } static gint parse_ClearPortCounters(proto_tree *parentTree, tvbuff_t *tvb, gint *offset) { proto_tree *ClearPortCounters_header_tree; proto_item *ClearPortCounters_header_item; gint local_offset = *offset; if (!parentTree) return *offset; ClearPortCounters_header_item = proto_tree_add_item(parentTree, hf_opa_ClearPortCounters, tvb, local_offset, 20, ENC_NA); proto_item_set_text(ClearPortCounters_header_item, "Clear User Port Counters for LID: 0x%x Port: %u", tvb_get_ntohl(tvb, local_offset), tvb_get_guint8(tvb, local_offset + 4)); ClearPortCounters_header_tree = proto_item_add_subtree(ClearPortCounters_header_item, ett_clearportcounters); proto_tree_add_item(ClearPortCounters_header_tree, hf_opa_ClearPortCounters_nodeLID, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(ClearPortCounters_header_tree, hf_opa_ClearPortCounters_PortNumber, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(ClearPortCounters_header_tree, hf_opa_reserved24, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; proto_tree_add_item(ClearPortCounters_header_tree, hf_opa_reserved64, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_bitmask(ClearPortCounters_header_tree, tvb, local_offset, hf_opa_ClearPortCounters_CounterSelectMask, ett_clearportcounters_counterselectmask, _ClearPortCounters_CounterSelectMask, ENC_BIG_ENDIAN); local_offset += 4; return local_offset; } static gint parse_ClearAllPortCounters(proto_tree *parentTree, tvbuff_t *tvb, gint *offset) { proto_tree *ClearAllPortCounters_header_tree; proto_item *ClearAllPortCounters_header_item; gint local_offset = *offset; if (!parentTree) return *offset; ClearAllPortCounters_header_item = proto_tree_add_item(parentTree, hf_opa_ClearAllPortCounters, tvb, local_offset, 4, ENC_NA); proto_item_set_text(ClearAllPortCounters_header_item, "Clear All User Port Counters"); ClearAllPortCounters_header_tree = proto_item_add_subtree(ClearAllPortCounters_header_item, ett_clearallportcounters); proto_tree_add_bitmask(ClearAllPortCounters_header_tree, tvb, local_offset, hf_opa_ClearAllPortCounters_CounterSelectMask, ett_clearallportcounters_counterselectmask, _ClearAllPortCounters_CounterSelectMask, ENC_BIG_ENDIAN); local_offset += 4; return local_offset; } static gint parse_PMConfig(proto_tree *parentTree, tvbuff_t *tvb, gint *offset) { proto_tree *PMConfig_header_tree; proto_item *PMConfig_header_item; gint local_offset = *offset; if (!parentTree) return *offset; PMConfig_header_item = proto_tree_add_item(parentTree, hf_opa_PMConfig, tvb, local_offset, 104, ENC_NA); PMConfig_header_tree = proto_item_add_subtree(PMConfig_header_item, ett_pmconfig); proto_tree_add_item(PMConfig_header_tree, hf_opa_PMConfig_sweepInterval, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(PMConfig_header_tree, hf_opa_PMConfig_maxClients, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(PMConfig_header_tree, hf_opa_PMConfig_sizeHistory, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(PMConfig_header_tree, hf_opa_PMConfig_sizeFreeze, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(PMConfig_header_tree, hf_opa_PMConfig_lease, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(PMConfig_header_tree, hf_opa_PMConfig_pmFlags, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(PMConfig_header_tree, hf_opa_PMConfig_PortXmitWait, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PMConfig_header_tree, hf_opa_PMConfig_SwPortCongestion, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PMConfig_header_tree, hf_opa_PMConfig_PortRcvFECN, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PMConfig_header_tree, hf_opa_PMConfig_PortRcvBECN, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PMConfig_header_tree, hf_opa_PMConfig_PortXmitTimeCong, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PMConfig_header_tree, hf_opa_PMConfig_PortMarkFECN, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PMConfig_header_tree, hf_opa_reserved16, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(PMConfig_header_tree, hf_opa_PMConfig_integrityErrors, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(PMConfig_header_tree, hf_opa_PMConfig_congestionErrors, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(PMConfig_header_tree, hf_opa_PMConfig_smaCongestionErrors, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(PMConfig_header_tree, hf_opa_PMConfig_bubbleErrors, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(PMConfig_header_tree, hf_opa_PMConfig_securityErrors, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(PMConfig_header_tree, hf_opa_PMConfig_routingErrors, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(PMConfig_header_tree, hf_opa_PMConfig_LocalLinkIntegrityErrors, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PMConfig_header_tree, hf_opa_PMConfig_PortRcvErrors, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PMConfig_header_tree, hf_opa_PMConfig_ExcessiveBufferOverrunErrors, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PMConfig_header_tree, hf_opa_PMConfig_LinkErrorRecovery, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PMConfig_header_tree, hf_opa_PMConfig_LinkDowned, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PMConfig_header_tree, hf_opa_PMConfig_UncorrectableErrors, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PMConfig_header_tree, hf_opa_PMConfig_FMConfigErrors, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PMConfig_header_tree, hf_opa_PMConfig_LinkQualityIndicator, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PMConfig_header_tree, hf_opa_PMConfig_LinkWidthDowngrade, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PMConfig_header_tree, hf_opa_reserved8, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PMConfig_header_tree, hf_opa_reserved16, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(PMConfig_header_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(PMConfig_header_tree, hf_opa_PMConfig_memoryFootprint, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(PMConfig_header_tree, hf_opa_PMConfig_maxAttempts, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(PMConfig_header_tree, hf_opa_PMConfig_respTimeout, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(PMConfig_header_tree, hf_opa_PMConfig_minRespTimeout, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(PMConfig_header_tree, hf_opa_PMConfig_maxParallelNodes, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(PMConfig_header_tree, hf_opa_PMConfig_pmaBatchSize, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(PMConfig_header_tree, hf_opa_PMConfig_errorClear, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(PMConfig_header_tree, hf_opa_reserved24, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; return local_offset; } /* Parse MoveFreezeFrame MAD from the Performance Admin class. */ static gint parse_MoveFreezeFrame(proto_tree *parentTree, tvbuff_t *tvb, gint *offset) { proto_tree *MoveFreezeFrame_header_tree = parentTree; proto_item *MoveFreezeFrame_old_item; proto_tree *MoveFreezeFrame_old_tree; proto_item *MoveFreezeFrame_new_item; proto_tree *MoveFreezeFrame_new_tree; gint local_offset = *offset; if (!parentTree) return *offset; MoveFreezeFrame_old_item = proto_tree_add_item(MoveFreezeFrame_header_tree, hf_opa_MoveFreezeFrame_old, tvb, local_offset, 16, ENC_NA); MoveFreezeFrame_old_tree = proto_item_add_subtree(MoveFreezeFrame_old_item, ett_movefreezeframeold); local_offset = parse_Image(MoveFreezeFrame_old_tree, tvb, &local_offset); MoveFreezeFrame_new_item = proto_tree_add_item(MoveFreezeFrame_header_tree, hf_opa_MoveFreezeFrame_new, tvb, local_offset, 16, ENC_NA); MoveFreezeFrame_new_tree = proto_item_add_subtree(MoveFreezeFrame_new_item, ett_movefreezeframenew); local_offset = parse_Image(MoveFreezeFrame_new_tree, tvb, &local_offset); return local_offset; } /* Parse GetFocusPorts MAD from the Performance Admin class. */ static gint parse_GetFocusPorts(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD, RMPP_t *RMPP, PA_HEADER_t *PA_HEADER) { proto_tree *GetFocusPorts_header_tree; proto_item *GetFocusPorts_header_item; proto_tree *GetFocusPorts_Port_tree; proto_item *GetFocusPorts_Port_item; gint local_offset = *offset; guint i = 0; guint length = tvb_captured_length_remaining(tvb, local_offset); guint records = (PA_HEADER->AttributeOffset ? length / (PA_HEADER->AttributeOffset * 8) : 0); if (!parentTree || (!pref_attempt_rmpp_defragment && RMPP->Type == RMPP_DATA && RMPP->SegmentNumber != 1)) return *offset; if (MAD->Method == METHOD_GET || MAD->Method == METHOD_GETTABLE) { GetFocusPorts_header_item = proto_tree_add_item(parentTree, hf_opa_GetFocusPorts, tvb, local_offset, 64 + 28, ENC_NA); proto_item_set_text(GetFocusPorts_header_item, "Focus Ports for %s", tvb_get_string_enc(wmem_file_scope(), tvb, local_offset, 64, ENC_ASCII)); GetFocusPorts_header_tree = proto_item_add_subtree(GetFocusPorts_header_item, ett_getfocusports); proto_tree_add_item(GetFocusPorts_header_tree, hf_opa_GetFocusPorts_groupName, tvb, local_offset, 64, ENC_ASCII | ENC_NA); local_offset += 64; local_offset = parse_Image(GetFocusPorts_header_tree, tvb, &local_offset); proto_tree_add_item(GetFocusPorts_header_tree, hf_opa_GetFocusPorts_select, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetFocusPorts_header_tree, hf_opa_GetFocusPorts_start, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetFocusPorts_header_tree, hf_opa_GetFocusPorts_range, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; } else if (MAD->Method == METHOD_GET_RESP || MAD->Method == METHOD_GETTABLE_RESP) { GetFocusPorts_header_item = proto_tree_add_item(parentTree, hf_opa_GetFocusPorts, tvb, local_offset, records * PA_HEADER->AttributeOffset * 8, ENC_NA); GetFocusPorts_header_tree = proto_item_add_subtree(GetFocusPorts_header_item, ett_getfocusports); for (i = 0; i < records; i++) { GetFocusPorts_Port_tree = proto_tree_add_subtree_format(GetFocusPorts_header_tree, tvb, local_offset, PA_HEADER->AttributeOffset * 8, ett_getfocusportsport, &GetFocusPorts_Port_item, "%3u: ", i); local_offset = parse_Image(GetFocusPorts_Port_tree, tvb, &local_offset); proto_item_append_text(GetFocusPorts_Port_item, "LID: %04x, Port %u", tvb_get_ntohl(tvb, local_offset), tvb_get_guint8(tvb, local_offset + 4)); proto_tree_add_item(GetFocusPorts_Port_tree, hf_opa_GetFocusPorts_nodeLID, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetFocusPorts_Port_tree, hf_opa_GetFocusPorts_portNumber, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(GetFocusPorts_Port_tree, hf_opa_GetFocusPorts_rate, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(GetFocusPorts_Port_tree, hf_opa_GetFocusPorts_mtu, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(GetFocusPorts_Port_tree, hf_opa_GetFocusPorts_localFlags, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(GetFocusPorts_Port_tree, hf_opa_GetFocusPorts_neighborFlags, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(GetFocusPorts_Port_tree, hf_opa_GetFocusPorts_value, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetFocusPorts_Port_tree, hf_opa_GetFocusPorts_nodeGUID, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetFocusPorts_Port_tree, hf_opa_GetFocusPorts_nodeDesc, tvb, local_offset, 64, ENC_ASCII | ENC_NA); local_offset += 64; proto_tree_add_item(GetFocusPorts_Port_tree, hf_opa_GetFocusPorts_neighborLid, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetFocusPorts_Port_tree, hf_opa_GetFocusPorts_neighborPortNumber, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(GetFocusPorts_Port_tree, hf_opa_reserved24, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; proto_tree_add_item(GetFocusPorts_Port_tree, hf_opa_GetFocusPorts_neighborValue, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetFocusPorts_Port_tree, hf_opa_GetFocusPorts_neighborGuid, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetFocusPorts_Port_tree, hf_opa_GetFocusPorts_neighborNodeDesc, tvb, local_offset, 64, ENC_ASCII | ENC_NA); local_offset += 64; } } return local_offset; } /* Parse GetImageInfo MAD from the Performance Admin class. */ static gint parse_GetImageInfo(proto_tree *parentTree, tvbuff_t *tvb, gint *offset) { proto_tree *GetImageInfo_header_tree = parentTree; proto_item *GetImageInfo_header_item; proto_tree *GetImageInfo_SM_tree; guint32 numSMs; gint local_offset = *offset; if (!parentTree) return *offset; GetImageInfo_header_item = proto_tree_add_item(parentTree, hf_opa_GetImageInfo, tvb, local_offset, 216, ENC_NA); GetImageInfo_header_tree = proto_item_add_subtree(GetImageInfo_header_item, ett_getimageinfo); local_offset = parse_Image(GetImageInfo_header_tree, tvb, &local_offset); proto_tree_add_item(GetImageInfo_header_tree, hf_opa_GetImageInfo_sweepStart, tvb, local_offset, 8, ENC_TIME_SECS|ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetImageInfo_header_tree, hf_opa_GetImageInfo_sweepDuration, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetImageInfo_header_tree, hf_opa_GetImageInfo_numHFIPorts, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(GetImageInfo_header_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetImageInfo_header_tree, hf_opa_GetImageInfo_numSwitchNodes, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(GetImageInfo_header_tree, hf_opa_GetImageInfo_numSwitchPorts, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetImageInfo_header_tree, hf_opa_GetImageInfo_numLinks, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; numSMs = tvb_get_ntohl(tvb, local_offset); proto_tree_add_item(GetImageInfo_header_tree, hf_opa_GetImageInfo_numSMs, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetImageInfo_header_tree, hf_opa_GetImageInfo_numFailedNodes, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetImageInfo_header_tree, hf_opa_GetImageInfo_numFailedPorts, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetImageInfo_header_tree, hf_opa_GetImageInfo_numSkippedNodes, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetImageInfo_header_tree, hf_opa_GetImageInfo_numSkippedPorts, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetImageInfo_header_tree, hf_opa_GetImageInfo_numUnexpectedClearPorts, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetImageInfo_header_tree, hf_opa_GetImageInfo_imageInterval, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; GetImageInfo_SM_tree = proto_tree_add_subtree(GetImageInfo_header_tree, tvb, local_offset, 16 + 64, ett_getimageinfosm, NULL, "Primary SM Info"); proto_tree_add_item(GetImageInfo_SM_tree, hf_opa_GetImageInfo_lid, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetImageInfo_SM_tree, hf_opa_GetImageInfo_state, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(GetImageInfo_SM_tree, hf_opa_GetImageInfo_priority, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(GetImageInfo_SM_tree, hf_opa_GetImageInfo_portNumber, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(GetImageInfo_SM_tree, hf_opa_reserved16, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(GetImageInfo_SM_tree, hf_opa_GetImageInfo_smPortGuid, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetImageInfo_SM_tree, hf_opa_GetImageInfo_smNodeDesc, tvb, local_offset, 64, ENC_NA | ENC_ASCII); local_offset += 64; if (!numSMs || numSMs > 1) { GetImageInfo_SM_tree = proto_tree_add_subtree(GetImageInfo_header_tree, tvb, local_offset, 16 + 64, ett_getimageinfosm, NULL, "Secondary SM Info"); proto_tree_add_item(GetImageInfo_SM_tree, hf_opa_GetImageInfo_lid, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetImageInfo_SM_tree, hf_opa_GetImageInfo_state, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(GetImageInfo_SM_tree, hf_opa_GetImageInfo_priority, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(GetImageInfo_SM_tree, hf_opa_GetImageInfo_portNumber, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(GetImageInfo_SM_tree, hf_opa_reserved16, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(GetImageInfo_SM_tree, hf_opa_GetImageInfo_smPortGuid, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetImageInfo_SM_tree, hf_opa_GetImageInfo_smNodeDesc, tvb, local_offset, 64, ENC_NA | ENC_ASCII); local_offset += 64; } else { proto_tree_add_subtree(GetImageInfo_header_tree, tvb, local_offset, 16 + 64, ett_getimageinfosm, NULL, "No Secondary SM Info"); local_offset += (16 + 64); } return local_offset; } /* Parse GetVFList MAD from the Performance Admin class. */ static gint parse_GetVFList(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD, RMPP_t *RMPP, PA_HEADER_t *PA_HEADER) { proto_item *GetVFList_GroupName_item; proto_tree *GetVFList_header_tree; proto_item *GetVFList_header_item; gint local_offset = *offset; guint i; guint length = tvb_captured_length_remaining(tvb, local_offset); guint records = (PA_HEADER->AttributeOffset ? length / (PA_HEADER->AttributeOffset * 8) : 0); if (!parentTree || RMPP->Type != RMPP_DATA || (MAD->Method != METHOD_GET_RESP && MAD->Method != METHOD_GETTABLE_RESP)) { return *offset; } GetVFList_header_item = proto_tree_add_item(parentTree, hf_opa_GetVFList, tvb, local_offset, length, ENC_NA); GetVFList_header_tree = proto_item_add_subtree(GetVFList_header_item, ett_getvflist); proto_tree_add_none_format(GetVFList_header_tree, hf_opa_GetVFList, tvb, local_offset, length, "Number of VFs: %u", records); for (i = 0; i < records; i++) { GetVFList_GroupName_item = proto_tree_add_item(GetVFList_header_tree, hf_opa_GetVFList_vfName, tvb, local_offset, 64, ENC_ASCII | ENC_NA); local_offset += 64; proto_item_prepend_text(GetVFList_GroupName_item, "%3u: ", i + 1); } return local_offset; } /* Parse GetVFInfo MAD from the Performance Admin class. */ static gint parse_GetVFInfo(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD, RMPP_t *RMPP, PA_HEADER_t *PA_HEADER) { proto_tree *GetVFInfo_header_tree = parentTree; proto_tree *GetVFInfo_header_item = parentTree; proto_tree *GetVFInfo_Util_Stats_tree; proto_item *GetVFInfo_Util_Stats_Buckets_item; proto_tree *GetVFInfo_Util_Stats_Buckets_tree; proto_item *GetVFInfo_Util_Stats_Bucket_item; proto_tree *GetVFInfo_Error_Summary_tree; proto_tree *GetVFInfo_Error_Integrity_Buckets_tree; proto_tree *GetVFInfo_Error_Congestion_Buckets_tree; proto_tree *GetVFInfo_Error_SmaCongestion_Buckets_tree; proto_tree *GetVFInfo_Error_Bubble_Buckets_tree; proto_tree *GetVFInfo_Error_Security_Buckets_tree; proto_tree *GetVFInfo_Error_Routing_Buckets_tree; proto_item *GetVFInfo_Error_Stats_Integrity_Buckets_item; proto_item *GetVFInfo_Error_Stats_Congestion_Buckets_item; proto_item *GetVFInfo_Error_Stats_SmaCongestion_Buckets_item; proto_item *GetVFInfo_Error_Stats_Bubble_Buckets_item; proto_item *GetVFInfo_Error_Stats_Security_Buckets_item; proto_item *GetVFInfo_Error_Stats_Routing_Buckets_item; proto_item *GetVFInfo_Error_Stats_Bucket_item; gint local_offset = *offset; guint i; guint length = tvb_captured_length_remaining(tvb, local_offset); guint records = (PA_HEADER->AttributeOffset ? length / (PA_HEADER->AttributeOffset * 8) : 0); guint util = 100 / PM_UTIL_BUCKETS; /* 0%+ 10%+ 20%+ ... 80%+ 90%+ */ guint err = 100 / (PM_ERR_BUCKETS - 1); /* 0%+ 25%+ 50%+ 75%+ 100%+ */ if (!parentTree || (!pref_attempt_rmpp_defragment && RMPP->Type == RMPP_DATA && RMPP->SegmentNumber != 1)) { return *offset; } if (MAD->Method == METHOD_GET || MAD->Method == METHOD_GETTABLE) { GetVFInfo_header_item = proto_tree_add_item(parentTree, hf_opa_GetVFInfo, tvb, local_offset, 64 + 24, ENC_NA); proto_item_set_text(GetVFInfo_header_item, "VFInfo for %s", tvb_get_string_enc(wmem_file_scope(), tvb, local_offset, 64, ENC_ASCII)); GetVFInfo_header_tree = proto_item_add_subtree(GetVFInfo_header_item, ett_getvfinfo); proto_tree_add_item(GetVFInfo_header_tree, hf_opa_GetVFInfo_vfName, tvb, local_offset, 64, ENC_ASCII | ENC_NA); local_offset += 64; proto_tree_add_item(GetVFInfo_header_tree, hf_opa_reserved64, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; /* ImageID */ local_offset = parse_Image(GetVFInfo_header_tree, tvb, &local_offset); return local_offset; } for (i = 0; i < records; i++) { GetVFInfo_header_item = proto_tree_add_item(parentTree, hf_opa_GetVFInfo, tvb, local_offset, PA_HEADER->AttributeOffset * 8, ENC_NA); proto_item_set_text(GetVFInfo_header_item, "VFInfo for %s", tvb_get_string_enc(wmem_file_scope(), tvb, local_offset, 64, ENC_ASCII)); GetVFInfo_header_tree = proto_item_add_subtree(GetVFInfo_header_item, ett_getvfinfo); proto_tree_add_item(GetVFInfo_header_tree, hf_opa_GetVFInfo_vfName, tvb, local_offset, 64, ENC_ASCII | ENC_NA); local_offset += 64; proto_tree_add_item(GetVFInfo_header_tree, hf_opa_reserved64, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; local_offset = parse_Image(GetVFInfo_header_tree, tvb, &local_offset); proto_tree_add_item(GetVFInfo_header_tree, hf_opa_GetVFInfo_numPorts, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; /* UtilStats */ GetVFInfo_Util_Stats_tree = proto_tree_add_subtree(GetVFInfo_header_tree, tvb, local_offset, 40 + PM_UTIL_BUCKETS * 4, ett_getvfinfoutilstats, NULL, "Internal Utilization Statistics"); proto_tree_add_item(GetVFInfo_Util_Stats_tree, hf_opa_GetVFInfo_totalMBps, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetVFInfo_Util_Stats_tree, hf_opa_GetVFInfo_totalKPps, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetVFInfo_Util_Stats_tree, hf_opa_GetVFInfo_avgMBps, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetVFInfo_Util_Stats_tree, hf_opa_GetVFInfo_minMBps, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetVFInfo_Util_Stats_tree, hf_opa_GetVFInfo_maxMBps, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; GetVFInfo_Util_Stats_Buckets_item = proto_tree_add_item(GetVFInfo_Util_Stats_tree, hf_opa_GetVFInfo_numBWBuckets, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; GetVFInfo_Util_Stats_Buckets_tree = proto_item_add_subtree(GetVFInfo_Util_Stats_Buckets_item, ett_getvfinfoutilbuckets); for (i = 0; i < PM_UTIL_BUCKETS; i++) { GetVFInfo_Util_Stats_Bucket_item = proto_tree_add_item(GetVFInfo_Util_Stats_Buckets_tree, hf_opa_GetVFInfo_BWBuckets, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_item_set_text(GetVFInfo_Util_Stats_Bucket_item, "Bucket %u: %3u%%+: %u", i, i * util, tvb_get_ntohl(tvb, local_offset)); local_offset += 4; } proto_tree_add_item(GetVFInfo_Util_Stats_tree, hf_opa_GetVFInfo_avgKPps, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetVFInfo_Util_Stats_tree, hf_opa_GetVFInfo_minKPps, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetVFInfo_Util_Stats_tree, hf_opa_GetVFInfo_maxKPps, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetVFInfo_Util_Stats_tree, hf_opa_GetVFInfo_pmaFailedPorts, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(GetVFInfo_Util_Stats_tree, hf_opa_GetVFInfo_topoFailedPorts, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; /* ErrorStats */ GetVFInfo_Error_Summary_tree = proto_tree_add_subtree(GetVFInfo_header_tree, tvb, local_offset, 40 + PM_ERR_BUCKETS * 24, ett_getvfinfoerrorsummary, NULL, "Internal Error Statistics"); GetVFInfo_Error_Stats_Integrity_Buckets_item = proto_tree_add_item(GetVFInfo_Error_Summary_tree, hf_opa_GetVFInfo_integrityErrors, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; GetVFInfo_Error_Stats_Congestion_Buckets_item = proto_tree_add_item(GetVFInfo_Error_Summary_tree, hf_opa_GetVFInfo_congestionErrors, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; GetVFInfo_Error_Stats_SmaCongestion_Buckets_item = proto_tree_add_item(GetVFInfo_Error_Summary_tree, hf_opa_GetVFInfo_smaCongestionErrors, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; GetVFInfo_Error_Stats_Bubble_Buckets_item = proto_tree_add_item(GetVFInfo_Error_Summary_tree, hf_opa_GetVFInfo_bubbleErrors, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; GetVFInfo_Error_Stats_Security_Buckets_item = proto_tree_add_item(GetVFInfo_Error_Summary_tree, hf_opa_GetVFInfo_securityErrors, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; GetVFInfo_Error_Stats_Routing_Buckets_item = proto_tree_add_item(GetVFInfo_Error_Summary_tree, hf_opa_GetVFInfo_routingErrors, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetVFInfo_Error_Summary_tree, hf_opa_GetVFInfo_utilizationPct10, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(GetVFInfo_Error_Summary_tree, hf_opa_GetVFInfo_discardsPct10, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; proto_tree_add_item(GetVFInfo_Error_Summary_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetVFInfo_Error_Summary_tree, hf_opa_reserved64, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; GetVFInfo_Error_Integrity_Buckets_tree = proto_item_add_subtree(GetVFInfo_Error_Stats_Integrity_Buckets_item, ett_getvfinfoerrintegritybucket); GetVFInfo_Error_Congestion_Buckets_tree = proto_item_add_subtree(GetVFInfo_Error_Stats_Congestion_Buckets_item, ett_getvfinfoerrcongestionbucket); GetVFInfo_Error_SmaCongestion_Buckets_tree = proto_item_add_subtree(GetVFInfo_Error_Stats_SmaCongestion_Buckets_item, ett_getvfinfoerrsmacongestionbucket); GetVFInfo_Error_Bubble_Buckets_tree = proto_item_add_subtree(GetVFInfo_Error_Stats_Bubble_Buckets_item, ett_getvfinfoerrbubblebucket); GetVFInfo_Error_Security_Buckets_tree = proto_item_add_subtree(GetVFInfo_Error_Stats_Security_Buckets_item, ett_getvfinfoerrsecuritybucket); GetVFInfo_Error_Routing_Buckets_tree = proto_item_add_subtree(GetVFInfo_Error_Stats_Routing_Buckets_item, ett_getvfinfoerrroutingbucket); for (i = 0; i < PM_ERR_BUCKETS; i++) { GetVFInfo_Error_Stats_Bucket_item = proto_tree_add_item(GetVFInfo_Error_Integrity_Buckets_tree, hf_opa_GetVFInfo_BWBuckets, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_item_set_text(GetVFInfo_Error_Stats_Bucket_item, "Bucket %u: %3u%%+: %u", i, i * err, tvb_get_ntohl(tvb, local_offset)); local_offset += 4; GetVFInfo_Error_Stats_Bucket_item = proto_tree_add_item(GetVFInfo_Error_Congestion_Buckets_tree, hf_opa_GetVFInfo_BWBuckets, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_item_set_text(GetVFInfo_Error_Stats_Bucket_item, "Bucket %u: %3u%%+: %u", i, i * err, tvb_get_ntohl(tvb, local_offset)); local_offset += 4; GetVFInfo_Error_Stats_Bucket_item = proto_tree_add_item(GetVFInfo_Error_SmaCongestion_Buckets_tree, hf_opa_GetVFInfo_BWBuckets, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_item_set_text(GetVFInfo_Error_Stats_Bucket_item, "Bucket %u: %3u%%+: %u", i, i * err, tvb_get_ntohl(tvb, local_offset)); local_offset += 4; GetVFInfo_Error_Stats_Bucket_item = proto_tree_add_item(GetVFInfo_Error_Bubble_Buckets_tree, hf_opa_GetVFInfo_BWBuckets, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_item_set_text(GetVFInfo_Error_Stats_Bucket_item, "Bucket %u: %3u%%+: %u", i, i * err, tvb_get_ntohl(tvb, local_offset)); local_offset += 4; GetVFInfo_Error_Stats_Bucket_item = proto_tree_add_item(GetVFInfo_Error_Security_Buckets_tree, hf_opa_GetVFInfo_BWBuckets, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_item_set_text(GetVFInfo_Error_Stats_Bucket_item, "Bucket %u: %3u%%+: %u", i, i * err, tvb_get_ntohl(tvb, local_offset)); local_offset += 4; GetVFInfo_Error_Stats_Bucket_item = proto_tree_add_item(GetVFInfo_Error_Routing_Buckets_tree, hf_opa_GetVFInfo_BWBuckets, tvb, local_offset, 4, ENC_BIG_ENDIAN); proto_item_set_text(GetVFInfo_Error_Stats_Bucket_item, "Bucket %u: %3u%%+: %u", i, i * err, tvb_get_ntohl(tvb, local_offset)); local_offset += 4; } /* End internalErrors */ proto_tree_add_item(GetVFInfo_header_tree, hf_opa_GetVFInfo_maxInternalRate, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(GetVFInfo_header_tree, hf_opa_GetVFInfo_minInternalRate, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(GetVFInfo_header_tree, hf_opa_GetVFInfo_maxInternalMBps, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; } return local_offset; } /* Parse GetVFConfig MAD from the Performance Admin class. */ static gint parse_GetVFConfig(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD, RMPP_t *RMPP, PA_HEADER_t *PA_HEADER) { proto_tree *GetVFConfig_header_tree; proto_item *GetVFConfig_header_item; proto_item *GetVFConfig_Port_item; proto_tree *GetVFConfig_Port_tree; gint local_offset = *offset; guint i; guint length = tvb_captured_length_remaining(tvb, local_offset); guint records = (PA_HEADER->AttributeOffset ? length / (PA_HEADER->AttributeOffset * 8) : 0); if (!parentTree || (!pref_attempt_rmpp_defragment && RMPP->Type == RMPP_DATA && RMPP->SegmentNumber != 1)) return *offset; if (MAD->Method == METHOD_GET || MAD->Method == METHOD_GETTABLE) { GetVFConfig_header_item = proto_tree_add_item(parentTree, hf_opa_GetVFConfig, tvb, local_offset, 64 + 24, ENC_NA); proto_item_set_text(GetVFConfig_header_item, "VF Config"); GetVFConfig_header_tree = proto_item_add_subtree(GetVFConfig_header_item, ett_getvfconfig); proto_tree_add_item(GetVFConfig_header_tree, hf_opa_GetVFConfig_vfName, tvb, local_offset, 64, ENC_ASCII | ENC_NA); local_offset += 64; proto_tree_add_item(GetVFConfig_header_tree, hf_opa_reserved64, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; local_offset = parse_Image(GetVFConfig_header_tree, tvb, &local_offset); } else if (MAD->Method == METHOD_GETTABLE_RESP || MAD->Method == METHOD_GET_RESP) { GetVFConfig_header_item = proto_tree_add_item(parentTree, hf_opa_GetVFConfig, tvb, local_offset, records * PA_HEADER->AttributeOffset * 8, ENC_NA); proto_item_set_text(GetVFConfig_header_item, "VF Config"); GetVFConfig_header_tree = proto_item_add_subtree(GetVFConfig_header_item, ett_getvfconfig); for (i = 0; i < records; i++) { GetVFConfig_Port_tree = proto_tree_add_subtree_format(GetVFConfig_header_tree, tvb, local_offset, PA_HEADER->AttributeOffset * 8, ett_getvfconfigport, &GetVFConfig_Port_item, "%3u: ", i); local_offset = parse_Image(GetVFConfig_Port_tree, tvb, &local_offset); proto_tree_add_item(GetVFConfig_Port_tree, hf_opa_GetVFConfig_Port_NodeGUID, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetVFConfig_Port_tree, hf_opa_GetVFConfig_Port_nodeDesc, tvb, local_offset, 64, ENC_ASCII | ENC_NA); local_offset += 64; proto_item_append_text(GetVFConfig_Port_item, "LID: 0x%04x, Port: %u", tvb_get_ntohl(tvb, local_offset), tvb_get_guint8(tvb, local_offset + 4)); proto_tree_add_item(GetVFConfig_Port_tree, hf_opa_GetVFConfig_Port_NodeLID, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetVFConfig_Port_tree, hf_opa_GetVFConfig_Port_PortNumber, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(GetVFConfig_Port_tree, hf_opa_reserved24, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; } } return local_offset; } /* Parse GetVFPortCounters MAD from the Performance Admin class. */ static gint parse_GetVFPortCounters(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD) { proto_tree *GetVFPortCounters_header_tree; proto_item *GetVFPortCounters_header_item; gint local_offset = *offset; if (!parentTree) return *offset; GetVFPortCounters_header_item = proto_tree_add_item(parentTree, hf_opa_GetVFPortCounters, tvb, local_offset, 224, ENC_NA); GetVFPortCounters_header_tree = proto_item_add_subtree(GetVFPortCounters_header_item, ett_getvfportcounters); proto_tree_add_item(GetVFPortCounters_header_tree, hf_opa_GetVFPortCounters_nodeLID, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetVFPortCounters_header_tree, hf_opa_GetVFPortCounters_PortNumber, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(GetVFPortCounters_header_tree, hf_opa_reserved24, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; proto_tree_add_item(GetVFPortCounters_header_tree, hf_opa_GetVFPortCounters_flags, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetVFPortCounters_header_tree, hf_opa_reserved32, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetVFPortCounters_header_tree, hf_opa_reserved64, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetVFPortCounters_header_tree, hf_opa_GetVFPortCounters_vfName, tvb, local_offset, 64, ENC_ASCII | ENC_NA); local_offset += 64; proto_tree_add_item(GetVFPortCounters_header_tree, hf_opa_reserved64, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; local_offset = parse_Image(GetVFPortCounters_header_tree, tvb, &local_offset); if (MAD->Method == METHOD_GET_RESP || MAD->Method == METHOD_GETTABLE_RESP) { proto_tree_add_item(GetVFPortCounters_header_tree, hf_opa_GetVFPortCounters_PortVFXmitData, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetVFPortCounters_header_tree, hf_opa_GetVFPortCounters_PortVFRcvData, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetVFPortCounters_header_tree, hf_opa_GetVFPortCounters_PortVFXmitPkts, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetVFPortCounters_header_tree, hf_opa_GetVFPortCounters_PortVFRcvPkts, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetVFPortCounters_header_tree, hf_opa_GetVFPortCounters_PortVFXmitDiscards, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetVFPortCounters_header_tree, hf_opa_GetVFPortCounters_SwPortVFCongestion, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetVFPortCounters_header_tree, hf_opa_GetVFPortCounters_PortVFXmitWait, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetVFPortCounters_header_tree, hf_opa_GetVFPortCounters_PortVFRcvFECN, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetVFPortCounters_header_tree, hf_opa_GetVFPortCounters_PortVFRcvBECN, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetVFPortCounters_header_tree, hf_opa_GetVFPortCounters_PortVFXmitTimeCong, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetVFPortCounters_header_tree, hf_opa_GetVFPortCounters_PortVFXmitWastedBW, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetVFPortCounters_header_tree, hf_opa_GetVFPortCounters_PortVFXmitWaitData, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetVFPortCounters_header_tree, hf_opa_GetVFPortCounters_PortVFRcvBubble, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetVFPortCounters_header_tree, hf_opa_GetVFPortCounters_PortVFMarkFECN, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; } else { local_offset += 112; } return local_offset; } /* Parse ClearVFPortCounters MAD from the Performance Admin class. */ static gint parse_ClearVFPortCounters(proto_tree *parentTree, tvbuff_t *tvb, gint *offset) { proto_tree *ClearVFPortCounters_header_tree; proto_item *ClearVFPortCounters_header_item; gint local_offset = *offset; if (!parentTree) return *offset; ClearVFPortCounters_header_item = proto_tree_add_item(parentTree, hf_opa_ClearVFPortCounters, tvb, local_offset, 92, ENC_NA); ClearVFPortCounters_header_tree = proto_item_add_subtree(ClearVFPortCounters_header_item, ett_clearvfportcounters); proto_tree_add_item(ClearVFPortCounters_header_tree, hf_opa_ClearVFPortCounters_nodeLID, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(ClearVFPortCounters_header_tree, hf_opa_ClearVFPortCounters_PortNumber, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(ClearVFPortCounters_header_tree, hf_opa_reserved24, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; proto_tree_add_item(ClearVFPortCounters_header_tree, hf_opa_reserved64, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(ClearVFPortCounters_header_tree, hf_opa_ClearVFPortCounters_vfName, tvb, local_offset, 64, ENC_ASCII | ENC_NA); local_offset += 64; proto_tree_add_item(ClearVFPortCounters_header_tree, hf_opa_reserved64, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_bitmask(ClearVFPortCounters_header_tree, tvb, local_offset, hf_opa_ClearVFPortCounters_CounterSelectMask, ett_clearvfportcounters_counterselectmask, _ClearVFPortCounters_CounterSelectMask, ENC_BIG_ENDIAN); local_offset += 4; return local_offset; } /* Parse GetVFFocusPorts MAD from the Performance Admin class. */ static gint parse_GetVFFocusPorts(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD, RMPP_t *RMPP, PA_HEADER_t *PA_HEADER) { proto_tree *GetVFFocusPorts_header_tree; proto_item *GetVFFocusPorts_header_item; proto_tree *GetVFFocusPorts_Port_tree; gint local_offset = *offset; guint i; guint length = tvb_captured_length_remaining(tvb, local_offset); guint records = (PA_HEADER->AttributeOffset ? length / (PA_HEADER->AttributeOffset * 8) : 0); if (!parentTree || (!pref_attempt_rmpp_defragment && RMPP->Type == RMPP_DATA && RMPP->SegmentNumber != 1)) return *offset; if (MAD->Method == METHOD_GET || MAD->Method == METHOD_GETTABLE) { GetVFFocusPorts_header_item = proto_tree_add_item(parentTree, hf_opa_GetVFFocusPorts, tvb, local_offset, 130, ENC_NA); GetVFFocusPorts_header_tree = proto_item_add_subtree(GetVFFocusPorts_header_item, ett_getvffocusports); proto_tree_add_item(GetVFFocusPorts_header_tree, hf_opa_GetVFFocusPorts_vfName, tvb, local_offset, 64, ENC_ASCII | ENC_NA); local_offset += 64; proto_tree_add_item(GetVFFocusPorts_header_tree, hf_opa_reserved64, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; local_offset = parse_Image(GetVFFocusPorts_header_tree, tvb, &local_offset); proto_tree_add_item(GetVFFocusPorts_header_tree, hf_opa_GetVFFocusPorts_select, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetVFFocusPorts_header_tree, hf_opa_GetVFFocusPorts_start, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetVFFocusPorts_header_tree, hf_opa_GetVFFocusPorts_range, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; } else if (MAD->Method == METHOD_GET_RESP || MAD->Method == METHOD_GETTABLE_RESP) { GetVFFocusPorts_header_item = proto_tree_add_item(parentTree, hf_opa_GetVFFocusPorts, tvb, local_offset, records * PA_HEADER->AttributeOffset * 8, ENC_NA); GetVFFocusPorts_header_tree = proto_item_add_subtree(GetVFFocusPorts_header_item, ett_getvffocusports); for (i = 0; i < records; i++) { GetVFFocusPorts_Port_tree = proto_tree_add_subtree_format(GetVFFocusPorts_header_tree, tvb, local_offset, PA_HEADER->AttributeOffset * 8, ett_getvffocusportsport, NULL, "%3u: LID: 0x%04x, Port: %u", i, tvb_get_ntohl(tvb, local_offset), tvb_get_guint8(tvb, local_offset + 4)); proto_tree_add_item(GetVFFocusPorts_Port_tree, hf_opa_GetVFFocusPorts_nodeLID, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetVFFocusPorts_Port_tree, hf_opa_GetVFFocusPorts_portNumber, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(GetVFFocusPorts_Port_tree, hf_opa_GetVFFocusPorts_rate, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(GetVFFocusPorts_Port_tree, hf_opa_GetVFFocusPorts_mtu, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(GetVFFocusPorts_Port_tree, hf_opa_GetVFFocusPorts_localFlags, tvb, local_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(GetVFFocusPorts_Port_tree, hf_opa_GetVFFocusPorts_neighborFlags, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(GetVFFocusPorts_Port_tree, hf_opa_GetVFFocusPorts_value, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetVFFocusPorts_Port_tree, hf_opa_GetVFFocusPorts_nodeGUID, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetVFFocusPorts_Port_tree, hf_opa_GetVFFocusPorts_nodeDesc, tvb, local_offset, 64, ENC_ASCII | ENC_NA); local_offset += 64; proto_tree_add_item(GetVFFocusPorts_Port_tree, hf_opa_GetVFFocusPorts_neighborLid, tvb, local_offset, 4, ENC_BIG_ENDIAN); local_offset += 4; proto_tree_add_item(GetVFFocusPorts_Port_tree, hf_opa_GetVFFocusPorts_neighborPortNumber, tvb, local_offset, 1, ENC_BIG_ENDIAN); local_offset += 1; proto_tree_add_item(GetVFFocusPorts_Port_tree, hf_opa_reserved24, tvb, local_offset, 3, ENC_BIG_ENDIAN); local_offset += 3; proto_tree_add_item(GetVFFocusPorts_Port_tree, hf_opa_GetVFFocusPorts_neighborValue, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetVFFocusPorts_Port_tree, hf_opa_GetVFFocusPorts_neighborGuid, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; proto_tree_add_item(GetVFFocusPorts_Port_tree, hf_opa_GetVFFocusPorts_neighborNodeDesc, tvb, local_offset, 64, ENC_ASCII | ENC_NA); local_offset += 64; } } return local_offset; } static gboolean parse_PA_Attribute(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_t *MAD, RMPP_t *RMPP, PA_HEADER_t *PA_HEADER) { gint local_offset = *offset; switch (MAD->AttributeID) { case PA_ATTR_ID_CLASS_PORTINFO: local_offset = parse_ClassPortInfo(parentTree, tvb, &local_offset, MAD); break; case PA_ATTR_ID_GET_GRP_LIST: local_offset = parse_GetGroupList(parentTree, tvb, &local_offset, MAD, RMPP, PA_HEADER); break; case PA_ATTR_ID_GET_GRP_INFO: local_offset = parse_GetGroupInfo(parentTree, tvb, &local_offset, MAD, RMPP, PA_HEADER); break; case PA_ATTR_ID_GET_GRP_CFG: local_offset = parse_GetGroupConfig(parentTree, tvb, &local_offset, MAD, RMPP, PA_HEADER); break; case PA_ATTR_ID_GET_PORT_CTRS: local_offset = parse_GetPortCounters(parentTree, tvb, &local_offset, MAD); break; case PA_ATTR_ID_CLR_PORT_CTRS: local_offset = parse_ClearPortCounters(parentTree, tvb, &local_offset); break; case PA_ATTR_ID_CLR_ALL_PORT_CTRS: local_offset = parse_ClearAllPortCounters(parentTree, tvb, &local_offset); break; case PA_ATTR_ID_GET_PM_CFG: local_offset = parse_PMConfig(parentTree, tvb, &local_offset); break; case PA_ATTR_ID_FREEZE_IMAGE: local_offset = parse_Image(parentTree, tvb, &local_offset); break; case PA_ATTR_ID_RELEASE_IMAGE: local_offset = parse_Image(parentTree, tvb, &local_offset); break; case PA_ATTR_ID_RENEW_IMAGE: local_offset = parse_Image(parentTree, tvb, &local_offset); break; case PA_ATTR_ID_GET_FOCUS_PORTS: local_offset = parse_GetFocusPorts(parentTree, tvb, &local_offset, MAD, RMPP, PA_HEADER); break; case PA_ATTR_ID_GET_IMAGE_INFO: local_offset = parse_GetImageInfo(parentTree, tvb, &local_offset); break; case PA_ATTR_ID_MOVE_FREEZE_FRAME: local_offset = parse_MoveFreezeFrame(parentTree, tvb, &local_offset); break; case PA_ATTR_ID_GET_VF_LIST: local_offset = parse_GetVFList(parentTree, tvb, &local_offset, MAD, RMPP, PA_HEADER); break; case PA_ATTR_ID_GET_VF_INFO: local_offset = parse_GetVFInfo(parentTree, tvb, &local_offset, MAD, RMPP, PA_HEADER); break; case PA_ATTR_ID_GET_VF_CONFIG: local_offset = parse_GetVFConfig(parentTree, tvb, &local_offset, MAD, RMPP, PA_HEADER); break; case PA_ATTR_ID_GET_VF_PORT_CTRS: local_offset = parse_GetVFPortCounters(parentTree, tvb, &local_offset, MAD); break; case PA_ATTR_ID_CLR_VF_PORT_CTRS: local_offset = parse_ClearVFPortCounters(parentTree, tvb, &local_offset); break; case PA_ATTR_ID_GET_VF_FOCUS_PORTS: local_offset = parse_GetVFFocusPorts(parentTree, tvb, &local_offset, MAD, RMPP, PA_HEADER); break; default: return FALSE; } *offset = local_offset; return TRUE; } /* Parse the Method from the MAD Common Header. */ static void label_PA_Method(proto_item *PAItem, MAD_t *MAD, packet_info *pinfo) { const gchar *label = val_to_str_const(MAD->Method, PA_Methods, "(Unknown Perf Method!)"); proto_item_append_text(PAItem, " %s", label); col_append_str(pinfo->cinfo, COL_INFO, label); } /* Parse the Attribute from the MAD Common Header */ static void label_PA_Attribute(proto_item *PAItem, MAD_t *MAD, packet_info *pinfo) { const gchar *label = val_to_str_const(MAD->AttributeID, PA_Attributes, "Attribute (Unknown Perf Attribute!)"); proto_item_append_text(PAItem, "%s", &label[11]); col_append_str(pinfo->cinfo, COL_INFO, &label[11]); } /* Parse the PA_HEADER * IN: parentTree to add the dissection to * IN: tvb - the data buffer from wireshark * IN/OUT: The current and updated offset */ static gboolean parse_PA_HEADER(proto_tree *parentTree, packet_info *pinfo, tvbuff_t *tvb, gint *offset, MAD_t *MAD, PA_HEADER_t *PA_HEADER) { gint local_offset = *offset; proto_item *PA_HEADER_header_item; proto_tree *PA_HEADER_header_tree; PA_HEADER_header_item = proto_tree_add_item(parentTree, hf_opa_pa, tvb, local_offset, 20, ENC_NA); PA_HEADER_header_tree = proto_item_add_subtree(PA_HEADER_header_item, ett_pa); PA_HEADER->SM_Key = tvb_get_ntoh64(tvb, local_offset); proto_tree_add_item(PA_HEADER_header_tree, hf_opa_pa_sm_key, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; PA_HEADER->AttributeOffset = tvb_get_ntohs(tvb, local_offset); proto_tree_add_item(PA_HEADER_header_tree, hf_opa_pa_attribute_offset, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; PA_HEADER->Reserved = tvb_get_ntohs(tvb, local_offset); proto_tree_add_item(PA_HEADER_header_tree, hf_opa_reserved16, tvb, local_offset, 2, ENC_BIG_ENDIAN); local_offset += 2; PA_HEADER->ComponentMask = tvb_get_ntoh64(tvb, local_offset); proto_tree_add_item(PA_HEADER_header_tree, hf_opa_pa_component_mask, tvb, local_offset, 8, ENC_BIG_ENDIAN); local_offset += 8; label_PA_Method(PA_HEADER_header_item, MAD, pinfo); label_PA_Attribute(PA_HEADER_header_item, MAD, pinfo); *offset = local_offset; return TRUE; } /* Parse Performance Administration */ static void parse_PERFADMN(proto_tree *parentTree, packet_info *pinfo, tvbuff_t *tvb, gint *offset) { MAD_t MAD; RMPP_t RMPP; PA_HEADER_t PA_HEADER; fragment_head *frag_head = NULL; tvbuff_t *old_tvb = NULL; gint old_offset; gboolean parent_was_opa_fe = proto_is_frame_protocol(pinfo->layers, "opa.fe"); if (!parse_MAD_Common(parentTree, pinfo, tvb, offset, &MAD)) { return; } if (!parse_RMPP(parentTree, pinfo, tvb, offset, &RMPP)) { return; } if (!parse_PA_HEADER(parentTree, pinfo, tvb, offset, &MAD, &PA_HEADER)) { return; } if ((!pref_parse_on_mad_status_error && MAD.Status) || RMPP.Type == RMPP_ACK) { *offset += tvb_captured_length_remaining(tvb, *offset); return; } if (!parent_was_opa_fe && pref_attempt_rmpp_defragment && (RMPP.resptime_flags & RMPP_FLAG_ACTIVE_MASK) && (RMPP.Type == RMPP_DATA) && !((RMPP.resptime_flags & RMPP_FLAG_FIRST_MASK) && (RMPP.resptime_flags & RMPP_FLAG_LAST_MASK))) { frag_head = fragment_add_seq_check(&opa_mad_rmpp_reassembly_table, tvb, *offset, pinfo, (guint32)MAD.TransactionID, NULL, RMPP.SegmentNumber - 1, ((RMPP.resptime_flags & RMPP_FLAG_LAST_MASK) ? RMPP.PayloadLength - 20 : (guint32)tvb_captured_length_remaining(tvb, *offset)), (gboolean)!(RMPP.resptime_flags & RMPP_FLAG_LAST_MASK)); /* Back up tvb & offset */ old_tvb = tvb; old_offset = *offset; /* Create new tvb from reassembled data */ tvb = process_reassembled_data(old_tvb, old_offset, pinfo, "Reassembled RMPP Packet", frag_head, &opa_rmpp_frag_items, NULL, parentTree); if (tvb == NULL) { return; } *offset = 0; } if (!parse_PA_Attribute(parentTree, tvb, offset, &MAD, &RMPP, &PA_HEADER)) { expert_add_info_format(pinfo, NULL, &ei_opa_mad_no_attribute_dissector, "Attribute Dissector Not Implemented (0x%x)", MAD.AttributeID); *offset += tvb_captured_length_remaining(tvb, *offset); return; } } /* Parse Vendor Specific Management Packets */ /* TBD: Replace with dissector table to call other possible dissectors */ static void parse_VENDOR_MANAGEMENT(proto_tree *parentTree, packet_info *pinfo, tvbuff_t *tvb, gint *offset) { MAD_t MAD; RMPP_t RMPP; if (!parse_MAD_Common(parentTree, pinfo, tvb, offset, &MAD)) { return; } if (value_is_in_range(global_mad_vendor_class, MAD.MgmtClass)) { /* Vendor MAD 0x09 to 0x0F does NOT have an RMPP header */ } else if (value_is_in_range(global_mad_vendor_rmpp_class, MAD.MgmtClass)) { /* Vendor MAD 0x30 to 0x4F has an RMPP header */ if (!parse_RMPP(parentTree, pinfo, tvb, offset, &RMPP)) { return; } } if (!pref_parse_on_mad_status_error && MAD.Status) { *offset += tvb_captured_length_remaining(tvb, *offset); return; } proto_tree_add_item(parentTree, hf_opa_vendor, tvb, *offset, -1, ENC_NA); col_append_str(pinfo->cinfo, COL_INFO, "Vendor: (Dissector Not Implemented)"); expert_add_info_format(pinfo, NULL, &ei_opa_mad_no_attribute_dissector, "Attribute Dissector Not Implemented (0x%x)", MAD.AttributeID); *offset += tvb_captured_length_remaining(tvb, *offset); return; } /* Parse Application Specific Management Packets */ /* TBD: Replace with dissector table to call other possible dissectors */ static void parse_APPLICATION_MANAGEMENT(proto_tree *parentTree, packet_info *pinfo, tvbuff_t *tvb, gint *offset) { MAD_t MAD; if (!parse_MAD_Common(parentTree, pinfo, tvb, offset, &MAD)) { return; } if (!pref_parse_on_mad_status_error && MAD.Status) { *offset += tvb_captured_length_remaining(tvb, *offset); return; } proto_tree_add_item(parentTree, hf_opa_application, tvb, *offset, -1, ENC_NA); col_append_str(pinfo->cinfo, COL_INFO, "Application: (Dissector Not Implemented)"); expert_add_info_format(pinfo, NULL, &ei_opa_mad_no_attribute_dissector, "Attribute Dissector Not Implemented (0x%x)", MAD.AttributeID); *offset += tvb_captured_length_remaining(tvb, *offset); return; } /* Parse Reserved Management Packets --- ERROR */ static void parse_RESERVED_MANAGEMENT(proto_tree *parentTree, packet_info *pinfo, tvbuff_t *tvb, gint *offset) { MAD_t MAD; if (!parse_MAD_Common(parentTree, pinfo, tvb, offset, &MAD)) { return; } if (!pref_parse_on_mad_status_error && MAD.Status) { *offset += tvb_captured_length_remaining(tvb, *offset); return; } proto_tree_add_item(parentTree, hf_opa_reservedmclass, tvb, *offset, -1, ENC_NA); col_append_str(pinfo->cinfo, COL_INFO, "Reserved: (Dissector Not Implemented)"); expert_add_info_format(pinfo, NULL, &ei_opa_mad_no_attribute_dissector, "Attribute Dissector Not Implemented (0x%x)", MAD.AttributeID); *offset += tvb_captured_length_remaining(tvb, *offset); return; } /* Parse Unknown Management Packets --- WARNING */ /* TBD: Replace with dissector table to call other possible dissectors */ static void parse_UNKNOWN_MANAGEMENT(proto_tree *parentTree, packet_info *pinfo, tvbuff_t *tvb, gint *offset) { MAD_t MAD; if (!parse_MAD_Common(parentTree, pinfo, tvb, offset, &MAD)) { return; } if (!pref_parse_on_mad_status_error && MAD.Status) { *offset += tvb_captured_length_remaining(tvb, *offset); return; } proto_tree_add_item(parentTree, hf_opa_unknown, tvb, *offset, -1, ENC_NA); col_append_str(pinfo->cinfo, COL_INFO, "Unknown: (Dissector Not Implemented)"); expert_add_info_format(pinfo, NULL, &ei_opa_mad_no_attribute_dissector, "Attribute Dissector Not Implemented (0x%x)", MAD.AttributeID); *offset += tvb_captured_length_remaining(tvb, *offset); return; } /* Main OPA MAD dissector */ static int dissect_opa_mad(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) { gint offset = 0; /* Current Offset */ guint8 management_class; guint16 etype, reserved; dissector_handle_t dissector_found = NULL; gboolean parent_was_opa_fe = proto_is_frame_protocol(pinfo->layers, "opa.fe"); col_set_str(pinfo->cinfo, COL_PROTOCOL, "Omni-Path"); col_clear_fence(pinfo->cinfo, COL_INFO); /* management datagrams are determined by the source/destination QPs */ if (pinfo->srcport == 0 || pinfo->srcport == 1 || pinfo->destport == 0 || pinfo->destport == 1 || parent_was_opa_fe) { management_class = tvb_get_guint8(tvb, offset + 1); if (value_is_in_range(global_mad_vendor_class, management_class) || value_is_in_range(global_mad_vendor_rmpp_class, management_class)) { /* parse vendor specific */ parse_VENDOR_MANAGEMENT(tree, pinfo, tvb, &offset); } else if (value_is_in_range(global_mad_application_class, management_class)) { /* parse application specific */ parse_APPLICATION_MANAGEMENT(tree, pinfo, tvb, &offset); } else if (value_is_in_range(global_mad_reserved_class, management_class)) { /* parse reserved classes */ parse_RESERVED_MANAGEMENT(tree, pinfo, tvb, &offset); } else if (value_is_in_range(global_mad_opa_class, management_class)) { switch (management_class) { case SUBN_LID_ROUTED: /* parse subn man lid routed */ parse_SUBN_LID_ROUTED(tree, pinfo, tvb, &offset); break; case SUBN_DIRECTED_ROUTE: /* parse subn directed route */ parse_SUBN_DIRECTED_ROUTE(tree, pinfo, tvb, &offset); break; case SUBNADMN: /* parse sub admin */ parse_SUBNADMN(tree, pinfo, tvb, &offset); break; case PERFADMN: parse_PERFADMN(tree, pinfo, tvb, &offset); break; case PERF: /* parse performance */ parse_PERF(tree, pinfo, tvb, &offset); break; default: parse_UNKNOWN_MANAGEMENT(tree, pinfo, tvb, &offset); break; } } else { /* parse Unknown classes */ parse_UNKNOWN_MANAGEMENT(tree, pinfo, tvb, &offset); } } else { /* Normal Data Packet - Parse as such */ etype = tvb_get_ntohs(tvb, offset); reserved = tvb_get_ntohs(tvb, offset + 2); dissector_found = dissector_get_uint_handle(ethertype_dissector_table, etype); if (dissector_found != NULL && (reserved == 0)) { proto_tree_add_item(tree, hf_opa_etype, tvb, offset, 2, ENC_BIG_ENDIAN); offset += 2; proto_tree_add_item(tree, hf_opa_etype_reserved16, tvb, offset, 2, ENC_BIG_ENDIAN); offset += 2; call_dissector(dissector_found, tvb_new_subset_remaining(tvb, offset), pinfo, tree); } } return tvb_captured_length(tvb); } static void opa_mad_init(void) { reassembly_table_init(&opa_mad_rmpp_reassembly_table, &addresses_ports_reassembly_table_functions); } static void opa_mad_cleanup(void) { reassembly_table_destroy(&opa_mad_rmpp_reassembly_table); } void proto_register_opa_mad(void) { module_t *opa_mad_module; expert_module_t *expert_opa_mad; static hf_register_info hf[] = { { &hf_opa_reserved64, { "Reserved (64 bits)", "opa.reserved64", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_reserved32, { "Reserved (32 bits)", "opa.reserved", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_reserved24, { "Reserved (24 bits)", "opa.reserved", FT_UINT24, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_reserved16, { "Reserved (16 bits)", "opa.reserved", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_reserved8, { "Reserved (8 bits)", "opa.reserved", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* Omni-Path*/ { &hf_opa_etype, { "Ethertype", "opa.etype", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_etype_reserved16, { "Reserved (16 bits)", "opa.etype.reserved", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, /* SM - Lid Routed*/ { &hf_opa_sm_lid, { "Subnet Management (LID Routed)", "opa.sm.lid", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_sm_m_key, { "M_Key", "opa.sm.lid.mkey", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* SM - Directed Route */ { &hf_opa_sm_dr, { "Subnet Management (Directed Route)", "opa.sm.dr", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_sm_dr_slid, { "DrSLID", "opa.sm.dr.slid", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_sm_dr_dlid, { "DrDLID", "opa.sm.dr.dlid", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_sm_dr_initial_path, { "Initial Path", "opa.sm.dr.initialpath", FT_BYTES, SEP_SPACE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_sm_dr_return_path, { "Return Path", "opa.sm.dr.returnpath", FT_BYTES, SEP_SPACE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_sm_dr_reserved64, { "Reserved (64 bits)", "opa.sm.dr.reserved", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* SA MAD Header */ { &hf_opa_sa, { "Subnet Administration Header", "opa.sa", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_sa_sm_key, { "SM_Key (Verification Key)", "opa.sa.smkey", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_sa_attribute_offset, { "Attribute Offset", "opa.sa.attributeoffset", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_sa_component_mask, { "Component Mask", "opa.sa.componentmask", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* PM MAD Header */ { &hf_opa_pm, { "Performance Management", "opa.pm", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, /* PA MAD Header */ { &hf_opa_pa, { "Performance Administration Header", "opa.pa", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_pa_sm_key, { "SM_Key (Verification Key)", "opa.pa.smkey", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_pa_attribute_offset, { "Attribute Offset", "opa.pa.attributeoffset", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_pa_component_mask, { "Component Mask", "opa.pa.componentmask", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* Other MAD Headers */ { &hf_opa_vendor, { "Vendor MAD Header", "opa.vendor", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_application, { "Application MAD Header", "opa.application", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_reservedmclass, { "Reserved MAD Header", "opa.reservedmclass", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_unknown, { "Unknown MAD Header", "opa.unknown", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, /* MAD Header */ { &hf_opa_mad, { "MAD Header - Common Management Datagram", "opa.mad.header", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_mad_base_version, { "Base Version", "opa.mad.baseversion", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_mad_mgmt_class, { "Management Class", "opa.mad.mgmtclass", FT_UINT8, BASE_HEX | BASE_EXT_STRING, &MAD_mgmt_names_ext, 0x0, NULL, HFILL } }, { &hf_opa_mad_class_version, { "Class Version", "opa.mad.classversion", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_mad_method, { "Method", "opa.mad.method", FT_UINT8, BASE_HEX, VALS(Methods), 0x0, NULL, HFILL } }, { &hf_opa_mad_status, { "Status", "opa.mad.status", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_mad_status_DR_D, { "Direction", "opa.mad.dr.direction", FT_UINT16, BASE_HEX, NULL, 0x8000, NULL, HFILL } }, { &hf_opa_mad_status_DR_status, { "Status", "opa.mad.status", FT_UINT16, BASE_HEX, NULL, 0x7FFF, NULL, HFILL } }, { &hf_opa_mad_status_DR_Hop_Pointer, { "Hop Pointer", "opa.mad.dr.hoppointer", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_mad_status_DR_Hop_Count, { "Hop Counter", "opa.mad.dr.hopcounter", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_mad_status_NM_ClassSpecific, { "Class Specific", "opa.mad.status.classspecific", FT_UINT16, BASE_HEX, NULL, 0xFF00, NULL, HFILL } }, { &hf_opa_mad_status_NM_reserved1, { "Reserved (3 Bits)", "opa.mad.status.reserved", FT_UINT16, BASE_HEX, NULL, 0x00E0, NULL, HFILL } }, { &hf_opa_mad_status_NM_InvalidField, { "Invalid Field", "opa.mad.status.invalidfield", FT_UINT16, BASE_HEX, VALS(MAD_Status_InvalidField), 0x001C, NULL, HFILL } }, { &hf_opa_mad_status_NM_RedirectRqrd, { "Redirect Required", "opa.mad.status.redirectrqrd", FT_BOOLEAN, 16, TFS(&tfs_redirect_no_redirect), 0x0002, NULL, HFILL } }, { &hf_opa_mad_status_NM_Busy, { "Busy", "opa.mad.status.busy", FT_BOOLEAN, 16, TFS(&tfs_busy_not_busy), 0x0001, NULL, HFILL } }, { &hf_opa_mad_transaction_id, { "Transaction ID", "opa.mad.transactionid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_mad_attribute_id, { "Attribute ID", "opa.mad.attributeid", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* MAD Header - Attribute Modifier */ { &hf_opa_attribute_modifier, { "Attribute Modifier", "opa.mad.attributemodifier", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_attribute_modifier_A, { "All", "opa.mad.attributemodifier.a", FT_BOOLEAN, 32, NULL, 0x00000100, NULL, HFILL } }, { &hf_opa_attribute_modifier_A2, { "All Ingress Ports", "opa.mad.attributemodifier.a2", FT_BOOLEAN, 32, NULL, 0x00020000, NULL, HFILL } }, { &hf_opa_attribute_modifier_A3, { "All", "opa.mad.attributemodifier.a3", FT_BOOLEAN, 32, NULL, 0x00040000, NULL, HFILL } }, { &hf_opa_attribute_modifier_A4, { "All", "opa.mad.attributemodifier.a4", FT_BOOLEAN, 32, NULL, 0x00100000, NULL, HFILL } }, { &hf_opa_attribute_modifier_A5, { "Starting Address", "opa.mad.attributemodifier.a5", FT_UINT32, BASE_HEX, NULL, 0x7FF80000, NULL, HFILL } }, { &hf_opa_attribute_modifier_A6, { "All", "opa.mad.attributemodifier.a6", FT_BOOLEAN, 32, NULL, 0x00000020, NULL, HFILL } }, { &hf_opa_attribute_modifier_B, { "Block Number", "opa.mad.attributemodifier.b", FT_UINT32, BASE_DEC, NULL, 0x000007FF, NULL, HFILL } }, { &hf_opa_attribute_modifier_B2, { "All Egress Ports", "opa.mad.attributemodifier.b2", FT_BOOLEAN, 32, NULL, 0x00010000, NULL, HFILL } }, { &hf_opa_attribute_modifier_B3, { "Block Number", "opa.mad.attributemodifier.b3", FT_UINT32, BASE_DEC, NULL, 0x0003FFFF, NULL, HFILL } }, { &hf_opa_attribute_modifier_B4, { "Block Number", "opa.mad.attributemodifier.b4", FT_UINT32, BASE_DEC, NULL, 0x000FFFFF, NULL, HFILL } }, { &hf_opa_attribute_modifier_B5, { "Block Number", "opa.mad.attributemodifier.b5", FT_UINT32, BASE_DEC, NULL, 0x0000001F, NULL, HFILL } }, { &hf_opa_attribute_modifier_E, { "Egress Ports", "opa.mad.attributemodifier.e", FT_UINT32, BASE_DEC, NULL, 0x000000FF, NULL, HFILL } }, { &hf_opa_attribute_modifier_I, { "Ingress Ports", "opa.mad.attributemodifier.i", FT_UINT32, BASE_DEC, NULL, 0x0000FF00, NULL, HFILL } }, { &hf_opa_attribute_modifier_L, { "Length", "opa.mad.attributemodifier.l", FT_UINT32, BASE_DEC, NULL, 0x0007E000, NULL, HFILL } }, { &hf_opa_attribute_modifier_NP, { "Number of Ports", "opa.mad.attributemodifier.n", FT_UINT32, BASE_DEC, NULL, 0xFF000000, NULL, HFILL } }, { &hf_opa_attribute_modifier_NB, { "Number of Blocks", "opa.mad.attributemodifier.n", FT_UINT32, BASE_DEC, NULL, 0xFF000000, NULL, HFILL } }, { &hf_opa_attribute_modifier_N2, { "Number of aggregated Attributes", "opa.mad.attributemodifier.n", FT_UINT32, BASE_DEC, NULL, 0x000000FF, NULL, HFILL } }, { &hf_opa_attribute_modifier_P, { "Port Number", "opa.mad.attributemodifier.p", FT_UINT32, BASE_DEC, NULL, 0x000000FF, NULL, HFILL } }, { &hf_opa_attribute_modifier_P2, { "Port Number", "opa.mad.attributemodifier.p", FT_UINT32, BASE_DEC, NULL, 0x00FF0000, NULL, HFILL } }, { &hf_opa_attribute_modifier_P3, { "Position", "opa.mad.attributemodifier.p", FT_UINT32, BASE_DEC, NULL, 0x00C00000, NULL, HFILL } }, { &hf_opa_attribute_modifier_S, { "Section of Table", "opa.mad.attributemodifier.s", FT_UINT32, BASE_DEC, VALS(MADAttrModSectionVLarb), 0x00FF0000, NULL, HFILL } }, { &hf_opa_attribute_modifier_S2, { "Start of SM Configuration", "opa.mad.attributemodifier.s2", FT_BOOLEAN, 32, NULL, 0x00000200, NULL, HFILL } }, { &hf_opa_attribute_modifier_Y, { "Asynchronous update", "opa.mad.attributemodifier.y", FT_BOOLEAN, 32, NULL, 0x00001000, NULL, HFILL } }, /* RMPP Header */ { &hf_opa_rmpp, { "RMPP - Reliable Multi-Packet Transaction Protocol", "opa.rmpp", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_rmpp_version, { "RMPP Version", "opa.rmpp.rmppversion", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_rmpp_type, { "RMPP Type", "opa.rmpp.rmpptype", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_rmpp_r_resp_time, { "R Resp Time", "opa.rmpp.rresptime", FT_UINT8, BASE_HEX, NULL, 0xF8, NULL, HFILL } }, { &hf_opa_rmpp_flags_last, { "Last", "opa.rmpp.flags.last", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL } }, { &hf_opa_rmpp_flags_first, { "First", "opa.rmpp.flags.first", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL } }, { &hf_opa_rmpp_flags_active, { "Active", "opa.rmpp.flags.active", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL } }, { &hf_opa_rmpp_status, { "RMPP Status", "opa.rmpp.rmppstatus", FT_UINT8, BASE_HEX, VALS(RMPP_Status), 0xFF, NULL, HFILL } }, { &hf_opa_rmpp_data1, { "RMPP Data 1", "opa.rmpp.data1", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_rmpp_data2, { "RMPP Data 2", "opa.rmpp.data2", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* RMPP Data */ { &hf_opa_rmpp_segment_number, { "Segment Number", "opa.rmpp.segmentnumber", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_rmpp_payload_length32, { "Payload Length", "opa.rmpp.payloadlength", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* RMPP ACK */ { &hf_opa_rmpp_new_window_last, { "New Window Last", "opa.rmpp.newwindowlast", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* Fragments */ { &hf_opa_rmpp_fragments, { "Message fragments", "opa.fragments", FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL } }, { &hf_opa_rmpp_fragment, { "Message fragment", "opa.fragment", FT_FRAMENUM, BASE_NONE, NULL, 0x00, NULL, HFILL } }, { &hf_opa_rmpp_fragment_overlap, { "Message fragment overlap", "opa.fragment.overlap", FT_BOOLEAN, 0, NULL, 0x00, NULL, HFILL } }, { &hf_opa_rmpp_fragment_overlap_conflicts, { "Message fragment overlapping with conflicting data", "opa.fragment.overlap.conflicts", FT_BOOLEAN, 0, NULL, 0x00, NULL, HFILL } }, { &hf_opa_rmpp_fragment_multiple_tails, { "Message has multiple tail fragments", "opa.fragment.multiple_tails", FT_BOOLEAN, 0, NULL, 0x00, NULL, HFILL } }, { &hf_opa_rmpp_fragment_too_long_fragment, { "Message fragment too long", "opa.fragment.too_long_fragment", FT_BOOLEAN, 0, NULL, 0x00, NULL, HFILL } }, { &hf_opa_rmpp_fragment_error, { "Message defragmentation error", "opa.fragment.error", FT_FRAMENUM, BASE_NONE, NULL, 0x00, NULL, HFILL } }, { &hf_opa_rmpp_fragment_count, { "Message fragment count", "opa.fragment.count", FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } }, { &hf_opa_rmpp_reassembled_in, { "Reassembled in", "opa.reassembled.in", FT_FRAMENUM, BASE_NONE, NULL, 0x00, NULL, HFILL } }, { &hf_opa_rmpp_reassembled_length, { "Reassembled length", "opa.reassembled.length", FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } }, /* SA Packet */ /* SA RID */ { &hf_opa_sa_Lid, { "LID", "opa.sa.lid", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_sa_Port, { "Port", "opa.sa.port", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_sa_EndportLID, { "EndportLID", "opa.sa.endportlid", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_sa_PortNum, { "PortNum", "opa.sa.portnum", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_sa_InputPortNum, { "InputPortNum", "opa.sa.inputportnum", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_sa_OutputPortNum, { "OutputPortNum", "opa.sa.outputportnum", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_sa_reserved14, { "Reserved (14 bits)", "opa.sa.reserved", FT_UINT32, BASE_HEX, NULL, 0xFFFC0000, NULL, HFILL } }, { &hf_opa_sa_BlockNum_18b, { "BlockNum", "opa.sa.blocknum", FT_UINT32, BASE_HEX, NULL, 0x0003FFFF, NULL, HFILL } }, { &hf_opa_sa_Position, { "Position", "opa.sa.position", FT_UINT32, BASE_HEX, NULL, 0xC0000000, NULL, HFILL } }, { &hf_opa_sa_Position_16b, { "Position", "opa.sa.position", FT_UINT16, BASE_HEX, NULL, 0xC000, NULL, HFILL } }, { &hf_opa_sa_reserved9, { "Reserved (9 bits)", "opa.sa.reserved", FT_UINT32, BASE_HEX, NULL, 0x3FE00000, NULL, HFILL } }, { &hf_opa_sa_reserved9_16b, { "Reserved (9 bits)", "opa.sa.reserved", FT_UINT16, BASE_HEX, NULL, 0x3FE0, NULL, HFILL } }, { &hf_opa_sa_BlockNum_21b, { "BlockNum", "opa.sa.blocknum", FT_UINT32, BASE_HEX, NULL, 0x001FFFFF, NULL, HFILL } }, { &hf_opa_sa_BlockNum_8b, { "BlockNum", "opa.sa.blocknum", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_sa_BlockNum_16b, { "BlockNum", "opa.sa.blocknum", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_sa_BlockNum_5b, { "BlockNum", "opa.sa.blocknum", FT_UINT16, BASE_HEX, NULL, 0x001F, NULL, HFILL } }, { &hf_opa_sa_SubscriberLID, { "SubscriberGID", "opa.sa.subscribergid", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_sa_Enum, { "Enum", "opa.sa.enum", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_sa_FromLID, { "FromLID", "opa.sa.fromlid", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_sa_FromPort, { "FromPort", "opa.sa.fromport", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_sa_ServiceID, { "ServiceID", "opa.sa.serviceid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_sa_ServiceLID, { "ServiceLID", "opa.sa.servicelid", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_sa_ServiceP_Key, { "ServiceP_Key", "opa.sa.servicep_key", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_sa_ServiceGID, { "ServiceGID", "opa.sa.servicegid", FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_sa_MGID, { "MGID", "opa.sa.mgid", FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_sa_PortGID, { "PortGID", "opa.sa.portgid", FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL } }, /* Notice */ { &hf_opa_Notice, { "Notice", "opa.notice", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_Notice_IsGeneric, { "IsGeneric", "opa.notice.isgeneric", FT_UINT8, BASE_HEX, NULL, 0x80, NULL, HFILL } }, { &hf_opa_Notice_Type, { "Type", "opa.notice.type", FT_UINT8, BASE_HEX, VALS(NoticeType), 0x7F, NULL, HFILL } }, { &hf_opa_Notice_ProducerType, { "ProducerType", "opa.notice.producertype", FT_UINT24, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_Notice_TrapNumber, { "TrapNumber", "opa.notice.trapnumber", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_Notice_VendorID, { "VendorID", "opa.notice.vendorid", FT_UINT24, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_Notice_DeviceID, { "DeviceID", "opa.notice.deviceid", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_Notice_Toggle, { "Toggle", "opa.notice.toggle", FT_UINT8, BASE_HEX, NULL, 0x80, NULL, HFILL } }, { &hf_opa_Notice_Count, { "Count", "opa.notice.count", FT_UINT16, BASE_HEX, NULL, 0x7FFF, NULL, HFILL } }, { &hf_opa_Notice_IssuerLID, { "IssuerLID", "opa.notice.issuerlid", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_Notice_IssuerGID, { "IssuerGID", "opa.notice.issuergid", FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_Notice_ClassDataDetails, { "ClassDataDetails", "opa.notice.classdatadetails", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, /* Trap */ { &hf_opa_Trap, { "Trap", "opa.trap", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, /* Traps 64,65,66,67 */ { &hf_opa_Trap_GID, { "GID", "opa.trap.gid", FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL } }, /* Traps 68,69 */ /* Trap 128 */ { &hf_opa_Trap_LID, { "LIDADDR", "opa.trap.lidaddr", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* Trap 129, 130, 131 */ { &hf_opa_Trap_PORTNO, { "PORTNO", "opa.trap.portno", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* Trap 144 */ { &hf_opa_Trap_CAPABILITYMASK, { "CapabilityMask", "opa.trap.capabilitymask", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_Trap_CAPABILITYMASK3, { "CapabilityMask3", "opa.trap.capabilitymask3", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_Trap_144_reserved, { "Reserved (4 bits)", "opa.trap.144.reserved", FT_UINT8, BASE_HEX, NULL, 0xF0, NULL, HFILL } }, { &hf_opa_Trap_LinkWidthDowngradeEnabledChange, { "LinkWidthDowngradeEnabledChange", "opa.trap.linkwidthdowngradeenabledchange", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL } }, { &hf_opa_Trap_LinkSpeecEnabledChange, { "LinkSpeecEnabledChange", "opa.trap.linkspeecenabledchange", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL } }, { &hf_opa_Trap_LinkWidthEnabledChange, { "LinkWidthEnabledChange", "opa.trap.linkwidthenabledchange", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL } }, { &hf_opa_Trap_NodeDescriptionChange, { "NodeDescriptionChange", "opa.trap.nodedescriptionchange", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL } }, /* Trap 145 */ { &hf_opa_Trap_SystemImageGUID, { "SystemImageGUID", "opa.trap.systemimageguid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* Trap 256 */ { &hf_opa_Trap_DRSLID, { "DR SLID", "opa.trap.drslid", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_Trap_Method, { "Method", "opa.trap.method", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_Trap_AttributeID, { "AttributeID", "opa.trap.attributeid", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_Trap_AttributeModifier, { "AttributeModifier", "opa.trap.attributemodifier", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_Trap_MKey, { "MKey", "opa.trap.mkey", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_Trap_DRNotice, { "DRNotice", "opa.trap.drnotice", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL } }, { &hf_opa_Trap_DRPathTruncated, { "DRPathTruncated", "opa.trap.drpathtruncated", FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL } }, { &hf_opa_Trap_DRHopCount, { "DRHopCount", "opa.trap.drhopcount", FT_UINT8, BASE_HEX, NULL, 0x3F, NULL, HFILL } }, { &hf_opa_Trap_DRNoticeReturnPath, { "DRNoticeReturnPath", "opa.trap.drnoticereturnpath", FT_BYTES, SEP_SPACE, NULL, 0x0, NULL, HFILL } }, /* Trap 257, 258 */ { &hf_opa_Trap_Key, { "Key", "opa.trap.key", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_Trap_SL, { "SL", "opa.trap.sl", FT_UINT8, BASE_HEX, NULL, 0xF8, NULL, HFILL } }, { &hf_opa_Trap_SL_reserved, { "Reserved (3 bits)", "opa.trap.sl.reserved", FT_UINT8, BASE_HEX, NULL, 0x07, NULL, HFILL } }, { &hf_opa_Trap_QP, { "QP", "opa.trap.qp", FT_UINT24, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* Trap 259 */ { &hf_opa_Trap_DataValid, { "DataValid", "opa.trap.datavalid", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_Trap_DataValid_Lid1, { "Lid1", "opa.trap.datavalid.lid1", FT_BOOLEAN, 16, TFS(&tfs_valid_invalid), 0x8000, NULL, HFILL } }, { &hf_opa_Trap_DataValid_Lid2, { "Lid2", "opa.trap.datavalid.lid2", FT_BOOLEAN, 16, TFS(&tfs_valid_invalid), 0x4000, NULL, HFILL } }, { &hf_opa_Trap_DataValid_PKey, { "PKey", "opa.trap.datavalid.pkey", FT_BOOLEAN, 16, TFS(&tfs_valid_invalid), 0x2000, NULL, HFILL } }, { &hf_opa_Trap_DataValid_SL, { "SL", "opa.trap.datavalid.sl", FT_BOOLEAN, 16, TFS(&tfs_valid_invalid), 0x1000, NULL, HFILL } }, { &hf_opa_Trap_DataValid_QP1, { "QP1", "opa.trap.datavalid.qp1", FT_BOOLEAN, 16, TFS(&tfs_valid_invalid), 0x0800, NULL, HFILL } }, { &hf_opa_Trap_DataValid_QP2, { "QP2", "opa.trap.datavalid.qp2", FT_BOOLEAN, 16, TFS(&tfs_valid_invalid), 0x0400, NULL, HFILL } }, { &hf_opa_Trap_DataValid_Gid1, { "Gid1", "opa.trap.datavalid.gid1", FT_BOOLEAN, 16, TFS(&tfs_valid_invalid), 0x0200, NULL, HFILL } }, { &hf_opa_Trap_DataValid_Gid2, { "Gid2", "opa.trap.datavalid.gid2", FT_BOOLEAN, 16, TFS(&tfs_valid_invalid), 0x0100, NULL, HFILL } }, { &hf_opa_Trap_DataValid_Reserved, { "DataValid", "opa.trap.datavalid.reserved", FT_UINT16, BASE_HEX, NULL, 0x00FF, NULL, HFILL } }, { &hf_opa_Trap_PKey, { "PKey", "opa.trap.pkey", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* ClassPortInfo in Performance class */ { &hf_opa_ClassPortInfo, { "ClassPortInfo", "opa.classportinfo", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ClassPortInfo_BaseVersion, { "BaseVersion", "opa.clasportinfo.baseversion", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ClassPortInfo_ClassVersion, { "ClassVersion", "opa.clasportinfo.classversion", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ClassPortInfo_CapMask, { "CapMask", "opa.clasportinfo.capmask", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ClassPortInfo_CapMask2, { "CapMask2", "opa.clasportinfo.capmask2", FT_UINT32, BASE_HEX, NULL, 0xFFFFFFE0, NULL, HFILL } }, { &hf_opa_ClassPortInfo_RespTimeValue, { "RespTimeValue", "opa.clasportinfo.resptimevalue", FT_UINT32, BASE_HEX, NULL, 0x0000001F, NULL, HFILL } }, { &hf_opa_ClassPortInfo_Redirect_GID, { "GID", "opa.clasportinfo.redirect.gid", FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ClassPortInfo_Redirect_TClass, { "TClass", "opa.clasportinfo.redirect.tclass", FT_UINT8, BASE_HEX, NULL, 0x80, NULL, HFILL } }, { &hf_opa_ClassPortInfo_Redirect_reserved, { "Reserved (4 bits)", "opa.clasportinfo.redirect.reserved", FT_UINT24, BASE_HEX, NULL, 0xF00000, NULL, HFILL } }, { &hf_opa_ClassPortInfo_Redirect_FlowLabel, { "FlowLabel", "opa.clasportinfo.redirect.flowlabel", FT_UINT24, BASE_HEX, NULL, 0x0FFFFF, NULL, HFILL } }, { &hf_opa_ClassPortInfo_Redirect_LID, { "LID", "opa.clasportinfo.redirect.lid", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ClassPortInfo_Redirect_SL, { "SL", "opa.clasportinfo.redirect.sl", FT_UINT8, BASE_HEX, NULL, 0xF8, NULL, HFILL } }, { &hf_opa_ClassPortInfo_Redirect_reserved2, { "Reserved (3 bits)", "opa.clasportinfo.redirect.reserved", FT_UINT8, BASE_HEX, NULL, 0x07, NULL, HFILL } }, { &hf_opa_ClassPortInfo_Redirect_QP, { "QP", "opa.clasportinfo.redirect.qp", FT_UINT24, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ClassPortInfo_Redirect_Q_Key, { "Q_Key", "opa.clasportinfo.redirect.q_key", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ClassPortInfo_Trap_GID, { "GID", "opa.clasportinfo.trap.gid", FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ClassPortInfo_Trap_TClass, { "TClass", "opa.clasportinfo.trap.tclass", FT_UINT8, BASE_HEX, NULL, 0x80, NULL, HFILL } }, { &hf_opa_ClassPortInfo_Trap_reserved, { "Reserved (4 bits)", "opa.clasportinfo.trap.reserved", FT_UINT24, BASE_HEX, NULL, 0xF00000, NULL, HFILL } }, { &hf_opa_ClassPortInfo_Trap_FlowLabel, { "FlowLabel", "opa.clasportinfo.trap.flowlabel", FT_UINT24, BASE_HEX, NULL, 0x0FFFFF, NULL, HFILL } }, { &hf_opa_ClassPortInfo_Trap_LID, { "LID", "opa.clasportinfo.trap.lid", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ClassPortInfo_Trap_HopLimit, { "HopLimit", "opa.clasportinfo.trap.hoplimit", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ClassPortInfo_Trap_QP, { "QP", "opa.clasportinfo.trap.qp", FT_UINT24, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ClassPortInfo_Trap_Q_Key, { "Q_Key", "opa.clasportinfo.trap.q_key", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ClassPortInfo_Trap_P_Key, { "P_Key", "opa.clasportinfo.trap.p_key", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ClassPortInfo_Redirect_P_Key, { "P_Key", "opa.clasportinfo.redirect.p_key", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ClassPortInfo_Trap_SL, { "SL", "opa.clasportinfo.trap.sl", FT_UINT8, BASE_HEX, NULL, 0xF8, NULL, HFILL } }, { &hf_opa_ClassPortInfo_Trap_reserved2, { "Reserved (3 bits)", "opa.clasportinfo.trap.reserved", FT_UINT8, BASE_HEX, NULL, 0x07, NULL, HFILL } }, /******************* * NodeDescription * *******************/ { &hf_opa_NodeDescription, { "NodeDescription", "opa.nodedescription", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_NodeDescription_NodeString, { "NodeString", "opa.nodedescription.nodestring", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, /************ * NodeInfo * ************/ { &hf_opa_NodeInfo, { "Node Info", "opa.nodeinfo", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_NodeInfo_BaseVersion, { "Base Version", "opa.nodeinfo.baseversion", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_NodeInfo_ClassVersion, { "Class Version", "opa.nodeinfo.classversion", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_NodeInfo_NodeType, { "Node Type", "opa.nodeinfo.nodetype", FT_UINT8, BASE_HEX, VALS(NodeType), 0x0, NULL, HFILL } }, { &hf_opa_NodeInfo_NumPorts, { "Num Ports", "opa.nodeinfo.numports", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_NodeInfo_SystemImageGUID, { "System Image GUID", "opa.nodeinfo.systemimageguid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_NodeInfo_NodeGUID, { "Node GUID", "opa.nodeinfo.nodeguid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_NodeInfo_PortGUID, { "Port GUID", "opa.nodeinfo.portguid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_NodeInfo_PartitionCap, { "Partition Cap", "opa.nodeinfo.partitioncap", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_NodeInfo_DeviceID, { "Device ID", "opa.nodeinfo.deviceid", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_NodeInfo_Revision, { "Revision", "opa.nodeinfo.revision", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_NodeInfo_LocalPortNum, { "Local Port Num", "opa.nodeinfo.localportnum", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_NodeInfo_VendorID, { "Vendor ID", "opa.nodeinfo.vendorid", FT_UINT24, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /************** * SwitchInfo * **************/ { &hf_opa_SwitchInfo, { "Switch Info", "opa.switchinfo", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_SwitchInfo_LinearFDBCap, { "Linear FDB Cap", "opa.switchinfo.linearfdbcap", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_SwitchInfo_MulticastFDBCap, { "Multicast FDB Cap", "opa.switchinfo.multicastfdbcap", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_SwitchInfo_LinearFDBTop, { "Linear FDB Top", "opa.switchinfo.linearfdbtop", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_SwitchInfo_MulticastFDBTop, { "Multicast FDB Top", "opa.switchinfo.multicastfdbtop", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_SwitchInfo_CollectiveCap, { "Collective Cap", "opa.switchinfo.collectivecap", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_SwitchInfo_CollectiveTop, { "Collective Top", "opa.switchinfo.collectivetop", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_SwitchInfo_IPAddrIPv6, { "IP Addr IPv6", "opa.switchinfo.ipaddripv6", FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_SwitchInfo_IPAddrIPv4, { "IP Addr IPv4", "opa.switchinfo.ipaddripv4", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_SwitchInfo_LifeTimeValue, { "Life Time Value", "opa.switchinfo.lifetimevalue", FT_UINT8, BASE_HEX, NULL, 0xF8, NULL, HFILL } }, { &hf_opa_SwitchInfo_PortStateChange, { "Port State Change", "opa.switchinfo.portstatechange", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL } }, { &hf_opa_SwitchInfo_reserved2, { "Reserved (2 bits)", "opa.switchinfo.reserved2", FT_UINT8, BASE_HEX, NULL, 0x03, NULL, HFILL } }, { &hf_opa_SwitchInfo_PartitionEnforcementCap, { "Partition Enforcement Cap", "opa.switchinfo.partitionenforcementcap", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_SwitchInfo_PortGroupCap, { "Port Group Cap", "opa.switchinfo.portgroupcap", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_SwitchInfo_PortGroupTop, { "Port Group Top", "opa.switchinfo.portgrouptop", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_SwitchInfo_SupportedRoutingMode, { "Supported Routing Mode", "opa.switchinfo.supportedroutingmode", FT_UINT8, BASE_HEX, VALS(RoutingMode), 0x0, NULL, HFILL } }, { &hf_opa_SwitchInfo_EnabledRoutingMode, { "Enabled Routing Mode", "opa.switchinfo.enabledroutingmode", FT_UINT8, BASE_HEX, VALS(RoutingMode), 0x0, NULL, HFILL } }, { &hf_opa_SwitchInfo_reserved3, { "Reserved (4 bits)", "opa.switchinfo.reserved3", FT_UINT8, BASE_HEX, NULL, 0xF0, NULL, HFILL } }, { &hf_opa_SwitchInfo_EnhancedPortZero, { "Enhanced Port Zero", "opa.switchinfo.enhancedportzero", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL } }, { &hf_opa_SwitchInfo_reserved4, { "Reserved (3 bits)", "opa.switchinfo.reserved4", FT_UINT8, BASE_HEX, NULL, 0x07, NULL, HFILL } }, { &hf_opa_SwitchInfo_reserved5, { "Reserved (2 bits)", "opa.switchinfo.reserved5", FT_UINT8, BASE_HEX, NULL, 0xC0, NULL, HFILL } }, { &hf_opa_SwitchInfo_CollectiveMask, { "Collective Mask", "opa.switchinfo.collectivemask", FT_UINT8, BASE_HEX, NULL, 0x38, NULL, HFILL } }, { &hf_opa_SwitchInfo_MulticastMask, { "Multicast Mask", "opa.switchinfo.multicastmask", FT_UINT8, BASE_HEX, NULL, 0x07, NULL, HFILL } }, { &hf_opa_SwitchInfo_AdaptiveRoutingEnable, { "Adaptive Routing Enable", "opa.switchinfo.adaptiveroutingenable", FT_BOOLEAN, 16, NULL, 0x8000, NULL, HFILL } }, { &hf_opa_SwitchInfo_AdaptiveRoutingPause, { "Adaptive Routing Pause", "opa.switchinfo.adaptiveroutingpause", FT_BOOLEAN, 16, NULL, 0x4000, NULL, HFILL } }, { &hf_opa_SwitchInfo_AdaptiveRoutingAlgorithm, { "Adaptive Routing Algorithm", "opa.switchinfo.adaptiveroutingalgorithm", FT_UINT16, BASE_HEX, VALS(AdaptiveRoutingAlgorithm), 0x3800, NULL, HFILL } }, { &hf_opa_SwitchInfo_AdaptiveRoutingFrequency, { "Adaptive Routing Frequency", "opa.switchinfo.adaptiveroutingfrequency", FT_UINT16, BASE_CUSTOM, CF_FUNC(cf_opa_mad_swinfo_ar_frequency), 0x0700, NULL, HFILL } }, { &hf_opa_SwitchInfo_AdaptiveRoutingLostRoutesOnly, { "Adaptive Routing Lost Routes Only", "opa.switchinfo.adaptiveroutinglostroutesonly", FT_BOOLEAN, 16, NULL, 0x0080, NULL, HFILL } }, { &hf_opa_SwitchInfo_AdaptiveRoutingThreshold, { "Adaptive Routing Threshold", "opa.switchinfo.adaptiveroutingthreshold", FT_UINT16, BASE_HEX, VALS(AdaptiveRoutingThreshold), 0x0070, NULL, HFILL } }, { &hf_opa_SwitchInfo_reserved6, { "Reserved (4 bits)", "opa.switchinfo.reserved6", FT_UINT16, BASE_HEX, NULL, 0x000F, NULL, HFILL } }, { &hf_opa_SwitchInfo_SwitchCapabilityMask, { "Switch Capability Mask", "opa.switchinfo.switchcapabilitymask", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_SwitchInfo_SwitchCapabilityMask_reserved, { "Reserved (13 bits)", "opa.switchinfo.switchcapabilitymask.reserved", FT_UINT16, BASE_HEX, NULL, 0xFFF8, NULL, HFILL } }, { &hf_opa_SwitchInfo_SwitchCapabilityMask_IsAddrRangeConfigSupported, { "IsAddrRangeConfigSupported", "opa.switchinfo.switchcapabilitymask.isaddrrangeconfigsupported", FT_BOOLEAN, 16, NULL, 0x0004, NULL, HFILL } }, { &hf_opa_SwitchInfo_SwitchCapabilityMask_reserved2, { "Reserved (1 bit)", "opa.switchinfo.switchcapabilitymask.reserved", FT_UINT16, BASE_HEX, NULL, 0x0002, NULL, HFILL } }, { &hf_opa_SwitchInfo_SwitchCapabilityMask_IsAdaptiveRoutingSupported, { "IsAdaptiveRoutingSupported", "opa.switchinfo.switchcapabilitymask.isadaptiveroutingsupported", FT_BOOLEAN, 16, NULL, 0x0001, NULL, HFILL } }, { &hf_opa_SwitchInfo_CapabilityMaskCollectives, { "Capability Mask Collectives", "opa.switchinfo.capabilitymaskcollectives", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /************ * PortInfo * ************/ { &hf_opa_PortInfo, { "Port Info", "opa.portinfo", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortInfo_LID, { "LID", "opa.portinfo.lid", FT_UINT32, BASE_HEX, NULL, 0x0, "Base LID of this node", HFILL } }, { &hf_opa_PortInfo_FlowControlMask, { "Flow Control Mask", "opa.portinfo.flowcontrolmask", FT_UINT32, BASE_CUSTOM, CF_FUNC(cf_opa_mad_32b_mask), 0x0, "Flow control enabled on all VLs except VL15", HFILL } }, { &hf_opa_PortInfo_VL_PreemptCap, { "PreemptCap", "opa.portinfo.vl.preemptcap", FT_UINT8, BASE_DEC, NULL, 0x0, "Size of Preempting VL Arbitration table", HFILL } }, { &hf_opa_PortInfo_VL_reserved, { "Reserved (3 bits)", "opa.portinfo.vl.reserved", FT_UINT8, BASE_HEX, NULL, 0xE0, NULL, HFILL } }, { &hf_opa_PortInfo_VL_Cap, { "VL Cap", "opa.portinfo.vl.cap", FT_UINT8, BASE_DEC, NULL, 0x1F, "Virtual Lanes supported on this port", HFILL } }, { &hf_opa_PortInfo_VL_HighLimit, { "HighLimit", "opa.portinfo.vl.highlimit", FT_UINT16, BASE_DEC, NULL, 0x0, "Limit of high priority component of VL Arbitration table", HFILL } }, { &hf_opa_PortInfo_VL_PreemptingLimit, { "PreemptingLimit", "opa.portinfo.vl.preemptinglimit", FT_UINT16, BASE_DEC, NULL, 0x0, "Limit of preempt component of VL Arbitration table", HFILL } }, { &hf_opa_PortInfo_VL_ArbitrationHighCap, { "ArbitrationHighCap", "opa.portinfo.vl.arbitrationhighcap", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortInfo_VL_ArbitrationLowCap, { "ArbitrationLowCap", "opa.portinfo.vl.arbitrationlowcap", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortInfo_PortPhysConfig_reserved, { "Reserved (4 bits)", "opa.portinfo.portphysconfig.reserved", FT_UINT8, BASE_HEX, NULL, 0xF0, NULL, HFILL } }, { &hf_opa_PortInfo_PortPhysConfig_PortType, { "PortPhysConfig PortType", "opa.portinfo.portphysconfig.porttype", FT_UINT8, BASE_HEX, VALS(PortType), 0x0F, NULL, HFILL } }, { &hf_opa_PortInfo_MultiCollectMask_reserved, { "Reserved (2 bits)", "opa.portinfo.multicollectmask.reserved", FT_UINT8, BASE_HEX, NULL, 0xC0, NULL, HFILL } }, { &hf_opa_PortInfo_MultiCollectMask_CollectiveMask, { "MultiCollectMask CollectiveMask", "opa.portinfo.multicollectmask.collectivemask", FT_UINT8, BASE_HEX, NULL, 0x38, NULL, HFILL } }, { &hf_opa_PortInfo_MultiCollectMask_MulticastMask, { "MultiCollectMask MulticastMask", "opa.portinfo.multicollectmask.multicastmask", FT_UINT8, BASE_HEX, NULL, 0x07, NULL, HFILL } }, { &hf_opa_PortInfo_M_KeyProtectBits, { "M_KeyProtectBits", "opa.portinfo.mkeyprotectbits", FT_UINT8, BASE_HEX, NULL, 0xC0, NULL, HFILL } }, { &hf_opa_PortInfo_S1_reserved, { "Reserved (2 bits)", "opa.portinfo.s1.reserved", FT_UINT8, BASE_HEX, NULL, 0x30, NULL, HFILL } }, { &hf_opa_PortInfo_LMC, { "LMC", "opa.portinfo.lmc", FT_UINT8, BASE_HEX, NULL, 0x0F, NULL, HFILL } }, { &hf_opa_PortInfo_S2_reserved, { "Reserved (3 bits)", "opa.portinfo.s2.reserved", FT_UINT8, BASE_HEX, NULL, 0xE0, NULL, HFILL } }, { &hf_opa_PortInfo_MasterSMSL, { "MasterSMSL", "opa.portinfo.mastersml", FT_UINT8, BASE_HEX, NULL, 0x1F, NULL, HFILL } }, { &hf_opa_PortInfo_LinkInitReason, { "LinkInitReason", "opa.portinfo.linkinitreason", FT_UINT8, BASE_HEX, VALS(LinkInitReason), 0xF0, NULL, HFILL } }, { &hf_opa_PortInfo_PartitionEnforcementInbound, { "PartitionEnforcementInbound", "opa.portinfo.partitionenforcementinbound", FT_UINT8, BASE_HEX, NULL, 0x08, NULL, HFILL } }, { &hf_opa_PortInfo_PartitionEnforcementOutbound, { "PartitionEnforcementOutbound", "opa.portinfo.partitionenforcementoutbound", FT_UINT8, BASE_HEX, NULL, 0x04, NULL, HFILL } }, { &hf_opa_PortInfo_S3_reserved2, { "Reserved (2 bits)", "opa.portinfo.s3.reserved2", FT_UINT8, BASE_HEX, NULL, 0x03, NULL, HFILL } }, { &hf_opa_PortInfo_S4_reserved, { "Reserved (3 bits)", "opa.portinfo.s4.reserved", FT_UINT8, BASE_HEX, NULL, 0xE0, NULL, HFILL } }, { &hf_opa_PortInfo_OperationalVL, { "OperationalVL", "opa.portinfo.operationalvl", FT_UINT8, BASE_HEX, NULL, 0x1F, NULL, HFILL } }, /* P_Keys */ { &hf_opa_PortInfo_P_Keys_P_Key_8B, { "P_Keys P_Key_8B", "opa.portinfo.pkey8", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortInfo_P_Keys_P_Key_10B, { "P_Keys P_Key_10B", "opa.portinfo.pkey10", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortInfo_M_KeyViolations, { "M_KeyViolations", "opa.portinfo.m_keyviolations", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortInfo_P_KeyViolations, { "P_KeyViolations", "opa.portinfo.p_keyviolations", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortInfo_Q_KeyViolations, { "Q_KeyViolations", "opa.portinfo.q_keyviolations", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortInfo_TrapQueuePair_reserved, { "TrapQueuePair Reserved (8 bits)", "opa.portinfo.trapqpair.reserved", FT_UINT32, BASE_HEX, NULL, 0xFF000000, NULL, HFILL } }, { &hf_opa_PortInfo_TrapQueuePair, { "TrapQueuePair", "opa.portinfo.trapqpair", FT_UINT32, BASE_HEX, NULL, 0x00FFFFFF, NULL, HFILL } }, { &hf_opa_PortInfo_SAQueuePair_reserved, { "SAQueuePair Reserved (8 bits)", "opa.portinfo.saqpair.reserved", FT_UINT32, BASE_HEX, NULL, 0xFF000000, NULL, HFILL } }, { &hf_opa_PortInfo_SAQueuePair, { "SAQueuePair", "opa.portinfo.saqpair", FT_UINT32, BASE_HEX, NULL, 0x00FFFFFF, NULL, HFILL } }, { &hf_opa_PortInfo_NeighborPortNum, { "NeighborPortNum", "opa.portinfo.neighborportnum", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortInfo_LinkDownReason, { "LinkDownReason", "opa.portinfo.linkdownreason", FT_UINT8, BASE_HEX, VALS(LinkDownReason), 0x0, NULL, HFILL } }, { &hf_opa_PortInfo_NeighborLinkDownReason, { "NeighborLinkDownReason", "opa.portinfo.neighborlinkdownreason", FT_UINT8, BASE_HEX, VALS(LinkDownReason), 0x0, NULL, HFILL } }, { &hf_opa_PortInfo_ClientReregister, { "Subnet ClientReregister", "opa.portinfo.clientreregister", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL } }, { &hf_opa_PortInfo_MulticastPKeyTrapSuppressEnabled, { "Subnet Multicast PKey Trap Enabled", "opa.portinfo.multicastpkeytrapenabled", FT_UINT8, BASE_HEX, NULL, 0x60, NULL, HFILL } }, { &hf_opa_PortInfo_Timeout, { "Subnet Timeout", "opa.portinfo.timeout", FT_UINT8, BASE_HEX, NULL, 0x1F, NULL, HFILL } }, { &hf_opa_PortInfo_LinkSpeedSupported, { "LinkSpeedSupported", "opa.portinfo.linkspeedsupported", FT_UINT16, BASE_CUSTOM, CF_FUNC(cf_opa_mad_linkspeed), 0x0, NULL, HFILL } }, { &hf_opa_PortInfo_LinkSpeedEnabled, { "LinkSpeedEnabled", "opa.portinfo.linkspeedenabled", FT_UINT16, BASE_CUSTOM, CF_FUNC(cf_opa_mad_linkspeed), 0x0, NULL, HFILL } }, { &hf_opa_PortInfo_LinkSpeedActive, { "LinkSpeedActive", "opa.portinfo.linkspeedactive", FT_UINT16, BASE_CUSTOM, CF_FUNC(cf_opa_mad_linkspeed), 0x0, NULL, HFILL } }, { &hf_opa_PortInfo_LinkWidthSupported, { "LinkWidthSupported", "opa.portinfo.linkwidthsupported", FT_UINT16, BASE_CUSTOM, CF_FUNC(cf_opa_mad_linkwidth), 0x0, NULL, HFILL } }, { &hf_opa_PortInfo_LinkWidthEnabled, { "LinkWidthEnabled", "opa.portinfo.linkwidthenabled", FT_UINT16, BASE_CUSTOM, CF_FUNC(cf_opa_mad_linkwidth), 0x0, NULL, HFILL } }, { &hf_opa_PortInfo_LinkWidthActive, { "LinkWidthActive", "opa.portinfo.linkwidthactive", FT_UINT16, BASE_CUSTOM, CF_FUNC(cf_opa_mad_linkwidth), 0x0, NULL, HFILL } }, { &hf_opa_PortInfo_LinkWidthDowngrade_Supported, { "LinkWidthDowngrade Supported", "opa.portinfo.linkwidthdowngradesupported", FT_UINT16, BASE_CUSTOM, CF_FUNC(cf_opa_mad_linkwidth), 0x0, NULL, HFILL } }, { &hf_opa_PortInfo_LinkWidthDowngrade_Enabled, { "LinkWidthDowngrade Enabled", "opa.portinfo.linkwidthdowngradeenabled", FT_UINT16, BASE_CUSTOM, CF_FUNC(cf_opa_mad_linkwidth), 0x0, NULL, HFILL } }, { &hf_opa_PortInfo_LinkWidthDowngrade_TxActive, { "LinkWidthDowngrade TxActive", "opa.portinfo.linkwidthdowngradetxactive", FT_UINT16, BASE_CUSTOM, CF_FUNC(cf_opa_mad_linkwidth), 0x0, NULL, HFILL } }, { &hf_opa_PortInfo_LinkWidthDowngrade_RxActive, { "LinkWidthDowngrade RxActive", "opa.portinfo.linkwidthdowngraderxactive", FT_UINT16, BASE_CUSTOM, CF_FUNC(cf_opa_mad_linkwidth), 0x0, NULL, HFILL } }, /* PortLinkMode */ { &hf_opa_PortInfo_PortLinkMode_reserved, { "PortLinkMode Reserved (1 bit)", "opa.portinfo.portlinkmode.reserved", FT_UINT16, BASE_HEX, NULL, 0x8000, NULL, HFILL } }, { &hf_opa_PortInfo_PortLinkMode_Supported, { "PortLinkMode Supported", "opa.portinfo.portlinkmode.supported", FT_UINT16, BASE_CUSTOM, CF_FUNC(cf_opa_mad_portlinkmode), 0x7C00, NULL, HFILL } }, { &hf_opa_PortInfo_PortLinkMode_Enabled, { "PortLinkMode Enabled", "opa.portinfo.portlinkmode.enabled", FT_UINT16, BASE_CUSTOM, CF_FUNC(cf_opa_mad_portlinkmode), 0x03E0, NULL, HFILL } }, { &hf_opa_PortInfo_PortLinkMode_Active, { "PortLinkMode Active", "opa.portinfo.portlinkmode.active", FT_UINT16, BASE_CUSTOM, CF_FUNC(cf_opa_mad_portlinkmode), 0x001F, NULL, HFILL } }, /* PortLTPCRCMode */ { &hf_opa_PortInfo_PortLTPCRCMode_reserved, { "PortLTPCRCMode Reserved (4 bits)", "opa.portinfo.portltpcrc.reserved", FT_UINT16, BASE_HEX, NULL, 0xF000, NULL, HFILL } }, { &hf_opa_PortInfo_PortLTPCRCMode_Supported, { "PortLTPCRCMode Supported", "opa.portinfo.portltpcrc.supported", FT_UINT16, BASE_CUSTOM, CF_FUNC(cf_opa_mad_portltpcrcmode), 0x0F00, NULL, HFILL } }, { &hf_opa_PortInfo_PortLTPCRCMode_Enabled, { "PortLTPCRCMode Enabled", "opa.portinfo.portltpcrc.enabled", FT_UINT16, BASE_CUSTOM, CF_FUNC(cf_opa_mad_portltpcrcmode), 0x00F0, NULL, HFILL } }, { &hf_opa_PortInfo_PortLTPCRCMode_Active, { "PortLTPCRCMode Active", "opa.portinfo.portltpcrc.active", FT_UINT16, BASE_CUSTOM, CF_FUNC(cf_opa_mad_portltpcrcmode), 0x000F, NULL, HFILL } }, /* PortMode */ { &hf_opa_PortInfo_PortMode, { "PortMode", "opa.portinfo.portmode", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortInfo_PortMode_reserved, { "Reserved (9 bits)", "opa.portinfo.portmode.reserved", FT_UINT16, BASE_HEX, NULL, 0xFF80, NULL, HFILL } }, { &hf_opa_PortInfo_PortMode_IsActiveOptimizeEnabled, { "IsActiveOptimizeEnabled", "opa.portinfo.portmode.isactiveoptimizeenabled", FT_BOOLEAN, 16, NULL, 0x0040, NULL, HFILL } }, { &hf_opa_PortInfo_PortMode_IsPassThroughEnabled, { "IsPassThroughEnabled", "opa.portinfo.portmode.ispassthroughenabled", FT_BOOLEAN, 16, NULL, 0x0020, NULL, HFILL } }, { &hf_opa_PortInfo_PortMode_IsVLMarkerEnabled, { "IsVLMarkerEnabled", "opa.portinfo.portmode.isvlmarkerenabled", FT_BOOLEAN, 16, NULL, 0x0010, NULL, HFILL } }, { &hf_opa_PortInfo_PortMode_reserved2, { "Reserved (2 bits)", "opa.portinfo.portmode.reserved2", FT_UINT16, BASE_HEX, NULL, 0x000C, NULL, HFILL } }, { &hf_opa_PortInfo_PortMode_Is16BTrapQueryEnabled, { "Is16BTrapQueryEnabled", "opa.portinfo.portmode.is16btrapqueryenabled", FT_BOOLEAN, 16, NULL, 0x0002, NULL, HFILL } }, { &hf_opa_PortInfo_PortMode_reserved3, { "Reserved (1 bit)", "opa.portinfo.portmode.reserved3", FT_UINT16, BASE_HEX, NULL, 0x0001, NULL, HFILL } }, /*PortPacketFormats*/ { &hf_opa_PortInfo_PortPacketFormats_Supported, { "PortPacketFormats Supported", "opa.portinfo.portpacketformats.supported", FT_UINT16, BASE_CUSTOM, CF_FUNC(cf_opa_mad_packetformat), 0x0, NULL, HFILL } }, { &hf_opa_PortInfo_PortPacketFormats_Enabled, { "PortPacketFormats Enabled", "opa.portinfo.portpacketformats.enabled", FT_UINT16, BASE_CUSTOM, CF_FUNC(cf_opa_mad_packetformat), 0x0, NULL, HFILL } }, /* Flit Control*/ { &hf_opa_PortInfo_FlitControl_Interleave_reserved, { "Interleave Reserved (2 bits)", "opa.portinfo.flitcontrol.interleave.reserved", FT_UINT16, BASE_HEX, NULL, 0xC000, NULL, HFILL } }, { &hf_opa_PortInfo_FlitControl_Interleave_DistanceSupported, { "Interleave DistanceSupported", "opa.portinfo.flitcontrol.interleave.distancesupported", FT_UINT16, BASE_HEX, VALS(PortFlitDistanceMode), 0x3000, NULL, HFILL } }, { &hf_opa_PortInfo_FlitControl_Interleave_DistanceEnabled, { "Interleave DistanceEnabled", "opa.portinfo.flitcontrol.interleave.distanceenabled", FT_UINT16, BASE_HEX, VALS(PortFlitDistanceMode), 0x0C00, NULL, HFILL } }, { &hf_opa_PortInfo_FlitControl_Interleave_MaxNestLevelTxEnabled, { "Interleave MaxNestLevelTxEnabled", "opa.portinfo.flitcontrol.interleave.maxnestleveltxenabled", FT_UINT16, BASE_HEX, NULL, 0x03E0, NULL, HFILL } }, { &hf_opa_PortInfo_FlitControl_Interleave_MaxNestLevelRxSupported, { "Interleave MaxNestLevelRxEnabled", "opa.portinfo.flitcontrol.interleave.maxnestlevelrxenabled", FT_UINT16, BASE_HEX, NULL, 0x001F, NULL, HFILL } }, { &hf_opa_PortInfo_FlitControl_Preemption_MinInitial, { "Preemption MinInitial", "opa.portinfo.flitcontrol.preemption.mininitial", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortInfo_FlitControl_Preemption_MinTail, { "Preemption Mintail", "opa.portinfo.flitcontrol.preemption.mintail", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortInfo_FlitControl_Preemption_LargePacketLimit, { "Preemption LargePacketLimit", "opa.portinfo.flitcontrol.preemption.largepacketlimit", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortInfo_FlitControl_Preemption_SmallPacketLimit, { "Preemption SmallPacketLimit", "opa.portinfo.flitcontrol.preemption.smallpacketlimit", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortInfo_FlitControl_Preemption_MaxSmallPacketLimit, { "Preemption MaxSmallPacketLimit", "opa.portinfo.flitcontrol.preemption.maxsmallpacketlimit", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortInfo_FlitControl_Preemption_PreemptionLimit, { "Preemption PreemptionLimit", "opa.portinfo.flitcontrol.preemption.preemptionlimit", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* PortErrorAction */ { &hf_opa_PortInfo_PortErrorAction, { "PortErrorAction", "opa.portinfo.porterroraction", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortInfo_PortErrorAction_ExcessiveBufferOverrun, { "ExcessiveBufferOverrun", "opa.portinfo.porterroraction.excessivebufferoverrun", FT_BOOLEAN, 32, NULL, 0x80000000, NULL, HFILL } }, { &hf_opa_PortInfo_PortErrorAction_reserved, { "Reserved (7 bits)", "opa.portinfo.porterroraction.reserved", FT_UINT32, BASE_HEX, NULL, 0x7F000000, NULL, HFILL } }, { &hf_opa_PortInfo_PortErrorAction_FmConfigErrorExceedMulticastLimit, { "FMConfigErrorExceedMulticastLimit", "opa.portinfo.porterroraction.fmconfigerrorexceedmulticastlimit", FT_BOOLEAN, 32, NULL, 0x00800000, NULL, HFILL } }, { &hf_opa_PortInfo_PortErrorAction_FmConfigErrorBadControlFlit, { "FmConfigErrorBadControlFlit", "opa.portinfo.porterroraction.fmconfigerrorbadcontrolflit", FT_BOOLEAN, 32, NULL, 0x00400000, NULL, HFILL } }, { &hf_opa_PortInfo_PortErrorAction_FmConfigErrorBadPreempt, { "FmConfigErrorBadPreempt", "opa.portinfo.porterroraction.fmconfigerrorbadpreempt", FT_BOOLEAN, 32, NULL, 0x00200000, NULL, HFILL } }, { &hf_opa_PortInfo_PortErrorAction_FmConfigErrorBadVLMarker, { "FmConfigErrorBadVLMarker", "opa.portinfo.porterroraction.fmconfigerrorbadvlmarker", FT_BOOLEAN, 32, NULL, 0x00100000, NULL, HFILL } }, { &hf_opa_PortInfo_PortErrorAction_FmConfigErrorBadCrdtAck, { "FmConfigErrorBadCrdtAck", "opa.portinfo.porterroraction.fmconfigerrorbadcrdtack", FT_BOOLEAN, 32, NULL, 0x00080000, NULL, HFILL } }, { &hf_opa_PortInfo_PortErrorAction_FmConfigErrorBadCtrlDist, { "FmConfigErrorBadCtrlDist", "opa.portinfo.porterroraction.fmconfigerrorbadctrldist", FT_BOOLEAN, 32, NULL, 0x00040000, NULL, HFILL } }, { &hf_opa_PortInfo_PortErrorAction_FmConfigErrorBadTailDist, { "FmConfigErrorBadTailDist", "opa.portinfo.porterroraction.fmconfigerrorbadtaildist", FT_BOOLEAN, 32, NULL, 0x00020000, NULL, HFILL } }, { &hf_opa_PortInfo_PortErrorAction_FmConfigErrorBadHeadDist, { "FmConfigErrorBadHeadDist", "opa.portinfo.porterroraction.fmconfigerrorbadheaddist", FT_BOOLEAN, 32, NULL, 0x00010000, NULL, HFILL } }, { &hf_opa_PortInfo_PortErrorAction_reserved2, { "Reserved (2 bits)", "opa.portinfo.porterroraction.reserved2", FT_UINT32, BASE_HEX, NULL, 0x0000C000, NULL, HFILL } }, { &hf_opa_PortInfo_PortErrorAction_PortRcvErrorBadVLMarker, { "PortRcvErrorBadVLMarker", "opa.portinfo.porterroraction.portrcverrorbadvlmarker", FT_BOOLEAN, 32, NULL, 0x00002000, NULL, HFILL } }, { &hf_opa_PortInfo_PortErrorAction_PortRcvErrorPreemptVL15, { "PortRcvErrorPreemptVL15", "opa.portinfo.porterroraction.portrcverrorpreemptvl15", FT_BOOLEAN, 32, NULL, 0x00001000, NULL, HFILL } }, { &hf_opa_PortInfo_PortErrorAction_PortRcvErrorPreemptError, { "PortRcvErrorPreemptError", "opa.portinfo.porterroraction.portrcverrorpreempterror", FT_BOOLEAN, 32, NULL, 0x00000800, NULL, HFILL } }, { &hf_opa_PortInfo_PortErrorAction_reserved3, { "Reserved (1 bit)", "opa.portinfo.porterroraction.reserved3", FT_UINT32, BASE_HEX, NULL, 0x00000400, NULL, HFILL } }, { &hf_opa_PortInfo_PortErrorAction_PortRcvErrorBadMidTail, { "PortRcvErrorBadMidTail", "opa.portinfo.porterroraction.portrcverrorbadmidtail", FT_BOOLEAN, 32, NULL, 0x00000200, NULL, HFILL } }, { &hf_opa_PortInfo_PortErrorAction_PortRcvErrorReserved, { "PortRcvErrorReserved", "opa.portinfo.porterroraction.portrcverrorreserved", FT_UINT32, BASE_HEX, NULL, 0x00000100, NULL, HFILL } }, { &hf_opa_PortInfo_PortErrorAction_PortRcvErrorBadSC, { "PortRcvErrorBadSC", "opa.portinfo.porterroraction.portrcverrorbadsc", FT_BOOLEAN, 32, NULL, 0x00000080, NULL, HFILL } }, { &hf_opa_PortInfo_PortErrorAction_PortRcvErrorBadL2, { "PortRcvErrorBadL2", "opa.portinfo.porterroraction.portrcverrorbadl2", FT_BOOLEAN, 32, NULL, 0x00000040, NULL, HFILL } }, { &hf_opa_PortInfo_PortErrorAction_PortRcvErrorBadDLID, { "PortRcvErrorBadDLID", "opa.portinfo.porterroraction.portrcverrorbaddlid", FT_BOOLEAN, 32, NULL, 0x00000020, NULL, HFILL } }, { &hf_opa_PortInfo_PortErrorAction_PortRcvErrorBadSLID, { "PortRcvErrorBadSLID", "opa.portinfo.porterroraction.portrcverrorbadslid", FT_BOOLEAN, 32, NULL, 0x00000010, NULL, HFILL } }, { &hf_opa_PortInfo_PortErrorAction_PortRcvErrorPktLenTooShort, { "PortRcvErrorPktLenTooShort", "opa.portinfo.porterroraction.portrcverrorpktlentooshort", FT_BOOLEAN, 32, NULL, 0x00000008, NULL, HFILL } }, { &hf_opa_PortInfo_PortErrorAction_PortRcvErrorPktLenTooLong, { "PortRcvErrorPktLenTooLong", "opa.portinfo.porterroraction.portrcverrorpktlentoolong", FT_BOOLEAN, 32, NULL, 0x00000004, NULL, HFILL } }, { &hf_opa_PortInfo_PortErrorAction_PortRcvErrorBadPktLen, { "PortRcvErrorBadPktLen", "opa.portinfo.porterroraction.portrcverrorbadpktlen", FT_BOOLEAN, 32, NULL, 0x00000002, NULL, HFILL } }, { &hf_opa_PortInfo_PortErrorAction_reserved4, { "Reserved (1 bit)", "opa.portinfo.porterroraction.reserved4", FT_UINT32, BASE_HEX, NULL, 0x00000001, NULL, HFILL } }, /* PassThroughControl */ { &hf_opa_PortInfo_PassThroughControl_EgressPort, { "PassThroughControl EgressPort", "opa.portinfo.passthroughcontrol.egressport", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortInfo_PassThroughControl_reserved, { "Reserved (7 Bits)", "opa.portinfo.passthroughcontrol.reserved", FT_UINT8, BASE_HEX, NULL, 0xFE, NULL, HFILL } }, { &hf_opa_PortInfo_PassThroughControl_DRControl, { "PassThroughControl DRControl", "opa.portinfo.passthroughcontrol.drcontrol", FT_UINT8, BASE_HEX, NULL, 0x01, NULL, HFILL } }, { &hf_opa_PortInfo_M_KeyLeasePeriod, { "M_KeyLeasePeriod", "opa.portinfo.m_keyleaseperiod", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortInfo_BufferUnits_reserved, { "BufferUnits Reserved (9 bits)", "opa.portinfo.bufferunits.reserved", FT_UINT32, BASE_HEX, NULL, 0xFF800000, NULL, HFILL } }, { &hf_opa_PortInfo_BufferUnits_VL15Init, { "BufferUnits VL15Init", "opa.portinfo.bufferunits.vl15init", FT_UINT32, BASE_HEX, NULL, 0x007FF800, NULL, HFILL } }, { &hf_opa_PortInfo_BufferUnits_VL15CreditRate, { "BufferUnits VL15Credit", "opa.portinfo.bufferunits.vl15credit", FT_UINT32, BASE_HEX, NULL, 0x000007C0, NULL, HFILL } }, { &hf_opa_PortInfo_BufferUnits_CreditAck, { "BufferUnits CreditAck", "opa.portinfo.bufferunits.creditack", FT_UINT32, BASE_HEX, NULL, 0x00000038, NULL, HFILL } }, { &hf_opa_PortInfo_BufferUnits_BufferAlloc, { "BufferUnits BufferAlloc", "opa.portinfo.bufferunits.bufferalloc", FT_UINT32, BASE_HEX, NULL, 0x00000007, NULL, HFILL } }, { &hf_opa_PortInfo_MasterSMLID, { "MasterSMLID", "opa.portinfo.mastersmlid", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortInfo_M_Key, { "MKey", "opa.portinfo.mkey", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortInfo_SubnetPrefix, { "SubnetPrefix", "opa.portinfo.subnetprefix", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortInfo_VL1, { "VL", "opa.portinfo.vl1", FT_UINT8, BASE_HEX, VALS(MTU), 0xF0, NULL, HFILL } }, { &hf_opa_PortInfo_VL2, { "VL", "opa.portinfo.vl2", FT_UINT8, BASE_HEX, VALS(MTU), 0x0F, NULL, HFILL } }, /* XmitQ */ { &hf_opa_PortInfo_XmitQ_VLStallCount, { "VLStallCount", "opa.portinfo.xmitq.vlstallcount", FT_UINT8, BASE_HEX, NULL, 0xE0, NULL, HFILL } }, { &hf_opa_PortInfo_XmitQ_HOQLife, { "HOQLife", "opa.portinfo.xmitq.hoqlife", FT_UINT8, BASE_HEX, NULL, 0x1F, NULL, HFILL } }, { &hf_opa_PortInfo_IPAddrIPv6, { "IPAddr IPv6", "opa.portinfo.ipaddripv6", FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortInfo_IPAddrIPv4, { "IPAddr IPv4", "opa.portinfo.ipaddripv4", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortInfo_NeighborNodeGUID, { "NeighborNodeGUID", "opa.portinfo.neighbornodeguid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* Capability Mask Flags */ { &hf_opa_PortInfo_CapabilityMask, { "CapabilityMask", "opa.portinfo.capabilitymask", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortInfo_CapabilityMask_reserved, { "Reserved (9 bits)", "opa.portinfo.capabilitymask.reserved", FT_UINT32, BASE_HEX, NULL, 0xFF800000, NULL, HFILL } }, { &hf_opa_PortInfo_CapabilityMask_IsCapabilityMaskNoticeSupported, { "IsCapabilityMaskNoticeSupported", "opa.portinfo.capabilitymask.iscapabilitymasknoticesupported", FT_BOOLEAN, 32, NULL, 0x00400000, NULL, HFILL } }, { &hf_opa_PortInfo_CapabilityMask_reserved2, { "Reserved (1 bit)", "opa.portinfo.capabilitymask.reserved2", FT_UINT32, BASE_HEX, NULL, 0x00200000, NULL, HFILL } }, { &hf_opa_PortInfo_CapabilityMask_IsVendorClassSupported, { "IsVendorClassSupported", "opa.portinfo.capabilitymask.isvendorclasssupported", FT_BOOLEAN, 32, NULL, 0x00100000, NULL, HFILL } }, { &hf_opa_PortInfo_CapabilityMask_IsDeviceManagementSupported, { "IsDeviceManagementSupported", "opa.portinfo.capabilitymask.isdevicemanagementsupported", FT_BOOLEAN, 32, NULL, 0x00080000, NULL, HFILL } }, { &hf_opa_PortInfo_CapabilityMask_reserved3, { "Reserved (2 bits)", "opa.portinfo.capabilitymask.reserved3", FT_UINT32, BASE_HEX, NULL, 0x00060000, NULL, HFILL } }, { &hf_opa_PortInfo_CapabilityMask_IsConnectionManagementSupported, { "IsConnectionManagementSupported", "opa.portinfo.capabilitymask.isconnectionmanagementsupported", FT_BOOLEAN, 32, NULL, 0x00010000, NULL, HFILL } }, { &hf_opa_PortInfo_CapabilityMask_reserved4, { "Reserved (10 bits)", "opa.portinfo.capabilitymask.reserved4", FT_UINT32, BASE_HEX, NULL, 0x0000FFC0, NULL, HFILL } }, { &hf_opa_PortInfo_CapabilityMask_IsAutomaticMigrationSupported, { "IsAutomaticMigrationSupported", "opa.portinfo.capabilitymask.isautomaticmigrationsupported", FT_BOOLEAN, 32, NULL, 0x00000020, NULL, HFILL } }, { &hf_opa_PortInfo_CapabilityMask_reserved5, { "Reserved (3 bits)", "opa.portinfo.capabilitymask.reserved5", FT_UINT32, BASE_HEX, NULL, 0x0000001C, NULL, HFILL } }, { &hf_opa_PortInfo_CapabilityMask_IsSM, { "IsSM", "opa.portinfo.capabilitymask.issm", FT_BOOLEAN, 32, NULL, 0x00000002, NULL, HFILL } }, { &hf_opa_PortInfo_CapabilityMask_reserved6, { "Reserved (1 bit)", "opa.portinfo.capabilitymask.reserved6", FT_UINT32, BASE_HEX, NULL, 0x00000001, NULL, HFILL } }, /* End Capability Mask Flags */ /* Capability Mask 3 */ { &hf_opa_PortInfo_CapabilityMask3, { "CapabilityMask3", "opa.portinfo.capabilitymask3", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortInfo_CapabilityMask3_reserved, { "Reserved (8 bits)", "opa.portinfo.capabilitymask3.reserved", FT_UINT16, BASE_HEX, NULL, 0xFF00, NULL, HFILL } }, { &hf_opa_PortInfo_CapabilityMask3_IsSnoopSupported, { "IsSnoopSupported", "opa.portinfo.capabilitymask3.issnoopsupported", FT_BOOLEAN, 16, NULL, 0x0080, NULL, HFILL } }, { &hf_opa_PortInfo_CapabilityMask3_IsAsyncSCtoVLSupported, { "IsAsyncSCtoVLSupported", "opa.portinfo.capabilitymask3.isasyncsc2vlsupported", FT_BOOLEAN, 16, NULL, 0x0040, NULL, HFILL } }, { &hf_opa_PortInfo_CapabilityMask3_IsAddrRangeConfigSupported, { "IsAddrRangeConfigSupported", "opa.portinfo.capabilitymask3.isaddrrangeconfigsupported", FT_BOOLEAN, 16, NULL, 0x0020, NULL, HFILL } }, { &hf_opa_PortInfo_CapabilityMask3_IsPassThroughSupported, { "IsPassThroughSupported", "opa.portinfo.capabilitymask3.ispassthroughsupported", FT_BOOLEAN, 16, NULL, 0x0010, NULL, HFILL } }, { &hf_opa_PortInfo_CapabilityMask3_IsSharedSpaceSupported, { "IsSharedSpaceSupported", "opa.portinfo.capabilitymask3.issharedspacesupported", FT_BOOLEAN, 16, NULL, 0x0008, NULL, HFILL } }, { &hf_opa_PortInfo_CapabilityMask3_reserved2, { "IsVLMarkerSupported", "opa.portinfo.capabilitymask3.reserved2", FT_BOOLEAN, 16, NULL, 0x0004, NULL, HFILL } }, { &hf_opa_PortInfo_CapabilityMask3_IsVLMarkerSupported, { "IsVLMarkerSupported", "opa.portinfo.capabilitymask3.isvlmarkersupported", FT_BOOLEAN, 16, NULL, 0x0002, NULL, HFILL } }, { &hf_opa_PortInfo_CapabilityMask3_IsVLrSupported, { "IsVLrSupported", "opa.portinfo.capabilitymask3.isvlrsupported", FT_BOOLEAN, 16, NULL, 0x0001, NULL, HFILL } }, /* End Capability Mask3 Flags */ { &hf_opa_PortInfo_OverallBufferSpace, { "OverallBufferSpace", "opa.portinfo.overallbufferspace", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortInfo_DiagCode, { "DiagCode", "opa.portinfo.diagcode", FT_UINT16, BASE_HEX, VALS(DiagCode), 0x0, NULL, HFILL } }, { &hf_opa_PortInfo_ReplayDepth_BufferDepth, { "Replay BufferDepth", "opa.portinfo.replaydepth.bufferdepth", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortInfo_ReplayDepth_WireDepth, { "Replay WireDepth", "opa.portinfo.replaydepth.wiredepth", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* PortNeighrborNode*/ { &hf_opa_PortInfo_PortNeighborMode_reserved, { "PortNeighborMode Reserved (4 bits)", "opa.portinfo.portneighbormode.reserved", FT_UINT8, BASE_HEX, NULL, 0xF0, NULL, HFILL } }, { &hf_opa_PortInfo_PortNeighborMode_MgmtAllowed, { "PortNeighborMode MgmtAllowed", "opa.portinfo.portneighbormode.mgmtallowed", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL } }, { &hf_opa_PortInfo_PortNeighborMode_NeighborFWAuthenBypass, { "PortNeighborMode NeighborFWAuthenBypass", "opa.portinfo.portneighbormode.neighborfwauthenbypass", FT_BOOLEAN, 8, TFS(&tfs_NeighborFWAuthenBypass), 0x04, NULL, HFILL } }, { &hf_opa_PortInfo_PortNeighborMode_NeighborNodeType, { "PortNeighborMode NeighborNodeType", "opa.portinfo.portneighbormode.neighbornodetype", FT_UINT8, BASE_HEX, NULL, 0x03, NULL, HFILL } }, /* MTU*/ { &hf_opa_PortInfo_MTU_reserved, { "MTU Reserved (4 bits)", "opa.portinfo.mtu.reserved", FT_UINT8, BASE_HEX, NULL, 0xF0, NULL, HFILL } }, { &hf_opa_PortInfo_MTU_Cap, { "MTU Cap", "opa.portinfo.mtu.cap", FT_UINT8, BASE_HEX, VALS(MTU), 0x0F, NULL, HFILL } }, { &hf_opa_PortInfo_Resp_reserved, { "Resp Reserved (3 bits)", "opa.portinfo.resp.reserved", FT_UINT8, BASE_HEX, NULL, 0xE0, NULL, HFILL } }, { &hf_opa_PortInfo_Resp_TimeValue, { "Resp TimeValue", "opa.portinfo.resp.timevalue", FT_UINT8, BASE_HEX, NULL, 0x1F, NULL, HFILL } }, { &hf_opa_PortInfo_LocalPortNum, { "LocalPortNum", "opa.portinfo.localportnum", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /******************* * Port State Info * *******************/ { &hf_opa_PortStates, { "PortStates", "opa.portstates", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStates_reserved, { "Reserved (10 bits)", "opa.portstates.reserved", FT_UINT32, BASE_HEX, NULL, 0xFF800000, NULL, HFILL } }, { &hf_opa_PortStates_LEDEnabled, { "LEDEnabled", "opa.portstates.ledenabled", FT_BOOLEAN, 32, NULL, 0x00400000, NULL, HFILL } }, { &hf_opa_PortStates_IsSMConfigurationStarted, { "IsSMConfigurationStarted", "opa.portstates.issmconfigurationstarted", FT_BOOLEAN, 32, NULL, 0x00200000, NULL, HFILL } }, { &hf_opa_PortStates_NeighborNormal, { "NeighborNormal", "opa.portstates.neighbornormal", FT_BOOLEAN, 32, NULL, 0x00100000, NULL, HFILL } }, { &hf_opa_PortStates_OfflineDisabledReason, { "OfflineDisabledReason", "opa.portstates.offlinedisabledreason", FT_UINT32, BASE_HEX, VALS(OfflineDisabledReason), 0x000F0000, NULL, HFILL } }, { &hf_opa_PortStates_PortUnsleepState, { "PortUnsleepState", "opa.portstates.portunsleepstates", FT_UINT32, BASE_HEX, VALS(PortPhysicalState), 0x0000F000, NULL, HFILL } }, { &hf_opa_PortStates_DownDefaultState, { "DownDefaultState", "opa.portstates.downdefaultstate", FT_UINT32, BASE_HEX, VALS(PortPhysicalState), 0x00000F00, NULL, HFILL } }, { &hf_opa_PortStates_PortPhysicalState, { "PortPhysicalState", "opa.portstates.portphysicalstate", FT_UINT32, BASE_HEX, VALS(PortPhysicalState), 0x000000F0, NULL, HFILL } }, { &hf_opa_PortStates_PortState, { "PortState", "opa.portstates.portstate", FT_UINT32, BASE_HEX, VALS(PortState), 0x0000000F, NULL, HFILL } }, { &hf_opa_PortStates_LinkWidthDowngradeTxActive, { "LinkWidthDowngrade TxActive", "opa.portstates.linkwidthdowngradetxactive", FT_UINT16, BASE_CUSTOM, CF_FUNC(cf_opa_mad_linkwidth), 0x0, NULL, HFILL } }, { &hf_opa_PortStates_LinkWidthDowngradeRxActive, { "LinkWidthDowngrade RxActive", "opa.portstates.linkwidthdowngraderxactive", FT_UINT16, BASE_CUSTOM, CF_FUNC(cf_opa_mad_linkwidth), 0x0, NULL, HFILL } }, /***************** * P_KeyTable * *****************/ { &hf_opa_P_KeyTable, { "P_Key Table", "opa.p_keytable", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_P_KeyTable_MembershipType, { "Membership Type", "opa.p_keytable.membershiptype", FT_BOOLEAN, 16, TFS(&tfs_PKeyMembershipType), 0x8000, NULL, HFILL } }, { &hf_opa_P_KeyTable_P_KeyBase, { "P_Key Base", "opa.p_keytable.p_keybase", FT_UINT16, BASE_HEX, NULL, 0x7FFF, NULL, HFILL } }, /************************** * SLtoSC Mapping Table * **************************/ { &hf_opa_SLtoSCMappingTable, { "SL to SC Mapping Table", "opa.sltoscmappingtable", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_SLtoSCMappingTable_SLtoSC_HighBits, { "Reserved (3 bits)", "opa.sltoscmappingtable.sltoschighbits", FT_UINT8, BASE_HEX, NULL, 0xE0, NULL, HFILL } }, { &hf_opa_SLtoSCMappingTable_SLtoSC_LowBits, { "SC", "opa.sltoscmappingtable.sltosclowbits", FT_UINT8, BASE_HEX, NULL, 0x1F, NULL, HFILL } }, /************************** * SCtoSC Mapping Table * **************************/ { &hf_opa_SCtoSCMappingTable, { "SC to SC Mapping Table", "opa.sctoscmappingtable", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_SCtoSCMappingTable_SCtoSC_HighBits, { "Reserved (3 bits)", "opa.sctoscmappingtable.sctoschighbits", FT_UINT8, BASE_HEX, NULL, 0xE0, NULL, HFILL } }, { &hf_opa_SCtoSCMappingTable_SCtoSC_LowBits, { "SC", "opa.sctoscmappingtable.sctosclowbits", FT_UINT8, BASE_HEX, NULL, 0x1F, NULL, HFILL } }, /************************** * SCtoSL Mapping Table * **************************/ { &hf_opa_SCtoSLMappingTable, { "SC to SL Mapping Table", "opa.sctoslmappingtable", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_SCtoSLMappingTable_SCtoSL_HighBits, { "Reserved (3 bits)", "opa.sctoslmappingtable.sctoslhighbits", FT_UINT8, BASE_HEX, NULL, 0xE0, NULL, HFILL } }, { &hf_opa_SCtoSLMappingTable_SCtoSL_LowBits, { "SL", "opa.sctoslmappingtable.sctosllowbits", FT_UINT8, BASE_HEX, NULL, 0x1F, NULL, HFILL } }, /************************** * SCtoVLx Mapping Table * **************************/ { &hf_opa_SCtoVLxMappingTable, { "SC to VLx Mapping Table", "opa.sctovlxmappingtable", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_SCtoVLxMappingTable_SCtoVLx_HighBits, { "Reserved (3 bits)", "opa.sctovlxmappingtable.sctovlxhighbits", FT_UINT8, BASE_HEX, NULL, 0xE0, NULL, HFILL } }, { &hf_opa_SCtoVLxMappingTable_SCtoVLx_LowBits, { "VL", "opa.sctovlxmappingtable.sctovlxlowbits", FT_UINT8, BASE_HEX, NULL, 0x1F, NULL, HFILL } }, /************************** * VLArbitrationTable * **************************/ { &hf_opa_VLArbitrationTable, { "VL Arbitration Table", "opa.vlarbitrationtable", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_VLArbitrationTable_reserved, { "Reserved (3 bits)", "opa.vlarbitrationtable.reserved", FT_UINT8, BASE_HEX, NULL, 0xE0, NULL, HFILL } }, { &hf_opa_VLArbitrationTable_VL, { "VL", "opa.vlarbitrationtable.vl", FT_UINT8, BASE_HEX, NULL, 0x1F, NULL, HFILL } }, { &hf_opa_VLArbitrationTable_Weight, { "Weight", "opa.vlarbitrationtable.weight", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_VLArbitrationTable_Matrix, { "Element", "opa.vlarbitrationtable.matrix", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /************************* * LinearForwardingTable * *************************/ { &hf_opa_LinearForwardingTable, { "Linear Forwarding Table", "opa.linearforwardingtable", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_LinearForwardingTable_Port, { "Port", "opa.linearforwardingtable.port", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /**************************** * MulticastForwardingTable * ****************************/ { &hf_opa_MulticastForwardingTable, { "Multicast Forwarding Table", "opa.multicastforwardingtable", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_MulticastForwardingTable_PortMask, { "Port Mask", "opa.multicastforwardingtable.portmask", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /**************************** * PortGroupForwardingTable * ****************************/ { &hf_opa_PortGroupForwardingTable, { "Port Group Forwarding Table", "opa.portgroupforwardingtable", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortGroupForwardingTable_Port, { "Port", "opa.portgroupforwardingtable.port", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /****************** * PortGroupTable * ******************/ { &hf_opa_PortGroupTable, { "Port Group Table", "opa.portgrouptable", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortGroupTable_PortMask, { "Port Mask", "opa.portgrouptable.portmask", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /********** * SMInfo * **********/ { &hf_opa_SMInfo, { "SM Info", "opa.sminfo", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_SMInfo_GUID, { "GUID", "opa.sminfo.guid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_SMInfo_SM_Key, { "SM_Key", "opa.sminfo.sm_key", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_SMInfo_ActCount, { "ActCount", "opa.sminfo.actcount", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_SMInfo_ElapsedTime, { "ElapsedTime", "opa.sminfo.elapsedtime", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_SMInfo_Priority, { "Priority", "opa.sminfo.priority", FT_UINT16, BASE_HEX, NULL, 0xF000, NULL, HFILL } }, { &hf_opa_SMInfo_ElevatedPriority, { "ElevatedPriority", "opa.sminfo.elevatedpriority", FT_UINT16, BASE_HEX, NULL, 0x0F00, NULL, HFILL } }, { &hf_opa_SMInfo_InitialPriority, { "InitialPriority", "opa.sminfo.initialpriority", FT_UINT16, BASE_HEX, NULL, 0x00F0, NULL, HFILL } }, { &hf_opa_SMInfo_SMState, { "SMState", "opa.sminfo.smstate", FT_UINT16, BASE_HEX, NULL, 0x000F, NULL, HFILL } }, /*********** * LedInfo * ***********/ { &hf_opa_LedInfo, { "Led Info", "opa.ledinfo", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_LedInfo_LedMask, { "LedMask", "opa.ledinfo.ledmask", FT_BOOLEAN, 32, NULL, 0x80000000, NULL, HFILL } }, { &hf_opa_LedInfo_reserved, { "Reserved (31 bits)", "opa.ledinfo.reserved", FT_UINT32, BASE_HEX, NULL, 0x7FFFFFFF, NULL, HFILL } }, /************ * CableInfo * *************/ { &hf_opa_CableInfo, { "Cable Info", "opa.cableinfo", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_CableInfo_Data, { "Data", "opa.cableinfo.data", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_CableInfo_DataStream, { "Data", "opa.cableinfo.datastream", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, /************ * Aggregate * *************/ { &hf_opa_Aggregate, { "Aggregate", "opa.aggregate", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_Aggregate_AttributeID, { "Attribute ID", "opa.aggregate.attrid", FT_UINT16, BASE_HEX, VALS(SUBM_Attributes), 0x0, NULL, HFILL } }, { &hf_opa_Aggregate_Error, { "Error", "opa.aggregate.error", FT_BOOLEAN, 16, NULL, 0x8000, NULL, HFILL } }, { &hf_opa_Aggregate_RequestLength, { "Request Length", "opa.aggregate.requestlength", FT_UINT16, BASE_DEC, NULL, 0x007F, NULL, HFILL } }, /********************* * BufferControlTable * **********************/ { &hf_opa_BufferControlTable, { "Buffer Control Table", "opa.buffercontroltable", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_BufferControlTable_TxOverallSharedLimit, { "Tx Overall Shared Limit", "opa.buffercontroltable.txoverallsharedlimit", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_BufferControlTable_TxDedicatedLimit, { "Tx Dedicated Limit", "opa.buffercontroltable.txdedicatedlimit", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_BufferControlTable_TxSharedLimit, { "Tx Shared Limit", "opa.buffercontroltable.txsharedlimit", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /******************* * FabricInfoRecord * ********************/ { &hf_opa_FabricInfoRecord, { "Fabric Info Record", "opa.fabricinforecord", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_FabricInfoRecord_NumHFIs, { "Num HFIs", "opa.fabricinforecord.numhfis", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_FabricInfoRecord_NumSwitches, { "Num Switches", "opa.fabricinforecord.numswitches", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_FabricInfoRecord_NumInternalHFILinks, { "Num Internal HFI Links", "opa.fabricinforecord.numinternalhfilinks", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_FabricInfoRecord_NumExternalHFILinks, { "Num External HFI Links", "opa.fabricinforecord.numexternalhfilinks", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_FabricInfoRecord_NumInternalISLs, { "Num Internal ISLs", "opa.fabricinforecord.numinternalisls", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_FabricInfoRecord_NumExternalISLs, { "Num External ISLs", "opa.fabricinforecord.numexternalisls", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_FabricInfoRecord_NumDegradedHFILinks, { "Num Degraded HFI Links", "opa.fabricinforecord.numdegradedhfilinks", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_FabricInfoRecord_NumDegradedISLs, { "Num Degraded ISLs", "opa.fabricinforecord.numdegradedisls", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_FabricInfoRecord_NumOmittedHFILinks, { "Num Omitted HFI Links", "opa.fabricinforecord.numomittedhfilinks", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_FabricInfoRecord_NumOmittedISLs, { "Num Omitted ISLs", "opa.fabricinforecord.numomittedisls", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_FabricInfoRecord_Reserved, { "Reserved (92 Bytes)", "opa.fabricinforecord.reserved", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } }, /***************** * CongestionInfo * ******************/ { &hf_opa_CongestionInfo, { "Congestion Info", "opa.congestioninfo", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_CongestionInfo_CongestionInfo, { "Congestion Info", "opa.congestioninfo.congestioninfo", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_CongestionInfo_ControlTableCap, { "Control Table Cap", "opa.congestioninfo.controltablecap", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_CongestionInfo_CongestionLogLength, { "Congestion Log Length", "opa.congestioninfo.congestionloglength", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /*********************** * SwitchCongestionLog * ***********************/ { &hf_opa_SwitchCongestionLog, { "Switch Congestion Log", "opa.switchcongestionlog", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_SwitchCongestionLog_LogType, { "Log Type", "opa.switchcongestionlog.logtype", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_SwitchCongestionLog_CongestionFlags, { "Congestion Flags", "opa.switchcongestionlog.congestionflags", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_SwitchCongestionLog_LogEventsCounter, { "Log Events Counter", "opa.switchcongestionlog.logeventscounter", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_SwitchCongestionLog_CurrentTimeStamp, { "Current Time Stamp", "opa.switchcongestionlog.currenttimestamp", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_SwitchCongestionLog_PortMap, { "Port Map", "opa.switchcongestionlog.portmap", FT_BYTES, FT_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_SwitchCongestionLog_SLID, { "SLID", "opa.switchcongestionlog.slid", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_SwitchCongestionLog_DLID, { "DLID", "opa.switchcongestionlog.dlid", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_SwitchCongestionLog_SC, { "SC", "opa.switchcongestionlog.sc", FT_UINT8, BASE_HEX, NULL, 0xF8, NULL, HFILL } }, { &hf_opa_SwitchCongestionLog_reserved, { "Reserved (3 bits)", "opa.switchcongestionlog.reserved", FT_UINT8, BASE_HEX, NULL, 0x07, NULL, HFILL } }, { &hf_opa_SwitchCongestionLog_TimeStamp, { "Time Stamp", "opa.switchcongestionlog.timestamp", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /*************************** * SwitchCongestionSetting * ***************************/ { &hf_opa_SwitchCongestionSetting, { "Switch Congestion Setting", "opa.switchcongestionsetting", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_SwitchCongestionSetting_Control_Map, { "Control Map", "opa.switchcongestionsetting.controlmap", FT_UINT32, BASE_CUSTOM, CF_FUNC(cf_opa_mad_swcongestionsetting_controlmap), 0x0, NULL, HFILL } }, { &hf_opa_SwitchCongestionSetting_Victim_Mask, { "Victim Mask", "opa.switchcongestionsetting.victimmask", FT_BYTES, FT_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_SwitchCongestionSetting_Credit_Mask, { "Credit Mask", "opa.switchcongestionsetting.creditmask", FT_BYTES, FT_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_SwitchCongestionSetting_Threshold, { "Threshold", "opa.switchcongestionsetting.threshold", FT_UINT8, BASE_HEX, NULL, 0xF0, NULL, HFILL } }, { &hf_opa_SwitchCongestionSetting_reserved1, { "Reserved (4 bits)", "opa.switchcongestionsetting.reserved1", FT_UINT8, BASE_HEX, NULL, 0x0F, NULL, HFILL } }, { &hf_opa_SwitchCongestionSetting_Packet_Size, { "Packet Size", "opa.switchcongestionsetting.packetsize", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_SwitchCongestionSetting_CS_Threshold, { "CS Threshold", "opa.switchcongestionsetting.csthreshold", FT_UINT8, BASE_HEX, NULL, 0xF0, NULL, HFILL } }, { &hf_opa_SwitchCongestionSetting_reserved2, { "Reserved (4 bits)", "opa.switchcongestionsetting.reserved2", FT_UINT8, BASE_HEX, NULL, 0x0F, NULL, HFILL } }, { &hf_opa_SwitchCongestionSetting_CS_ReturnDelay, { "CS ReturnDelay", "opa.switchcongestionsetting.csreturndelay", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_SwitchCongestionSetting_Marking_Rate, { "Marking Rate", "opa.switchcongestionsetting.markingrate", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /******************************* * SwitchPortCongestionSetting * *******************************/ { &hf_opa_SwitchPortCongestionSetting, { "Switch Port Congestion Setting", "opa.switchportcongestionsetting", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_SwitchPortCongestionSetting_Valid, { "Valid", "opa.switchportcongestionsetting.valid", FT_BOOLEAN, 8, TFS(&tfs_valid_invalid), 0x80, NULL, HFILL } }, { &hf_opa_SwitchPortCongestionSetting_Control_Type, { "Control Type", "opa.switchportcongestionsetting.controltype", FT_BOOLEAN, 8, TFS(&tfs_SwPortCongSetting_CtrlType), 0x40, NULL, HFILL } }, { &hf_opa_SwitchPortCongestionSetting_reserved, { "Reserved (2 bits)", "opa.switchportcongestionsetting.reserved", FT_UINT8, BASE_HEX, NULL, 0x30, NULL, HFILL } }, { &hf_opa_SwitchPortCongestionSetting_Threshold, { "Threshold", "opa.switchportcongestionsetting.threshold", FT_UINT8, BASE_HEX, NULL, 0x0F, NULL, HFILL } }, { &hf_opa_SwitchPortCongestionSetting_Packet_Size, { "Packet Size", "opa.switchportcongestionsetting.packetsize", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_SwitchPortCongestionSetting_Marking_Rate, { "Marking Rate", "opa.switchportcongestionsetting.markingrate", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /******************** * HFICongestionLog * ********************/ { &hf_opa_HFICongestionLog, { "HFI Congestion Log", "opa.hficongestionlog", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_HFICongestionLog_LogType, { "Log Type", "opa.hficongestionsetting.logtype", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_HFICongestionLog_CongestionFlags, { "Congestion Flags", "opa.hficongestionsetting.congestionflags", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_HFICongestionLog_ThresholdEventCounter, { "Threshold Event Counter", "opa.hficongestionsetting.thresholdeventcounter", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_HFICongestionLog_CurrentTimeStamp, { "Current Time Stamp", "opa.hficongestionsetting.currenttimestamp", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_HFICongestionLog_ThresholdCongestionEventMap, { "Threshold Congestion Event Map", "opa.hficongestionsetting.thresholdcongestioneventmap", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_HFICongestionLog_Local_QP_CN_Entry, { "Local QP CN Entry", "opa.hficongestionsetting.localqpcnentry", FT_UINT24, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_HFICongestionLog_Remote_QP_Number_CN_Entry, { "Remote QP Number CN Entry", "opa.hficongestionsetting.remoteqpnumbercnentry", FT_UINT24, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_HFICongestionLog_SL_CN_Entry, { "Threshold Congestion Event Map", "opa.hficongestionsetting.thresholdcongestioneventmap", FT_UINT8, BASE_HEX, NULL, 0xF8, NULL, HFILL } }, { &hf_opa_HFICongestionLog_Service_Type_CN_Entry, { "Service Type CN Entry", "opa.hficongestionsetting.servicetypecnentry", FT_UINT8, BASE_HEX, NULL, 0x0E, NULL, HFILL } }, { &hf_opa_HFICongestionLog_Remote_LID_CN_Entry, { "LID CN Entry", "opa.hficongestionsetting.lidcnentry", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_HFICongestionLog_TimeStamp_CN_Entry, { "TimeStamp CN Entry", "opa.hficongestionsetting.timestampcnentry", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /************************ * HFICongestionSetting * ************************/ { &hf_opa_HFICongestionSetting, { "HFI Congestion Setting", "opa.hficongestionsetting", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_HFICongestionSetting_Control_Map, { "Control Map", "opa.hficongestionsetting.controlmap", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_HFICongestionSetting_Port_Control, { "Port Control", "opa.hficongestionsetting.portcontrol", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_HFICongestionSetting_CCTI_Increase, { "CCTI Increase", "opa.hficongestionsetting.cctiincrease", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_HFICongestionSetting_CCTI_Timer, { "CCTI Timer", "opa.hficongestionsetting.cctitimer", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_HFICongestionSetting_TriggerThreshold, { "Trigger Threshold", "opa.hficongestionsetting.triggerthreshold", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_HFICongestionSetting_CCTI_Min, { "CCTI Min", "opa.hficongestionsetting.cctimin", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /***************************** * HFICongestionControlTable * *****************************/ { &hf_opa_HFICongestionControlTable, { "HFI Congestion Control Table", "opa.hficongestioncontroltable", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_HFICongestionControlTable_CCTI_Limit, { "CCTI Limit", "opa.hficongestioncontroltable.cctilimit", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_HFICongestionControlTable_CCT_Shift, { "CCT Shift", "opa.hficongestioncontroltable.cctshift", FT_UINT16, BASE_HEX, NULL, 0xC000, NULL, HFILL } }, { &hf_opa_HFICongestionControlTable_CCT_Multiplier, { "CCT Multiplier", "opa.hficongestioncontroltable.cctmultiplier", FT_UINT16, BASE_HEX, NULL, 0x3FFF, NULL, HFILL } }, /* SA */ { &hf_opa_PortInfoRecord_LinkDownReason_NeighborLinkDownReason, { "Neighbor Link Down Reason", "opa.portinforecord.linkdownreason.neighborlinkdownreason", FT_UINT8, BASE_HEX, VALS(LinkDownReason), 0x0, NULL, HFILL } }, { &hf_opa_PortInfoRecord_LinkDownReason_LinkDownReason, { "Link Down Reason", "opa.portinforecord.linkdownreason.linkdownreason", FT_UINT8, BASE_HEX, VALS(LinkDownReason), 0x0, NULL, HFILL } }, { &hf_opa_PortInfoRecord_LinkDownReason_Timestamp, { "Time Stamp", "opa.portinforecord.linkdownreason.timestamp", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* InformInfoRecord */ /* InformInfo */ { &hf_opa_InformInfo, { "Inform Info", "opa.informinfo", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_InformInfo_GID, { "GID", "opa.informinfo.gid", FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_InformInfo_LIDRangeBegin, { "LID Range Begin", "opa.informinfo.lidrangebegin", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_InformInfo_LIDRangeEnd, { "LID Range End", "opa.informinfo.lidrangeend", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_InformInfo_IsGeneric, { "Is Generic", "opa.informinfo.isgeneric", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL } }, { &hf_opa_InformInfo_Subscribe, { "Subscribe", "opa.informinfo.subscribe", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_InformInfo_Type, { "Type", "opa.informinfo.type", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_InformInfo_TrapNumber, { "Trap Number", "opa.informinfo.trapnumber", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_InformInfo_DeviceID, { "Device ID", "opa.informinfo.deviceid", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_InformInfo_QPN, { "QPN", "opa.informinfo.qpn", FT_UINT24, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_InformInfo_reserved, { "Reserved (3 bits)", "opa.informinfo.reserved", FT_UINT8, BASE_HEX, NULL, 0xE0, NULL, HFILL } }, { &hf_opa_InformInfo_RespTimeValue, { "Resp Time Value", "opa.informinfo.resptimevalue", FT_UINT8, BASE_HEX, NULL, 0x1F, NULL, HFILL } }, { &hf_opa_InformInfo_ProducerType, { "Producer Type", "opa.informinfo.producertype", FT_UINT24, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_InformInfo_VendorID, { "Vendor ID", "opa.informinfo.vendorid", FT_UINT24, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* LinkRecord */ { &hf_opa_LinkRecord, { "Link Record", "opa.linkrecord", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_LinkRecord_ToPort, { "To Port", "opa.linkrecord.toport", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_LinkRecord_ToLID, { "To LID", "opa.linkrecord.tolid", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* ServiceRecord */ { &hf_opa_ServiceRecord, { "Service Record", "opa.servicerecord", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ServiceRecord_ServiceLease, { "ServiceLease", "opa.servicerecord.servicelease", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ServiceRecord_ServiceKey, { "ServiceKey", "opa.servicerecord.servicekey", FT_BYTES, FT_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ServiceRecord_ServiceName, { "ServiceName", "opa.servicerecord.servicename", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ServiceRecord_ServiceData, { "ServiceData", "opa.servicerecord.servicedata", FT_BYTES, FT_NONE, NULL, 0x0, NULL, HFILL } }, /* ServiceAssociationRecord */ { &hf_opa_ServiceAssociationRecord_ServiceKey, { "ServiceKey", "opa.serviceassociationrecord.servicekey", FT_BYTES, FT_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ServiceAssociationRecord_ServiceName, { "ServiceName", "opa.serviceassociationrecord.servicename", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, /************** * PathRecord * **************/ { &hf_opa_PathRecord, { "Path Record", "opa.pathrecord", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PathRecord_DGID, { "DGID", "opa.pathrecord.dgid", FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PathRecord_SGID, { "SGID", "opa.pathrecord.sgid", FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PathRecord_DLID, { "DLID", "opa.pathrecord.dlid", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PathRecord_SLID, { "SLID", "opa.pathrecord.slid", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PathRecord_RawTraffic, { "Raw Traffic", "opa.pathrecord.rawtraffic", FT_UINT32, BASE_HEX, NULL, 0x80000000, NULL, HFILL } }, { &hf_opa_PathRecord_reserved, { "Reserved (3 bits)", "opa.pathrecord.reserved", FT_UINT32, BASE_HEX, NULL, 0x70000000, NULL, HFILL } }, { &hf_opa_PathRecord_FlowLabel, { "Flow Label", "opa.pathrecord.flowlabel", FT_UINT32, BASE_HEX, NULL, 0x0FFFFF00, NULL, HFILL } }, { &hf_opa_PathRecord_HopLimit, { "Hop Limit", "opa.pathrecord.hoplimit", FT_UINT32, BASE_HEX, NULL, 0x000000FF, NULL, HFILL } }, { &hf_opa_PathRecord_TClass, { "T Class", "opa.pathrecord.tclass", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PathRecord_Reversible, { "Reversible", "opa.pathrecord.reversible", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL } }, { &hf_opa_PathRecord_NumbPath, { "Numb Path", "opa.pathrecord.numbpath", FT_UINT8, BASE_HEX, NULL, 0x7F, NULL, HFILL } }, { &hf_opa_PathRecord_P_Key, { "P_Key", "opa.pathrecord.p_key", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PathRecord_QosType, { "Qos Type", "opa.pathrecord.qostype", FT_UINT16, BASE_HEX, NULL, 0xC000, NULL, HFILL } }, { &hf_opa_PathRecord_reserved2, { "Reserved (2 bits)", "opa.pathrecord.reserved2", FT_UINT16, BASE_HEX, NULL, 0x3000, NULL, HFILL } }, { &hf_opa_PathRecord_QosPriority, { "Qos Priority", "opa.pathrecord.qospriority", FT_UINT16, BASE_HEX, NULL, 0x0FF0, NULL, HFILL } }, { &hf_opa_PathRecord_SL, { "SL", "opa.pathrecord.sl", FT_UINT16, BASE_HEX, NULL, 0x000F, NULL, HFILL } }, { &hf_opa_PathRecord_MTUSelector, { "MTU Selector", "opa.pathrecord.mtuselector", FT_UINT8, BASE_HEX, NULL, 0xC0, NULL, HFILL } }, { &hf_opa_PathRecord_MTU, { "MTU", "opa.pathrecord.mtu", FT_UINT8, BASE_HEX, VALS(MTU), 0x3F, NULL, HFILL } }, { &hf_opa_PathRecord_RateSelector, { "Rate Selector", "opa.pathrecord.rateselector", FT_UINT8, BASE_HEX, NULL, 0xC0, NULL, HFILL } }, { &hf_opa_PathRecord_Rate, { "Rate", "opa.pathrecord.rate", FT_UINT8, BASE_HEX, NULL, 0x3F, NULL, HFILL } }, { &hf_opa_PathRecord_PacketLifeTimeSelector, { "Packet Life Time Selector", "opa.pathrecord.packetlifetimeselector", FT_UINT8, BASE_HEX, NULL, 0xC0, NULL, HFILL } }, { &hf_opa_PathRecord_PacketLifeTime, { "Packet Life Time", "opa.pathrecord.packetlifetime", FT_UINT8, BASE_HEX, NULL, 0x3F, NULL, HFILL } }, { &hf_opa_PathRecord_Preference, { "Preference", "opa.pathrecord.preference", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /****************** * MCMemberRecord * ******************/ { &hf_opa_MCMemberRecord, { "MC Member Record", "opa.mcmemberrecord", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_MCMemberRecord_Q_Key, { "Q_Key", "opa.mcmemberrecord.q_key", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_MCMemberRecord_MLID, { "MLID", "opa.mcmemberrecord.mlid", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_MCMemberRecord_MTUSelector, { "MTU Selector", "opa.mcmemberrecord.mtuselector", FT_UINT8, BASE_HEX, NULL, 0xC0, NULL, HFILL } }, { &hf_opa_MCMemberRecord_MTU, { "MTU", "opa.mcmemberrecord.mtu", FT_UINT8, BASE_HEX, VALS(MTU), 0x3F, NULL, HFILL } }, { &hf_opa_MCMemberRecord_TClass, { "T Class", "opa.mcmemberrecord.tclass", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_MCMemberRecord_P_Key, { "P_Key", "opa.mcmemberrecord.p_key", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_MCMemberRecord_RateSelector, { "Rate Selector", "opa.mcmemberrecord.rateselector", FT_UINT8, BASE_HEX, NULL, 0xC0, NULL, HFILL } }, { &hf_opa_MCMemberRecord_Rate, { "Rate", "opa.mcmemberrecord.rate", FT_UINT8, BASE_HEX, NULL, 0x3F, NULL, HFILL } }, { &hf_opa_MCMemberRecord_PacketLifeTimeSelector, { "Packet Life Time Selector", "opa.mcmemberrecord.packetlifetimeselector", FT_UINT8, BASE_HEX, NULL, 0xC0, NULL, HFILL } }, { &hf_opa_MCMemberRecord_PacketLifeTime, { "Packet Life Time", "opa.mcmemberrecord.packetlifetime", FT_UINT8, BASE_HEX, NULL, 0x3F, NULL, HFILL } }, { &hf_opa_MCMemberRecord_SL, { "SL", "opa.mcmemberrecord.sl", FT_UINT32, BASE_HEX, NULL, 0xF8000000, NULL, HFILL } }, { &hf_opa_MCMemberRecord_reserved, { "Reserved (19 bits)", "opa.mcmemberrecord.reserved", FT_UINT32, BASE_HEX, NULL, 0x07FFFF00, NULL, HFILL } }, { &hf_opa_MCMemberRecord_HopLimit, { "Hop Limit", "opa.mcmemberrecord.hoplimit", FT_UINT32, BASE_HEX, NULL, 0x000000FF, NULL, HFILL } }, { &hf_opa_MCMemberRecord_Scope, { "Scope", "opa.mcmemberrecord.scope", FT_UINT8, BASE_HEX, NULL, 0xF0, NULL, HFILL } }, { &hf_opa_MCMemberRecord_reserved2, { "Reserved (1 bit)", "opa.mcmemberrecord.reserved2", FT_UINT8, BASE_HEX, NULL, 0x08, NULL, HFILL } }, { &hf_opa_MCMemberRecord_JoinSendOnlyMember, { "Join Send Only Member", "opa.mcmemberrecord.joinsendonlymember", FT_UINT8, BASE_HEX, NULL, 0x04, NULL, HFILL } }, { &hf_opa_MCMemberRecord_JoinNonMember, { "Join Non Member", "opa.mcmemberrecord.joinnonmember", FT_UINT8, BASE_HEX, NULL, 0x04, NULL, HFILL } }, { &hf_opa_MCMemberRecord_JoinFullMember, { "Join Full Member", "opa.mcmemberrecord.joinfullmember", FT_UINT8, BASE_HEX, NULL, 0x04, NULL, HFILL } }, { &hf_opa_MCMemberRecord_ProxyJoin, { "Proxy Join", "opa.mcmemberrecord.proxyjoin", FT_UINT8, BASE_HEX, NULL, 0x80, NULL, HFILL } }, { &hf_opa_MCMemberRecord_reserved3, { "Reserved (7 bits)", "opa.mcmemberrecord.reserved3", FT_UINT8, BASE_HEX, NULL, 0x7F, NULL, HFILL } }, /* TraceRecord */ { &hf_opa_TraceRecord, { "Trace Record", "opa.tracerecord", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_TraceRecord_IDGeneration, { "ID Generation", "opa.tracerecord.idgeneration", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_TraceRecord_NodeType, { "Node Type", "opa.tracerecord.nodetype", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_TraceRecord_NodeID, { "Node ID", "opa.tracerecord.nodeid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_TraceRecord_ChassisID, { "Chassis ID", "opa.tracerecord.chassisid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_TraceRecord_EntryPortID, { "Entry Port ID", "opa.tracerecord.entryportid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_TraceRecord_ExitPortID, { "Exit Port ID", "opa.tracerecord.exitportid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_TraceRecord_EntryPort, { "Entry Port", "opa.tracerecord.entryport", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_TraceRecord_ExitPort, { "Exit Port", "opa.tracerecord.exitport", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /******************* * MultiPathRecord * *******************/ { &hf_opa_MultiPathRecord, { "Multi Path Record", "opa.multipathrecord", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_MultiPathRecord_reserved, { "Reserved (4 bits)", "opa.multipathrecord.reserved", FT_UINT32, BASE_HEX, NULL, 0xF0000000, NULL, HFILL } }, { &hf_opa_MultiPathRecord_FlowLabel, { "Flow Label", "opa.multipathrecord.flowlabel", FT_UINT32, BASE_HEX, NULL, 0x0FFFFF00, NULL, HFILL } }, { &hf_opa_MultiPathRecord_HopLimit, { "Hop Limit", "opa.multipathrecord.hoplimit", FT_UINT32, BASE_HEX, NULL, 0x000000FF, NULL, HFILL } }, { &hf_opa_MultiPathRecord_TClass, { "T Class", "opa.multipathrecord.tclass", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_MultiPathRecord_Reversible, { "Reversible", "opa.multipathrecord.reversible", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL } }, { &hf_opa_MultiPathRecord_NumbPath, { "Numb Path", "opa.multipathrecord.numbpath", FT_UINT8, BASE_HEX, NULL, 0x7F, NULL, HFILL } }, { &hf_opa_MultiPathRecord_P_Key, { "P_Key", "opa.multipathrecord.p_key", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_MultiPathRecord_QoSType, { "QoS Type", "opa.multipathrecord.qostype", FT_UINT16, BASE_HEX, NULL, 0xC000, NULL, HFILL } }, { &hf_opa_MultiPathRecord_QoSPriority, { "QoS Priority", "opa.multipathrecord.qospriority", FT_UINT16, BASE_HEX, NULL, 0x3FC0, NULL, HFILL } }, { &hf_opa_MultiPathRecord_reserved2, { "Reserved (1 bit)", "opa.multipathrecord.reserved2", FT_UINT16, BASE_HEX, NULL, 0x0020, NULL, HFILL } }, { &hf_opa_MultiPathRecord_SL, { "SL", "opa.multipathrecord.sl", FT_UINT16, BASE_HEX, NULL, 0x001F, NULL, HFILL } }, { &hf_opa_MultiPathRecord_MTUSelector, { "MTU Selector", "opa.multipathrecord.mtuselector", FT_UINT8, BASE_HEX, NULL, 0xC0, NULL, HFILL } }, { &hf_opa_MultiPathRecord_MTU, { "MTU", "opa.multipathrecord.mtu", FT_UINT8, BASE_HEX, VALS(MTU), 0x3F, NULL, HFILL } }, { &hf_opa_MultiPathRecord_RateSelector, { "Rate Selector", "opa.multipathrecord.rateselector", FT_UINT8, BASE_HEX, NULL, 0xC0, NULL, HFILL } }, { &hf_opa_MultiPathRecord_Rate, { "Rate", "opa.multipathrecord.rate", FT_UINT8, BASE_HEX, NULL, 0x3F, NULL, HFILL } }, { &hf_opa_MultiPathRecord_PacketLifeTimeSelector, { "Packet Life Time Selector", "opa.multipathrecord.packetlifetimeselector", FT_UINT8, BASE_HEX, NULL, 0xC0, NULL, HFILL } }, { &hf_opa_MultiPathRecord_PacketLifeTime, { "Packet Life Time", "opa.multipathrecord.packetlifetime", FT_UINT8, BASE_HEX, NULL, 0x3F, NULL, HFILL } }, { &hf_opa_MultiPathRecord_IndependenceSelector, { "Independence Selector", "opa.multipathrecord.independenceselector", FT_UINT8, BASE_HEX, NULL, 0xC0, NULL, HFILL } }, { &hf_opa_MultiPathRecord_SGIDScope, { "SGID Scope", "opa.multipathrecord.sgidscope", FT_UINT8, BASE_HEX, NULL, 0x38, NULL, HFILL } }, { &hf_opa_MultiPathRecord_DGIDScope, { "DGID Scope", "opa.multipathrecord.dgidscope", FT_UINT8, BASE_HEX, NULL, 0x07, NULL, HFILL } }, { &hf_opa_MultiPathRecord_SGIDCount, { "SGID Count", "opa.multipathrecord.sgidcount", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_MultiPathRecord_DGIDCount, { "DGID Count", "opa.multipathrecord.dgidcount", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_MultiPathRecord_SGID, { "Source GID", "opa.multipathrecord.sgid", FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_MultiPathRecord_DGID, { "Dest GID", "opa.multipathrecord.dgid", FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_MultiPathRecord_L2_8B, { "8B Support", "opa.multipathrecord.l2_8b", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL } }, { &hf_opa_MultiPathRecord_L2_10B, { "10B Support", "opa.multipathrecord.l2_10b", FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL } }, { &hf_opa_MultiPathRecord_L2_9B, { "9B Support", "opa.multipathrecord.l2_9b", FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL } }, { &hf_opa_MultiPathRecord_L2_16B, { "16B Support", "opa.multipathrecord.l2_16b", FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL } }, { &hf_opa_MultiPathRecord_reserved3, { "Reserved (4 bits)", "opa.multipathrecord.reserved3", FT_UINT8, BASE_HEX, NULL, 0x0F, NULL, HFILL } }, /* GUID */ { &hf_opa_MultiPathRecord_ServiceID, { "Service ID", "opa.multipathrecord.serviceid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_MultiPathRecord_SubnetPrefix, { "SubnetPrefix", "opa.multipathrecord.subnetprefix", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_MultiPathRecord_SGUIDScope, { "SGUIDScope", "opa.multipathrecord.sguidscope", FT_UINT8, BASE_HEX, NULL, 0x38, NULL, HFILL } }, { &hf_opa_MultiPathRecord_DGUIDScope, { "DGUIDScope", "opa.multipathrecord.dguidscope", FT_UINT8, BASE_HEX, NULL, 0x07, NULL, HFILL } }, { &hf_opa_MultiPathRecord_SGUIDCount, { "SGUIDCount", "opa.multipathrecord.sguidcount", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_MultiPathRecord_DGUIDCount, { "DGUIDCount", "opa.multipathrecord.dguidcount", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_MultiPathRecord_SGUID, { "Source GUID", "opa.multipathrecord.sguid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_MultiPathRecord_DGUID, { "Dest GUID", "opa.multipathrecord.dguid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* LID */ { &hf_opa_MultiPathRecord_SLIDCount, { "SLIDCount", "opa.multipathrecord.slidcount", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_MultiPathRecord_DLIDCount, { "DLIDCount", "opa.multipathrecord.dlidcount", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_MultiPathRecord_SLID, { "Source LID", "opa.multipathrecord.slid", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_MultiPathRecord_DLID, { "Dest LID", "opa.multipathrecord.dlid", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /******************* * CableInfoRecord * *******************/ { &hf_opa_CableInfoRecord, { "Cable Info Record", "opa.cableinforecord", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_CableInfoRecord_Lid, { "LID", "opa.cableinforecord.lid", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_CableInfoRecord_Port, { "Port", "opa.cableinforecord.port", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_CableInfoRecord_Length, { "Length", "opa.cableinforecord.length", FT_UINT8, BASE_DEC, NULL, 0xFE, NULL, HFILL } }, { &hf_opa_CableInfoRecord_reserved, { "Reserved (1 bit)", "opa.cableinforecord.reserved", FT_UINT8, BASE_HEX, NULL, 0x01, NULL, HFILL } }, { &hf_opa_CableInfoRecord_Address, { "Address", "opa.cableinforecord.address", FT_UINT16, BASE_HEX, NULL, 0xFFF0, NULL, HFILL } }, { &hf_opa_CableInfoRecord_PortType, { "PortType", "opa.cableinforecord.porttype", FT_UINT16, BASE_HEX, VALS(PortType), 0x000F, NULL, HFILL } }, { &hf_opa_CableInfoRecord_Data, { "Data", "opa.cableinforecord.data", FT_BYTES, FT_NONE, NULL, 0x0, NULL, HFILL } }, /************** * PortStatus * **************/ { &hf_opa_PortStatus, { "Port Status", "opa.pm.portstatus", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_PortNumber, { "Port Number", "opa.pm.portstatus.portnumber", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_VLSelectMask, { "VL Select Mask", "opa.pm.portstatus.vlselectmask", FT_UINT32, BASE_CUSTOM, CF_FUNC(cf_opa_mad_32b_mask), 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_PortXmitData, { "PortXmitData", "opa.pm.portstatus.portxmitdata", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_PortRcvData, { "PortRcvData", "opa.pm.portstatus.portrcvdata", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_PortXmitPkts, { "PortXmitPkts", "opa.pm.portstatus.portxmitpkts", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_PortRcvPkts, { "PortRcvPkts", "opa.pm.portstatus.portrcvpkts", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_PortMulticastXmitPkts, { "PortMulticastXmitPkts", "opa.pm.portstatus.portmulticastxmitpkts", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_PortMulticastRcvPkts, { "PortMulticastRcvPkts", "opa.pm.portstatus.portmulticastrcvpkts", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_PortXmitWait, { "PortXmitWait", "opa.pm.portstatus.portxmitwait", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_SwPortCongestion, { "SwPortCongestion", "opa.pm.portstatus.swportcongestion", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_PortRcvFECN, { "PortRcvFECN", "opa.pm.portstatus.portrecvfecn", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_PortRcvBECN, { "PortRcvBECN", "opa.pm.portstatus.portrecvbecn", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_PortXmitTimeCong, { "PortXmitTimeCong", "opa.pm.portstatus.portxmittimecong", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_PortXmitWastedBW, { "PortXmitWastedBW", "opa.pm.portstatus.portxmitwastedbw", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_PortXmitWaitData, { "PortXmitWaitData", "opa.pm.portstatus.portxmitwaitdata", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_PortRcvBubble, { "PortRcvBubble", "opa.pm.portstatus.portrcvbubble", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_PortMarkFECN, { "PortMarkFECN", "opa.pm.portstatus.portmarkfecn", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_PortRcvConstraintErrors, { "PortRcvConstraintErrors", "opa.pm.portstatus.portrcvconstrainterrors", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_PortRcvSwitchRelayErrors, { "PortRcvSwitchRelayErrors", "opa.pm.portstatus.portrcvswitchrelayerrors", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_PortXmitDiscards, { "PortXmitDiscards", "opa.pm.portstatus.portxmitdiscards", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_PortXmitConstraintErrors, { "PortXmitConstraintErrors", "opa.pm.portstatus.portxmitconstrainterrors", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_PortRcvRemotePhysicalErrors, { "PortRcvRemotePhysicalErrors", "opa.pm.portstatus.portrcvremotephysicalerrors", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_LocalLinkIntegrityErrors, { "LocalLinkIntegrityErrors", "opa.pm.portstatus.locallinkintegrityerrors", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_PortRcvErrors, { "PortRcvErrors", "opa.pm.portstatus.portrcverrors", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_ExcessiveBufferOverruns, { "ExcessiveBufferOverruns", "opa.pm.portstatus.excessivebufferoverruns", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_FMConfigErrors, { "FMConfigErrors", "opa.pm.portstatus.fmconfigerrors", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_LinkErrorRecovery, { "LinkErrorRecovery", "opa.pm.portstatus.linkerrorrecovery", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_LinkDowned, { "LinkDowned", "opa.pm.portstatus.linkdowned", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_UncorrectableErrors, { "UncorrectableErrors", "opa.pm.portstatus.uncorrectableerrors", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_reserved, { "Reserved", "opa.pm.portstatus.reserved", FT_UINT8, BASE_DEC, NULL, 0xF8, NULL, HFILL } }, { &hf_opa_PortStatus_LinkQualityIndicator, { "LinkQualityIndicator", "opa.pm.portstatus.linkqualityindicator", FT_UINT8, BASE_DEC, VALS(LinkQualityIndicator), 0x07, NULL, HFILL } }, { &hf_opa_PortStatus_PortVLXmitData, { "PortVLXmitData", "opa.pm.portstatus.vl.xmitdata", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_PortVLRcvData, { "PortVLRcvData", "opa.pm.portstatus.vl.rcvdata", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_PortVLXmitPkts, { "PortVLXmitPkts", "opa.pm.portstatus.vl.xmitpkts", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_PortVLRcvPkts, { "PortVLRcvPkts", "opa.pm.portstatus.vl.rcvpkts", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_PortVLXmitWait, { "PortVLXmitWait", "opa.pm.portstatus.vl.xmitwait", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_SwPortVLCongestion, { "SwPortVLCongestion", "opa.pm.portstatus.vl.swcongestion", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_PortVLRcvFECN, { "PortVLRcvFECN", "opa.pm.portstatus.vl.rcvfecn", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_PortVLRcvBECN, { "PortVLRcvBECN", "opa.pm.portstatus.vl.rcvbecn", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_PortVLXmitTimeCong, { "PortVLXmitTimeCong", "opa.pm.portstatus.vl.xmittimecong", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_PortVLXmitWastedBW, { "PortVLXmitWastedBW", "opa.pm.portstatus.vl.xmitwastedbw", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_PortVLXmitWaitData, { "PortVLXmitWaitData", "opa.pm.portstatus.vl.xmitwaitdata", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_PortVLRcvBubble, { "PortVLRcvBubble", "opa.pm.portstatus.vl.rcvbubble", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_PortVLMarkFECN, { "PortVLMarkFECN", "opa.pm.portstatus.vl.markfecn", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PortStatus_PortVLXmitDiscards, { "PortVLXmitDiscards", "opa.pm.portstatus.vl.xmitdiscards", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, /******************* * ClearPortStatus * *******************/ { &hf_opa_ClearPortStatus, { "Clear Port Status", "opa.pm.clearportstatus", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ClearPortStatus_PortSelectMask, { "Port Select Mask", "opa.pm.clearportstatus.portselectmask", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ClearPortStatus_CounterSelectMask, { "CounterSelectMask", "opa.pm.clearportstatus.counterselectmask", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ClearPortStatus_PortXmitData, { "PortXmitData", "opa.pm.clearportstatus.portxmitdata", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x80000000, NULL, HFILL } }, { &hf_opa_ClearPortStatus_PortRcvData, { "PortRcvData", "opa.pm.clearportstatus.portrcvdata", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x40000000, NULL, HFILL } }, { &hf_opa_ClearPortStatus_PortXmitPkts, { "PortXmitPkts", "opa.pm.clearportstatus.portxmitpkts", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x20000000, NULL, HFILL } }, { &hf_opa_ClearPortStatus_PortRcvPkts, { "PortRcvPkts", "opa.pm.clearportstatus.portrcvpkts", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x10000000, NULL, HFILL } }, { &hf_opa_ClearPortStatus_PortMulticastXmitPkts, { "PortMulticastXmitPkts", "opa.pm.clearportstatus.portmulticastxmitpkts", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x08000000, NULL, HFILL } }, { &hf_opa_ClearPortStatus_PortMulticastRcvPkts, { "PortMulticastRcvPkts", "opa.pm.clearportstatus.portmulticastrcvpkts", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x04000000, NULL, HFILL } }, { &hf_opa_ClearPortStatus_PortXmitWait, { "PortXmitWait", "opa.pm.clearportstatus.portxmitwait", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x02000000, NULL, HFILL } }, { &hf_opa_ClearPortStatus_SwPortCongestion, { "SwPortCongestion", "opa.pm.clearportstatus.swportcongestion", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x01000000, NULL, HFILL } }, { &hf_opa_ClearPortStatus_PortRcvFECN, { "PortRcvFECN", "opa.pm.clearportstatus.portrecvfecn", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00800000, NULL, HFILL } }, { &hf_opa_ClearPortStatus_PortRcvBECN, { "PortRcvBECN", "opa.pm.clearportstatus.portrecvbecn", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00400000, NULL, HFILL } }, { &hf_opa_ClearPortStatus_PortXmitTimeCong, { "PortXmitTimeCong", "opa.pm.clearportstatus.portxmittimecong", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00200000, NULL, HFILL } }, { &hf_opa_ClearPortStatus_PortXmitWastedBW, { "PortXmitWastedBW", "opa.pm.clearportstatus.portxmitwastedbw", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00100000, NULL, HFILL } }, { &hf_opa_ClearPortStatus_PortXmitWaitData, { "PortXmitWaitData", "opa.pm.clearportstatus.portxmitwaitdata", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00080000, NULL, HFILL } }, { &hf_opa_ClearPortStatus_PortRcvBubble, { "PortRcvBubble", "opa.pm.clearportstatus.portrcvbubble", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00040000, NULL, HFILL } }, { &hf_opa_ClearPortStatus_PortMarkFECN, { "PortMarkFECN", "opa.pm.clearportstatus.portmarkfecn", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00020000, NULL, HFILL } }, { &hf_opa_ClearPortStatus_PortRcvConstraintErrors, { "PortRcvConstraintErrors", "opa.pm.clearportstatus.portrcvconstrainterrors", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00010000, NULL, HFILL } }, { &hf_opa_ClearPortStatus_PortRcvSwitchRelayErrors, { "PortRcvSwitchRelayErrors", "opa.pm.clearportstatus.portrcvswitchrelayerrors", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00008000, NULL, HFILL } }, { &hf_opa_ClearPortStatus_PortXmitDiscards, { "PortXmitDiscards", "opa.pm.clearportstatus.portxmitdiscards", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00004000, NULL, HFILL } }, { &hf_opa_ClearPortStatus_PortXmitConstraintErrors, { "PortXmitConstraintErrors", "opa.pm.clearportstatus.portxmitconstrainterrors", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00002000, NULL, HFILL } }, { &hf_opa_ClearPortStatus_PortRcvRemotePhysicalErrors, { "PortRcvRemotePhysicalErrors", "opa.pm.clearportstatus.portrcvremotephysicalerrors", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00001000, NULL, HFILL } }, { &hf_opa_ClearPortStatus_LocalLinkIntegrityErrors, { "LocalLinkIntegrityErrors", "opa.pm.clearportstatus.locallinkintegrityerrors", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00000800, NULL, HFILL } }, { &hf_opa_ClearPortStatus_PortRcvErrors, { "PortRcvErrors", "opa.pm.clearportstatus.portrcverrors", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00000400, NULL, HFILL } }, { &hf_opa_ClearPortStatus_ExcessiveBufferOverruns, { "ExcessiveBufferOverruns", "opa.pm.clearportstatus.excessivebufferoverruns", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00000200, NULL, HFILL } }, { &hf_opa_ClearPortStatus_FMConfigErrors, { "FMConfigErrors", "opa.pm.clearportstatus.fmconfigerrors", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00000100, NULL, HFILL } }, { &hf_opa_ClearPortStatus_LinkErrorRecovery, { "LinkErrorRecovery", "opa.pm.clearportstatus.linkerrorrecovery", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00000080, NULL, HFILL } }, { &hf_opa_ClearPortStatus_LinkDowned, { "LinkDowned", "opa.pm.clearportstatus.linkdowned", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00000040, NULL, HFILL } }, { &hf_opa_ClearPortStatus_UncorrectableErrors, { "UncorrectableErrors", "opa.pm.clearportstatus.uncorrectableerrors", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00000020, NULL, HFILL } }, { &hf_opa_ClearPortStatus_reserved, { "Reserved (5 bits)", "opa.pm.clearportstatus.reserved", FT_UINT32, BASE_DEC, NULL, 0x0000001F, NULL, HFILL } }, /* DataPortCounters */ { &hf_opa_DataPortCounters, { "Data Port Counters", "opa.pm.dataportcounters", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_DataPortCounters_PortSelectMask, { "Port Select Mask", "opa.pm.dataportcounters.portselectmask", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_DataPortCounters_VLSelectMask, { "VL Select Mask", "opa.pm.dataportcounters.vlselectmask", FT_UINT32, BASE_CUSTOM, CF_FUNC(cf_opa_mad_32b_mask), 0x0, NULL, HFILL } }, { &hf_opa_DataPortCounters_resolution_reserved, { "Reserved (24 bits)", "opa.pm.dataportcounters.reserved", FT_UINT32, BASE_HEX, NULL, 0xFFFFFF00, NULL, HFILL } }, { &hf_opa_DataPortCounters_LocalLinkIntegrityResolution, { "Local Link Integrity Resolution", "opa.pm.dataportcounters.locallinkintegrityresolution", FT_UINT32, BASE_DEC, NULL, 0x000000F0, NULL, HFILL } }, { &hf_opa_DataPortCounters_LinkErrorRecoveryResolution, { "Link Error Recovery Resolution", "opa.pm.dataportcounters.linkerrorrecoveryresolution", FT_UINT32, BASE_DEC, NULL, 0x0000000F, NULL, HFILL } }, { &hf_opa_DataPortCounters_PortNumber, { "PortNumber", "opa.pm.dataportcounters.portnumber", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_DataPortCounters_lqi_reserved, { "Reserved (29 bits)", "opa.pm.dataportcounters.reserved", FT_UINT32, BASE_DEC, NULL, 0xFFFFFFF8, NULL, HFILL } }, { &hf_opa_DataPortCounters_LinkQualityIndicator, { "LinkQualityIndicator", "opa.pm.dataportcounters.linkqualityindicator", FT_UINT32, BASE_DEC, VALS(LinkQualityIndicator), 0x00000007, NULL, HFILL } }, { &hf_opa_DataPortCounters_PortXmitData, { "PortXmitData", "opa.pm.dataportcounters.portxmitdata", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_DataPortCounters_PortRcvData, { "PortRcvData", "opa.pm.dataportcounters.portrcvdata", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_DataPortCounters_PortXmitPkts, { "PortXmitPkts", "opa.pm.dataportcounters.portxmitpkts", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_DataPortCounters_PortRcvPkts, { "PortRcvPkts", "opa.pm.dataportcounters.portrcvpkts", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_DataPortCounters_PortMulticastXmitPkts, { "PortMulticastXmitPkts", "opa.pm.dataportcounters.portmulticastxmitpkts", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_DataPortCounters_PortMulticastRcvPkts, { "PortMulticastRcvPkts", "opa.pm.dataportcounters.portmulticastrcvpkts", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_DataPortCounters_PortXmitWait, { "PortXmitWait", "opa.pm.dataportcounters.portxmitwait", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_DataPortCounters_SwPortCongestion, { "SwPortCongestion", "opa.pm.dataportcounters.swportcongestion", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_DataPortCounters_PortRcvFECN, { "PortRcvFECN", "opa.pm.dataportcounters.portrecvfecn", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_DataPortCounters_PortRcvBECN, { "PortRcvBECN", "opa.pm.dataportcounters.portrecvbecn", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_DataPortCounters_PortXmitTimeCong, { "PortXmitTimeCong", "opa.pm.dataportcounters.portxmittimecong", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_DataPortCounters_PortXmitWastedBW, { "PortXmitWastedBW", "opa.pm.dataportcounters.portxmitwastedbw", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_DataPortCounters_PortXmitWaitData, { "PortXmitWaitData", "opa.pm.dataportcounters.portxmitwaitdata", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_DataPortCounters_PortRcvBubble, { "PortRcvBubble", "opa.pm.dataportcounters.portrcvbubble", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_DataPortCounters_PortMarkFECN, { "PortMarkFECN", "opa.pm.dataportcounters.portmarkfecn", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_DataPortCounters_PortErrorCounterSummary, { "PortErrorCounterSummary", "opa.pm.dataportcounters.porterrorcountersummary", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_DataPortCounters_PortVLXmitData, { "PortVLXmitData", "opa.pm.dataportcounters.vl.xmitdata", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_DataPortCounters_PortVLRcvData, { "PortVLRcvData", "opa.pm.dataportcounters.vl.rcvdata", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_DataPortCounters_PortVLXmitPkts, { "PortVLXmitPkts", "opa.pm.dataportcounters.vl.xmitpkts", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_DataPortCounters_PortVLRcvPkts, { "PortVLRcvPkts", "opa.pm.dataportcounters.vl.rcvpkts", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_DataPortCounters_PortVLXmitWait, { "PortVLXmitWait", "opa.pm.dataportcounters.vl.xmitwait", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_DataPortCounters_SwPortVLCongestion, { "SwPortVLCongestion", "opa.pm.dataportcounters.vl.swcongestion", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_DataPortCounters_PortVLRcvFECN, { "PortVLRcvFECN", "opa.pm.dataportcounters.vl.rcvfecn", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_DataPortCounters_PortVLRcvBECN, { "PortVLRcvBECN", "opa.pm.dataportcounters.vl.rcvbecn", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_DataPortCounters_PortVLXmitTimeCong, { "PortVLXmitTimeCong", "opa.pm.dataportcounters.vl.xmittimecong", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_DataPortCounters_PortVLXmitWastedBW, { "PortVLXmitWastedBW", "opa.pm.dataportcounters.vl.xmitwastedbw", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_DataPortCounters_PortVLXmitWaitData, { "PortVLXmitWaitData", "opa.pm.dataportcounters.vl.xmitwaitdata", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_DataPortCounters_PortVLRcvBubble, { "PortVLRcvBubble", "opa.pm.dataportcounters.vl.rcvbubble", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_DataPortCounters_PortVLMarkFECN, { "PortVLMarkFECN", "opa.pm.dataportcounters.vl.markfecn", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, /* ErrorPortCounters */ { &hf_opa_ErrorPortCounters, { "Error Port Counters", "opa.pm.errorportcounters", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ErrorPortCounters_PortSelectMask, { "Port Select Mask", "opa.pm.errorportcounters.portselectmask", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ErrorPortCounters_VLSelectMask, { "VL Select Mask", "opa.pm.errorportcounters.vlselectmask", FT_UINT32, BASE_CUSTOM, CF_FUNC(cf_opa_mad_32b_mask), 0x0, NULL, HFILL } }, { &hf_opa_ErrorPortCounters_PortNumber, { "PortNumber", "opa.pm.errorportcounters.portnumber", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ErrorPortCounters_PortRcvConstraintErrors, { "PortRcvConstraintErrors", "opa.pm.errorportcounters.portrcvconstrainterrors", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ErrorPortCounters_PortRcvSwitchRelayErrors, { "PortRcvSwitchRelayErrors", "opa.pm.errorportcounters.portrcvswitchrelayerrors", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ErrorPortCounters_PortXmitDiscards, { "PortXmitDiscards", "opa.pm.errorportcounters.portxmitdiscards", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ErrorPortCounters_PortXmitConstraintErrors, { "PortXmitConstraintErrors", "opa.pm.errorportcounters.portxmitconstrainterrors", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ErrorPortCounters_PortRcvRemotePhysicalErrors, { "PortRcvRemotePhysicalErrors", "opa.pm.errorportcounters.portrcvremotephysicalerrors", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ErrorPortCounters_LocalLinkIntegrityErrors, { "LocalLinkIntegrityErrors", "opa.pm.errorportcounters.locallinkintegrityerrors", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ErrorPortCounters_PortRcvErrors, { "PortRcvErrors", "opa.pm.errorportcounters.portrcverrors", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ErrorPortCounters_ExcessiveBufferOverruns, { "ExcessiveBufferOverruns", "opa.pm.errorportcounters.excessivebufferoverruns", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ErrorPortCounters_FMConfigErrors, { "FMConfigErrors", "opa.pm.errorportcounters.fmconfigerrors", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ErrorPortCounters_LinkErrorRecovery, { "LinkErrorRecovery", "opa.pm.errorportcounters.linkerrorrecovery", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ErrorPortCounters_LinkDowned, { "LinkDowned", "opa.pm.errorportcounters.linkdowned", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ErrorPortCounters_UncorrectableErrors, { "UncorrectableErrors", "opa.pm.errorportcounters.uncorrectableerrors", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ErrorPortCounters_PortVLXmitDiscards, { "PortVLXmitDiscards", "opa.pm.errorportcounters.portvlxmitdiscards", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, /* ErrorPortInfo */ { &hf_opa_ErrorPortInfo, { "Error Port Info", "opa.pm.errorportinfo", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_PortSelectMask, { "Port Select Mask", "opa.pm.errorportinfo.portselectmask", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_ErrorInfoSelectMask_PortRcvErrorInfo, { "Port Rcv Error Info", "opa.pm.errorportinfo.errorinfoselectmask.portrcverrorinfo", FT_BOOLEAN, 32, NULL, 0x80000000, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_ErrorInfoSelectMask_ExcessiveBufferOverrunInfo, { "ExcessiveBufferOverrunInfo", "opa.pm.errorportinfo.errorinfoselectmask.excessivebufferoverruninfo", FT_BOOLEAN, 32, NULL, 0x40000000, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_ErrorInfoSelectMask_PortXmitConstraintErrorInfo, { "PortXmitConstraintErrorInfo", "opa.pm.errorportinfo.errorinfoselectmask.portxmitconstrainterrorinfo", FT_BOOLEAN, 32, NULL, 0x20000000, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_ErrorInfoSelectMask_PortRcvConstraintErrorInfo, { "PortRcvConstraintErrorInfo", "opa.pm.errorportinfo.errorinfoselectmask.portrcvconstrainterrorinfo", FT_BOOLEAN, 32, NULL, 0x10000000, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_ErrorInfoSelectMask_PortRcvSwitchRelayErrorInfo, { "PortRcvSwitchRelayErrorInfo", "opa.pm.errorportinfo.errorinfoselectmask.portrcvswitchrelayerrorinfo", FT_BOOLEAN, 32, NULL, 0x08000000, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_ErrorInfoSelectMask_UncorrectableErrorInfo, { "UncorrectableErrorInfo", "opa.pm.errorportinfo.errorinfoselectmask.uncorrectableerrorinfo", FT_BOOLEAN, 32, NULL, 0x04000000, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_ErrorInfoSelectMask_FMConfigErrorInfo, { "Fmconfigerrorinfo", "opa.pm.errorportinfo.errorinfoselectmask.fmconfigerrorinfo", FT_BOOLEAN, 32, NULL, 0x02000000, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_ErrorInfoSelectMask_reserved, { "Reserved (25 bits)", "opa.pm.errorportinfo.errorinfoselectmask.reserved", FT_UINT32, BASE_HEX, NULL, 0x01FFFFFF, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_PortNumber, { "Port Number", "opa.pm.errorportinfo.Portnumber", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_PortRcvErrorInfo_Status, { "Status", "opa.pm.errorportinfo.portrcverrorinfo.status", FT_UINT8, BASE_HEX, NULL, 0x80, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_PortRcvErrorInfo_reserved, { "Reserved", "opa.pm.errorportinfo.portrcverrorinfo.reserved", FT_UINT8, BASE_HEX, NULL, 0x70, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_PortRcvErrorInfo_ErrorCode, { "ErrorCode", "opa.pm.errorportinfo.portrcverrorinfo.errorcode", FT_UINT8, BASE_HEX, NULL, 0x0F, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_PortRcvErrorInfo_PacketFlit1, { "PacketFlit1", "opa.pm.errorportinfo.portrcverrorinfo.packetflit1", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_PortRcvErrorInfo_PacketFlit2, { "PacketFlit2", "opa.pm.errorportinfo.portrcverrorinfo.packetflit2", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_PortRcvErrorInfo_Flit1Bits, { "Flit1Bits", "opa.pm.errorportinfo.portrcverrorinfo.flit1bits", FT_UINT8, BASE_HEX, NULL, 0x80, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_PortRcvErrorInfo_Flit2Bits, { "Flit2Bits", "opa.pm.errorportinfo.portrcverrorinfo.flit2bits", FT_UINT8, BASE_HEX, NULL, 0x40, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_PortRcvErrorInfo_reserved2, { "Reserved (4 bits)", "opa.pm.errorportinfo.portrcverrorinfo.reserved2", FT_UINT8, BASE_HEX, NULL, 0x3F, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_PortRcvErrorInfo_PacketBytes, { "PacketBytes", "opa.pm.errorportinfo.portrcverrorinfo.packetbytes", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_PortRcvErrorInfo_FlitBits, { "FlitBits", "opa.pm.errorportinfo.portrcverrorinfo.flitbits", FT_UINT8, BASE_HEX, NULL, 0x80, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_PortRcvErrorInfo_reserved3, { "Reserved (6 bits)", "opa.pm.errorportinfo.portrcverrorinfo.reserved3", FT_UINT8, BASE_HEX, NULL, 0x7F, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_PortRcvErrorInfo_reserved4, { "Reserved (17 bytes)", "opa.pm.errorportinfo.portrcverrorinfo.reserved4", FT_BYTES, FT_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_ExcessiveBufferOverrunErrorInfo_Status, { "Status", "opa.pm.errorportinfo.excessivebufferoverrunerrorinfo.status", FT_UINT8, BASE_HEX, NULL, 0x80, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_ExcessiveBufferOverrunErrorInfo_SC, { "SC", "opa.pm.errorportinfo.excessivebufferoverrunerrorinfo.sc", FT_UINT8, BASE_HEX, NULL, 0x7C, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_ExcessiveBufferOverrunErrorInfo_reserved, { "Reserved (2 bits)", "opa.pm.errorportinfo.ExcessiveBufferOverrunErrorInfo.Reserved", FT_UINT8, BASE_HEX, NULL, 0x03, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_PortXmitConstraintErrorInfo_Status, { "Status", "opa.pm.errorportinfo.portxmitconstrainterrorinfo.status", FT_UINT8, BASE_HEX, NULL, 0x80, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_PortXmitConstraintErrorInfo_reserved, { "Reserved (7 bits)", "opa.pm.errorportinfo.portxmitconstrainterrorinfo.reserved", FT_UINT8, BASE_HEX, NULL, 0x7F, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_PortXmitConstraintErrorInfo_P_Key, { "P_Key", "opa.pm.errorportinfo.portxmitconstrainterrorinfo.pkey", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_PortXmitConstraintErrorInfo_SLID, { "SLID", "opa.pm.errorportinfo.portxmitconstrainterrorinfo.slid", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_PortRcvConstraintErrorInfo_Status, { "Status", "opa.pm.errorportinfo.portrcvconstrainterrorinfo.status", FT_UINT8, BASE_HEX, NULL, 0x80, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_PortRcvConstraintErrorInfo_reserved, { "Reserved (7 bits)", "opa.pm.errorportinfo.portrcvconstrainterrorinfo.reserved", FT_UINT8, BASE_HEX, NULL, 0x7F, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_PortRcvConstraintErrorInfo_P_Key, { "P_Key", "opa.pm.errorportinfo.portrcvconstrainterrorinfo.pkey", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_PortRcvConstraintErrorInfo_SLID, { "SLID", "opa.pm.errorportinfo.portrcvconstrainterrorinfo.slid", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_PortRcvSwitchRelayErrorInfo_Status, { "Status", "opa.pm.errorportinfo.portrcvswitchrelayerrorinfo.status", FT_UINT8, BASE_HEX, NULL, 0x80, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_PortRcvSwitchRelayErrorInfo_reserved, { "Reserved (3 bits)", "opa.pm.errorportinfo.portrcvswitchrelayerrorinfo.reserved", FT_UINT8, BASE_HEX, NULL, 0x70, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_PortRcvSwitchRelayErrorInfo_ErrorCode, { "ErrorCode", "opa.pm.errorportinfo.portrcvswitchrelayerrorinfo.errorcode", FT_UINT8, BASE_HEX, NULL, 0x0F, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_PortRcvSwitchRelayErrorInfo_DLID, { "DLID", "opa.pm.errorportinfo.portrcvswitchrelayerrorinfo.dlid", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_PortRcvSwitchRelayErrorInfo_EgressPortNum, { "EgressPortNum", "opa.pm.errorportinfo.portrcvswitchrelayerrorinfo.egressportnum", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_PortRcvSwitchRelayErrorInfo_SC, { "SC", "opa.pm.errorportinfo.portrcvswitchrelayerrorinfo.scorsl", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_UncorrectableErrorInfo_Status, { "Status", "opa.pm.errorportinfo.uncorrectableerrorinfo.status", FT_UINT8, BASE_HEX, NULL, 0x80, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_UncorrectableErrorInfo_reserved, { "Reserved (3 bits)", "opa.pm.errorportinfo.uncorrectableerrorinfo.reserved", FT_UINT8, BASE_HEX, NULL, 0x70, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_UncorrectableErrorInfo_ErrorCode, { "ErrorCode", "opa.pm.errorportinfo.uncorrectableerrorinfo.errorcode", FT_UINT8, BASE_HEX, NULL, 0x0F, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_FMConfigErrorInfo_Status, { "Status", "opa.pm.errorportinfo.fmconfigerrorinfo.status", FT_UINT8, BASE_HEX, NULL, 0x80, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_FMConfigErrorInfo_reserved, { "Reserved (3 bits)", "opa.pm.errorportinfo.fmconfigerrorinfo.reserved", FT_UINT8, BASE_HEX, NULL, 0x70, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_FMConfigErrorInfo_ErrorCode, { "ErrorCode", "opa.pm.errorportinfo.fmconfigerrorinfo.errorcode", FT_UINT8, BASE_HEX, NULL, 0x0F, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_FMConfigErrorInfo_VL, { "VL", "opa.pm.errorportinfo.fmconfigerrorinfo.vl", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_FMConfigErrorInfo_Distance, { "Distance", "opa.pm.errorportinfo.fmconfigerrorinfo.distance", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_FMConfigErrorInfo_BadFlitBits, { "BadFlitBits", "opa.pm.errorportinfo.fmconfigerrorinfo.badflitbits", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ErrorPortInfo_FMConfigErrorInfo_SC, { "SC", "opa.pm.errorportinfo.fmconfigerrorinfo.sc", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* Gerneral PA */ { &hf_opa_ImageID_imageNumber, { "imageNumber", "opa.pa.imageid.imagenumber", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ImageID_imageOffset, { "imageOffset", "opa.pa.imageid.imageoffset", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* GetGroupList */ { &hf_opa_GetGroupList, { "Group List", "opa.pa.getgrouplist", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetGroupList_groupName, { "Group Name", "opa.pa.getgrouplist.groupname", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, /* GetGroupInfo */ { &hf_opa_GetGroupInfo, { "Group Info", "opa.pa.getgroupinfo", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetGroupInfo_groupName, { "Group Name", "opa.pa.getgroupinfo.groupname", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetGroupInfo_numInternalPorts, { "numInternalPorts", "opa.pa.getgroupinfo.numinternalports", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetGroupInfo_numExternalPorts, { "numExternalPorts", "opa.pa.getgroupinfo.numexternalports", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetGroupInfo_totalMBps, { "totalMBps", "opa.pa.getgroupinfo.totalmbps", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetGroupInfo_totalKPps, { "totalKPps", "opa.pa.getgroupinfo.totalkpps", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetGroupInfo_avgMBps, { "avgMBps", "opa.pa.getgroupinfo.avgmbps", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetGroupInfo_minMBps, { "minMBps", "opa.pa.getgroupinfo.minmbps", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetGroupInfo_maxMBps, { "maxMBps", "opa.pa.getgroupinfo.maxmbps", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetGroupInfo_numBWBuckets, { "numBWBuckets", "opa.pa.getgroupinfo.numbwbuckets", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetGroupInfo_BWBuckets, { "BWBuckets", "opa.pa.getgroupinfo.bwbuckets", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetGroupInfo_avgKPps, { "avgKPps", "opa.pa.getgroupinfo.avgkpps", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetGroupInfo_minKPps, { "minKPps", "opa.pa.getgroupinfo.minkpps", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetGroupInfo_maxKPps, { "maxKPps", "opa.pa.getgroupinfo.maxkpps", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetGroupInfo_pmaFailedPorts, { "pmaFailedPorts", "opa.pa.getgroupinfo.pmafailedports", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetGroupInfo_topoFailedPorts, { "topoFailedPorts", "opa.pa.getgroupinfo.topofailedports", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetGroupInfo_integrityErrors, { "integrityErrors", "opa.pa.getgroupinfo.integrityerrors", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetGroupInfo_congestionErrors, { "congestionErrors", "opa.pa.getgroupinfo.congestionerrors", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetGroupInfo_smaCongestionErrors, { "smaCongestionErrors", "opa.pa.getgroupinfo.smacongestionerrors", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetGroupInfo_bubbleErrors, { "bubbleErrors", "opa.pa.getgroupinfo.bubbleerrors", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetGroupInfo_securityErrors, { "securityErrors", "opa.pa.getgroupinfo.securityerrors", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetGroupInfo_routingErrors, { "routingErrors", "opa.pa.getgroupinfo.routingerrors", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetGroupInfo_utilizationPct10, { "utilizationPct10", "opa.pa.getgroupinfo.utilizationpct10", FT_UINT16, BASE_CUSTOM, CF_FUNC(cf_opa_mad_computed_pct10), 0x0, NULL, HFILL } }, { &hf_opa_GetGroupInfo_discardsPct10, { "discardsPct10", "opa.pa.getgroupinfo.discardspct10", FT_UINT16, BASE_CUSTOM, CF_FUNC(cf_opa_mad_computed_pct10), 0x0, NULL, HFILL } }, { &hf_opa_GetGroupInfo_maxInternalRate, { "maxInternalRate", "opa.pa.getgroupinfo.maxinternalrate", FT_UINT8, BASE_HEX, VALS(Rate), 0x0, NULL, HFILL } }, { &hf_opa_GetGroupInfo_minInternalRate, { "minInternalRate", "opa.pa.getgroupinfo.mininternalrate", FT_UINT8, BASE_HEX, VALS(Rate), 0x0, NULL, HFILL } }, { &hf_opa_GetGroupInfo_maxExternalRate, { "maxExternalRate", "opa.pa.getgroupinfo.maxexternalrate", FT_UINT8, BASE_HEX, VALS(Rate), 0x0, NULL, HFILL } }, { &hf_opa_GetGroupInfo_minExternalRate, { "minExternalRate", "opa.pa.getgroupinfo.minexternalrate", FT_UINT8, BASE_HEX, VALS(Rate), 0x0, NULL, HFILL } }, { &hf_opa_GetGroupInfo_maxInternalMBps, { "maxInternalMBps", "opa.pa.getgroupinfo.maxinternalmbps", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetGroupInfo_maxExternalMBps, { "maxExternalMBps", "opa.pa.getgroupinfo.maxexternalmbps", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* GetGroupConfig */ { &hf_opa_GetGroupConfig, { "Group Config", "opa.pa.getgroupconfig", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetGroupConfig_groupName, { "Group Name", "opa.pa.getgroupconfig.groupname", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetGroupConfig_Port_NodeGUID, { "NodeGUID", "opa.pa.getgroupconfig.port.nodeguid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetGroupConfig_Port_nodeDesc, { "nodeDesc", "opa.pa.getgroupconfig.port.nodedesc", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetGroupConfig_Port_NodeLID, { "NodeLID", "opa.pa.getgroupconfig.port.nodelid", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetGroupConfig_Port_PortNumber, { "PortNumber", "opa.pa.getgroupconfig.port.portnumber", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* GetPortCounters */ { &hf_opa_GetPortCounters, { "Port Counters", "opa.pa.getportcounters", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetPortCounters_nodeLID, { "nodeLID", "opa.pa.getportcounters.nodelid", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetPortCounters_PortNumber, { "PortNumber", "opa.pa.getportcounters.portnumber", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetPortCounters_flags, { "flags", "opa.pa.getportcounters.flags", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetPortCounters_PortXmitData, { "PortXmitData", "opa.pa.getportcounters.portxmitdata", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetPortCounters_PortRcvData, { "PortRcvData", "opa.pa.getportcounters.portrcvdata", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetPortCounters_PortXmitPkts, { "PortXmitPkts", "opa.pa.getportcounters.portxmitpkts", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetPortCounters_PortRcvPkts, { "PortRcvPkts", "opa.pa.getportcounters.portrcvpkts", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetPortCounters_PortMulticastXmitPkts, { "PortMulticastXmitPkts", "opa.pa.getportcounters.portmulticastxmitpkts", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetPortCounters_PortMulticastRcvPkts, { "PortMulticastRcvPkts", "opa.pa.getportcounters.portmulticastrcvpkts", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetPortCounters_LocalLinkIntegrityErrors, { "LocalLinkIntegrityErrors", "opa.pa.getportcounters.locallinkintegrityerrors", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetPortCounters_FMConfigErrors, { "FMConfigErrors", "opa.pa.getportcounters.fmconfigerrors", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetPortCounters_PortRcvErrors, { "PortRcvErrors", "opa.pa.getportcounters.portrcverrors", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetPortCounters_ExcessiveBufferOverruns, { "ExcessiveBufferOverruns", "opa.pa.getportcounters.excessivebufferoverruns", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetPortCounters_PortRcvConstraintErrors, { "PortRcvConstraintErrors", "opa.pa.getportcounters.portrcvconstrainterrors", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetPortCounters_PortRcvSwitchRelayErrors, { "PortRcvSwitchRelayErrors", "opa.pa.getportcounters.portrcvswitchrelayerrors", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetPortCounters_PortXmitDiscards, { "PortXmitDiscards", "opa.pa.getportcounters.portxmitdiscards", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetPortCounters_PortXmitConstraintErrors, { "PortXmitConstraintErrors", "opa.pa.getportcounters.portxmitconstrainterrors", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetPortCounters_PortRcvRemotePhysicalErrors, { "PortRcvRemotePhysicalErrors", "opa.pa.getportcounters.portrcvremotephysicalerrors", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetPortCounters_SwPortCongestion, { "SwPortCongestion", "opa.pa.getportcounters.swportcongestion", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetPortCounters_PortXmitWait, { "PortXmitWait", "opa.pa.getportcounters.portxmitwait", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetPortCounters_PortRcvFECN, { "PortRcvFECN", "opa.pa.getportcounters.portrcvfecn", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetPortCounters_PortRcvBECN, { "PortRcvBECN", "opa.pa.getportcounters.portrcvbecn", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetPortCounters_PortXmitTimeCong, { "PortXmitTimeCong", "opa.pa.getportcounters.portxmittimecong", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetPortCounters_PortXmitWastedBW, { "PortXmitWastedBW", "opa.pa.getportcounters.portxmitwastedbw", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetPortCounters_PortXmitWaitData, { "PortXmitWaitData", "opa.pa.getportcounters.portxmitwaitdata", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetPortCounters_PortRcvBubble, { "PortRcvBubble", "opa.pa.getportcounters.portrcvbubble", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetPortCounters_PortMarkFECN, { "PortMarkFECN", "opa.pa.getportcounters.portmarkfecn", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetPortCounters_LinkErrorRecovery, { "LinkErrorRecovery", "opa.pa.getportcounters.linkerrorrecovery", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetPortCounters_LinkDowned, { "LinkDowned", "opa.pa.getportcounters.linkdowned", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetPortCounters_UncorrectableErrors, { "UncorrectableErrors", "opa.pa.getportcounters.uncorrectableerrors", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetPortCounters_NumLanesDown, { "NumLanesDown", "opa.pa.getportcounters.numlanesdown", FT_UINT8, BASE_DEC, NULL, 0xF0, NULL, HFILL } }, { &hf_opa_GetPortCounters_reserved, { "Reserved", "opa.pa.getportcounters.reserved", FT_UINT8, BASE_HEX, NULL, 0x08, NULL, HFILL } }, { &hf_opa_GetPortCounters_LinkQualityIndicator, { "LinkQualityIndicator", "opa.pa.getportcounters.linkqualityindicator", FT_UINT8, BASE_DEC, VALS(LinkQualityIndicator), 0x07, NULL, HFILL } }, /* ClearPortCounters */ { &hf_opa_ClearPortCounters, { "Clear User Port Counters", "opa.pa.clearportcounters", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ClearPortCounters_nodeLID, { "nodeLID", "opa.pa.clearportcounters.nodelid", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ClearPortCounters_PortNumber, { "PortNumber", "opa.pa.clearportcounters.portnumber", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ClearPortCounters_CounterSelectMask, { "CounterSelectMask", "opa.pa.clearportcounters.counterselectmask", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ClearPortCounters_PortXmitData, { "PortXmitData", "opa.pa.clearportcounters.portxmitdata", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x80000000, NULL, HFILL } }, { &hf_opa_ClearPortCounters_PortRcvData, { "PortRcvData", "opa.pa.clearportcounters.portrcvdata", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x40000000, NULL, HFILL } }, { &hf_opa_ClearPortCounters_PortXmitPkts, { "PortXmitPkts", "opa.pa.clearportcounters.portxmitpkts", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x20000000, NULL, HFILL } }, { &hf_opa_ClearPortCounters_PortRcvPkts, { "PortRcvPkts", "opa.pa.clearportcounters.portrcvpkts", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x10000000, NULL, HFILL } }, { &hf_opa_ClearPortCounters_PortMulticastXmitPkts, { "PortMulticastXmitPkts", "opa.pa.clearportcounters.portmulticastxmitpkts", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x08000000, NULL, HFILL } }, { &hf_opa_ClearPortCounters_PortMulticastRcvPkts, { "PortMulticastRcvPkts", "opa.pa.clearportcounters.portmulticastrcvpkts", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x04000000, NULL, HFILL } }, { &hf_opa_ClearPortCounters_PortXmitWait, { "PortXmitWait", "opa.pa.clearportcounters.portxmitwait", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x02000000, NULL, HFILL } }, { &hf_opa_ClearPortCounters_SwPortCongestion, { "SwPortCongestion", "opa.pa.clearportcounters.swportcongestion", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x01000000, NULL, HFILL } }, { &hf_opa_ClearPortCounters_PortRcvFECN, { "PortRcvFECN", "opa.pa.clearportcounters.portrecvfecn", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00800000, NULL, HFILL } }, { &hf_opa_ClearPortCounters_PortRcvBECN, { "PortRcvBECN", "opa.pa.clearportcounters.portrecvbecn", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00400000, NULL, HFILL } }, { &hf_opa_ClearPortCounters_PortXmitTimeCong, { "PortXmitTimeCong", "opa.pa.clearportcounters.portxmittimecong", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00200000, NULL, HFILL } }, { &hf_opa_ClearPortCounters_PortXmitWastedBW, { "PortXmitWastedBW", "opa.pa.clearportcounters.portxmitwastedbw", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00100000, NULL, HFILL } }, { &hf_opa_ClearPortCounters_PortXmitWaitData, { "PortXmitWaitData", "opa.pa.clearportcounters.portxmitwaitdata", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00080000, NULL, HFILL } }, { &hf_opa_ClearPortCounters_PortRcvBubble, { "PortRcvBubble", "opa.pa.clearportcounters.portrcvbubble", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00040000, NULL, HFILL } }, { &hf_opa_ClearPortCounters_PortMarkFECN, { "PortMarkFECN", "opa.pa.clearportcounters.portmarkfecn", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00020000, NULL, HFILL } }, { &hf_opa_ClearPortCounters_PortRcvConstraintErrors, { "PortRcvConstraintErrors", "opa.pa.clearportcounters.portrcvconstrainterrors", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00010000, NULL, HFILL } }, { &hf_opa_ClearPortCounters_PortRcvSwitchRelayErrors, { "PortRcvSwitchRelayErrors", "opa.pa.clearportcounters.portrcvswitchrelayerrors", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00008000, NULL, HFILL } }, { &hf_opa_ClearPortCounters_PortXmitDiscards, { "PortXmitDiscards", "opa.pa.clearportcounters.portxmitdiscards", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00004000, NULL, HFILL } }, { &hf_opa_ClearPortCounters_PortXmitConstraintErrors, { "PortXmitConstraintErrors", "opa.pa.clearportcounters.portxmitconstrainterrors", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00002000, NULL, HFILL } }, { &hf_opa_ClearPortCounters_PortRcvRemotePhysicalErrors, { "PortRcvRemotePhysicalErrors", "opa.pa.clearportcounters.portrcvremotephysicalerrors", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00001000, NULL, HFILL } }, { &hf_opa_ClearPortCounters_LocalLinkIntegrityErrors, { "LocalLinkIntegrityErrors", "opa.pa.clearportcounters.locallinkintegrityerrors", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00000800, NULL, HFILL } }, { &hf_opa_ClearPortCounters_PortRcvErrors, { "PortRcvErrors", "opa.pa.clearportcounters.portrcverrors", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00000400, NULL, HFILL } }, { &hf_opa_ClearPortCounters_ExcessiveBufferOverruns, { "ExcessiveBufferOverruns", "opa.pa.clearportcounters.excessivebufferoverruns", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00000200, NULL, HFILL } }, { &hf_opa_ClearPortCounters_FMConfigErrors, { "FMConfigErrors", "opa.pa.clearportcounters.fmconfigerrors", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00000100, NULL, HFILL } }, { &hf_opa_ClearPortCounters_LinkErrorRecovery, { "LinkErrorRecovery", "opa.pa.clearportcounters.linkerrorrecovery", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00000080, NULL, HFILL } }, { &hf_opa_ClearPortCounters_LinkDowned, { "LinkDowned", "opa.pa.clearportcounters.linkdowned", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00000040, NULL, HFILL } }, { &hf_opa_ClearPortCounters_UncorrectableErrors, { "UncorrectableErrors", "opa.pa.clearportcounters.uncorrectableerrors", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00000020, NULL, HFILL } }, { &hf_opa_ClearPortCounters_reserved, { "Reserved (5 bits)", "opa.pa.clearportcounters.reserved", FT_UINT32, BASE_DEC, NULL, 0x0000001F, NULL, HFILL } }, /* ClearAllPortCounters */ { &hf_opa_ClearAllPortCounters, { "Clear All User Port Counters", "opa.pa.clearallportcounters", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ClearAllPortCounters_CounterSelectMask, { "CounterSelectMask", "opa.pa.clearallportcounters.counterselectmask", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ClearAllPortCounters_PortXmitData, { "PortXmitData", "opa.pa.clearallportcounters.portxmitdata", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x80000000, NULL, HFILL } }, { &hf_opa_ClearAllPortCounters_PortRcvData, { "PortRcvData", "opa.pa.clearallportcounters.portrcvdata", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x40000000, NULL, HFILL } }, { &hf_opa_ClearAllPortCounters_PortXmitPkts, { "PortXmitPkts", "opa.pa.clearallportcounters.portxmitpkts", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x20000000, NULL, HFILL } }, { &hf_opa_ClearAllPortCounters_PortRcvPkts, { "PortRcvPkts", "opa.pa.clearallportcounters.portrcvpkts", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x10000000, NULL, HFILL } }, { &hf_opa_ClearAllPortCounters_PortMulticastXmitPkts, { "PortMulticastXmitPkts", "opa.pa.clearallportcounters.portmulticastxmitpkts", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x08000000, NULL, HFILL } }, { &hf_opa_ClearAllPortCounters_PortMulticastRcvPkts, { "PortMulticastRcvPkts", "opa.pa.clearallportcounters.portmulticastrcvpkts", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x04000000, NULL, HFILL } }, { &hf_opa_ClearAllPortCounters_PortXmitWait, { "PortXmitWait", "opa.pa.clearallportcounters.portxmitwait", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x02000000, NULL, HFILL } }, { &hf_opa_ClearAllPortCounters_SwPortCongestion, { "SwPortCongestion", "opa.pa.clearallportcounters.swportcongestion", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x01000000, NULL, HFILL } }, { &hf_opa_ClearAllPortCounters_PortRcvFECN, { "PortRcvFECN", "opa.pa.clearallportcounters.portrecvfecn", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00800000, NULL, HFILL } }, { &hf_opa_ClearAllPortCounters_PortRcvBECN, { "PortRcvBECN", "opa.pa.clearallportcounters.portrecvbecn", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00400000, NULL, HFILL } }, { &hf_opa_ClearAllPortCounters_PortXmitTimeCong, { "PortXmitTimeCong", "opa.pa.clearallportcounters.portxmittimecong", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00200000, NULL, HFILL } }, { &hf_opa_ClearAllPortCounters_PortXmitWastedBW, { "PortXmitWastedBW", "opa.pa.clearallportcounters.portxmitwastedbw", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00100000, NULL, HFILL } }, { &hf_opa_ClearAllPortCounters_PortXmitWaitData, { "PortXmitWaitData", "opa.pa.clearallportcounters.portxmitwaitdata", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00080000, NULL, HFILL } }, { &hf_opa_ClearAllPortCounters_PortRcvBubble, { "PortRcvBubble", "opa.pa.clearallportcounters.portrcvbubble", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00040000, NULL, HFILL } }, { &hf_opa_ClearAllPortCounters_PortMarkFECN, { "PortMarkFECN", "opa.pa.clearallportcounters.portmarkfecn", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00020000, NULL, HFILL } }, { &hf_opa_ClearAllPortCounters_PortRcvConstraintErrors, { "PortRcvConstraintErrors", "opa.pa.clearallportcounters.portrcvconstrainterrors", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00010000, NULL, HFILL } }, { &hf_opa_ClearAllPortCounters_PortRcvSwitchRelayErrors, { "PortRcvSwitchRelayErrors", "opa.pa.clearallportcounters.portrcvswitchrelayerrors", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00008000, NULL, HFILL } }, { &hf_opa_ClearAllPortCounters_PortXmitDiscards, { "PortXmitDiscards", "opa.pa.clearallportcounters.portxmitdiscards", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00004000, NULL, HFILL } }, { &hf_opa_ClearAllPortCounters_PortXmitConstraintErrors, { "PortXmitConstraintErrors", "opa.pa.clearallportcounters.portxmitconstrainterrors", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00002000, NULL, HFILL } }, { &hf_opa_ClearAllPortCounters_PortRcvRemotePhysicalErrors, { "PortRcvRemotePhysicalErrors", "opa.pa.clearallportcounters.portrcvremotephysicalerrors", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00001000, NULL, HFILL } }, { &hf_opa_ClearAllPortCounters_LocalLinkIntegrityErrors, { "LocalLinkIntegrityErrors", "opa.pa.clearallportcounters.locallinkintegrityerrors", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00000800, NULL, HFILL } }, { &hf_opa_ClearAllPortCounters_PortRcvErrors, { "PortRcvErrors", "opa.pa.clearallportcounters.portrcverrors", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00000400, NULL, HFILL } }, { &hf_opa_ClearAllPortCounters_ExcessiveBufferOverruns, { "ExcessiveBufferOverruns", "opa.pa.clearallportcounters.excessivebufferoverruns", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00000200, NULL, HFILL } }, { &hf_opa_ClearAllPortCounters_FMConfigErrors, { "FMConfigErrors", "opa.pa.clearallportcounters.fmconfigerrors", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00000100, NULL, HFILL } }, { &hf_opa_ClearAllPortCounters_LinkErrorRecovery, { "LinkErrorRecovery", "opa.pa.clearallportcounters.linkerrorrecovery", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00000080, NULL, HFILL } }, { &hf_opa_ClearAllPortCounters_LinkDowned, { "LinkDowned", "opa.pa.clearallportcounters.linkdowned", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00000040, NULL, HFILL } }, { &hf_opa_ClearAllPortCounters_UncorrectableErrors, { "UncorrectableErrors", "opa.pa.clearallportcounters.uncorrectableerrors", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00000020, NULL, HFILL } }, { &hf_opa_ClearAllPortCounters_reserved, { "Reserved (5 bits)", "opa.pa.clearallportcounters.reserved", FT_UINT32, BASE_DEC, NULL, 0x0000001F, NULL, HFILL } }, /* PMConfig */ { &hf_opa_PMConfig, { "PM Config", "opa.pa.pmconfig", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PMConfig_sweepInterval, { "sweepInterval", "opa.pa.pmconfig.sweepinterval", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PMConfig_maxClients, { "maxClients", "opa.pa.pmconfig.maxclients", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PMConfig_sizeHistory, { "sizeHistory", "opa.pa.pmconfig.sizehistory", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PMConfig_sizeFreeze, { "sizeFreeze", "opa.pa.pmconfig.sizefreeze", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PMConfig_lease, { "lease", "opa.pa.pmconfig.lease", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PMConfig_pmFlags, { "pmFlags", "opa.pa.pmconfig.pmflags", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PMConfig_PortXmitWait, { "PortXmitWait", "opa.pa.pmconfig.portxmitwait", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PMConfig_SwPortCongestion, { "SwPortCongestion", "opa.pa.pmconfig.swportcongestion", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PMConfig_PortRcvFECN, { "PortRcvFECN", "opa.pa.pmconfig.portrcvfecn", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PMConfig_PortRcvBECN, { "PortRcvBECN", "opa.pa.pmconfig.portrcvbecn", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PMConfig_PortXmitTimeCong, { "PortXmitTimeCong", "opa.pa.pmconfig.portxmittimecong", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PMConfig_PortMarkFECN, { "PortMarkFECN", "opa.pa.pmconfig.portmarkfecn", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PMConfig_integrityErrors, { "integrityErrors", "opa.pa.pmconfig.integrityerrors", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PMConfig_congestionErrors, { "congestionErrors", "opa.pa.pmconfig.congestionerrors", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PMConfig_bubbleErrors, { "bubbleErrors", "opa.pa.pmconfig.bubbleerrors", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PMConfig_smaCongestionErrors, { "smaCongestionErrors", "opa.pa.pmconfig.smacongestionerrors", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PMConfig_securityErrors, { "securityErrors", "opa.pa.pmconfig.securityerrors", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PMConfig_routingErrors, { "routingErrors", "opa.pa.pmconfig.routingerrors", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PMConfig_LocalLinkIntegrityErrors, { "LocalLinkIntegrityErrors", "opa.pa.pmconfig.locallinkintegrityerrors", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PMConfig_PortRcvErrors, { "PortRcvErrors", "opa.pa.pmconfig.portrcverrors", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PMConfig_ExcessiveBufferOverrunErrors, { "ExcessiveBufferOverrunErrors", "opa.pa.pmconfig.excessivebufferoverrunerrors", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PMConfig_LinkErrorRecovery, { "LinkErrorRecovery", "opa.pa.pmconfig.linkerrorrecovery", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PMConfig_LinkDowned, { "LinkDowned", "opa.pa.pmconfig.linkdowned", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PMConfig_UncorrectableErrors, { "UncorrectableErrors", "opa.pa.pmconfig.uncorrectableerrors", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PMConfig_FMConfigErrors, { "FMConfigErrors", "opa.pa.pmconfig.fmconfigerrors", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PMConfig_LinkQualityIndicator, { "LinkQualityIndicator", "opa.pa.pmconfig.linkqualityindicator", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PMConfig_LinkWidthDowngrade, { "LinkWidthDowngrade", "opa.pa.pmconfig.linkwidthdowngrade", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PMConfig_memoryFootprint, { "memoryFootprint", "opa.pa.pmconfig.memoryfootprint", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PMConfig_maxAttempts, { "maxAttempts", "opa.pa.pmconfig.maxattempts", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PMConfig_respTimeout, { "respTimeout", "opa.pa.pmconfig.resptimeout", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PMConfig_minRespTimeout, { "minRespTimeout", "opa.pa.pmconfig.minresptimeout", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PMConfig_maxParallelNodes, { "maxParallelNodes", "opa.pa.pmconfig.maxparallelnodes", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PMConfig_pmaBatchSize, { "pmaBatchSize", "opa.pa.pmconfig.pmabatchsize", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_PMConfig_errorClear, { "errorClear", "opa.pa.pmconfig.errorclear", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* MoveFreezeFrame */ { &hf_opa_MoveFreezeFrame_old, { "Old Image", "opa.pa.movefreezeframe.old", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_MoveFreezeFrame_new, { "New Image", "opa.pa.movefreezeframe.new", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, /* GetFocusPorts */ { &hf_opa_GetFocusPorts, { "Focus Ports", "opa.pa.getfocusports", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetFocusPorts_groupName, { "Group Name", "opa.pa.getfocusports.groupname", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetFocusPorts_select, { "select", "opa.pa.getfocusports.select", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetFocusPorts_start, { "start", "opa.pa.getfocusports.start", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetFocusPorts_range, { "range", "opa.pa.getfocusports.range", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetFocusPorts_nodeLID, { "nodeLID", "opa.pa.getfocusports.nodelid", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetFocusPorts_portNumber, { "portNumber", "opa.pa.getfocusports.portnumber", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetFocusPorts_rate, { "rate", "opa.pa.getfocusports.rate", FT_UINT8, BASE_HEX, VALS(Rate), 0x0, NULL, HFILL } }, { &hf_opa_GetFocusPorts_mtu, { "mtu", "opa.pa.getfocusports.mtu", FT_UINT8, BASE_HEX, VALS(MTU), 0x0, NULL, HFILL } }, { &hf_opa_GetFocusPorts_localFlags, { "localFlags", "opa.pa.getfocusports.localflags", FT_UINT8, BASE_DEC, VALS(FocusPortFlags), 0xF0, NULL, HFILL } }, { &hf_opa_GetFocusPorts_neighborFlags, { "neighborFlags", "opa.pa.getfocusports.neighborflags", FT_UINT8, BASE_DEC, VALS(FocusPortFlags), 0x0F, NULL, HFILL } }, { &hf_opa_GetFocusPorts_value, { "value", "opa.pa.getfocusports.value", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetFocusPorts_nodeGUID, { "nodeGUID", "opa.pa.getfocusports.nodeguid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetFocusPorts_nodeDesc, { "nodeDesc", "opa.pa.getfocusports.nodedesc", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetFocusPorts_neighborLid, { "neighborLid", "opa.pa.getfocusports.neighborlid", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetFocusPorts_neighborPortNumber, { "neighborPortNumber", "opa.pa.getfocusports.neighborportnumber", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetFocusPorts_neighborValue, { "neighborValue", "opa.pa.getfocusports.neighborvalue", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetFocusPorts_neighborGuid, { "neighborGuid", "opa.pa.getfocusports.neighborguid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetFocusPorts_neighborNodeDesc, { "neighborNodeDesc", "opa.pa.getfocusports.neighbornodedesc", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, /* GetImageInfo */ { &hf_opa_GetImageInfo, { "Image Info", "opa.pa.getimageinfo", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetImageInfo_sweepStart, { "sweepStart", "opa.pa.getimageinfo.sweepstart", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetImageInfo_sweepDuration, { "sweepDuration", "opa.pa.getimageinfo.sweepduration", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetImageInfo_numHFIPorts, { "numHHIPorts", "opa.pa.getimageinfo.numhfiports", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetImageInfo_numSwitchNodes, { "numSwitchNodes", "opa.pa.getimageinfo.numswitchnodes", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetImageInfo_numSwitchPorts, { "numSwitchPorts", "opa.pa.getimageinfo.numswitchports", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetImageInfo_numLinks, { "numLinks", "opa.pa.getimageinfo.numlinks", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetImageInfo_numSMs, { "numSMs", "opa.pa.getimageinfo.numsms", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetImageInfo_numFailedNodes, { "numFailedNodes", "opa.pa.getimageinfo.numfailednodes", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetImageInfo_numFailedPorts, { "numFailedPorts", "opa.pa.getimageinfo.numfailedports", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetImageInfo_numSkippedNodes, { "numSkippedNodes", "opa.pa.getimageinfo.numskippednodes", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetImageInfo_numSkippedPorts, { "numSkippedPorts", "opa.pa.getimageinfo.numskippedports", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetImageInfo_numUnexpectedClearPorts, { "numUnexpectedClearPorts", "opa.pa.getimageinfo.numunexpectedclearports", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetImageInfo_imageInterval, { "imageInterval", "opa.pa.getimageinfo.imageinterval", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetImageInfo_lid, { "lid", "opa.pa.getimageinfo.sminfo.lid", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetImageInfo_state, { "state", "opa.pa.getimageinfo.sminfo.state", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetImageInfo_priority, { "priority", "opa.pa.getimageinfo.sminfo.priority", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetImageInfo_portNumber, { "portNumber", "opa.pa.getimageinfo.sminfo.portnumber", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetImageInfo_smPortGuid, { "portGUID", "opa.pa.getimageinfo.sminfo.portguid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetImageInfo_smNodeDesc, { "nodeDesc", "opa.pa.getimageinfo.sminfo.nodedesc", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, /* GetVFList */ { &hf_opa_GetVFList, { "Vf List", "opa.pa.getvflist", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFList_vfName, { "VF Name", "opa.pa.getvflist.vfname", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, /* GetVFInfo */ { &hf_opa_GetVFInfo, { "VF Info", "opa.pa.getvfinfo", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFInfo_vfName, { "VF Name", "opa.pa.getvfinfo.vfname", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFInfo_numPorts, { "numPorts", "opa.pa.getvfinfo.numports", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFInfo_totalMBps, { "totalMBps", "opa.pa.getvfinfo.totalmbps", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFInfo_totalKPps, { "totalKPps", "opa.pa.getvfinfo.totalkpps", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFInfo_avgMBps, { "avgMBps", "opa.pa.getvfinfo.avgmbps", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFInfo_minMBps, { "minMBps", "opa.pa.getvfinfo.minmbps", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFInfo_maxMBps, { "maxMBps", "opa.pa.getvfinfo.maxmbps", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFInfo_numBWBuckets, { "numBWBuckets", "opa.pa.getvfinfo.numbwbuckets", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFInfo_BWBuckets, { "BWBuckets", "opa.pa.getvfinfo.bwbuckets", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFInfo_avgKPps, { "avgKPps", "opa.pa.getvfinfo.avgkpps", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFInfo_minKPps, { "minKPps", "opa.pa.getvfinfo.minkpps", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFInfo_maxKPps, { "maxKPps", "opa.pa.getvfinfo.maxkpps", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFInfo_pmaFailedPorts, { "pmaFailedPorts", "opa.pa.getvfinfo.pmafailedports", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFInfo_topoFailedPorts, { "topoFailedPorts", "opa.pa.getvfinfo.topofailedports", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFInfo_integrityErrors, { "integrityErrors", "opa.pa.getvfinfo.integrityerrors", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFInfo_congestionErrors, { "congestionErrors", "opa.pa.getvfinfo.congestionerrors", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFInfo_smaCongestionErrors, { "smaCongestionErrors", "opa.pa.getvfinfo.smacongestionerrors", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFInfo_bubbleErrors, { "bubbleErrors", "opa.pa.getvfinfo.bubbleerrors", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFInfo_securityErrors, { "securityErrors", "opa.pa.getvfinfo.securityerrors", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFInfo_routingErrors, { "routingErrors", "opa.pa.getvfinfo.routingerrors", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFInfo_utilizationPct10, { "utilizationPct10", "opa.pa.getvfinfo.utilizationpct10", FT_UINT16, BASE_CUSTOM, CF_FUNC(cf_opa_mad_computed_pct10), 0x0, NULL, HFILL } }, { &hf_opa_GetVFInfo_discardsPct10, { "discardsPct10", "opa.pa.getvfinfo.discardspct10", FT_UINT16, BASE_CUSTOM, CF_FUNC(cf_opa_mad_computed_pct10), 0x0, NULL, HFILL } }, { &hf_opa_GetVFInfo_maxInternalRate, { "maxInternalRate", "opa.pa.getvfinfo.maxinternalrate", FT_UINT8, BASE_HEX, VALS(Rate), 0x0, NULL, HFILL } }, { &hf_opa_GetVFInfo_minInternalRate, { "minInternalRate", "opa.pa.getvfinfo.mininternalrate", FT_UINT8, BASE_HEX, VALS(Rate), 0x0, NULL, HFILL } }, { &hf_opa_GetVFInfo_maxInternalMBps, { "maxInternalMBps", "opa.pa.getvfinfo.maxinternalmbps", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* GetVFConfig */ { &hf_opa_GetVFConfig, { "VF Config", "opa.pa.getvfconfig", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFConfig_vfName, { "VF Name", "opa.pa.getvfconfig.vfname", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFConfig_Port_NodeGUID, { "NodeGUID", "opa.pa.getvfconfig.port.nodeguid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFConfig_Port_nodeDesc, { "nodeDesc", "opa.pa.getvfconfig.port.nodedesc", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFConfig_Port_NodeLID, { "NodeLID", "opa.pa.getvfconfig.port.nodelid", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFConfig_Port_PortNumber, { "PortNumber", "opa.pa.getvfconfig.port.portnumber", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* GetVFPortCounters */ { &hf_opa_GetVFPortCounters, { "VF Port Counters", "opa.pa.getvfportcounters", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFPortCounters_vfName, { "VF Name", "opa.pa.getvfportcounters.vfname", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFPortCounters_nodeLID, { "nodeLID", "opa.pa.getvfportcounters.nodelid", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFPortCounters_PortNumber, { "PortNumber", "opa.pa.getvfportcounters.portnumber", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFPortCounters_flags, { "flags", "opa.pa.getvfportcounters.flags", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFPortCounters_PortVFXmitData, { "PortVFXmitData", "opa.pa.getvfportcounters.portvfxmitdata", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFPortCounters_PortVFRcvData, { "PortVFRcvData", "opa.pa.getvfportcounters.portvfrcvdata", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFPortCounters_PortVFXmitPkts, { "PortVFXmitPkts", "opa.pa.getvfportcounters.portvfxmitpkts", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFPortCounters_PortVFRcvPkts, { "PortVFRcvPkts", "opa.pa.getvfportcounters.portvfrcvpkts", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFPortCounters_PortVFXmitDiscards, { "PortVFXmitDiscards", "opa.pa.getvfportcounters.portvfxmitdiscards", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFPortCounters_SwPortVFCongestion, { "SwPortCongestion", "opa.pa.getvfportcounters.swportcongestion", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFPortCounters_PortVFXmitWait, { "PortVFXmitWait", "opa.pa.getvfportcounters.portvfxmitwait", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFPortCounters_PortVFRcvFECN, { "PortVFRcvFECN", "opa.pa.getvfportcounters.portvfrcvfecn", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFPortCounters_PortVFRcvBECN, { "PortVFRcvBECN", "opa.pa.getvfportcounters.portvfrcvbecn", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFPortCounters_PortVFXmitTimeCong, { "PortVFXmitTimeCong", "opa.pa.getvfportcounters.portvfxmittimecong", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFPortCounters_PortVFXmitWastedBW, { "PortVFXmitWastedBW", "opa.pa.getvfportcounters.portvfxmitwastedbw", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFPortCounters_PortVFXmitWaitData, { "PortVFXmitWaitData", "opa.pa.getvfportcounters.portvfxmitwaitdata", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFPortCounters_PortVFRcvBubble, { "PortVFRcvBubble", "opa.pa.getvfportcounters.portvfrcvbubble", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFPortCounters_PortVFMarkFECN, { "PortVFMarkFECN", "opa.pa.getvfportcounters.portvfmarkfecn", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, /* ClearVFPortCounters */ { &hf_opa_ClearVFPortCounters, { "Clear VF Port Counters", "opa.pa.clearvfportcounters", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ClearVFPortCounters_vfName, { "VF Name", "opa.pa.clearvfportcounters.vfname", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ClearVFPortCounters_nodeLID, { "nodeLID", "opa.pa.clearvfportcounters.nodelid", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ClearVFPortCounters_PortNumber, { "PortNumber", "opa.pa.clearvfportcounters.portnumber", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ClearVFPortCounters_CounterSelectMask, { "CounterSelectMask", "opa.pa.clearvfportcounters.counterselectmask", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_ClearVFPortCounters_PortVFXmitData, { "PortVFXmitData", "opa.pa.clearvfportcounters.portvfxmitdata", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x80000000, NULL, HFILL } }, { &hf_opa_ClearVFPortCounters_PortVFRcvData, { "PortVFRcvData", "opa.pa.clearvfportcounters.portvfrcvdata", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x40000000, NULL, HFILL } }, { &hf_opa_ClearVFPortCounters_PortVFXmitPkts, { "PortVFXmitPkts", "opa.pa.clearvfportcounters.portvfxmitpkts", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x20000000, NULL, HFILL } }, { &hf_opa_ClearVFPortCounters_PortVFRcvPkts, { "PortVFRcvPkts", "opa.pa.clearvfportcounters.portvfrcvpkts", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x10000000, NULL, HFILL } }, { &hf_opa_ClearVFPortCounters_PortVFXmitDiscards, { "PortVFXmitDiscards", "opa.pa.clearvfportcounters.portvfxmitdiscards", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x08000000, NULL, HFILL } }, { &hf_opa_ClearVFPortCounters_SwPortVFCongestion, { "SwPortVFCongestion", "opa.pa.clearvfportcounters.swportvfcongestion", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x04000000, NULL, HFILL } }, { &hf_opa_ClearVFPortCounters_PortVFXmitWait, { "PortVFXmitWait", "opa.pa.clearvfportcounters.portvfxmitwait", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x02000000, NULL, HFILL } }, { &hf_opa_ClearVFPortCounters_PortVFRcvFECN, { "PortVFRcvFECN", "opa.pa.clearvfportcounters.portvfrcvfecn", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x01000000, NULL, HFILL } }, { &hf_opa_ClearVFPortCounters_PortVFRcvBECN, { "PortVFRcvBECN", "opa.pa.clearvfportcounters.portvfrcvbecn", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00800000, NULL, HFILL } }, { &hf_opa_ClearVFPortCounters_PortVFXmitTimeCong, { "PortVFXmitTimeCong", "opa.pa.clearvfportcounters.portvfxmittimecong", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00400000, NULL, HFILL } }, { &hf_opa_ClearVFPortCounters_PortVFXmitWastedBW, { "PortVFXmitWastedBW", "opa.pa.clearvfportcounters.portvfxmitwastedbw", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00200000, NULL, HFILL } }, { &hf_opa_ClearVFPortCounters_PortVFXmitWaitData, { "PortVFXmitWaitData", "opa.pa.clearvfportcounters.portvfxmitwaitdata", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00100000, NULL, HFILL } }, { &hf_opa_ClearVFPortCounters_PortVFRcvBubble, { "PortVFRcvBubble", "opa.pa.clearvfportcounters.portvfrcvbubble", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00080000, NULL, HFILL } }, { &hf_opa_ClearVFPortCounters_PortVFMarkFECN, { "PortVFMarkFECN", "opa.pa.clearvfportcounters.portvfmarkfecn", FT_BOOLEAN, 32, TFS(&tfs_clear_dont_clear), 0x00040000, NULL, HFILL } }, { &hf_opa_ClearVFPortCounters_reserved, { "Reserved", "opa.pa.clearvfportcounters.reserved", FT_UINT32, BASE_HEX, NULL, 0x0003FFFF, NULL, HFILL } }, /* GetVFFocusPorts */ { &hf_opa_GetVFFocusPorts, { "VF Focus Ports", "opa.pa.getvffocusports", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFFocusPorts_vfName, { "VF Name", "opa.pa.getvffocusports.vfname", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFFocusPorts_select, { "select", "opa.pa.getvffocusports.select", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFFocusPorts_start, { "start", "opa.pa.getvffocusports.start", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFFocusPorts_range, { "range", "opa.pa.getvffocusports.range", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFFocusPorts_nodeLID, { "nodeLID", "opa.pa.getvffocusports.nodelid", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFFocusPorts_portNumber, { "portNumber", "opa.pa.getvffocusports.portnumber", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFFocusPorts_rate, { "rate", "opa.pa.getvffocusports.rate", FT_UINT8, BASE_HEX, VALS(Rate), 0xF8, NULL, HFILL } }, { &hf_opa_GetVFFocusPorts_mtu, { "mtu", "opa.pa.getvffocusports.mtu", FT_UINT8, BASE_HEX, VALS(MTU), 0x07, NULL, HFILL } }, { &hf_opa_GetVFFocusPorts_localFlags, { "localFlags", "opa.pa.getvffocusports.localflags", FT_UINT8, BASE_DEC, VALS(FocusPortFlags), 0xF0, NULL, HFILL } }, { &hf_opa_GetVFFocusPorts_neighborFlags, { "neighborFlags", "opa.pa.getvffocusports.neighborflags", FT_UINT8, BASE_DEC, VALS(FocusPortFlags), 0x0F, NULL, HFILL } }, { &hf_opa_GetVFFocusPorts_value, { "value", "opa.pa.getvffocusports.value", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFFocusPorts_nodeGUID, { "nodeGUID", "opa.pa.getvffocusports.nodeguid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFFocusPorts_nodeDesc, { "nodeDesc", "opa.pa.getvffocusports.nodedesc", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFFocusPorts_neighborLid, { "neighborLid", "opa.pa.getvffocusports.neighborlid", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFFocusPorts_neighborPortNumber, { "neighborPortNumber", "opa.pa.getvffocusports.neighborportnumber", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFFocusPorts_neighborValue, { "neighborValue", "opa.pa.getvffocusports.neighborvalue", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFFocusPorts_neighborGuid, { "neighborGuid", "opa.pa.getvffocusports.neighborguid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_GetVFFocusPorts_neighborNodeDesc, { "neighborNodeDesc", "opa.pa.getvffocusports.neighbornodedesc", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, /* VFInfoRecord */ { &hf_opa_VFInfoRecord, { "VF Info Record", "opa.vfinforecorf", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_VFInfoRecord_vfIndex, { "VF Index", "opa.vfinforecorf.vfindex", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_VFInfoRecord_pKey, { "P Key", "opa.vfinforecord.pkey", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_VFInfoRecord_vfName, { "VF Name", "opa.vfinforecord.vfname", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_VFInfoRecord_MGID, { "M GID", "opa.vfinforecord.mgid", FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_VFInfoRecord_SelectFlags, { "Select Flags", "opa.vfinforecord.selectflags", FT_UINT8, BASE_HEX, NULL, 0xC0, NULL, HFILL } }, { &hf_opa_VFInfoRecord_reserved, { "Reserved (1 bit)", "opa.vfinforecord.reserved", FT_UINT8, BASE_HEX, NULL, 0x20, NULL, HFILL } }, { &hf_opa_VFInfoRecord_SL, { "SL", "opa.vfinforecord.sl", FT_UINT8, BASE_HEX, NULL, 0x1F, NULL, HFILL } }, { &hf_opa_VFInfoRecord_MTUSpecified, { "MTU Specified", "opa.vfinforecord.mtuspecified", FT_UINT8, BASE_HEX, NULL, 0x80, NULL, HFILL } }, { &hf_opa_VFInfoRecord_reserved2, { "Reserved (1 bit)", "opa.vfinforecord.reserved2", FT_UINT8, BASE_HEX, NULL, 0x40, NULL, HFILL } }, { &hf_opa_VFInfoRecord_MTU, { "MTU", "opa.vfinforecord.mtu", FT_UINT8, BASE_HEX, VALS(MTU), 0x3F, NULL, HFILL } }, { &hf_opa_VFInfoRecord_RateSpecified, { "Rate Specified", "opa.vfinforecord.ratespecified", FT_UINT8, BASE_HEX, NULL, 0x80, NULL, HFILL } }, { &hf_opa_VFInfoRecord_reserved4, { "Reserved (1 bit)", "opa.vfinforecord.reserved4", FT_UINT8, BASE_HEX, NULL, 0x40, NULL, HFILL } }, { &hf_opa_VFInfoRecord_Rate, { "Rate", "opa.vfinforecord.rate", FT_UINT8, BASE_HEX, NULL, 0x3F, NULL, HFILL } }, { &hf_opa_VFInfoRecord_PktLifeSpecified, { "Packet Life Time Specified", "opa.vfinforecord.pktlifespecified", FT_UINT8, BASE_HEX, NULL, 0x80, NULL, HFILL } }, { &hf_opa_VFInfoRecord_reserved5, { "Reserved (4 bits)", "opa.vfinforecord.reserved5", FT_UINT8, BASE_HEX, NULL, 0x78, NULL, HFILL } }, { &hf_opa_VFInfoRecord_PktLifeTimeInc, { "Packet Life Time", "opa.vfinforecord.pktlifetime", FT_UINT8, BASE_HEX, NULL, 0x07, NULL, HFILL } }, { &hf_opa_VFInfoRecord_OptionFlags, { "Option Flags", "opa.vfinforecord.optionflags", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_VFInfoRecord_BandwidthPercent, { "Bandwidth Percent", "opa.vfinforecord.bandwidthpercent", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_VFInfoRecord_reserved6, { "Reserved (7 bits)", "opa.vfinforecord.reserved6", FT_UINT8, BASE_HEX, NULL, 0xFE, NULL, HFILL } }, { &hf_opa_VFInfoRecord_Priority, { "Priority", "opa.vfinforecord.priority", FT_UINT8, BASE_HEX, NULL, 0x01, NULL, HFILL } }, { &hf_opa_VFInfoRecord_RoutingSLs, { "Routing SLs", "opa.vfinforecord.routingsls", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_VFInfoRecord_reserved7, { "Reserved (24 Bytes)", "opa.vfinforecord.reserved7", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, /* QuarantinedNodeRecord */ { &hf_opa_QuarantinedNodeRecord, { "Quarantined Node Record", "opa.quarantinednoderecord", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_opa_QuarantinedNodeRecord_TrustedLid, { "Trusted LID", "opa.quarantinednoderecord.trustedlid", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_QuarantinedNodeRecord_TrustedNodeGUID, { "Trusted Node GUID", "opa.quarantinednoderecord.trustednodeguid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_QuarantinedNodeRecord_TrustedPortNum, { "Trusted Port Num", "opa.quarantinednoderecord.trustedportnum", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_QuarantinedNodeRecord_TrustedNeighborNodeGUID, { "Trusted Neighbor Node GUID", "opa.quarantinednoderecord.trustedneighbornodeguid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_QuarantinedNodeRecord_QuarantineReasons, { "Quarantine Reasons", "opa.quarantinednoderecord.quarantinereasons", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_QuarantinedNodeRecord_ExpectedNodeDesc, { "Expected Node Desc", "opa.quarantinednoderecord.expectednodedesc", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_QuarantinedNodeRecord_ExpectedNodeGUID, { "Expected Node GUID", "opa.quarantinednoderecord.expectednodeguid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_opa_QuarantinedNodeRecord_ExpectedPortGUID, { "Expected Port GUID", "opa.quarantinednoderecord.expectedportguid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } } }; static gint *ett[] = { &ett_payload, &ett_sm_lid, &ett_sm_dr, &ett_sa, &ett_pm, &ett_pa, &ett_mad, &ett_mad_status, &ett_mad_attributemod, &ett_rmpp, &ett_rmpp_fragment, &ett_rmpp_fragments, &ett_rmpp_sa_record, /* Common */ &ett_noticestraps, &ett_datadetails, &ett_datadetails_trap259datavalid, &ett_informinfo, &ett_classportinfo, &ett_classportinfo_redirect, &ett_classportinfo_trap, /* SM */ &ett_nodedescription, &ett_nodeinfo, &ett_switchinfo, &ett_switchinfo_switchcapabilitymask, &ett_portinfo, &ett_portinfo_vl, &ett_portinfo_link, &ett_portinfo_portmode, &ett_portinfo_flitcontrol, &ett_portinfo_porterroraction, &ett_portinfo_neighbormtu, &ett_portinfo_xmitq, &ett_portinfo_capmask, &ett_portinfo_capmask3, &ett_portstates, &ett_pkeytable, &ett_pkeytable_block, &ett_sltoscmapping, &ett_sltoscmapping_block, &ett_sctoscmapping, &ett_sctoscmapping_block, &ett_sctoslmapping, &ett_sctoslmapping_block, &ett_sctovlxmappingtable, &ett_sctovlxmappingtable_block, &ett_vlarbitrationtable, &ett_vlarbitrationtable_port, &ett_linearforwardingtable, &ett_linearforwardingtable_block, &ett_multicastforwardingtable, &ett_multicastforwardingtable_block, &ett_portgroupforwardingtable, &ett_portgroupforwardingtable_block, &ett_portgrouptable, &ett_portgrouptable_block, &ett_sminfo, &ett_ledinfo, &ett_cableinfo, &ett_aggregate, &ett_buffercontroltable, &ett_congestioninfo, &ett_switchcongestionlog, &ett_switchcongestionlog_entry, &ett_switchcongestionsetting, &ett_switchportcongestionsetting, &ett_switchportcongestionsetting_port, &ett_hficongestionlog, &ett_hficongestionlog_entry, &ett_hficongestionsetting, &ett_hficongestioncontroltable, &ett_hficongestioncontroltable_block, /* SA */ &ett_portinforecord_linkdownreason, &ett_portinforecord_linkdownreason_entry, &ett_scmappingrecord, &ett_lftrecord, &ett_linkrecord, &ett_servicerecord, &ett_pathrecord, &ett_pathrecord_dgid, &ett_pathrecord_sgid, &ett_mcmemberrecord, &ett_tracerecord, &ett_multipathrecord_gid, &ett_multipathrecord_guid, &ett_multipathrecord_lid, &ett_cableinforecord, &ett_serviceassocrecord, &ett_sctoslmappingtablerecord, &ett_portgroupforwardingtablerecord, &ett_vfinforecord, &ett_quarantinednoderecord, &ett_fabricinforecord, /* PM */ &ett_portstatus, &ett_portstatus_vl, &ett_clearportstatus, &ett_clearportstatus_counterselectmask, &ett_dataportcounters, &ett_dataportcounters_port, &ett_dataportcounters_vl, &ett_errorportcounters, &ett_errorportcounters_port, &ett_errorportinfo, &ett_errorportinfoport, &ett_errorportinfo_portrcverrorinfo, &ett_errorportinfo_excessivebufferoverruninfo, &ett_errorportinfo_portxmitconstrainterrorinfo, &ett_errorportinfo_portrcvconstrainterrorinfo, &ett_errorportinfo_portrcvswitchrelayerrorinfo, &ett_errorportinfo_uncorrectableerrorinfo, &ett_errorportinfo_fmconfigerrorinfo, /* PA */ &ett_getgrouplist, &ett_getgroupinfo, &ett_getgroupinfoutilstats, &ett_getgroupinfoutilbuckets, &ett_getgroupinfoerrorsummary, &ett_getgroupinfoerrintegritybucket, &ett_getgroupinfoerrcongestionbucket, &ett_getgroupinfoerrsmacongestionbucket, &ett_getgroupinfoerrbubblebucket, &ett_getgroupinfoerrsecuritybucket, &ett_getgroupinfoerrroutingbucket, &ett_getportcounters, &ett_clearportcounters, &ett_clearportcounters_counterselectmask, &ett_clearallportcounters, &ett_clearallportcounters_counterselectmask, &ett_pmconfig, &ett_getgroupconfig, &ett_getgroupconfigport, &ett_movefreezeframeold, &ett_movefreezeframenew, &ett_getfocusports, &ett_getfocusportsport, &ett_getimageinfo, &ett_getimageinfosm, &ett_getvflist, &ett_getvfinfo, &ett_getvfinfoutilstats, &ett_getvfinfoutilbuckets, &ett_getvfinfoerrorsummary, &ett_getvfinfoerrintegritybucket, &ett_getvfinfoerrcongestionbucket, &ett_getvfinfoerrsmacongestionbucket, &ett_getvfinfoerrbubblebucket, &ett_getvfinfoerrsecuritybucket, &ett_getvfinfoerrroutingbucket, &ett_getvfconfig, &ett_getvfconfigport, &ett_getvffocusports, &ett_getvffocusportsport, &ett_getvfportcounters, &ett_clearvfportcounters, &ett_clearvfportcounters_counterselectmask }; static ei_register_info ei[] = { { &ei_opa_mad_error, { "opa.mad.error", PI_RESPONSE_CODE, PI_WARN, "MAD Status Error", EXPFILL } }, { &ei_opa_mad_no_attribute_dissector, { "opa.mad.noattributedissector", PI_UNDECODED, PI_NOTE, "Attribute Dissector Not Implemented", EXPFILL } }, { &ei_opa_mad_attribute_modifier_error_nonzero, { "opa.mad.attributemodifiererrornonzero", PI_PROTOCOL, PI_WARN, "Attribute Modifier is unexpectedly Non-zero", EXPFILL } }, { &ei_opa_rmpp_undecoded, { "opa.rmpp.undecoded", PI_UNDECODED, PI_NOTE, "RMPP Records Undecoded", EXPFILL } }, { &ei_opa_aggregate_error, { "opa.aggregate.error.exp", PI_RESPONSE_CODE, PI_WARN, "Aggregate Error", EXPFILL } } }; proto_opa_mad = proto_register_protocol("Intel Omni-Path MAD", "OPA MAD", "opa.mad"); opa_mad_handle = register_dissector("opa.mad", dissect_opa_mad, proto_opa_mad); proto_register_field_array(proto_opa_mad, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); expert_opa_mad = expert_register_protocol(proto_opa_mad); expert_register_field_array(expert_opa_mad, ei, array_length(ei)); range_convert_str(wmem_epan_scope(), &global_mad_vendor_class, OPA_VENDOR_RANGE_STR, 0xFF); range_convert_str(wmem_epan_scope(), &global_mad_vendor_rmpp_class, OPA_VENDOR_RMPP_RANGE_STR, 0xFF); range_convert_str(wmem_epan_scope(), &global_mad_application_class, OPA_APPLICATION_RANGE_STR, 0xFF); range_convert_str(wmem_epan_scope(), &global_mad_reserved_class, OPA_RESERVED_RANGE_STR, 0xFF); range_convert_str(wmem_epan_scope(), &global_mad_opa_class, OPA_MGMTCLASS_RANGE_STR, 0xFF); opa_mad_module = prefs_register_protocol(proto_opa_mad, NULL); prefs_register_bool_preference(opa_mad_module, "parse_mad_error", "Enable Parsing of Mad Payload on Mad Status Error", "Attempt to parse mad payload even when MAD.Status is non-zero", &pref_parse_on_mad_status_error); prefs_register_bool_preference(opa_mad_module, "reassemble_rmpp", "Enable Reassembly of RMPP packets", "Attempt to reassemble the mad payload of RMPP segments", &pref_attempt_rmpp_defragment); register_init_routine(opa_mad_init); register_cleanup_routine(opa_mad_cleanup); } void proto_reg_handoff_opa_mad(void) { ethertype_dissector_table = find_dissector_table("ethertype"); } /* * Editor modelines - https://www.wireshark.org/tools/modelines.html * * Local variables: * c-basic-offset: 4 * tab-width: 8 * indent-tabs-mode: nil * End: * * vi: set shiftwidth=4 tabstop=8 expandtab: * :indentSize=4:tabSize=8:noTabs=true: */