176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifndef _GPXE_IB_MAD_H
276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define _GPXE_IB_MAD_H
376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** @file
576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Infiniband management datagrams
776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */
976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
1076d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanFILE_LICENCE ( GPL2_OR_LATER );
1176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
1276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <stdint.h>
1376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <gpxe/ib_packet.h>
1476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
1576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/*****************************************************************************
1676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
1776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Subnet management MADs
1876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
1976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *****************************************************************************
2076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */
2176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
2276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** A subnet management header
2376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
2476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Defined in sections 14.2.1.1 and 14.2.1.2 of the IBA.
2576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */
2676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ib_smp_hdr {
2776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint64_t mkey;
2876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint16_t slid;
2976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint16_t dlid;
3076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t reserved[28];
3176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ (( packed ));
3276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
3376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Subnet management class version */
3476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_SMP_CLASS_VERSION			1
3576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
3676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Subnet management direction bit
3776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
3876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * This bit resides in the "status" field in the MAD header.
3976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */
4076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_SMP_STATUS_D_INBOUND			0x8000
4176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
4276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Subnet management attributes */
4376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_SMP_ATTR_NOTICE			0x0002
4476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_SMP_ATTR_NODE_DESC			0x0010
4576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_SMP_ATTR_NODE_INFO			0x0011
4676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_SMP_ATTR_SWITCH_INFO			0x0012
4776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_SMP_ATTR_GUID_INFO			0x0014
4876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_SMP_ATTR_PORT_INFO			0x0015
4976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_SMP_ATTR_PKEY_TABLE			0x0016
5076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_SMP_ATTR_SL_TO_VL_TABLE		0x0017
5176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_SMP_ATTR_VL_ARB_TABLE		0x0018
5276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_SMP_ATTR_LINEAR_FORWARD_TABLE	0x0019
5376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_SMP_ATTR_RANDOM_FORWARD_TABLE	0x001A
5476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_SMP_ATTR_MCAST_FORWARD_TABLE		0x001B
5576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_SMP_ATTR_SM_INFO			0x0020
5676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_SMP_ATTR_VENDOR_DIAG			0x0030
5776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_SMP_ATTR_LED_INFO			0x0031
5876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_SMP_ATTR_VENDOR_MASK			0xFF00
5976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
6076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/**
6176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * A Node Description attribute
6276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
6376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Defined in section 14.2.5.2 of the IBA
6476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */
6576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ib_node_desc {
6676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	char node_string[64];
6776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ (( packed ));
6876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
6976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** A Node Information attribute
7076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
7176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Defined in section 14.2.5.3 of the IBA.
7276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */
7376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ib_node_info {
7476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t base_version;
7576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t class_version;
7676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t node_type;
7776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t num_ports;
7876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	struct ib_gid_half sys_guid;
7976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	struct ib_gid_half node_guid;
8076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	struct ib_gid_half port_guid;
8176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint16_t partition_cap;
8276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint16_t device_id;
8376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint32_t revision;
8476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t local_port_num;
8576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t vendor_id[3];
8676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ ((packed));
8776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
8876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_NODE_TYPE_HCA		0x01
8976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_NODE_TYPE_SWITCH		0x02
9076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_NODE_TYPE_ROUTER		0x03
9176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
9276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** A GUID Information attribute
9376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
9476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Defined in section 14.2.5.5 of the IBA.
9576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */
9676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ib_guid_info {
9776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t guid[8][8];
9876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ (( packed ));
9976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
10076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** A Port Information attribute
10176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
10276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Defined in section 14.2.5.6 of the IBA.
10376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */
10476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ib_port_info {
10576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint64_t mkey;
10676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t gid_prefix[8];
10776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint16_t lid;
10876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint16_t mastersm_lid;
10976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint32_t cap_mask;
11076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint16_t diag_code;
11176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint16_t mkey_lease_period;
11276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t local_port_num;
11376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t link_width_enabled;
11476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t link_width_supported;
11576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t link_width_active;
11676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t link_speed_supported__port_state;
11776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t port_phys_state__link_down_def_state;
11876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t mkey_prot_bits__lmc;
11976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t link_speed_active__link_speed_enabled;
12076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t neighbour_mtu__mastersm_sl;
12176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t vl_cap__init_type;
12276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t vl_high_limit;
12376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t vl_arbitration_high_cap;
12476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t vl_arbitration_low_cap;
12576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t init_type_reply__mtu_cap;
12676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t vl_stall_count__hoq_life;
12776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t operational_vls__enforcement;
12876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint16_t mkey_violations;
12976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint16_t pkey_violations;
13076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint16_t qkey_violations;
13176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t guid_cap;
13276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t client_reregister__subnet_timeout;
13376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t resp_time_value;
13476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t local_phy_errors__overrun_errors;
13576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint16_t max_credit_hint;
13676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint32_t link_round_trip_latency;
13776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ (( packed ));
13876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
13976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_LINK_WIDTH_1X		0x01
14076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_LINK_WIDTH_4X		0x02
14176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_LINK_WIDTH_8X		0x04
14276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_LINK_WIDTH_12X		0x08
14376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
14476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_LINK_SPEED_SDR		0x01
14576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_LINK_SPEED_DDR		0x02
14676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_LINK_SPEED_QDR		0x04
14776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
14876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_PORT_STATE_DOWN		0x01
14976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_PORT_STATE_INIT		0x02
15076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_PORT_STATE_ARMED		0x03
15176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_PORT_STATE_ACTIVE		0x04
15276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
15376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_PORT_PHYS_STATE_SLEEP	0x01
15476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_PORT_PHYS_STATE_POLLING	0x02
15576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
15676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_MTU_256			0x01
15776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_MTU_512			0x02
15876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_MTU_1024			0x03
15976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_MTU_2048			0x04
16076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_MTU_4096			0x05
16176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
16276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_VL_0				0x01
16376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_VL_0_1			0x02
16476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_VL_0_3			0x03
16576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_VL_0_7			0x04
16676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_VL_0_14			0x05
16776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
16876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** A Partition Key Table attribute
16976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
17076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Defined in section 14.2.5.7 of the IBA.
17176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */
17276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ib_pkey_table {
17376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint16_t pkey[32];
17476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ (( packed ));
17576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
17676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** A subnet management attribute */
17776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanunion ib_smp_data {
17876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	struct ib_node_desc node_desc;
17976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	struct ib_node_info node_info;
18076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	struct ib_guid_info guid_info;
18176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	struct ib_port_info port_info;
18276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	struct ib_pkey_table pkey_table;
18376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t bytes[64];
18476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ (( packed ));
18576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
18676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** A subnet management directed route path */
18776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ib_smp_dr_path {
18876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t hops[64];
18976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ (( packed ));
19076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
19176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Subnet management MAD class-specific data */
19276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ib_smp_class_specific {
19376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t hop_pointer;
19476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t hop_count;
19576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ (( packed ));
19676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
19776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/*****************************************************************************
19876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
19976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Subnet administration MADs
20076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
20176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *****************************************************************************
20276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */
20376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
20476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_SA_CLASS_VERSION			2
20576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
20676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_SA_METHOD_DELETE_RESP		0x95
20776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
20876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ib_rmpp_hdr {
20976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint32_t raw[3];
21076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ (( packed ));
21176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
21276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ib_sa_hdr {
21376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint32_t sm_key[2];
21476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint16_t reserved;
21576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint16_t attrib_offset;
21676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint32_t comp_mask[2];
21776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ (( packed ));
21876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
21976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_SA_ATTR_MC_MEMBER_REC		0x38
22076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_SA_ATTR_PATH_REC			0x35
22176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
22276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ib_path_record {
22376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint32_t reserved0[2];
22476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	struct ib_gid dgid;
22576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	struct ib_gid sgid;
22676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint16_t dlid;
22776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint16_t slid;
22876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint32_t hop_limit__flow_label__raw_traffic;
22976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint32_t pkey__numb_path__reversible__tclass;
23076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t reserved1;
23176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t reserved__sl;
23276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t mtu_selector__mtu;
23376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t rate_selector__rate;
23476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint32_t preference__packet_lifetime__packet_lifetime_selector;
23576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint32_t reserved2[35];
23676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ (( packed ));
23776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
23876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_SA_PATH_REC_DGID			(1<<2)
23976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_SA_PATH_REC_SGID			(1<<3)
24076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
24176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ib_mc_member_record {
24276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	struct ib_gid mgid;
24376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	struct ib_gid port_gid;
24476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint32_t qkey;
24576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint16_t mlid;
24676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t mtu_selector__mtu;
24776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t tclass;
24876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint16_t pkey;
24976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t rate_selector__rate;
25076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t packet_lifetime_selector__packet_lifetime;
25176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint32_t sl__flow_label__hop_limit;
25276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t scope__join_state;
25376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t proxy_join__reserved;
25476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint16_t reserved0;
25576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint32_t reserved1[37];
25676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ (( packed ));
25776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
25876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_SA_MCMEMBER_REC_MGID			(1<<0)
25976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_SA_MCMEMBER_REC_PORT_GID		(1<<1)
26076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_SA_MCMEMBER_REC_QKEY			(1<<2)
26176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_SA_MCMEMBER_REC_MLID			(1<<3)
26276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_SA_MCMEMBER_REC_MTU_SELECTOR		(1<<4)
26376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_SA_MCMEMBER_REC_MTU			(1<<5)
26476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_SA_MCMEMBER_REC_TRAFFIC_CLASS	(1<<6)
26576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_SA_MCMEMBER_REC_PKEY			(1<<7)
26676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_SA_MCMEMBER_REC_RATE_SELECTOR	(1<<8)
26776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_SA_MCMEMBER_REC_RATE			(1<<9)
26876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_SA_MCMEMBER_REC_PACKET_LIFE_TIME_SELECTOR	(1<<10)
26976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_SA_MCMEMBER_REC_PACKET_LIFE_TIME	(1<<11)
27076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_SA_MCMEMBER_REC_SL			(1<<12)
27176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_SA_MCMEMBER_REC_FLOW_LABEL		(1<<13)
27276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_SA_MCMEMBER_REC_HOP_LIMIT		(1<<14)
27376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_SA_MCMEMBER_REC_SCOPE		(1<<15)
27476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_SA_MCMEMBER_REC_JOIN_STATE		(1<<16)
27576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_SA_MCMEMBER_REC_PROXY_JOIN		(1<<17)
27676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
27776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanunion ib_sa_data {
27876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	struct ib_path_record path_record;
27976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	struct ib_mc_member_record mc_member_record;
28076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ (( packed ));
28176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
28276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/*****************************************************************************
28376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
28476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Communication management MADs
28576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
28676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *****************************************************************************
28776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */
28876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
28976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Communication management class version */
29076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_CM_CLASS_VERSION			2
29176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
29276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Communication management attributes */
29376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_CM_ATTR_CLASS_PORT_INFO		0x0001
29476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_CM_ATTR_CONNECT_REQUEST		0x0010
29576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_CM_ATTR_MSG_RCPT_ACK			0x0011
29676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_CM_ATTR_CONNECT_REJECT		0x0012
29776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_CM_ATTR_CONNECT_REPLY		0x0013
29876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_CM_ATTR_READY_TO_USE			0x0014
29976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_CM_ATTR_DISCONNECT_REQUEST		0x0015
30076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_CM_ATTR_DISCONNECT_REPLY		0x0016
30176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_CM_ATTR_SERVICE_ID_RES_REQ		0x0016
30276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_CM_ATTR_SERVICE_ID_RES_REQ_RESP	0x0018
30376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_CM_ATTR_LOAD_ALTERNATE_PATH		0x0019
30476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_CM_ATTR_ALTERNATE_PATH_RESPONSE	0x001a
30576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
30676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Communication management common fields */
30776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ib_cm_common {
30876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Local communication ID */
30976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint32_t local_id;
31076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Remote communication ID */
31176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint32_t remote_id;
31276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Reserved */
31376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t reserved[224];
31476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ (( packed ));
31576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
31676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** A communication management path */
31776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ib_cm_path {
31876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Local port LID */
31976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint16_t local_lid;
32076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Remote port LID */
32176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint16_t remote_lid;
32276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Local port GID */
32376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	struct ib_gid local_gid;
32476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Remote port GID */
32576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	struct ib_gid remote_gid;
32676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Flow label and rate */
32776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint32_t flow_label__rate;
32876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Traffic class */
32976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t tc;
33076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Hop limit */
33176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t hop_limit;
33276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** SL and subnet local*/
33376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t sl__subnet_local;
33476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Local ACK timeout */
33576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t local_ack_timeout;
33676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ (( packed ));
33776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
33876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** A communication management connection request
33976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
34076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Defined in section 12.6.5 of the IBA.
34176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */
34276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ib_cm_connect_request {
34376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Local communication ID */
34476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint32_t local_id;
34576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Reserved */
34676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint32_t reserved0[1];
34776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Service ID */
34876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	struct ib_gid_half service_id;
34976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Local CA GUID */
35076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	struct ib_gid_half local_ca;
35176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Reserved */
35276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint32_t reserved1[1];
35376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Local queue key */
35476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint32_t local_qkey;
35576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Local QPN and responder resources*/
35676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint32_t local_qpn__responder_resources;
35776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Local EECN and initiator depth */
35876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint32_t local_eecn__initiator_depth;
35976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Remote EECN, remote CM response timeout, transport service
36076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	 * type, EE flow control
36176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	 */
36276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint32_t remote_eecn__remote_timeout__service_type__ee_flow_ctrl;
36376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Starting PSN, local CM response timeout and retry count */
36476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint32_t starting_psn__local_timeout__retry_count;
36576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Partition key */
36676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint16_t pkey;
36776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Path packet payload MTU, RDC exists, RNR retry count */
36876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t payload_mtu__rdc_exists__rnr_retry;
36976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Max CM retries and SRQ */
37076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t max_cm_retries__srq;
37176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Primary path */
37276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	struct ib_cm_path primary;
37376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Alternate path */
37476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	struct ib_cm_path alternate;
37576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Private data */
37676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t private_data[92];
37776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ (( packed ));
37876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
37976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** CM transport types */
38076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_CM_TRANSPORT_RC		0
38176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_CM_TRANSPORT_UC		1
38276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_CM_TRANSPORT_RD		2
38376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
38476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** A communication management connection rejection
38576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
38676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Defined in section 12.6.7 of the IBA.
38776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */
38876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ib_cm_connect_reject {
38976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Local communication ID */
39076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint32_t local_id;
39176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Remote communication ID */
39276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint32_t remote_id;
39376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Message rejected */
39476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t message;
39576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Reject information length */
39676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t info_len;
39776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Rejection reason */
39876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint16_t reason;
39976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Additional rejection information */
40076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t info[72];
40176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Private data */
40276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t private_data[148];
40376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ (( packed ));
40476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
40576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** CM rejection reasons */
40676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_CM_REJECT_BAD_SERVICE_ID	8
40776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_CM_REJECT_STALE_CONN		10
40876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_CM_REJECT_CONSUMER		28
40976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
41076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** A communication management connection reply
41176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
41276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Defined in section 12.6.8 of the IBA.
41376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */
41476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ib_cm_connect_reply {
41576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Local communication ID */
41676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint32_t local_id;
41776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Remote communication ID */
41876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint32_t remote_id;
41976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Local queue key */
42076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint32_t local_qkey;
42176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Local QPN */
42276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint32_t local_qpn;
42376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Local EECN */
42476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint32_t local_eecn;
42576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Starting PSN */
42676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint32_t starting_psn;
42776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Responder resources */
42876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t responder_resources;
42976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Initiator depth */
43076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t initiator_depth;
43176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Target ACK delay, failover accepted, and end-to-end flow control */
43276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t target_ack_delay__failover_accepted__ee_flow_ctrl;
43376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** RNR retry count, SRQ */
43476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t rnr_retry__srq;
43576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Local CA GUID */
43676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	struct ib_gid_half local_ca;
43776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Private data */
43876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t private_data[196];
43976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ (( packed ));
44076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
44176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** A communication management ready to use reply
44276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
44376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Defined in section 12.6.9 of the IBA.
44476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */
44576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ib_cm_ready_to_use {
44676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Local communication ID */
44776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint32_t local_id;
44876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Remote communication ID */
44976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint32_t remote_id;
45076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/** Private data */
45176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t private_data[224];
45276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ (( packed ));
45376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
45476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** A communication management attribute */
45576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanunion ib_cm_data {
45676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	struct ib_cm_common common;
45776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	struct ib_cm_connect_request connect_request;
45876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	struct ib_cm_connect_reject connect_reject;
45976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	struct ib_cm_connect_reply connect_reply;
46076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	struct ib_cm_ready_to_use ready_to_use;
46176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t bytes[232];
46276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ (( packed ));
46376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
46476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/*****************************************************************************
46576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
46676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * MADs
46776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
46876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *****************************************************************************
46976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */
47076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
47176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Management datagram class_specific data */
47276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanunion ib_mad_class_specific {
47376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint16_t raw;
47476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	struct ib_smp_class_specific smp;
47576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ (( packed ));
47676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
47776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** A management datagram common header
47876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
47976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Defined in section 13.4.2 of the IBA.
48076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */
48176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ib_mad_hdr {
48276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t base_version;
48376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t mgmt_class;
48476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t class_version;
48576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t method;
48676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint16_t status;
48776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	union ib_mad_class_specific class_specific;
48876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint32_t tid[2];
48976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint16_t attr_id;
49076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t reserved[2];
49176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint32_t attr_mod;
49276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ (( packed ));
49376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
49476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Management base version */
49576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_MGMT_BASE_VERSION			1
49676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
49776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Management classes */
49876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_MGMT_CLASS_SUBN_LID_ROUTED		0x01
49976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_MGMT_CLASS_SUBN_DIRECTED_ROUTE	0x81
50076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_MGMT_CLASS_SUBN_ADM			0x03
50176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_MGMT_CLASS_PERF_MGMT			0x04
50276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_MGMT_CLASS_BM			0x05
50376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_MGMT_CLASS_DEVICE_MGMT		0x06
50476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_MGMT_CLASS_CM			0x07
50576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_MGMT_CLASS_SNMP			0x08
50676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_MGMT_CLASS_VENDOR_RANGE2_START	0x30
50776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_MGMT_CLASS_VENDOR_RANGE2_END		0x4f
50876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
50976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_MGMT_CLASS_MASK			0x7f
51076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
51176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Management methods */
51276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_MGMT_METHOD_GET			0x01
51376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_MGMT_METHOD_SET			0x02
51476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_MGMT_METHOD_GET_RESP			0x81
51576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_MGMT_METHOD_SEND			0x03
51676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_MGMT_METHOD_TRAP			0x05
51776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_MGMT_METHOD_REPORT			0x06
51876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_MGMT_METHOD_REPORT_RESP		0x86
51976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_MGMT_METHOD_TRAP_REPRESS		0x07
52076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_MGMT_METHOD_DELETE			0x15
52176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
52276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Status codes */
52376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_MGMT_STATUS_OK			0x0000
52476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_MGMT_STATUS_BAD_VERSION		0x0001
52576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_MGMT_STATUS_UNSUPPORTED_METHOD	0x0002
52676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_MGMT_STATUS_UNSUPPORTED_METHOD_ATTR	0x0003
52776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IB_MGMT_STATUS_INVALID_VALUE		0x0004
52876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
52976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** A subnet management MAD */
53076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ib_mad_smp {
53176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	struct ib_mad_hdr mad_hdr;
53276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	struct ib_smp_hdr smp_hdr;
53376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	union ib_smp_data smp_data;
53476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	struct ib_smp_dr_path initial_path;
53576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	struct ib_smp_dr_path return_path;
53676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ (( packed ));
53776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
53876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** A subnet administration MAD */
53976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ib_mad_sa {
54076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	struct ib_mad_hdr mad_hdr;
54176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	struct ib_rmpp_hdr rmpp_hdr;
54276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	struct ib_sa_hdr sa_hdr;
54376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	union ib_sa_data sa_data;
54476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ (( packed ));
54576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
54676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** A communication management MAD */
54776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct ib_mad_cm {
54876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	struct ib_mad_hdr mad_hdr;
54976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	union ib_cm_data cm_data;
55076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ (( packed ));
55176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
55276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** A management datagram */
55376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanunion ib_mad {
55476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	struct ib_mad_hdr hdr;
55576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	struct ib_mad_smp smp;
55676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	struct ib_mad_sa sa;
55776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	struct ib_mad_cm cm;
55876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	uint8_t bytes[256];
55976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ (( packed ));
56076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
56176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif /* _GPXE_IB_MAD_H */
562