wireshark/epan/dissectors/packet-opa-mad.c

13696 lines
674 KiB
C

/* 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 <gerald@wireshark.org>
* Copyright 1998 Gerald Combs
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "config.h"
#include <epan/packet.h>
#include <epan/prefs.h>
#include <epan/etypes.h>
#include <epan/expert.h>
#include <epan/reassemble.h>
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) <GIDADDR> is now in service" },
{ 65, " (Informational) <GIDADDR> is out of service" },
{ 66, " (Informational) New Multicast Group with multicast address <GIDADDR> is now created" },
{ 67, " (Informational) Multicast Group with multicast address <GIDADDR> is now deleted" },
{ 68, " (Informational) Paths indicated by <PATH_REC> and <COMP_MASK> are no longer valid" },
{ 69, " (Informational) Paths indicated by <PATH_REC> and <COMP_MASK> have been recomputed" },
{ 128, " (Urgent) Link State of at least one port of switch at <LIDADDR> has changed" },
{ 129, " (Urgent) Local Link Integrity threshold reached at <LIDADDR><PORTNO>" },
{ 130, " (Urgent) Excessive Buffer OVerrun threshold reached at <LIDADDR><PORTNO>" },
{ 131, " (Urgent) Flow Control Update watchdog timer expired at <LIDADDR><PORTNO>" },
{ 144, " (Informational) CapMask, NodeDesc, LinkWidthEnabled or LinkSpeedEnabled at <LIDADDR> has been modified" },
{ 145, " (Informational) SystemImageGUID at <LIDADDR> has been modified. New value is <SYSTEMIMAGEGUID>" },
{ 256, " (Security) Bad M_Key, <M_KEY> from <LIDADDR> attempted <METHOD> with <ATTRIBUTEID> and <ATTRIBUTEMODIFIER>" },
{ 257, " (Security) Bad P_Key, <KEY> from <LIDADDR1><GIDADDR1><QP1> to <LIDADDR2><GIDADDR2><QP2> on <SL>" },
{ 258, " (Security) Bad Q_Key, <KEY> from <LIDADDR1><GIDADDR1><QP1> to <LIDADDR2><GIDADDR2><QP2> on <SL>" },
{ 259, " (Security) Bad P_Key, <KEY> from <LIDADDR1><GIDADDR1><QP1> to <LIDADDR2><GIDADDR2><QP2> on <SL> at switch <LIDADDR><PORTNO>" },
{ 2048, " (Informational) LinkWidth.Active, LinkWidthDowngrade.TxActive or LinkWidthDowngrade.RxActive of at least one port of switch at <REPORTINGLID> 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_sized_new(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_sized_new(wmem_packet_scope(), 0, ITEM_LABEL_LENGTH);
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, "<Empty>");
}
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, 0x0000007C0, 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_UINT16, 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_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
},
{ &hf_opa_GetGroupInfo_maxExternalMBps, {
"maxExternalMBps", "opa.pa.getgroupinfo.maxexternalmbps",
FT_UINT8, 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_UINT16, 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_UINT16, 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_UINT16, 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_UINT16, 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:
*/