From: Jason Gunthorpe <jgg@xxxxxxxxxxxx> This is used extensively, rework it to match rdma-core's coding convention and include it directly. This version is copied from opensm commit 6d49a7e3c02a ("libvendor/osm_vendor_mlx_sim.c: In osmv_transport_init, fix memory leaks on error") Signed-off-by: Jason Gunthorpe <jgg@xxxxxxxxxxxx> --- ibdiags/include/ibdiag_common.h | 52 +- ibdiags/include/ibdiag_sa.h | 2 +- ibdiags/libibmad/src/CMakeLists.txt | 4 + ibdiags/libibmad/src/iba_types.h | 1734 +++++++++++++++++ .../include/infiniband/ibnetdisc.h | 1 - ibdiags/libibnetdisc/src/CMakeLists.txt | 3 - ibdiags/libibnetdisc/src/ibnetdisc.c | 2 + ibdiags/src/CMakeLists.txt | 3 - ibdiags/src/ibsendtrap.c | 1 - ibdiags/src/mcm_rereg_test.c | 1 - ibdiags/src/perfquery.c | 1 - ibdiags/src/saquery.c | 1 - ibtypes.py | 61 + 13 files changed, 1803 insertions(+), 63 deletions(-) create mode 100644 ibdiags/libibmad/src/iba_types.h create mode 100644 ibtypes.py diff --git a/ibdiags/include/ibdiag_common.h b/ibdiags/include/ibdiag_common.h index 966d1599451a25..bee40789ee6a2a 100644 --- a/ibdiags/include/ibdiag_common.h +++ b/ibdiags/include/ibdiag_common.h @@ -43,7 +43,7 @@ #include <stdarg.h> #include <infiniband/mad.h> -#include <infiniband/iba/ib_types.h> +#include <util/iba_types.h> #include <infiniband/ibnetdisc.h> #include <linux/types.h> @@ -74,56 +74,6 @@ extern char *ibd_nd_format; #define NOT_DISPLAYED_STR "<not displayed>" -/* not all versions of ib_types.h will have this define */ -#ifndef IB_PM_PC_XMIT_WAIT_SUP -#define IB_PM_PC_XMIT_WAIT_SUP (htobe16(((uint16_t)1)<<12)) -#endif - -/* PM ClassPortInfo CapabilityMask Bits */ -#ifndef IS_PM_RSFEC_COUNTERS_SUP -#define IS_PM_RSFEC_COUNTERS_SUP (htobe16(((uint16_t)1)<<14)) -#endif - -#ifndef IB_PM_IS_QP1_DROP_SUP -#define IB_PM_IS_QP1_DROP_SUP (htobe16(((uint16_t)1)<<15)) -#endif - -/* PM ClassPortInfo CapabilityMask2 Bits */ -#ifndef IB_PM_IS_ADDL_PORT_CTRS_EXT_SUP -#define IB_PM_IS_ADDL_PORT_CTRS_EXT_SUP (htobe32(((uint32_t)1)<<1)) -#endif - -/* SM PortInfo CapabilityMask2 Bits */ -#ifndef IB_PORT_CAP2_IS_PORT_INFO_EXT_SUPPORTED -#define IB_PORT_CAP2_IS_PORT_INFO_EXT_SUPPORTED (htobe16(0x0002)) -#endif - -/* SM PortInfoExtended Fec Mode Bits */ -#ifndef IB_PORT_EXT_NO_FEC_MODE_ACTIVE -#define IB_PORT_EXT_NO_FEC_MODE_ACTIVE 0 -#endif - -#ifndef IB_PORT_EXT_FIRE_CODE_FEC_MODE_ACTIVE -#define IB_PORT_EXT_FIRE_CODE_FEC_MODE_ACTIVE (htobe16(0x0001)) -#endif - -#ifndef IB_PORT_EXT_RS_FEC_MODE_ACTIVE -#define IB_PORT_EXT_RS_FEC_MODE_ACTIVE (htobe16(0x0002)) -#endif - -#ifndef IB_PORT_EXT_LOW_LATENCY_RS_FEC_MODE_ACTIVE -#define IB_PORT_EXT_LOW_LATENCY_RS_FEC_MODE_ACTIVE (htobe16(0x0003)) -#endif - -#ifndef IB_PORT_EXT_RS_FEC2_MODE_ACTIVE -#define IB_PORT_EXT_RS_FEC2_MODE_ACTIVE (htobe16(0x0004)) -#endif - -/* SM PortInfoExtended CapabilityMask Bits */ -#ifndef IB_PORT_EXT_CAP_IS_FEC_MODE_SUPPORTED -#define IB_PORT_EXT_CAP_IS_FEC_MODE_SUPPORTED (htobe32(0x00000001)) -#endif - struct ibdiag_opt { const char *name; char letter; diff --git a/ibdiags/include/ibdiag_sa.h b/ibdiags/include/ibdiag_sa.h index 886e963cf7ef36..f0347c8f426b02 100644 --- a/ibdiags/include/ibdiag_sa.h +++ b/ibdiags/include/ibdiag_sa.h @@ -40,7 +40,7 @@ #define _IBDIAG_SA_H_ #include <infiniband/mad.h> -#include <infiniband/iba/ib_types.h> +#include <util/iba_types.h> /* define an SA query structure to be common * This is by no means optimal but it moves the saquery functionality out of diff --git a/ibdiags/libibmad/src/CMakeLists.txt b/ibdiags/libibmad/src/CMakeLists.txt index 37da71a336324a..81fa4a366fc3c7 100644 --- a/ibdiags/libibmad/src/CMakeLists.txt +++ b/ibdiags/libibmad/src/CMakeLists.txt @@ -3,6 +3,10 @@ publish_headers(infiniband ../include/infiniband/mad_osd.h ) +publish_internal_headers(util + iba_types.h + ) + rdma_library(ibmad libibmad.map # See Documentation/versioning.md 5 5.3.${PACKAGE_VERSION} diff --git a/ibdiags/libibmad/src/iba_types.h b/ibdiags/libibmad/src/iba_types.h new file mode 100644 index 00000000000000..0805aa9d586d4e --- /dev/null +++ b/ibdiags/libibmad/src/iba_types.h @@ -0,0 +1,1734 @@ +/* + * Copyright (c) 2004-2009 Voltaire, Inc. All rights reserved. + * Copyright (c) 2002-2019 Mellanox Technologies LTD. All rights reserved. + * Copyright (c) 1996-2003 Intel Corporation. All rights reserved. + * Copyright (c) 2009 HNR Consulting. All rights reserved. + * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved. + * + * This software is available to you under a choice of one of two + * licenses. You may choose to be licensed under the terms of the GNU + * General Public License (GPL) Version 2, available from the file + * COPYING in the main directory of this source tree, or the + * OpenIB.org BSD license below: + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above + * copyright notice, this list of conditions and the following + * disclaimer. + * + * - Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + */ + +#ifndef __LIBIBMAD_IB_TYPES_H__ +#define __LIBIBMAD_IB_TYPES_H__ + +#include <endian.h> +#include <stdint.h> +#include <stdbool.h> +#include <assert.h> +#include <linux/types.h> + +#define MAD_BLOCK_SIZE 256 +#define MAD_RMPP_HDR_SIZE 36 +#define MAD_BLOCK_GRH_SIZE 296 +#define IB_LID_PERMISSIVE 0xFFFF +#define IB_DEFAULT_PKEY 0xFFFF +#define IB_QP1_WELL_KNOWN_Q_KEY htobe32(0x80010000) +#define IB_QP0 0 +#define IB_QP1 htobe32(1) +#define IB_QP_PRIVILEGED_Q_KEY htobe32(0x80000000) +#define IB_LID_UCAST_START_HO 0x0001 +#define IB_LID_UCAST_START htobe16(IB_LID_UCAST_START_HO) +#define IB_LID_UCAST_END_HO 0xBFFF +#define IB_LID_UCAST_END htobe16(IB_LID_UCAST_END_HO) +#define IB_LID_MCAST_START_HO 0xC000 +#define IB_LID_MCAST_START htobe16(IB_LID_MCAST_START_HO) +#define IB_LID_MCAST_END_HO 0xFFFE +#define IB_LID_MCAST_END htobe16(IB_LID_MCAST_END_HO) +#define IB_DEFAULT_SUBNET_PREFIX htobe64(0xFE80000000000000ULL) +#define IB_DEFAULT_SUBNET_PREFIX_HO 0xFE80000000000000ULL +#define IB_NODE_NUM_PORTS_MAX 0xFE +#define IB_INVALID_PORT_NUM 0xFF +#define IB_SUBNET_PATH_HOPS_MAX 64 +#define IB_HOPLIMIT_MAX 255 +#define IB_MC_SCOPE_LINK_LOCAL 0x2 +#define IB_MC_SCOPE_SITE_LOCAL 0x5 +#define IB_MC_SCOPE_ORG_LOCAL 0x8 +#define IB_MC_SCOPE_GLOBAL 0xE +#define IB_PKEY_MAX_BLOCKS 2048 +#define IB_MCAST_MAX_BLOCK_ID 511 +#define IB_MCAST_BLOCK_ID_MASK_HO 0x000001FF +#define IB_MCAST_BLOCK_SIZE 32 +#define IB_MCAST_MASK_SIZE 16 +#define IB_MCAST_POSITION_MASK_HO 0xF0000000 +#define IB_MCAST_POSITION_MAX 0xF +#define IB_MCAST_POSITION_SHIFT 28 +#define IB_PKEY_BASE_MASK htobe16(0x7FFF) +#define IB_PKEY_TYPE_MASK htobe16(0x8000) +#define IB_DEFAULT_PARTIAL_PKEY htobe16(0x7FFF) +#define IB_MCLASS_SUBN_LID 0x01 +#define IB_MCLASS_SUBN_DIR 0x81 +#define IB_MCLASS_SUBN_ADM 0x03 +#define IB_MCLASS_PERF 0x04 +#define IB_MCLASS_BM 0x05 +#define IB_MCLASS_DEV_MGMT 0x06 +#define IB_MCLASS_COMM_MGMT 0x07 +#define IB_MCLASS_SNMP 0x08 +#define IB_MCLASS_VENDOR_LOW_RANGE_MIN 0x09 +#define IB_MCLASS_VENDOR_LOW_RANGE_MAX 0x0F +#define IB_MCLASS_DEV_ADM 0x10 +#define IB_MCLASS_BIS 0x12 +#define IB_MCLASS_CC 0x21 +#define IB_MCLASS_VENDOR_HIGH_RANGE_MIN 0x30 +#define IB_MCLASS_VENDOR_HIGH_RANGE_MAX 0x4F +#define IB_MAX_METHODS 128 +#define IB_MAD_METHOD_RESP_MASK 0x80 +#define IB_MAD_METHOD_GET 0x01 +#define IB_MAD_METHOD_SET 0x02 +#define IB_MAD_METHOD_GET_RESP 0x81 +#define IB_MAD_METHOD_DELETE 0x15 +#define IB_MAD_METHOD_GETTABLE 0x12 +#define IB_MAD_METHOD_GETTABLE_RESP 0x92 +#define IB_MAD_METHOD_GETTRACETABLE 0x13 +#define IB_MAD_METHOD_GETMULTI 0x14 +#define IB_MAD_METHOD_GETMULTI_RESP 0x94 +#define IB_MAD_METHOD_SEND 0x03 +#define IB_MAD_METHOD_TRAP 0x05 +#define IB_MAD_METHOD_REPORT 0x06 +#define IB_MAD_METHOD_REPORT_RESP 0x86 +#define IB_MAD_METHOD_TRAP_REPRESS 0x07 +#define IB_MAD_STATUS_BUSY htobe16(0x0001) +#define IB_MAD_STATUS_REDIRECT htobe16(0x0002) +#define IB_MAD_STATUS_UNSUP_CLASS_VER htobe16(0x0004) +#define IB_MAD_STATUS_UNSUP_METHOD htobe16(0x0008) +#define IB_MAD_STATUS_UNSUP_METHOD_ATTR htobe16(0x000C) +#define IB_MAD_STATUS_INVALID_FIELD htobe16(0x001C) +#define IB_MAD_STATUS_CLASS_MASK htobe16(0xFF00) +#define IB_SA_MAD_STATUS_SUCCESS 0x0000 +#define IB_SA_MAD_STATUS_NO_RESOURCES htobe16(0x0100) +#define IB_SA_MAD_STATUS_REQ_INVALID htobe16(0x0200) +#define IB_SA_MAD_STATUS_NO_RECORDS htobe16(0x0300) +#define IB_SA_MAD_STATUS_TOO_MANY_RECORDS htobe16(0x0400) +#define IB_SA_MAD_STATUS_INVALID_GID htobe16(0x0500) +#define IB_SA_MAD_STATUS_INSUF_COMPS htobe16(0x0600) +#define IB_SA_MAD_STATUS_DENIED htobe16(0x0700) +#define IB_SA_MAD_STATUS_PRIO_SUGGESTED htobe16(0x0800) +#define IB_DM_MAD_STATUS_NO_IOC_RESP htobe16(0x0100) +#define IB_DM_MAD_STATUS_NO_SVC_ENTRIES htobe16(0x0200) +#define IB_DM_MAD_STATUS_IOC_FAILURE htobe16(0x8000) +#define IB_MAD_ATTR_CLASS_PORT_INFO htobe16(0x0001) +#define IB_MAD_ATTR_NOTICE htobe16(0x0002) +#define IB_MAD_ATTR_INFORM_INFO htobe16(0x0003) +#define IB_MAD_ATTR_NODE_DESC htobe16(0x0010) +#define IB_MAD_ATTR_PORT_SMPL_CTRL htobe16(0x0010) +#define IB_MAD_ATTR_NODE_INFO htobe16(0x0011) +#define IB_MAD_ATTR_PORT_SMPL_RSLT htobe16(0x0011) +#define IB_MAD_ATTR_SWITCH_INFO htobe16(0x0012) +#define IB_MAD_ATTR_PORT_CNTRS htobe16(0x0012) +#define IB_MAD_ATTR_PORT_CNTRS_EXT htobe16(0x001D) +#define IB_MAD_ATTR_PORT_XMIT_DATA_SL htobe16(0x0036) +#define IB_MAD_ATTR_PORT_RCV_DATA_SL htobe16(0x0037) +#define IB_MAD_ATTR_GUID_INFO htobe16(0x0014) +#define IB_MAD_ATTR_PORT_INFO htobe16(0x0015) +#define IB_MAD_ATTR_P_KEY_TABLE htobe16(0x0016) +#define IB_MAD_ATTR_SLVL_TABLE htobe16(0x0017) +#define IB_MAD_ATTR_VL_ARBITRATION htobe16(0x0018) +#define IB_MAD_ATTR_LIN_FWD_TBL htobe16(0x0019) +#define IB_MAD_ATTR_RND_FWD_TBL htobe16(0x001A) +#define IB_MAD_ATTR_MCAST_FWD_TBL htobe16(0x001B) +#define IB_MAD_ATTR_NODE_RECORD htobe16(0x0011) +#define IB_MAD_ATTR_PORTINFO_RECORD htobe16(0x0012) +#define IB_MAD_ATTR_SWITCH_INFO_RECORD htobe16(0x0014) +#define IB_MAD_ATTR_LINK_RECORD htobe16(0x0020) +#define IB_MAD_ATTR_SM_INFO htobe16(0x0020) +#define IB_MAD_ATTR_SMINFO_RECORD htobe16(0x0018) +#define IB_MAD_ATTR_GUIDINFO_RECORD htobe16(0x0030) +#define IB_MAD_ATTR_VENDOR_DIAG htobe16(0x0030) +#define IB_MAD_ATTR_LED_INFO htobe16(0x0031) +#define IB_MAD_ATTR_MLNX_EXTENDED_PORT_INFO htobe16(0xFF90) +#define IB_MAD_ATTR_SERVICE_RECORD htobe16(0x0031) +#define IB_MAD_ATTR_LFT_RECORD htobe16(0x0015) +#define IB_MAD_ATTR_MFT_RECORD htobe16(0x0017) +#define IB_MAD_ATTR_PKEY_TBL_RECORD htobe16(0x0033) +#define IB_MAD_ATTR_PATH_RECORD htobe16(0x0035) +#define IB_MAD_ATTR_VLARB_RECORD htobe16(0x0036) +#define IB_MAD_ATTR_SLVL_RECORD htobe16(0x0013) +#define IB_MAD_ATTR_MCMEMBER_RECORD htobe16(0x0038) +#define IB_MAD_ATTR_TRACE_RECORD htobe16(0x0039) +#define IB_MAD_ATTR_MULTIPATH_RECORD htobe16(0x003A) +#define IB_MAD_ATTR_SVC_ASSOCIATION_RECORD htobe16(0x003B) +#define IB_MAD_ATTR_INFORM_INFO_RECORD htobe16(0x00F3) +#define IB_MAD_ATTR_IO_UNIT_INFO htobe16(0x0010) +#define IB_MAD_ATTR_IO_CONTROLLER_PROFILE htobe16(0x0011) +#define IB_MAD_ATTR_SERVICE_ENTRIES htobe16(0x0012) +#define IB_MAD_ATTR_DIAGNOSTIC_TIMEOUT htobe16(0x0020) +#define IB_MAD_ATTR_PREPARE_TO_TEST htobe16(0x0021) +#define IB_MAD_ATTR_TEST_DEVICE_ONCE htobe16(0x0022) +#define IB_MAD_ATTR_TEST_DEVICE_LOOP htobe16(0x0023) +#define IB_MAD_ATTR_DIAG_CODE htobe16(0x0024) +#define IB_MAD_ATTR_SVC_ASSOCIATION_RECORD htobe16(0x003B) +#define IB_MAD_ATTR_CONG_INFO htobe16(0x0011) +#define IB_MAD_ATTR_CONG_KEY_INFO htobe16(0x0012) +#define IB_MAD_ATTR_CONG_LOG htobe16(0x0013) +#define IB_MAD_ATTR_SW_CONG_SETTING htobe16(0x0014) +#define IB_MAD_ATTR_SW_PORT_CONG_SETTING htobe16(0x0015) +#define IB_MAD_ATTR_CA_CONG_SETTING htobe16(0x0016) +#define IB_MAD_ATTR_CC_TBL htobe16(0x0017) +#define IB_MAD_ATTR_TIME_STAMP htobe16(0x0018) +#define IB_NODE_TYPE_CA 0x01 +#define IB_NODE_TYPE_SWITCH 0x02 +#define IB_NODE_TYPE_ROUTER 0x03 +#define IB_NOTICE_PRODUCER_TYPE_CA htobe32(0x000001) +#define IB_NOTICE_PRODUCER_TYPE_SWITCH htobe32(0x000002) +#define IB_NOTICE_PRODUCER_TYPE_ROUTER htobe32(0x000003) +#define IB_NOTICE_PRODUCER_TYPE_CLASS_MGR htobe32(0x000004) +#define IB_MTU_LEN_256 1 +#define IB_MTU_LEN_512 2 +#define IB_MTU_LEN_1024 3 +#define IB_MTU_LEN_2048 4 +#define IB_MTU_LEN_4096 5 +#define IB_PATH_SELECTOR_GREATER_THAN 0 +#define IB_PATH_SELECTOR_LESS_THAN 1 +#define IB_PATH_SELECTOR_EXACTLY 2 +#define IB_PATH_SELECTOR_LARGEST 3 +#define IB_SMINFO_STATE_NOTACTIVE 0 +#define IB_SMINFO_STATE_DISCOVERING 1 +#define IB_SMINFO_STATE_STANDBY 2 +#define IB_SMINFO_STATE_MASTER 3 +#define IB_PATH_REC_SL_MASK 0x000F +#define IB_MULTIPATH_REC_SL_MASK 0x000F +#define IB_PATH_REC_QOS_CLASS_MASK 0xFFF0 +#define IB_MULTIPATH_REC_QOS_CLASS_MASK 0xFFF0 +#define IB_PATH_REC_SELECTOR_MASK 0xC0 +#define IB_MULTIPATH_REC_SELECTOR_MASK 0xC0 +#define IB_PATH_REC_BASE_MASK 0x3F +#define IB_MULTIPATH_REC_BASE_MASK 0x3F +#define IB_LINK_NO_CHANGE 0 +#define IB_LINK_DOWN 1 +#define IB_LINK_INIT 2 +#define IB_LINK_ARMED 3 +#define IB_LINK_ACTIVE 4 +#define IB_LINK_ACT_DEFER 5 +#define IB_JOIN_STATE_FULL 1 +#define IB_JOIN_STATE_NON 2 +#define IB_JOIN_STATE_SEND_ONLY 4 +#define IB_JOIN_STATE_SEND_ONLY_FULL 8 +typedef union { + uint8_t raw[16]; + struct _ib_gid_unicast { + __be64 prefix; + __be64 interface_id; + } __attribute__((packed)) unicast; + struct _ib_gid_multicast { + uint8_t header[2]; + uint8_t raw_group_id[14]; + } __attribute__((packed)) multicast; + struct _ib_gid_ip_multicast { + uint8_t header[2]; + __be16 signature; + __be16 p_key; + uint8_t group_id[10]; + } __attribute__((packed)) ip_multicast; +} __attribute__((packed)) ib_gid_t; +typedef struct { + __be64 service_id; + ib_gid_t dgid; + ib_gid_t sgid; + __be16 dlid; + __be16 slid; + __be32 hop_flow_raw; + uint8_t tclass; + uint8_t num_path; + __be16 pkey; + __be16 qos_class_sl; + uint8_t mtu; + uint8_t rate; + uint8_t pkt_life; + uint8_t preference; + uint8_t resv2[6]; +} __attribute__((packed)) ib_path_rec_t; +#define IB_PR_COMPMASK_SERVICEID_MSB htobe64(((uint64_t)1) << 0) +#define IB_PR_COMPMASK_SERVICEID_LSB htobe64(((uint64_t)1) << 1) +#define IB_PR_COMPMASK_DGID htobe64(((uint64_t)1) << 2) +#define IB_PR_COMPMASK_SGID htobe64(((uint64_t)1) << 3) +#define IB_PR_COMPMASK_DLID htobe64(((uint64_t)1) << 4) +#define IB_PR_COMPMASK_SLID htobe64(((uint64_t)1) << 5) +#define IB_PR_COMPMASK_RAWTRAFFIC htobe64(((uint64_t)1) << 6) +#define IB_PR_COMPMASK_RESV0 htobe64(((uint64_t)1) << 7) +#define IB_PR_COMPMASK_FLOWLABEL htobe64(((uint64_t)1) << 8) +#define IB_PR_COMPMASK_HOPLIMIT htobe64(((uint64_t)1) << 9) +#define IB_PR_COMPMASK_TCLASS htobe64(((uint64_t)1) << 10) +#define IB_PR_COMPMASK_REVERSIBLE htobe64(((uint64_t)1) << 11) +#define IB_PR_COMPMASK_NUMBPATH htobe64(((uint64_t)1) << 12) +#define IB_PR_COMPMASK_PKEY htobe64(((uint64_t)1) << 13) +#define IB_PR_COMPMASK_QOS_CLASS htobe64(((uint64_t)1) << 14) +#define IB_PR_COMPMASK_SL htobe64(((uint64_t)1) << 15) +#define IB_PR_COMPMASK_MTUSELEC htobe64(((uint64_t)1) << 16) +#define IB_PR_COMPMASK_MTU htobe64(((uint64_t)1) << 17) +#define IB_PR_COMPMASK_RATESELEC htobe64(((uint64_t)1) << 18) +#define IB_PR_COMPMASK_RATE htobe64(((uint64_t)1) << 19) +#define IB_PR_COMPMASK_PKTLIFETIMESELEC htobe64(((uint64_t)1) << 20) +#define IB_PR_COMPMASK_PKTLIFETIME htobe64(((uint64_t)1) << 21) +#define IB_LR_COMPMASK_FROM_LID htobe64(((uint64_t)1) << 0) +#define IB_LR_COMPMASK_FROM_PORT htobe64(((uint64_t)1) << 1) +#define IB_LR_COMPMASK_TO_PORT htobe64(((uint64_t)1) << 2) +#define IB_LR_COMPMASK_TO_LID htobe64(((uint64_t)1) << 3) +#define IB_VLA_COMPMASK_LID htobe64(((uint64_t)1) << 0) +#define IB_VLA_COMPMASK_OUT_PORT htobe64(((uint64_t)1) << 1) +#define IB_VLA_COMPMASK_BLOCK htobe64(((uint64_t)1) << 2) +#define IB_SLVL_COMPMASK_LID htobe64(((uint64_t)1) << 0) +#define IB_SLVL_COMPMASK_IN_PORT htobe64(((uint64_t)1) << 1) +#define IB_SLVL_COMPMASK_OUT_PORT htobe64(((uint64_t)1) << 2) +#define IB_PKEY_COMPMASK_LID htobe64(((uint64_t)1) << 0) +#define IB_PKEY_COMPMASK_BLOCK htobe64(((uint64_t)1) << 1) +#define IB_PKEY_COMPMASK_PORT htobe64(((uint64_t)1) << 2) +#define IB_SWIR_COMPMASK_LID htobe64(((uint64_t)1) << 0) +#define IB_SWIR_COMPMASK_RESERVED1 htobe64(((uint64_t)1) << 1) +#define IB_LFTR_COMPMASK_LID htobe64(((uint64_t)1) << 0) +#define IB_LFTR_COMPMASK_BLOCK htobe64(((uint64_t)1) << 1) +#define IB_MFTR_COMPMASK_LID htobe64(((uint64_t)1) << 0) +#define IB_MFTR_COMPMASK_POSITION htobe64(((uint64_t)1) << 1) +#define IB_MFTR_COMPMASK_RESERVED1 htobe64(((uint64_t)1) << 2) +#define IB_MFTR_COMPMASK_BLOCK htobe64(((uint64_t)1) << 3) +#define IB_MFTR_COMPMASK_RESERVED2 htobe64(((uint64_t)1) << 4) +#define IB_NR_COMPMASK_LID htobe64(((uint64_t)1) << 0) +#define IB_NR_COMPMASK_RESERVED1 htobe64(((uint64_t)1) << 1) +#define IB_NR_COMPMASK_BASEVERSION htobe64(((uint64_t)1) << 2) +#define IB_NR_COMPMASK_CLASSVERSION htobe64(((uint64_t)1) << 3) +#define IB_NR_COMPMASK_NODETYPE htobe64(((uint64_t)1) << 4) +#define IB_NR_COMPMASK_NUMPORTS htobe64(((uint64_t)1) << 5) +#define IB_NR_COMPMASK_SYSIMAGEGUID htobe64(((uint64_t)1) << 6) +#define IB_NR_COMPMASK_NODEGUID htobe64(((uint64_t)1) << 7) +#define IB_NR_COMPMASK_PORTGUID htobe64(((uint64_t)1) << 8) +#define IB_NR_COMPMASK_PARTCAP htobe64(((uint64_t)1) << 9) +#define IB_NR_COMPMASK_DEVID htobe64(((uint64_t)1) << 10) +#define IB_NR_COMPMASK_REV htobe64(((uint64_t)1) << 11) +#define IB_NR_COMPMASK_PORTNUM htobe64(((uint64_t)1) << 12) +#define IB_NR_COMPMASK_VENDID htobe64(((uint64_t)1) << 13) +#define IB_NR_COMPMASK_NODEDESC htobe64(((uint64_t)1) << 14) +#define IB_SR_COMPMASK_SID htobe64(((uint64_t)1) << 0) +#define IB_SR_COMPMASK_SGID htobe64(((uint64_t)1) << 1) +#define IB_SR_COMPMASK_SPKEY htobe64(((uint64_t)1) << 2) +#define IB_SR_COMPMASK_RES1 htobe64(((uint64_t)1) << 3) +#define IB_SR_COMPMASK_SLEASE htobe64(((uint64_t)1) << 4) +#define IB_SR_COMPMASK_SKEY htobe64(((uint64_t)1) << 5) +#define IB_SR_COMPMASK_SNAME htobe64(((uint64_t)1) << 6) +#define IB_SR_COMPMASK_SDATA8_0 htobe64(((uint64_t)1) << 7) +#define IB_SR_COMPMASK_SDATA8_1 htobe64(((uint64_t)1) << 8) +#define IB_SR_COMPMASK_SDATA8_2 htobe64(((uint64_t)1) << 9) +#define IB_SR_COMPMASK_SDATA8_3 htobe64(((uint64_t)1) << 10) +#define IB_SR_COMPMASK_SDATA8_4 htobe64(((uint64_t)1) << 11) +#define IB_SR_COMPMASK_SDATA8_5 htobe64(((uint64_t)1) << 12) +#define IB_SR_COMPMASK_SDATA8_6 htobe64(((uint64_t)1) << 13) +#define IB_SR_COMPMASK_SDATA8_7 htobe64(((uint64_t)1) << 14) +#define IB_SR_COMPMASK_SDATA8_8 htobe64(((uint64_t)1) << 15) +#define IB_SR_COMPMASK_SDATA8_9 htobe64(((uint64_t)1) << 16) +#define IB_SR_COMPMASK_SDATA8_10 htobe64(((uint64_t)1) << 17) +#define IB_SR_COMPMASK_SDATA8_11 htobe64(((uint64_t)1) << 18) +#define IB_SR_COMPMASK_SDATA8_12 htobe64(((uint64_t)1) << 19) +#define IB_SR_COMPMASK_SDATA8_13 htobe64(((uint64_t)1) << 20) +#define IB_SR_COMPMASK_SDATA8_14 htobe64(((uint64_t)1) << 21) +#define IB_SR_COMPMASK_SDATA8_15 htobe64(((uint64_t)1) << 22) +#define IB_SR_COMPMASK_SDATA16_0 htobe64(((uint64_t)1) << 23) +#define IB_SR_COMPMASK_SDATA16_1 htobe64(((uint64_t)1) << 24) +#define IB_SR_COMPMASK_SDATA16_2 htobe64(((uint64_t)1) << 25) +#define IB_SR_COMPMASK_SDATA16_3 htobe64(((uint64_t)1) << 26) +#define IB_SR_COMPMASK_SDATA16_4 htobe64(((uint64_t)1) << 27) +#define IB_SR_COMPMASK_SDATA16_5 htobe64(((uint64_t)1) << 28) +#define IB_SR_COMPMASK_SDATA16_6 htobe64(((uint64_t)1) << 29) +#define IB_SR_COMPMASK_SDATA16_7 htobe64(((uint64_t)1) << 30) +#define IB_SR_COMPMASK_SDATA32_0 htobe64(((uint64_t)1) << 31) +#define IB_SR_COMPMASK_SDATA32_1 htobe64(((uint64_t)1) << 32) +#define IB_SR_COMPMASK_SDATA32_2 htobe64(((uint64_t)1) << 33) +#define IB_SR_COMPMASK_SDATA32_3 htobe64(((uint64_t)1) << 34) +#define IB_SR_COMPMASK_SDATA64_0 htobe64(((uint64_t)1) << 35) +#define IB_SR_COMPMASK_SDATA64_1 htobe64(((uint64_t)1) << 36) +#define IB_PIR_COMPMASK_LID htobe64(((uint64_t)1) << 0) +#define IB_PIR_COMPMASK_PORTNUM htobe64(((uint64_t)1) << 1) +#define IB_PIR_COMPMASK_OPTIONS htobe64(((uint64_t)1) << 2) +#define IB_PIR_COMPMASK_MKEY htobe64(((uint64_t)1) << 3) +#define IB_PIR_COMPMASK_GIDPRE htobe64(((uint64_t)1) << 4) +#define IB_PIR_COMPMASK_BASELID htobe64(((uint64_t)1) << 5) +#define IB_PIR_COMPMASK_SMLID htobe64(((uint64_t)1) << 6) +#define IB_PIR_COMPMASK_CAPMASK htobe64(((uint64_t)1) << 7) +#define IB_PIR_COMPMASK_DIAGCODE htobe64(((uint64_t)1) << 8) +#define IB_PIR_COMPMASK_MKEYLEASEPRD htobe64(((uint64_t)1) << 9) +#define IB_PIR_COMPMASK_LOCALPORTNUM htobe64(((uint64_t)1) << 10) +#define IB_PIR_COMPMASK_LINKWIDTHENABLED htobe64(((uint64_t)1) << 11) +#define IB_PIR_COMPMASK_LNKWIDTHSUPPORT htobe64(((uint64_t)1) << 12) +#define IB_PIR_COMPMASK_LNKWIDTHACTIVE htobe64(((uint64_t)1) << 13) +#define IB_PIR_COMPMASK_LNKSPEEDSUPPORT htobe64(((uint64_t)1) << 14) +#define IB_PIR_COMPMASK_PORTSTATE htobe64(((uint64_t)1) << 15) +#define IB_PIR_COMPMASK_PORTPHYSTATE htobe64(((uint64_t)1) << 16) +#define IB_PIR_COMPMASK_LINKDWNDFLTSTATE htobe64(((uint64_t)1) << 17) +#define IB_PIR_COMPMASK_MKEYPROTBITS htobe64(((uint64_t)1) << 18) +#define IB_PIR_COMPMASK_RESV2 htobe64(((uint64_t)1) << 19) +#define IB_PIR_COMPMASK_LMC htobe64(((uint64_t)1) << 20) +#define IB_PIR_COMPMASK_LINKSPEEDACTIVE htobe64(((uint64_t)1) << 21) +#define IB_PIR_COMPMASK_LINKSPEEDENABLE htobe64(((uint64_t)1) << 22) +#define IB_PIR_COMPMASK_NEIGHBORMTU htobe64(((uint64_t)1) << 23) +#define IB_PIR_COMPMASK_MASTERSMSL htobe64(((uint64_t)1) << 24) +#define IB_PIR_COMPMASK_VLCAP htobe64(((uint64_t)1) << 25) +#define IB_PIR_COMPMASK_INITTYPE htobe64(((uint64_t)1) << 26) +#define IB_PIR_COMPMASK_VLHIGHLIMIT htobe64(((uint64_t)1) << 27) +#define IB_PIR_COMPMASK_VLARBHIGHCAP htobe64(((uint64_t)1) << 28) +#define IB_PIR_COMPMASK_VLARBLOWCAP htobe64(((uint64_t)1) << 29) +#define IB_PIR_COMPMASK_INITTYPEREPLY htobe64(((uint64_t)1) << 30) +#define IB_PIR_COMPMASK_MTUCAP htobe64(((uint64_t)1) << 31) +#define IB_PIR_COMPMASK_VLSTALLCNT htobe64(((uint64_t)1) << 32) +#define IB_PIR_COMPMASK_HOQLIFE htobe64(((uint64_t)1) << 33) +#define IB_PIR_COMPMASK_OPVLS htobe64(((uint64_t)1) << 34) +#define IB_PIR_COMPMASK_PARENFIN htobe64(((uint64_t)1) << 35) +#define IB_PIR_COMPMASK_PARENFOUT htobe64(((uint64_t)1) << 36) +#define IB_PIR_COMPMASK_FILTERRAWIN htobe64(((uint64_t)1) << 37) +#define IB_PIR_COMPMASK_FILTERRAWOUT htobe64(((uint64_t)1) << 38) +#define IB_PIR_COMPMASK_MKEYVIO htobe64(((uint64_t)1) << 39) +#define IB_PIR_COMPMASK_PKEYVIO htobe64(((uint64_t)1) << 40) +#define IB_PIR_COMPMASK_QKEYVIO htobe64(((uint64_t)1) << 41) +#define IB_PIR_COMPMASK_GUIDCAP htobe64(((uint64_t)1) << 42) +#define IB_PIR_COMPMASK_CLIENTREREG htobe64(((uint64_t)1) << 43) +#define IB_PIR_COMPMASK_RESV3 htobe64(((uint64_t)1) << 44) +#define IB_PIR_COMPMASK_SUBNTO htobe64(((uint64_t)1) << 45) +#define IB_PIR_COMPMASK_RESV4 htobe64(((uint64_t)1) << 46) +#define IB_PIR_COMPMASK_RESPTIME htobe64(((uint64_t)1) << 47) +#define IB_PIR_COMPMASK_LOCALPHYERR htobe64(((uint64_t)1) << 48) +#define IB_PIR_COMPMASK_OVERRUNERR htobe64(((uint64_t)1) << 49) +#define IB_PIR_COMPMASK_MAXCREDHINT htobe64(((uint64_t)1) << 50) +#define IB_PIR_COMPMASK_RESV5 htobe64(((uint64_t)1) << 51) +#define IB_PIR_COMPMASK_LINKRTLAT htobe64(((uint64_t)1) << 52) +#define IB_PIR_COMPMASK_CAPMASK2 htobe64(((uint64_t)1) << 53) +#define IB_PIR_COMPMASK_LINKSPDEXTACT htobe64(((uint64_t)1) << 54) +#define IB_PIR_COMPMASK_LINKSPDEXTSUPP htobe64(((uint64_t)1) << 55) +#define IB_PIR_COMPMASK_RESV7 htobe64(((uint64_t)1) << 56) +#define IB_PIR_COMPMASK_LINKSPDEXTENAB htobe64(((uint64_t)1) << 57) +#define IB_MCR_COMPMASK_GID htobe64(((uint64_t)1) << 0) +#define IB_MCR_COMPMASK_MGID htobe64(((uint64_t)1) << 0) +#define IB_MCR_COMPMASK_PORT_GID htobe64(((uint64_t)1) << 1) +#define IB_MCR_COMPMASK_QKEY htobe64(((uint64_t)1) << 2) +#define IB_MCR_COMPMASK_MLID htobe64(((uint64_t)1) << 3) +#define IB_MCR_COMPMASK_MTU_SEL htobe64(((uint64_t)1) << 4) +#define IB_MCR_COMPMASK_MTU htobe64(((uint64_t)1) << 5) +#define IB_MCR_COMPMASK_TCLASS htobe64(((uint64_t)1) << 6) +#define IB_MCR_COMPMASK_PKEY htobe64(((uint64_t)1) << 7) +#define IB_MCR_COMPMASK_RATE_SEL htobe64(((uint64_t)1) << 8) +#define IB_MCR_COMPMASK_RATE htobe64(((uint64_t)1) << 9) +#define IB_MCR_COMPMASK_LIFE_SEL htobe64(((uint64_t)1) << 10) +#define IB_MCR_COMPMASK_LIFE htobe64(((uint64_t)1) << 11) +#define IB_MCR_COMPMASK_SL htobe64(((uint64_t)1) << 12) +#define IB_MCR_COMPMASK_FLOW htobe64(((uint64_t)1) << 13) +#define IB_MCR_COMPMASK_HOP htobe64(((uint64_t)1) << 14) +#define IB_MCR_COMPMASK_SCOPE htobe64(((uint64_t)1) << 15) +#define IB_MCR_COMPMASK_JOIN_STATE htobe64(((uint64_t)1) << 16) +#define IB_MCR_COMPMASK_PROXY htobe64(((uint64_t)1) << 17) +#define IB_GIR_COMPMASK_LID htobe64(((uint64_t)1) << 0) +#define IB_GIR_COMPMASK_BLOCKNUM htobe64(((uint64_t)1) << 1) +#define IB_GIR_COMPMASK_RESV1 htobe64(((uint64_t)1) << 2) +#define IB_GIR_COMPMASK_RESV2 htobe64(((uint64_t)1) << 3) +#define IB_GIR_COMPMASK_GID0 htobe64(((uint64_t)1) << 4) +#define IB_GIR_COMPMASK_GID1 htobe64(((uint64_t)1) << 5) +#define IB_GIR_COMPMASK_GID2 htobe64(((uint64_t)1) << 6) +#define IB_GIR_COMPMASK_GID3 htobe64(((uint64_t)1) << 7) +#define IB_GIR_COMPMASK_GID4 htobe64(((uint64_t)1) << 8) +#define IB_GIR_COMPMASK_GID5 htobe64(((uint64_t)1) << 9) +#define IB_GIR_COMPMASK_GID6 htobe64(((uint64_t)1) << 10) +#define IB_GIR_COMPMASK_GID7 htobe64(((uint64_t)1) << 11) +#define IB_MPR_COMPMASK_RAWTRAFFIC htobe64(((uint64_t)1) << 0) +#define IB_MPR_COMPMASK_RESV0 htobe64(((uint64_t)1) << 1) +#define IB_MPR_COMPMASK_FLOWLABEL htobe64(((uint64_t)1) << 2) +#define IB_MPR_COMPMASK_HOPLIMIT htobe64(((uint64_t)1) << 3) +#define IB_MPR_COMPMASK_TCLASS htobe64(((uint64_t)1) << 4) +#define IB_MPR_COMPMASK_REVERSIBLE htobe64(((uint64_t)1) << 5) +#define IB_MPR_COMPMASK_NUMBPATH htobe64(((uint64_t)1) << 6) +#define IB_MPR_COMPMASK_PKEY htobe64(((uint64_t)1) << 7) +#define IB_MPR_COMPMASK_QOS_CLASS htobe64(((uint64_t)1) << 8) +#define IB_MPR_COMPMASK_SL htobe64(((uint64_t)1) << 9) +#define IB_MPR_COMPMASK_MTUSELEC htobe64(((uint64_t)1) << 10) +#define IB_MPR_COMPMASK_MTU htobe64(((uint64_t)1) << 11) +#define IB_MPR_COMPMASK_RATESELEC htobe64(((uint64_t)1) << 12) +#define IB_MPR_COMPMASK_RATE htobe64(((uint64_t)1) << 13) +#define IB_MPR_COMPMASK_PKTLIFETIMESELEC htobe64(((uint64_t)1) << 14) +#define IB_MPR_COMPMASK_PKTLIFETIME htobe64(((uint64_t)1) << 15) +#define IB_MPR_COMPMASK_SERVICEID_MSB htobe64(((uint64_t)1) << 16) +#define IB_MPR_COMPMASK_INDEPSELEC htobe64(((uint64_t)1) << 17) +#define IB_MPR_COMPMASK_RESV3 htobe64(((uint64_t)1) << 18) +#define IB_MPR_COMPMASK_SGIDCOUNT htobe64(((uint64_t)1) << 19) +#define IB_MPR_COMPMASK_DGIDCOUNT htobe64(((uint64_t)1) << 20) +#define IB_MPR_COMPMASK_SERVICEID_LSB htobe64(((uint64_t)1) << 21) +#define IB_SMIR_COMPMASK_LID htobe64(((uint64_t)1) << 0) +#define IB_SMIR_COMPMASK_RESV0 htobe64(((uint64_t)1) << 1) +#define IB_SMIR_COMPMASK_GUID htobe64(((uint64_t)1) << 2) +#define IB_SMIR_COMPMASK_SMKEY htobe64(((uint64_t)1) << 3) +#define IB_SMIR_COMPMASK_ACTCOUNT htobe64(((uint64_t)1) << 4) +#define IB_SMIR_COMPMASK_PRIORITY htobe64(((uint64_t)1) << 5) +#define IB_SMIR_COMPMASK_SMSTATE htobe64(((uint64_t)1) << 6) +#define IB_IIR_COMPMASK_SUBSCRIBERGID htobe64(((uint64_t)1) << 0) +#define IB_IIR_COMPMASK_ENUM htobe64(((uint64_t)1) << 1) +#define IB_IIR_COMPMASK_RESV0 htobe64(((uint64_t)1) << 2) +#define IB_IIR_COMPMASK_GID htobe64(((uint64_t)1) << 3) +#define IB_IIR_COMPMASK_LIDRANGEBEGIN htobe64(((uint64_t)1) << 4) +#define IB_IIR_COMPMASK_LIDRANGEEND htobe64(((uint64_t)1) << 5) +#define IB_IIR_COMPMASK_RESV1 htobe64(((uint64_t)1) << 6) +#define IB_IIR_COMPMASK_ISGENERIC htobe64(((uint64_t)1) << 7) +#define IB_IIR_COMPMASK_SUBSCRIBE htobe64(((uint64_t)1) << 8) +#define IB_IIR_COMPMASK_TYPE htobe64(((uint64_t)1) << 9) +#define IB_IIR_COMPMASK_TRAPNUMB htobe64(((uint64_t)1) << 10) +#define IB_IIR_COMPMASK_DEVICEID htobe64(((uint64_t)1) << 10) +#define IB_IIR_COMPMASK_QPN htobe64(((uint64_t)1) << 11) +#define IB_IIR_COMPMASK_RESV2 htobe64(((uint64_t)1) << 12) +#define IB_IIR_COMPMASK_RESPTIME htobe64(((uint64_t)1) << 13) +#define IB_IIR_COMPMASK_RESV3 htobe64(((uint64_t)1) << 14) +#define IB_IIR_COMPMASK_PRODTYPE htobe64(((uint64_t)1) << 15) +#define IB_IIR_COMPMASK_VENDID htobe64(((uint64_t)1) << 15) +#define IB_CLASS_CAP_TRAP 0x0001 +#define IB_CLASS_CAP_GETSET 0x0002 +#define IB_CLASS_CAP_CAPMASK2 0x0004 +#define IB_CLASS_ENH_PORT0_CC_MASK 0x0100 +#define IB_CLASS_RESP_TIME_MASK 0x1F +#define IB_CLASS_CAPMASK2_SHIFT 5 +typedef struct { + uint8_t base_ver; + uint8_t class_ver; + __be16 cap_mask; + __be32 cap_mask2_resp_time; + ib_gid_t redir_gid; + __be32 redir_tc_sl_fl; + __be16 redir_lid; + __be16 redir_pkey; + __be32 redir_qp; + __be32 redir_qkey; + ib_gid_t trap_gid; + __be32 trap_tc_sl_fl; + __be16 trap_lid; + __be16 trap_pkey; + __be32 trap_hop_qp; + __be32 trap_qkey; +} __attribute__((packed)) ib_class_port_info_t; +#define IB_PM_ALL_PORT_SELECT htobe16(1 << 8) +#define IB_PM_EXT_WIDTH_SUPPORTED htobe16(1 << 9) +#define IB_PM_EXT_WIDTH_NOIETF_SUP htobe16(1 << 10) +#define IB_PM_SAMPLES_ONLY_SUP htobe16(1 << 11) +#define IB_PM_PC_XMIT_WAIT_SUP htobe16(1 << 12) +#define IS_PM_INH_LMTD_PKEY_MC_CONSTR_ERR htobe16(1 << 13) +#define IS_PM_RSFEC_COUNTERS_SUP htobe16(1 << 14) +#define IB_PM_IS_QP1_DROP_SUP htobe16(1 << 15) +#define IB_PM_IS_PM_KEY_SUPPORTED htobe32(1 << 0) +#define IB_PM_IS_ADDL_PORT_CTRS_EXT_SUP htobe32(1 << 1) +typedef struct { + __be64 guid; + __be64 sm_key; + __be32 act_count; + uint8_t pri_state; +} __attribute__((packed)) ib_sm_info_t; +typedef struct { + uint8_t base_ver; + uint8_t mgmt_class; + uint8_t class_ver; + uint8_t method; + __be16 status; + __be16 class_spec; + __be64 trans_id; + __be16 attr_id; + __be16 resv; + __be32 attr_mod; +} __attribute__((packed)) ib_mad_t; +typedef struct { + ib_mad_t common_hdr; + uint8_t rmpp_version; + uint8_t rmpp_type; + uint8_t rmpp_flags; + uint8_t rmpp_status; + __be32 seg_num; + __be32 paylen_newwin; +} __attribute__((packed)) ib_rmpp_mad_t; +#define IB_RMPP_TYPE_DATA 1 +#define IB_RMPP_TYPE_ACK 2 +#define IB_RMPP_TYPE_STOP 3 +#define IB_RMPP_TYPE_ABORT 4 +#define IB_RMPP_NO_RESP_TIME 0x1F +#define IB_RMPP_FLAG_ACTIVE 0x01 +#define IB_RMPP_FLAG_FIRST 0x02 +#define IB_RMPP_FLAG_LAST 0x04 +#define IB_RMPP_STATUS_SUCCESS 0 +#define IB_RMPP_STATUS_RESX 1 +#define IB_RMPP_STATUS_T2L 118 +#define IB_RMPP_STATUS_BAD_LEN 119 +#define IB_RMPP_STATUS_BAD_SEG 120 +#define IB_RMPP_STATUS_BADT 121 +#define IB_RMPP_STATUS_W2S 122 +#define IB_RMPP_STATUS_S2B 123 +#define IB_RMPP_STATUS_BAD_STATUS 124 +#define IB_RMPP_STATUS_UNV 125 +#define IB_RMPP_STATUS_TMR 126 +#define IB_RMPP_STATUS_UNSPEC 127 +#define IB_SMP_DIRECTION_HO 0x8000 +#define IB_SMP_DIRECTION htobe16(IB_SMP_DIRECTION_HO) +#define IB_SMP_STATUS_MASK_HO 0x7FFF +#define IB_SMP_STATUS_MASK htobe16(IB_SMP_STATUS_MASK_HO) +#define IB_SMP_DATA_SIZE 64 +typedef struct { + uint8_t base_ver; + uint8_t mgmt_class; + uint8_t class_ver; + uint8_t method; + __be16 status; + uint8_t hop_ptr; + uint8_t hop_count; + __be64 trans_id; + __be16 attr_id; + __be16 resv; + __be32 attr_mod; + __be64 m_key; + __be16 dr_slid; + __be16 dr_dlid; + uint32_t resv1[7]; + uint8_t data[IB_SMP_DATA_SIZE]; + uint8_t initial_path[IB_SUBNET_PATH_HOPS_MAX]; + uint8_t return_path[IB_SUBNET_PATH_HOPS_MAX]; +} __attribute__((packed)) ib_smp_t; +typedef struct { + uint8_t base_version; + uint8_t class_version; + uint8_t node_type; + uint8_t num_ports; + __be64 sys_guid; + __be64 node_guid; + __be64 port_guid; + __be16 partition_cap; + __be16 device_id; + __be32 revision; + __be32 port_num_vendor_id; +} __attribute__((packed)) ib_node_info_t; +#define IB_SA_DATA_SIZE 200 +typedef struct { + uint8_t base_ver; + uint8_t mgmt_class; + uint8_t class_ver; + uint8_t method; + __be16 status; + __be16 resv; + __be64 trans_id; + __be16 attr_id; + __be16 resv1; + __be32 attr_mod; + uint8_t rmpp_version; + uint8_t rmpp_type; + uint8_t rmpp_flags; + uint8_t rmpp_status; + __be32 seg_num; + __be32 paylen_newwin; + __be64 sm_key; + __be16 attr_offset; + __be16 resv3; + __be64 comp_mask; + uint8_t data[IB_SA_DATA_SIZE]; +} __attribute__((packed)) ib_sa_mad_t; +#define IB_NODE_INFO_PORT_NUM_MASK htobe32(0xFF000000) +#define IB_NODE_INFO_VEND_ID_MASK htobe32(0x00FFFFFF) +#define IB_NODE_DESCRIPTION_SIZE 64 +typedef struct { + // Node String is an array of UTF-8 characters + // that describe the node in text format + // Note that this string is NOT NULL TERMINATED! + uint8_t description[IB_NODE_DESCRIPTION_SIZE]; +} __attribute__((packed)) ib_node_desc_t; +typedef struct { + __be16 lid; + __be16 resv; + ib_node_info_t node_info; + ib_node_desc_t node_desc; + uint8_t pad[4]; +} __attribute__((packed)) ib_node_record_t; +typedef struct { + __be64 m_key; + __be64 subnet_prefix; + __be16 base_lid; + __be16 master_sm_base_lid; + __be32 capability_mask; + __be16 diag_code; + __be16 m_key_lease_period; + uint8_t local_port_num; + uint8_t link_width_enabled; + uint8_t link_width_supported; + uint8_t link_width_active; + uint8_t state_info1; /* LinkSpeedSupported and PortState */ + uint8_t state_info2; /* PortPhysState and LinkDownDefaultState */ + uint8_t mkey_lmc; /* M_KeyProtectBits and LMC */ + uint8_t link_speed; /* LinkSpeedEnabled and LinkSpeedActive */ + uint8_t mtu_smsl; + uint8_t vl_cap; /* VLCap and InitType */ + uint8_t vl_high_limit; + uint8_t vl_arb_high_cap; + uint8_t vl_arb_low_cap; + uint8_t mtu_cap; + uint8_t vl_stall_life; + uint8_t vl_enforce; + __be16 m_key_violations; + __be16 p_key_violations; + __be16 q_key_violations; + uint8_t guid_cap; + uint8_t subnet_timeout; /* cli_rereg(1b), mcast_pkey_trap_suppr(2b), timeout(5b) */ + uint8_t resp_time_value; /* reserv(3b), rtv(5b) */ + uint8_t error_threshold; /* local phy errors(4b), overrun errors(4b) */ + __be16 max_credit_hint; + __be32 link_rt_latency; /* reserv(8b), link round trip lat(24b) */ + __be16 capability_mask2; + uint8_t link_speed_ext; /* LinkSpeedExtActive and LinkSpeedExtSupported */ + uint8_t link_speed_ext_enabled; /* reserv(3b), LinkSpeedExtEnabled(5b) */ +} __attribute__((packed)) ib_port_info_t; +#define IB_PORT_STATE_MASK 0x0F +#define IB_PORT_LMC_MASK 0x07 +#define IB_PORT_LMC_MAX 0x07 +#define IB_PORT_MPB_MASK 0xC0 +#define IB_PORT_MPB_SHIFT 6 +#define IB_PORT_LINK_SPEED_SHIFT 4 +#define IB_PORT_LINK_SPEED_SUPPORTED_MASK 0xF0 +#define IB_PORT_LINK_SPEED_ACTIVE_MASK 0xF0 +#define IB_PORT_LINK_SPEED_ENABLED_MASK 0x0F +#define IB_PORT_PHYS_STATE_MASK 0xF0 +#define IB_PORT_PHYS_STATE_SHIFT 4 +#define IB_PORT_PHYS_STATE_NO_CHANGE 0 +#define IB_PORT_PHYS_STATE_SLEEP 1 +#define IB_PORT_PHYS_STATE_POLLING 2 +#define IB_PORT_PHYS_STATE_DISABLED 3 +#define IB_PORT_PHYS_STATE_PORTCONFTRAIN 4 +#define IB_PORT_PHYS_STATE_LINKUP 5 +#define IB_PORT_PHYS_STATE_LINKERRRECOVER 6 +#define IB_PORT_PHYS_STATE_PHYTEST 7 +#define IB_PORT_LNKDWNDFTSTATE_MASK 0x0F +#define IB_PORT_CAP_RESV0 htobe32(0x00000001) +#define IB_PORT_CAP_IS_SM htobe32(0x00000002) +#define IB_PORT_CAP_HAS_NOTICE htobe32(0x00000004) +#define IB_PORT_CAP_HAS_TRAP htobe32(0x00000008) +#define IB_PORT_CAP_HAS_IPD htobe32(0x00000010) +#define IB_PORT_CAP_HAS_AUTO_MIG htobe32(0x00000020) +#define IB_PORT_CAP_HAS_SL_MAP htobe32(0x00000040) +#define IB_PORT_CAP_HAS_NV_MKEY htobe32(0x00000080) +#define IB_PORT_CAP_HAS_NV_PKEY htobe32(0x00000100) +#define IB_PORT_CAP_HAS_LED_INFO htobe32(0x00000200) +#define IB_PORT_CAP_SM_DISAB htobe32(0x00000400) +#define IB_PORT_CAP_HAS_SYS_IMG_GUID htobe32(0x00000800) +#define IB_PORT_CAP_HAS_PKEY_SW_EXT_PORT_TRAP htobe32(0x00001000) +#define IB_PORT_CAP_HAS_CABLE_INFO htobe32(0x00002000) +#define IB_PORT_CAP_HAS_EXT_SPEEDS htobe32(0x00004000) +#define IB_PORT_CAP_HAS_CAP_MASK2 htobe32(0x00008000) +#define IB_PORT_CAP_HAS_COM_MGT htobe32(0x00010000) +#define IB_PORT_CAP_HAS_SNMP htobe32(0x00020000) +#define IB_PORT_CAP_REINIT htobe32(0x00040000) +#define IB_PORT_CAP_HAS_DEV_MGT htobe32(0x00080000) +#define IB_PORT_CAP_HAS_VEND_CLS htobe32(0x00100000) +#define IB_PORT_CAP_HAS_DR_NTC htobe32(0x00200000) +#define IB_PORT_CAP_HAS_CAP_NTC htobe32(0x00400000) +#define IB_PORT_CAP_HAS_BM htobe32(0x00800000) +#define IB_PORT_CAP_HAS_LINK_RT_LATENCY htobe32(0x01000000) +#define IB_PORT_CAP_HAS_CLIENT_REREG htobe32(0x02000000) +#define IB_PORT_CAP_HAS_OTHER_LOCAL_CHANGES_NTC htobe32(0x04000000) +#define IB_PORT_CAP_HAS_LINK_SPEED_WIDTH_PAIRS_TBL htobe32(0x08000000) +#define IB_PORT_CAP_HAS_VEND_MADS htobe32(0x10000000) +#define IB_PORT_CAP_HAS_MCAST_PKEY_TRAP_SUPPRESS htobe32(0x20000000) +#define IB_PORT_CAP_HAS_MCAST_FDB_TOP htobe32(0x40000000) +#define IB_PORT_CAP_HAS_HIER_INFO htobe32(0x80000000) +#define IB_PORT_CAP2_IS_SET_NODE_DESC_SUPPORTED htobe16(0x0001) +#define IB_PORT_CAP2_IS_PORT_INFO_EXT_SUPPORTED htobe16(0x0002) +#define IB_PORT_CAP2_IS_VIRT_SUPPORTED htobe16(0x0004) +#define IB_PORT_CAP2_IS_SWITCH_PORT_STATE_TBL_SUPP htobe16(0x0008) +#define IB_PORT_CAP2_IS_LINK_WIDTH_2X_SUPPORTED htobe16(0x0010) +#define IB_PORT_CAP2_IS_LINK_SPEED_HDR_SUPPORTED htobe16(0x0020) +typedef struct { + __be32 cap_mask; + __be16 fec_mode_active; + __be16 fdr_fec_mode_sup; + __be16 fdr_fec_mode_enable; + __be16 edr_fec_mode_sup; + __be16 edr_fec_mode_enable; + __be16 hdr_fec_mode_sup; + __be16 hdr_fec_mode_enable; + uint8_t reserved[46]; +} __attribute__((packed)) ib_port_info_ext_t; +#define IB_PORT_EXT_NO_FEC_MODE_ACTIVE 0 +#define IB_PORT_EXT_FIRE_CODE_FEC_MODE_ACTIVE htobe16(0x0001) +#define IB_PORT_EXT_RS_FEC_MODE_ACTIVE htobe16(0x0002) +#define IB_PORT_EXT_LOW_LATENCY_RS_FEC_MODE_ACTIVE htobe16(0x0003) +#define IB_PORT_EXT_CAP_IS_FEC_MODE_SUPPORTED htobe32(0x00000001) +#define IB_LINK_WIDTH_ACTIVE_1X 1 +#define IB_LINK_WIDTH_ACTIVE_4X 2 +#define IB_LINK_WIDTH_ACTIVE_8X 4 +#define IB_LINK_WIDTH_ACTIVE_12X 8 +#define IB_LINK_WIDTH_ACTIVE_2X 16 +#define IB_LINK_WIDTH_SET_LWS 255 +#define IB_LINK_SPEED_ACTIVE_EXTENDED 0 +#define IB_LINK_SPEED_ACTIVE_2_5 1 +#define IB_LINK_SPEED_ACTIVE_5 2 +#define IB_LINK_SPEED_ACTIVE_10 4 +#define IB_LINK_SPEED_SET_LSS 15 +#define IB_LINK_SPEED_EXT_ACTIVE_NONE 0 +#define IB_LINK_SPEED_EXT_ACTIVE_14 1 +#define IB_LINK_SPEED_EXT_ACTIVE_25 2 +#define IB_LINK_SPEED_EXT_ACTIVE_50 4 +#define IB_LINK_SPEED_EXT_DISABLE 30 +#define IB_LINK_SPEED_EXT_SET_LSES 31 +#define IB_PATH_RECORD_RATE_2_5_GBS 2 +#define IB_PATH_RECORD_RATE_10_GBS 3 +#define IB_PATH_RECORD_RATE_30_GBS 4 +#define IB_PATH_RECORD_RATE_5_GBS 5 +#define IB_PATH_RECORD_RATE_20_GBS 6 +#define IB_PATH_RECORD_RATE_40_GBS 7 +#define IB_PATH_RECORD_RATE_60_GBS 8 +#define IB_PATH_RECORD_RATE_80_GBS 9 +#define IB_PATH_RECORD_RATE_120_GBS 10 +#define IB_PATH_RECORD_RATE_14_GBS 11 +#define IB_PATH_RECORD_RATE_56_GBS 12 +#define IB_PATH_RECORD_RATE_112_GBS 13 +#define IB_PATH_RECORD_RATE_168_GBS 14 +#define IB_PATH_RECORD_RATE_25_GBS 15 +#define IB_PATH_RECORD_RATE_100_GBS 16 +#define IB_PATH_RECORD_RATE_200_GBS 17 +#define IB_PATH_RECORD_RATE_300_GBS 18 +#define IB_PATH_RECORD_RATE_28_GBS 19 +#define IB_PATH_RECORD_RATE_50_GBS 20 +#define IB_PATH_RECORD_RATE_400_GBS 21 +#define IB_PATH_RECORD_RATE_600_GBS 22 +#define FDR10 0x01 +typedef struct { + uint8_t resvd1[3]; + uint8_t state_change_enable; + uint8_t resvd2[3]; + uint8_t link_speed_supported; + uint8_t resvd3[3]; + uint8_t link_speed_enabled; + uint8_t resvd4[3]; + uint8_t link_speed_active; + uint8_t resvd5[48]; +} __attribute__((packed)) ib_mlnx_ext_port_info_t; +typedef struct { + __be64 service_id; + ib_gid_t service_gid; + __be16 service_pkey; + __be16 resv; + __be32 service_lease; + uint8_t service_key[16]; + uint8_t service_name[64]; + uint8_t service_data8[16]; + __be16 service_data16[8]; + __be32 service_data32[4]; + __be64 service_data64[2]; +} __attribute__((packed)) ib_service_record_t; +typedef struct { + __be16 lid; + uint8_t port_num; + uint8_t options; + ib_port_info_t port_info; + uint8_t pad[4]; +} __attribute__((packed)) ib_portinfo_record_t; +typedef struct { + __be16 lid; + uint8_t port_num; + uint8_t options; + ib_port_info_ext_t port_info_ext; +} __attribute__((packed)) ib_portinfoext_record_t; +typedef struct { + __be16 from_lid; + uint8_t from_port_num; + uint8_t to_port_num; + __be16 to_lid; + uint8_t pad[2]; +} __attribute__((packed)) ib_link_record_t; +typedef struct { + __be16 lid; + uint16_t resv0; + ib_sm_info_t sm_info; + uint8_t pad[7]; +} __attribute__((packed)) ib_sminfo_record_t; +typedef struct { + __be16 lid; + __be16 block_num; + uint32_t resv0; + uint8_t lft[64]; +} __attribute__((packed)) ib_lft_record_t; +typedef struct { + __be16 lid; + __be16 position_block_num; + uint32_t resv0; + __be16 mft[IB_MCAST_BLOCK_SIZE]; +} __attribute__((packed)) ib_mft_record_t; +typedef struct { + __be16 lin_cap; + __be16 rand_cap; + __be16 mcast_cap; + __be16 lin_top; + uint8_t def_port; + uint8_t def_mcast_pri_port; + uint8_t def_mcast_not_port; + uint8_t life_state; + __be16 lids_per_port; + __be16 enforce_cap; + uint8_t flags; + uint8_t resvd; + __be16 mcast_top; +} __attribute__((packed)) ib_switch_info_t; +typedef struct { + __be16 lid; + uint16_t resv0; + ib_switch_info_t switch_info; +} __attribute__((packed)) ib_switch_info_record_t; +#define IB_SWITCH_PSC 0x04 +#define GUID_TABLE_MAX_ENTRIES 8 +typedef struct { + __be64 guid[GUID_TABLE_MAX_ENTRIES]; +} __attribute__((packed)) ib_guid_info_t; +typedef struct { + __be16 lid; + uint8_t block_num; + uint8_t resv; + uint32_t reserved; + ib_guid_info_t guid_info; +} __attribute__((packed)) ib_guidinfo_record_t; +#define IB_MULTIPATH_MAX_GIDS 11 +typedef struct { + __be32 hop_flow_raw; + uint8_t tclass; + uint8_t num_path; + __be16 pkey; + __be16 qos_class_sl; + uint8_t mtu; + uint8_t rate; + uint8_t pkt_life; + uint8_t service_id_8msb; + uint8_t independence; /* formerly resv2 */ + uint8_t sgid_count; + uint8_t dgid_count; + uint8_t service_id_56lsb[7]; + ib_gid_t gids[IB_MULTIPATH_MAX_GIDS]; +} __attribute__((packed)) ib_multipath_rec_t; +#define IB_NUM_PKEY_ELEMENTS_IN_BLOCK 32 +typedef struct { + __be16 pkey_entry[IB_NUM_PKEY_ELEMENTS_IN_BLOCK]; +} ib_pkey_table_t; +typedef struct { + __be16 lid; // for CA: lid of port, for switch lid of port 0 + __be16 block_num; + uint8_t port_num; // for switch: port number, for CA: reserved + uint8_t reserved1; + uint16_t reserved2; + ib_pkey_table_t pkey_tbl; +} ib_pkey_table_record_t; +#define IB_DROP_VL 15 +#define IB_MAX_NUM_VLS 16 +typedef struct { + uint8_t raw_vl_by_sl[IB_MAX_NUM_VLS / 2]; +} __attribute__((packed)) ib_slvl_table_t; +typedef struct { + __be16 lid; // for CA: lid of port, for switch lid of port 0 + uint8_t in_port_num; // reserved for CAs + uint8_t out_port_num; // reserved for CAs + uint32_t resv; + ib_slvl_table_t slvl_tbl; +} __attribute__((packed)) ib_slvl_table_record_t; +typedef struct { + uint8_t vl; + uint8_t weight; +} __attribute__((packed)) ib_vl_arb_element_t; +#define IB_NUM_VL_ARB_ELEMENTS_IN_BLOCK 32 +typedef struct { + ib_vl_arb_element_t vl_entry[IB_NUM_VL_ARB_ELEMENTS_IN_BLOCK]; +} __attribute__((packed)) ib_vl_arb_table_t; +typedef struct { + __be16 lid; // for CA: lid of port, for switch lid of port 0 + uint8_t port_num; + uint8_t block_num; + uint32_t reserved; + ib_vl_arb_table_t vl_arb_tbl; +} __attribute__((packed)) ib_vl_arb_table_record_t; +typedef struct { + __be32 ver_class_flow; + __be16 resv1; + uint8_t resv2; + uint8_t hop_limit; + ib_gid_t src_gid; + ib_gid_t dest_gid; +} __attribute__((packed)) ib_grh_t; +typedef struct { + ib_gid_t mgid; + ib_gid_t port_gid; + __be32 qkey; + __be16 mlid; + uint8_t mtu; + uint8_t tclass; + __be16 pkey; + uint8_t rate; + uint8_t pkt_life; + __be32 sl_flow_hop; + uint8_t scope_state; + uint8_t proxy_join : 1; + uint8_t reserved[2]; + uint8_t pad[4]; +} __attribute__((packed)) ib_member_rec_t; +#define IB_MC_REC_STATE_FULL_MEMBER 0x01 +#define IB_MC_REC_STATE_NON_MEMBER 0x02 +#define IB_MC_REC_STATE_SEND_ONLY_NON_MEMBER 0x04 +#define IB_MC_REC_STATE_SEND_ONLY_FULL_MEMBER 0x08 +#define IB_NOTICE_TYPE_FATAL 0x00 +#define IB_NOTICE_TYPE_URGENT 0x01 +#define IB_NOTICE_TYPE_SECURITY 0x02 +#define IB_NOTICE_TYPE_SUBN_MGMT 0x03 +#define IB_NOTICE_TYPE_INFO 0x04 +#define IB_NOTICE_TYPE_EMPTY 0x7F +#define SM_GID_IN_SERVICE_TRAP 64 +#define SM_GID_OUT_OF_SERVICE_TRAP 65 +#define SM_MGID_CREATED_TRAP 66 +#define SM_MGID_DESTROYED_TRAP 67 +#define SM_UNPATH_TRAP 68 +#define SM_REPATH_TRAP 69 +#define SM_LINK_STATE_CHANGED_TRAP 128 +#define SM_LINK_INTEGRITY_THRESHOLD_TRAP 129 +#define SM_BUFFER_OVERRUN_THRESHOLD_TRAP 130 +#define SM_WATCHDOG_TIMER_EXPIRED_TRAP 131 +#define SM_LOCAL_CHANGES_TRAP 144 +#define SM_SYS_IMG_GUID_CHANGED_TRAP 145 +#define SM_BAD_MKEY_TRAP 256 +#define SM_BAD_PKEY_TRAP 257 +#define SM_BAD_QKEY_TRAP 258 +#define SM_BAD_SWITCH_PKEY_TRAP 259 +typedef struct { + uint8_t generic_type; // 1 1 + union _notice_g_or_v { + struct _notice_generic // 5 6 + { + uint8_t prod_type_msb; + __be16 prod_type_lsb; + __be16 trap_num; + } __attribute__((packed)) generic; + struct _notice_vend { + uint8_t vend_id_msb; + __be16 vend_id_lsb; + __be16 dev_id; + } __attribute__((packed)) vend; + } g_or_v; + __be16 issuer_lid; // 2 8 + __be16 toggle_count; // 2 10 + union _data_details // 54 64 + { + struct _raw_data { + uint8_t details[54]; + } __attribute__((packed)) raw_data; + struct _ntc_64_67 { + uint8_t res[6]; + ib_gid_t gid; // the Node or Multicast Group that came in/out + } __attribute__((packed)) ntc_64_67; + struct _ntc_128 { + __be16 sw_lid; // the sw lid of which link state changed + } __attribute__((packed)) ntc_128; + struct _ntc_129_131 { + __be16 pad; + __be16 lid; // lid and port number of the violation + uint8_t port_num; + } __attribute__((packed)) ntc_129_131; + struct _ntc_144 { + __be16 pad1; + __be16 lid; // lid where change occured + uint8_t pad2; // reserved + uint8_t local_changes; // 7b reserved 1b local changes + __be32 new_cap_mask; // new capability mask + __be16 change_flgs; // 10b reserved 6b change flags + __be16 cap_mask2; + } __attribute__((packed)) ntc_144; + struct _ntc_145 { + __be16 pad1; + __be16 lid; // lid where sys guid changed + __be16 pad2; + __be64 new_sys_guid; // new system image guid + } __attribute__((packed)) ntc_145; + struct _ntc_256 { // total: 54 + __be16 pad1; // 2 + __be16 lid; // 2 + __be16 dr_slid; // 2 + uint8_t method; // 1 + uint8_t pad2; // 1 + __be16 attr_id; // 2 + __be32 attr_mod; // 4 + __be64 mkey; // 8 + uint8_t pad3; // 1 + uint8_t dr_trunc_hop; // 1 + uint8_t dr_rtn_path[30]; // 30 + } __attribute__((packed)) ntc_256; + struct _ntc_257_258 // violation of p/q_key // 49 + { + __be16 pad1; // 2 + __be16 lid1; // 2 + __be16 lid2; // 2 + __be32 key; // 4 + __be32 qp1; // 4b sl, 4b pad, 24b qp1 + __be32 qp2; // 8b pad, 24b qp2 + ib_gid_t gid1; // 16 + ib_gid_t gid2; // 16 + } __attribute__((packed)) ntc_257_258; + struct _ntc_259 // pkey violation from switch 51 + { + __be16 data_valid; // 2 + __be16 lid1; // 2 + __be16 lid2; // 2 + __be16 pkey; // 2 + __be32 sl_qp1; // 4b sl, 4b pad, 24b qp1 + __be32 qp2; // 8b pad, 24b qp2 + ib_gid_t gid1; // 16 + ib_gid_t gid2; // 16 + __be16 sw_lid; // 2 + uint8_t port_no; // 1 + } __attribute__((packed)) ntc_259; + struct _ntc_bkey_259 // bkey violation + { + __be16 lidaddr; + uint8_t method; + uint8_t reserved; + __be16 attribute_id; + __be32 attribute_modifier; + __be32 qp; // qp is low 24 bits + __be64 bkey; + ib_gid_t gid; + } __attribute__((packed)) ntc_bkey_259; + struct _ntc_cckey_0 // CC key violation + { + __be16 slid; // source LID from offending packet LRH + uint8_t method; // method, from common MAD header + uint8_t resv0; + __be16 attribute_id; // Attribute ID, from common MAD header + __be16 resv1; + __be32 attribute_modifier; // Attribute Modif, from common MAD header + __be32 qp; // 8b pad, 24b dest QP from BTH + __be64 cc_key; // CC key of the offending packet + ib_gid_t source_gid; // GID from GRH of the offending packet + uint8_t padding[14]; // Padding - ignored on read + } __attribute__((packed)) ntc_cckey_0; + } data_details; + ib_gid_t issuer_gid; // 16 80 +} __attribute__((packed)) ib_mad_notice_attr_t; +#define TRAP_259_MASK_SL htobe32(0xF0000000) +#define TRAP_259_MASK_QP htobe32(0x00FFFFFF) +#define TRAP_144_MASK_OTHER_LOCAL_CHANGES 0x01 +#define TRAP_144_MASK_CAPABILITY_MASK2_CHANGE htobe16(0x0020) +#define TRAP_144_MASK_HIERARCHY_INFO_CHANGE htobe16(0x0010) +#define TRAP_144_MASK_SM_PRIORITY_CHANGE htobe16(0x0008) +#define TRAP_144_MASK_LINK_SPEED_ENABLE_CHANGE htobe16(0x0004) +#define TRAP_144_MASK_LINK_WIDTH_ENABLE_CHANGE htobe16(0x0002) +#define TRAP_144_MASK_NODE_DESCRIPTION_CHANGE htobe16(0x0001) +typedef struct { + ib_gid_t gid; + __be16 lid_range_begin; + __be16 lid_range_end; + __be16 reserved1; + uint8_t is_generic; + uint8_t subscribe; + __be16 trap_type; + union _inform_g_or_v { + struct _inform_generic { + __be16 trap_num; + __be32 qpn_resp_time_val; + uint8_t reserved2; + uint8_t node_type_msb; + __be16 node_type_lsb; + } __attribute__((packed)) generic; + struct _inform_vend { + __be16 dev_id; + __be32 qpn_resp_time_val; + uint8_t reserved2; + uint8_t vendor_id_msb; + __be16 vendor_id_lsb; + } __attribute__((packed)) vend; + } __attribute__((packed)) g_or_v; +} __attribute__((packed)) ib_inform_info_t; +typedef struct { + ib_gid_t subscriber_gid; + __be16 subscriber_enum; + uint8_t reserved[6]; + ib_inform_info_t inform_info; + uint8_t pad[4]; +} __attribute__((packed)) ib_inform_info_record_t; +typedef struct { + ib_mad_t header; + uint8_t resv[40]; +#define IB_PM_DATA_SIZE 192 + uint8_t data[IB_PM_DATA_SIZE]; +} __attribute__((packed)) ib_perfmgt_mad_t; +typedef struct { + uint8_t reserved; + uint8_t port_select; + __be16 counter_select; + __be16 symbol_err_cnt; + uint8_t link_err_recover; + uint8_t link_downed; + __be16 rcv_err; + __be16 rcv_rem_phys_err; + __be16 rcv_switch_relay_err; + __be16 xmit_discards; + uint8_t xmit_constraint_err; + uint8_t rcv_constraint_err; + uint8_t counter_select2; + uint8_t link_int_buffer_overrun; + __be16 qp1_dropped; + __be16 vl15_dropped; + __be32 xmit_data; + __be32 rcv_data; + __be32 xmit_pkts; + __be32 rcv_pkts; + __be32 xmit_wait; +} __attribute__((packed)) ib_port_counters_t; +typedef struct { + uint8_t reserved; + uint8_t port_select; + __be16 counter_select; + __be32 counter_select2; + __be64 xmit_data; + __be64 rcv_data; + __be64 xmit_pkts; + __be64 rcv_pkts; + __be64 unicast_xmit_pkts; + __be64 unicast_rcv_pkts; + __be64 multicast_xmit_pkts; + __be64 multicast_rcv_pkts; + __be64 symbol_err_cnt; + __be64 link_err_recover; + __be64 link_downed; + __be64 rcv_err; + __be64 rcv_rem_phys_err; + __be64 rcv_switch_relay_err; + __be64 xmit_discards; + __be64 xmit_constraint_err; + __be64 rcv_constraint_err; + __be64 link_integrity_err; + __be64 buffer_overrun; + __be64 vl15_dropped; + __be64 xmit_wait; + __be64 qp1_dropped; +} __attribute__((packed)) ib_port_counters_ext_t; +typedef struct { + uint8_t op_code; + uint8_t port_select; + uint8_t tick; + uint8_t counter_width; /* 5 bits res : 3bits counter_width */ + __be32 counter_mask; /* 2 bits res : 3 bits counter_mask : 27 bits counter_masks_1to9 */ + __be16 counter_mask_10to14; /* 1 bits res : 15 bits counter_masks_10to14 */ + uint8_t sample_mech; + uint8_t sample_status; /* 6 bits res : 2 bits sample_status */ + __be64 option_mask; + __be64 vendor_mask; + __be32 sample_start; + __be32 sample_interval; + __be16 tag; + __be16 counter_select0; + __be16 counter_select1; + __be16 counter_select2; + __be16 counter_select3; + __be16 counter_select4; + __be16 counter_select5; + __be16 counter_select6; + __be16 counter_select7; + __be16 counter_select8; + __be16 counter_select9; + __be16 counter_select10; + __be16 counter_select11; + __be16 counter_select12; + __be16 counter_select13; + __be16 counter_select14; +} __attribute__((packed)) ib_port_samples_control_t; +#define IB_CS_PORT_XMIT_DATA htobe16(0x0001) +#define IB_CS_PORT_RCV_DATA htobe16(0x0002) +#define IB_CS_PORT_XMIT_PKTS htobe16(0x0003) +#define IB_CS_PORT_RCV_PKTS htobe16(0x0004) +#define IB_CS_PORT_XMIT_WAIT htobe16(0x0005) +typedef struct { + __be16 tag; + __be16 sample_status; /* 14 bits res : 2 bits sample_status */ + __be32 counter0; + __be32 counter1; + __be32 counter2; + __be32 counter3; + __be32 counter4; + __be32 counter5; + __be32 counter6; + __be32 counter7; + __be32 counter8; + __be32 counter9; + __be32 counter10; + __be32 counter11; + __be32 counter12; + __be32 counter13; + __be32 counter14; +} __attribute__((packed)) ib_port_samples_result_t; +typedef struct { + uint8_t reserved; + uint8_t port_select; + __be16 counter_select; + __be32 port_xmit_data_sl[16]; + uint8_t resv[124]; +} __attribute__((packed)) ib_port_xmit_data_sl_t; +typedef struct { + uint8_t reserved; + uint8_t port_select; + __be16 counter_select; + __be32 port_rcv_data_sl[16]; + uint8_t resv[124]; +} __attribute__((packed)) ib_port_rcv_data_sl_t; +typedef struct { + ib_mad_t header; + uint8_t resv[40]; +#define IB_DM_DATA_SIZE 192 + uint8_t data[IB_DM_DATA_SIZE]; +} __attribute__((packed)) ib_dm_mad_t; +typedef struct { + __be16 change_id; + uint8_t max_controllers; + uint8_t diag_rom; +#define IB_DM_CTRL_LIST_SIZE 128 + uint8_t controller_list[IB_DM_CTRL_LIST_SIZE]; +#define IOC_NOT_INSTALLED 0x0 +#define IOC_INSTALLED 0x1 +// Reserved values 0x02-0xE +#define SLOT_DOES_NOT_EXIST 0xF +} __attribute__((packed)) ib_iou_info_t; +typedef struct { + __be64 ioc_guid; + __be32 vend_id; + __be32 dev_id; + __be16 dev_ver; + __be16 resv2; + __be32 subsys_vend_id; + __be32 subsys_id; + __be16 io_class; + __be16 io_subclass; + __be16 protocol; + __be16 protocol_ver; + __be32 resv3; + __be16 send_msg_depth; + uint8_t resv4; + uint8_t rdma_read_depth; + __be32 send_msg_size; + __be32 rdma_size; + uint8_t ctrl_ops_cap; +#define CTRL_OPS_CAP_ST 0x01 +#define CTRL_OPS_CAP_SF 0x02 +#define CTRL_OPS_CAP_RT 0x04 +#define CTRL_OPS_CAP_RF 0x08 +#define CTRL_OPS_CAP_WT 0x10 +#define CTRL_OPS_CAP_WF 0x20 +#define CTRL_OPS_CAP_AT 0x40 +#define CTRL_OPS_CAP_AF 0x80 + uint8_t resv5; + uint8_t num_svc_entries; +#define MAX_NUM_SVC_ENTRIES 0xff + uint8_t resv6[9]; +#define CTRL_ID_STRING_LEN 64 + char id_string[CTRL_ID_STRING_LEN]; +} __attribute__((packed)) ib_ioc_profile_t; +typedef struct { +#define MAX_SVC_ENTRY_NAME_LEN 40 + char name[MAX_SVC_ENTRY_NAME_LEN]; + __be64 id; +} __attribute__((packed)) ib_svc_entry_t; +typedef struct { +#define SVC_ENTRY_COUNT 4 + ib_svc_entry_t service_entry[SVC_ENTRY_COUNT]; +} __attribute__((packed)) ib_svc_entries_t; +typedef struct { + __be64 module_guid; + __be64 iou_guid; + ib_ioc_profile_t ioc_profile; + __be64 access_key; + uint16_t initiators_conf; + uint8_t resv[38]; +} __attribute__((packed)) ib_ioc_info_t; +typedef struct { + bool cm; + bool snmp; + bool dev_mgmt; + bool vend; + bool sm; + bool sm_disable; + bool qkey_ctr; + bool pkey_ctr; + bool notice; + bool trap; + bool apm; + bool slmap; + bool pkey_nvram; + bool mkey_nvram; + bool sysguid; + bool dr_notice; + bool boot_mgmt; + bool capm_notice; + bool reinit; + bool ledinfo; + bool port_active; +} ib_port_cap_t; +#define IB_INIT_TYPE_NO_LOAD 0x01 +#define IB_INIT_TYPE_PRESERVE_CONTENT 0x02 +#define IB_INIT_TYPE_PRESERVE_PRESENCE 0x04 +#define IB_INIT_TYPE_DO_NOT_RESUSCITATE 0x08 +typedef struct { + uint8_t port_num; + uint8_t sl; + __be16 dlid; + bool grh_valid; + ib_grh_t grh; + uint8_t static_rate; + uint8_t path_bits; + struct _av_conn { + uint8_t path_mtu; + uint8_t local_ack_timeout; + uint8_t seq_err_retry_cnt; + uint8_t rnr_retry_cnt; + } conn; +} ib_av_attr_t; +#define IB_AC_RDMA_READ 0x00000001 +#define IB_AC_RDMA_WRITE 0x00000002 +#define IB_AC_ATOMIC 0x00000004 +#define IB_AC_LOCAL_WRITE 0x00000008 +#define IB_AC_MW_BIND 0x00000010 +#define IB_QPS_RESET 0x00000001 +#define IB_QPS_INIT 0x00000002 +#define IB_QPS_RTR 0x00000004 +#define IB_QPS_RTS 0x00000008 +#define IB_QPS_SQD 0x00000010 +#define IB_QPS_SQD_DRAINING 0x00000030 +#define IB_QPS_SQD_DRAINED 0x00000050 +#define IB_QPS_SQERR 0x00000080 +#define IB_QPS_ERROR 0x00000100 +#define IB_QPS_TIME_WAIT 0xDEAD0000 +#define IB_MOD_QP_ALTERNATE_AV 0x00000001 +#define IB_MOD_QP_PKEY 0x00000002 +#define IB_MOD_QP_APM_STATE 0x00000004 +#define IB_MOD_QP_PRIMARY_AV 0x00000008 +#define IB_MOD_QP_RNR_NAK_TIMEOUT 0x00000010 +#define IB_MOD_QP_RESP_RES 0x00000020 +#define IB_MOD_QP_INIT_DEPTH 0x00000040 +#define IB_MOD_QP_PRIMARY_PORT 0x00000080 +#define IB_MOD_QP_ACCESS_CTRL 0x00000100 +#define IB_MOD_QP_QKEY 0x00000200 +#define IB_MOD_QP_SQ_DEPTH 0x00000400 +#define IB_MOD_QP_RQ_DEPTH 0x00000800 +#define IB_MOD_QP_CURRENT_STATE 0x00001000 +#define IB_MOD_QP_RETRY_CNT 0x00002000 +#define IB_MOD_QP_LOCAL_ACK_TIMEOUT 0x00004000 +#define IB_MOD_QP_RNR_RETRY_CNT 0x00008000 +#define IB_MOD_EEC_ALTERNATE_AV 0x00000001 +#define IB_MOD_EEC_PKEY 0x00000002 +#define IB_MOD_EEC_APM_STATE 0x00000004 +#define IB_MOD_EEC_PRIMARY_AV 0x00000008 +#define IB_MOD_EEC_RNR 0x00000010 +#define IB_MOD_EEC_RESP_RES 0x00000020 +#define IB_MOD_EEC_OUTSTANDING 0x00000040 +#define IB_MOD_EEC_PRIMARY_PORT 0x00000080 +#define IB_SEND_OPT_IMMEDIATE 0x00000001 +#define IB_SEND_OPT_FENCE 0x00000002 +#define IB_SEND_OPT_SIGNALED 0x00000004 +#define IB_SEND_OPT_SOLICITED 0x00000008 +#define IB_SEND_OPT_INLINE 0x00000010 +#define IB_SEND_OPT_LOCAL 0x00000020 +#define IB_SEND_OPT_VEND_MASK 0xFFFF0000 +#define IB_RECV_OPT_IMMEDIATE 0x00000001 +#define IB_RECV_OPT_FORWARD 0x00000002 +#define IB_RECV_OPT_GRH_VALID 0x00000004 +#define IB_RECV_OPT_VEND_MASK 0xFFFF0000 +#define IB_CA_MOD_IS_CM_SUPPORTED 0x00000001 +#define IB_CA_MOD_IS_SNMP_SUPPORTED 0x00000002 +#define IB_CA_MOD_IS_DEV_MGMT_SUPPORTED 0x00000004 +#define IB_CA_MOD_IS_VEND_SUPPORTED 0x00000008 +#define IB_CA_MOD_IS_SM 0x00000010 +#define IB_CA_MOD_IS_SM_DISABLED 0x00000020 +#define IB_CA_MOD_QKEY_CTR 0x00000040 +#define IB_CA_MOD_PKEY_CTR 0x00000080 +#define IB_CA_MOD_IS_NOTICE_SUPPORTED 0x00000100 +#define IB_CA_MOD_IS_TRAP_SUPPORTED 0x00000200 +#define IB_CA_MOD_IS_APM_SUPPORTED 0x00000400 +#define IB_CA_MOD_IS_SLMAP_SUPPORTED 0x00000800 +#define IB_CA_MOD_IS_PKEY_NVRAM_SUPPORTED 0x00001000 +#define IB_CA_MOD_IS_MKEY_NVRAM_SUPPORTED 0x00002000 +#define IB_CA_MOD_IS_SYSGUID_SUPPORTED 0x00004000 +#define IB_CA_MOD_IS_DR_NOTICE_SUPPORTED 0x00008000 +#define IB_CA_MOD_IS_BOOT_MGMT_SUPPORTED 0x00010000 +#define IB_CA_MOD_IS_CAPM_NOTICE_SUPPORTED 0x00020000 +#define IB_CA_MOD_IS_REINIT_SUPORTED 0x00040000 +#define IB_CA_MOD_IS_LEDINFO_SUPPORTED 0x00080000 +#define IB_CA_MOD_SHUTDOWN_PORT 0x00100000 +#define IB_CA_MOD_INIT_TYPE_VALUE 0x00200000 +#define IB_CA_MOD_SYSTEM_IMAGE_GUID 0x00400000 +#define IB_MR_MOD_ADDR 0x00000001 +#define IB_MR_MOD_PD 0x00000002 +#define IB_MR_MOD_ACCESS 0x00000004 +#define IB_SMINFO_ATTR_MOD_HANDOVER htobe32(0x000001) +#define IB_SMINFO_ATTR_MOD_ACKNOWLEDGE htobe32(0x000002) +#define IB_SMINFO_ATTR_MOD_DISABLE htobe32(0x000003) +#define IB_SMINFO_ATTR_MOD_STANDBY htobe32(0x000004) +#define IB_SMINFO_ATTR_MOD_DISCOVER htobe32(0x000005) +#define IB_CC_LOG_DATA_SIZE 32 +#define IB_CC_MGT_DATA_SIZE 192 +typedef struct { + ib_mad_t header; + __be64 cc_key; + uint8_t log_data[IB_CC_LOG_DATA_SIZE]; + uint8_t mgt_data[IB_CC_MGT_DATA_SIZE]; +} __attribute__((packed)) ib_cc_mad_t; +typedef struct { + uint8_t cong_info; + uint8_t resv; + uint8_t ctrl_table_cap; +} __attribute__((packed)) ib_cong_info_t; +typedef struct { + __be64 cc_key; + __be16 protect_bit; + __be16 lease_period; + __be16 violations; +} __attribute__((packed)) ib_cong_key_info_t; +typedef struct { + __be16 slid; + __be16 dlid; + __be32 sl; + __be32 time_stamp; +} __attribute__((packed)) ib_cong_log_event_sw_t; +typedef struct { + __be32 local_qp_resv0; + __be32 remote_qp_sl_service_type; + __be16 remote_lid; + __be16 resv1; + __be32 time_stamp; +} __attribute__((packed)) ib_cong_log_event_ca_t; +typedef struct { + uint8_t log_type; + union _log_details { + struct _log_sw { + uint8_t cong_flags; + __be16 event_counter; + __be32 time_stamp; + uint8_t port_map[32]; + ib_cong_log_event_sw_t entry_list[15]; + } __attribute__((packed)) log_sw; + + struct _log_ca { + uint8_t cong_flags; + __be16 event_counter; + __be16 event_map; + __be16 resv; + __be32 time_stamp; + ib_cong_log_event_ca_t log_event[13]; + } __attribute__((packed)) log_ca; + + } log_details; +} __attribute__((packed)) ib_cong_log_t; +#define IB_CC_PORT_MASK_DATA_SIZE 32 +typedef struct { + __be32 control_map; + uint8_t victim_mask[IB_CC_PORT_MASK_DATA_SIZE]; + uint8_t credit_mask[IB_CC_PORT_MASK_DATA_SIZE]; + uint8_t threshold_resv; + uint8_t packet_size; + __be16 cs_threshold_resv; + __be16 cs_return_delay; + __be16 marking_rate; +} __attribute__((packed)) ib_sw_cong_setting_t; +typedef struct { + uint8_t valid_ctrl_type_res_threshold; + uint8_t packet_size; + __be16 cong_param; +} __attribute__((packed)) ib_sw_port_cong_setting_element_t; +#define IB_CC_SW_PORT_SETTING_ELEMENTS 32 +typedef struct { + ib_sw_port_cong_setting_element_t block[IB_CC_SW_PORT_SETTING_ELEMENTS]; +} __attribute__((packed)) ib_sw_port_cong_setting_t; +typedef struct { + __be16 ccti_timer; + uint8_t ccti_increase; + uint8_t trigger_threshold; + uint8_t ccti_min; + uint8_t resv0; + __be16 resv1; +} __attribute__((packed)) ib_ca_cong_entry_t; +#define IB_CA_CONG_ENTRY_DATA_SIZE 16 +typedef struct { + __be16 port_control; + __be16 control_map; + ib_ca_cong_entry_t entry_list[IB_CA_CONG_ENTRY_DATA_SIZE]; +} __attribute__((packed)) ib_ca_cong_setting_t; +typedef struct { + __be16 shift_multiplier; +} __attribute__((packed)) ib_cc_tbl_entry_t; +#define IB_CC_TBL_ENTRY_LIST_MAX 64 +typedef struct { + __be16 ccti_limit; + __be16 resv; + ib_cc_tbl_entry_t entry_list[IB_CC_TBL_ENTRY_LIST_MAX]; +} __attribute__((packed)) ib_cc_tbl_t; +typedef struct { + __be32 value; +} __attribute__((packed)) ib_time_stamp_t; + +#define IB_PM_PC_XMIT_WAIT_SUP htobe16(1 << 12) +#define IS_PM_RSFEC_COUNTERS_SUP htobe16(1 << 14) +#define IB_PM_IS_QP1_DROP_SUP htobe16(1 << 15) +#define IB_PM_IS_ADDL_PORT_CTRS_EXT_SUP htobe32(1 << 1) +#define IB_PORT_CAP2_IS_PORT_INFO_EXT_SUPPORTED htobe16(0x0002) +#define IB_PORT_EXT_NO_FEC_MODE_ACTIVE 0 +#define IB_PORT_EXT_FIRE_CODE_FEC_MODE_ACTIVE htobe16(0x0001) +#define IB_PORT_EXT_RS_FEC_MODE_ACTIVE htobe16(0x0002) +#define IB_PORT_EXT_LOW_LATENCY_RS_FEC_MODE_ACTIVE htobe16(0x0003) +#define IB_PORT_EXT_RS_FEC2_MODE_ACTIVE htobe16(0x0004) +#define IB_PORT_EXT_CAP_IS_FEC_MODE_SUPPORTED htobe32(0x00000001) + +static inline uint32_t ib_class_cap_mask2(const ib_class_port_info_t *p_cpi) +{ + return (be32toh(p_cpi->cap_mask2_resp_time) >> IB_CLASS_CAPMASK2_SHIFT); +} + +static inline uint8_t ib_class_resp_time_val(ib_class_port_info_t *p_cpi) +{ + return (uint8_t)(be32toh(p_cpi->cap_mask2_resp_time) & + IB_CLASS_RESP_TIME_MASK); +} + +static inline const char *ib_get_node_type_str(uint8_t node_type) +{ + static const char *const __ib_node_type_str[] = { + "UNKNOWN", + "Channel Adapter", + "Switch", + "Router", + }; + + if (node_type > IB_NODE_TYPE_ROUTER) + node_type = 0; + return (__ib_node_type_str[node_type]); +} + +static inline __be32 ib_inform_info_get_prod_type(const ib_inform_info_t *p_inf) +{ + uint32_t nt; + + nt = be16toh(p_inf->g_or_v.generic.node_type_lsb) | + (p_inf->g_or_v.generic.node_type_msb << 16); + return htobe32(nt); +} + +static inline void +ib_inform_info_get_qpn_resp_time(const __be32 qpn_resp_time_val, __be32 *p_qpn, + uint8_t *p_resp_time_val) +{ + uint32_t tmp = be32toh(qpn_resp_time_val); + + if (p_qpn) + *p_qpn = htobe32((tmp & 0xffffff00) >> 8); + if (p_resp_time_val) + *p_resp_time_val = (uint8_t)(tmp & 0x0000001f); +} + +static inline void ib_member_get_scope_state(const uint8_t scope_state, + uint8_t *p_scope, uint8_t *p_state) +{ + uint8_t tmp_scope_state; + + if (p_state) + *p_state = (uint8_t)(scope_state & 0x0f); + + tmp_scope_state = scope_state >> 4; + + if (p_scope) + *p_scope = (uint8_t)(tmp_scope_state & 0x0f); +} + +static inline void ib_member_get_sl_flow_hop(const __be32 sl_flow_hop, + uint8_t *p_sl, + uint32_t *p_flow_lbl, + uint8_t *p_hop) +{ + uint32_t tmp; + + tmp = be32toh(sl_flow_hop); + if (p_hop) + *p_hop = (uint8_t)tmp; + tmp >>= 8; + + if (p_flow_lbl) + *p_flow_lbl = (uint32_t)(tmp & 0xfffff); + tmp >>= 20; + + if (p_sl) + *p_sl = (uint8_t)tmp; +} + +static inline __be32 ib_member_set_sl_flow_hop(const uint8_t sl, + const uint32_t flow_label, + const uint8_t hop_limit) +{ + uint32_t tmp; + + tmp = (sl << 28) | ((flow_label & 0xfffff) << 8) | hop_limit; + return htobe32(tmp); +} + +static inline __be32 ib_node_info_get_vendor_id(const ib_node_info_t *p_ni) +{ + return ((__be32)(p_ni->port_num_vendor_id & IB_NODE_INFO_VEND_ID_MASK)); +} + +static inline uint8_t +ib_node_info_get_local_port_num(const ib_node_info_t *p_ni) +{ + return be32toh(p_ni->port_num_vendor_id & IB_NODE_INFO_PORT_NUM_MASK) >> + 24; +} + +static inline uint16_t ib_path_rec_qos_class(const ib_path_rec_t *p_rec) +{ + return (be16toh(p_rec->qos_class_sl) >> 4); +} + +static inline void ib_path_rec_set_qos_class(ib_path_rec_t *p_rec, + const uint16_t qos_class) +{ + p_rec->qos_class_sl = + (p_rec->qos_class_sl & htobe16(IB_PATH_REC_SL_MASK)) | + htobe16(qos_class << 4); +} + +static inline uint8_t ib_path_rec_sl(const ib_path_rec_t *p_rec) +{ + return (uint8_t)(be16toh(p_rec->qos_class_sl) & IB_PATH_REC_SL_MASK); +} + +static inline uint8_t ib_slvl_table_get(const ib_slvl_table_t *p_slvl_tbl, + uint8_t sl_index) +{ + uint8_t idx = sl_index / 2; + assert(sl_index <= 15); + + if (sl_index % 2) + /* this is an odd sl. Need to return the ls bits. */ + return (p_slvl_tbl->raw_vl_by_sl[idx] & 0x0F); + else + /* this is an even sl. Need to return the ms bits. */ + return ((p_slvl_tbl->raw_vl_by_sl[idx] & 0xF0) >> 4); +} + +static inline uint8_t ib_sminfo_get_priority(const ib_sm_info_t *p_smi) +{ + return ((uint8_t)((p_smi->pri_state & 0xF0) >> 4)); +} + +static inline uint8_t ib_sminfo_get_state(const ib_sm_info_t *p_smi) +{ + return ((uint8_t)(p_smi->pri_state & 0x0F)); +} + +#endif diff --git a/ibdiags/libibnetdisc/include/infiniband/ibnetdisc.h b/ibdiags/libibnetdisc/include/infiniband/ibnetdisc.h index 8bdc048459c3d2..0f39e8d5edac62 100644 --- a/ibdiags/libibnetdisc/include/infiniband/ibnetdisc.h +++ b/ibdiags/libibnetdisc/include/infiniband/ibnetdisc.h @@ -38,7 +38,6 @@ #include <stdio.h> #include <infiniband/mad.h> -#include <iba/ib_types.h> #include <infiniband/ibnetdisc_osd.h> diff --git a/ibdiags/libibnetdisc/src/CMakeLists.txt b/ibdiags/libibnetdisc/src/CMakeLists.txt index c93c9be8cc6cd6..ad8c09dc9722f6 100644 --- a/ibdiags/libibnetdisc/src/CMakeLists.txt +++ b/ibdiags/libibnetdisc/src/CMakeLists.txt @@ -15,8 +15,6 @@ target_link_libraries(ibnetdisc LINK_PRIVATE ibmad ibumad ) -# FIXME for osmcomp -target_include_directories(ibnetdisc PRIVATE "/usr/include/infiniband") rdma_pkg_config("ibnetdisc" "libibumad libibmad" "") rdma_test_executable(testleaks ../test/testleaks.c) @@ -24,4 +22,3 @@ target_link_libraries(testleaks LINK_PRIVATE ibmad ibnetdisc ) -target_include_directories(testleaks PRIVATE "/usr/include/infiniband") diff --git a/ibdiags/libibnetdisc/src/ibnetdisc.c b/ibdiags/libibnetdisc/src/ibnetdisc.c index 7425545b78f532..cc76e994042e21 100644 --- a/ibdiags/libibnetdisc/src/ibnetdisc.c +++ b/ibdiags/libibnetdisc/src/ibnetdisc.c @@ -37,6 +37,7 @@ #define _GNU_SOURCE #include <stdio.h> #include <stdlib.h> +#include <stddef.h> #include <unistd.h> #include <string.h> #include <errno.h> @@ -44,6 +45,7 @@ #include <infiniband/umad.h> #include <infiniband/mad.h> +#include <util/iba_types.h> #include <infiniband/ibnetdisc.h> diff --git a/ibdiags/src/CMakeLists.txt b/ibdiags/src/CMakeLists.txt index edce64f2106a3d..c12452f92c7c9c 100644 --- a/ibdiags/src/CMakeLists.txt +++ b/ibdiags/src/CMakeLists.txt @@ -7,7 +7,6 @@ add_library(ibdiags_tools STATIC ibdiag_common.c ibdiag_sa.c ) -target_include_directories(ibdiags_tools PRIVATE "/usr/include/infiniband") function(ibdiag_programs) foreach(I ${ARGN}) @@ -42,7 +41,5 @@ ibdiag_programs( rdma_test_executable(ibsendtrap "ibsendtrap.c") target_link_libraries(ibsendtrap PRIVATE ibumad ibmad ibdiags_tools) -target_include_directories(ibsendtrap PRIVATE "/usr/include/infiniband") rdma_test_executable(mcm_rereg_test "mcm_rereg_test.c") target_link_libraries(mcm_rereg_test PRIVATE ibumad ibmad ibdiags_tools) -target_include_directories(mcm_rereg_test PRIVATE "/usr/include/infiniband") diff --git a/ibdiags/src/ibsendtrap.c b/ibdiags/src/ibsendtrap.c index 69ec73112c841e..4c6bbd47365149 100644 --- a/ibdiags/src/ibsendtrap.c +++ b/ibdiags/src/ibsendtrap.c @@ -45,7 +45,6 @@ #define _GNU_SOURCE #include <infiniband/mad.h> -#include <iba/ib_types.h> #include "ibdiag_common.h" diff --git a/ibdiags/src/mcm_rereg_test.c b/ibdiags/src/mcm_rereg_test.c index 66c066b40e40cc..8c0b5ea2b6d714 100644 --- a/ibdiags/src/mcm_rereg_test.c +++ b/ibdiags/src/mcm_rereg_test.c @@ -38,7 +38,6 @@ #include <infiniband/umad.h> #include <infiniband/mad.h> -#include <infiniband/iba/ib_types.h> #include "ibdiag_common.h" diff --git a/ibdiags/src/perfquery.c b/ibdiags/src/perfquery.c index b921e3d402854c..7d4bba91223a56 100644 --- a/ibdiags/src/perfquery.c +++ b/ibdiags/src/perfquery.c @@ -41,7 +41,6 @@ #include <infiniband/umad.h> #include <infiniband/mad.h> -#include <infiniband/iba/ib_types.h> #include "ibdiag_common.h" diff --git a/ibdiags/src/saquery.c b/ibdiags/src/saquery.c index f50430818c7863..8c0f57ffe9ed4e 100644 --- a/ibdiags/src/saquery.c +++ b/ibdiags/src/saquery.c @@ -49,7 +49,6 @@ #include <infiniband/umad.h> #include <infiniband/mad.h> -#include <iba/ib_types.h> #include <complib/cl_nodenamemap.h> #include "ibdiag_common.h" diff --git a/ibtypes.py b/ibtypes.py new file mode 100644 index 00000000000000..119a023e593591 --- /dev/null +++ b/ibtypes.py @@ -0,0 +1,61 @@ +import re +import sys + +def global_ln(ln): + g = re.match(r"^#define\s+(\S+)\s+CL_HTON(\d+)\((.*)\)",ln) + if g: + print("#define %s htobe%s(%s)"%(g.group(1),g.group(2),g.group(3))) + return global_ln + g = re.match(r"^#define\s+(\S+)\s+\(CL_HTON(\d+)\((.*)\)\)",ln) + if g: + print("#define %s htobe%s(%s)"%(g.group(1),g.group(2),g.group(3))) + return global_ln + g = re.match(r"^#define\s+(\S+)\s+(0x\w+)",ln) + if g: + print("#define %s %s"%(g.group(1),g.group(2))) + return global_ln + g = re.match(r"^#define\s+(\S+)\s+\((0x\w+)\)",ln) + if g: + print("#define %s %s"%(g.group(1),g.group(2))) + return global_ln + g = re.match(r"^#define\s+(\S+)\s+(\d+)",ln) + if g: + print("#define %s %s"%(g.group(1),g.group(2))) + return global_ln + g = re.match(r"^#define\s+(\S+)\s+\((\d+)\)",ln) + if g: + print("#define %s %s"%(g.group(1),g.group(2))) + return global_ln + + g = re.match(r"^typedef\s+(union|struct)\s+_\S+\s+{",ln); + if g: + print("typedef %s {"%(g.group(1))); + return in_struct; + + print(ln,file=FO); + return global_ln + +def in_struct(ln): + g = re.match(r"^}\s+PACK_SUFFIX\s+(\S+);",ln); + if g: + print("} __attribute__((packed)) %s;"%(g.group(1))); + return global_ln; + g = re.match(r"^}\s+(\S+);",ln); + if g: + print("} %s;"%(g.group(1))); + return global_ln; + + ln = ln.replace("PACK_SUFFIX","__attribute__((packed))"); + ln = ln.replace("ib_gid_prefix_t","__be64"); + ln = ln.replace("ib_net64_t","__be64"); + ln = ln.replace("ib_net32_t","__be32"); + ln = ln.replace("ib_net16_t","__be16"); + ln = ln.replace("boolean_t","bool"); + print(ln) + return in_struct; + +mode = global_ln +with open(sys.argv[1]) as FI, open(sys.argv[2],"wt") as FO: + for ln in FI: + ln = ln.rstrip(); + mode = mode(ln); -- 2.21.0