diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..dba8f1e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/opensm-3.3.22.tar.gz diff --git a/.opensm.metadata b/.opensm.metadata new file mode 100644 index 0000000..77538e5 --- /dev/null +++ b/.opensm.metadata @@ -0,0 +1 @@ +3473adeb0079c9dbb2a22de746d27a21309891a0 SOURCES/opensm-3.3.22.tar.gz diff --git a/SOURCES/0001-osm_opensm.c-Fix-use-of-enum-as-NULL-pointer-in-osm_.patch b/SOURCES/0001-osm_opensm.c-Fix-use-of-enum-as-NULL-pointer-in-osm_.patch new file mode 100644 index 0000000..d20674d --- /dev/null +++ b/SOURCES/0001-osm_opensm.c-Fix-use-of-enum-as-NULL-pointer-in-osm_.patch @@ -0,0 +1,32 @@ +From 992687f9ee00d016b450c1aed5b6c8558023881e Mon Sep 17 00:00:00 2001 +From: Nicolas Morey-Chaisemartin +Date: Thu, 18 Apr 2019 09:09:56 +0200 +Subject: [PATCH 1/8] osm_opensm.c: Fix use of enum as NULL pointer in + osm_opensm_init_finish + +Fixes this warning: +osm_opensm.c:543:31: warning: expression which evaluates to zero treated as a null pointer constant of type 'struct osm_routing_engine *' [-Wnon-literal-null-conversion] + p_osm->routing_engine_used = OSM_ROUTING_ENGINE_TYPE_NONE; + +Signed-off-by: Nicolas Morey-Chaisemartin +Signed-off-by: Hal Rosenstock +--- + opensm/osm_opensm.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/opensm/osm_opensm.c b/opensm/osm_opensm.c +index d43fe825..da493c7a 100644 +--- a/opensm/osm_opensm.c ++++ b/opensm/osm_opensm.c +@@ -540,7 +540,7 @@ ib_api_status_t osm_opensm_init_finish(IN osm_opensm_t * p_osm, + + setup_routing_engines(p_osm, p_opt->routing_engine_names); + +- p_osm->routing_engine_used = OSM_ROUTING_ENGINE_TYPE_NONE; ++ p_osm->routing_engine_used = NULL; + + p_osm->node_name_map = open_node_name_map(p_opt->node_name_map_name); + +-- +2.20.1 + diff --git a/SOURCES/0002-osm_ucast_ftree.c-Fix-clang-warning-about-empty-loop.patch b/SOURCES/0002-osm_ucast_ftree.c-Fix-clang-warning-about-empty-loop.patch new file mode 100644 index 0000000..949d9ee --- /dev/null +++ b/SOURCES/0002-osm_ucast_ftree.c-Fix-clang-warning-about-empty-loop.patch @@ -0,0 +1,34 @@ +From 3bcefae1376d29dc10881b55701cf0aab71ce380 Mon Sep 17 00:00:00 2001 +From: Nicolas Morey-Chaisemartin +Date: Thu, 18 Apr 2019 09:14:49 +0200 +Subject: [PATCH 2/8] osm_ucast_ftree.c: Fix clang warning about empty loop + +osm_ucast_ftree.c:3861:52: warning: for loop has empty body [-Wempty-body] + && (!p_hca->up_port_groups[i]->is_cn); i++) ; + ^ +osm_ucast_ftree.c:3861:52: note: put the semicolon on a separate line to silence this warning + +Signed-off-by: Nicolas Morey-Chaisemartin +Signed-off-by: Hal Rosenstock +--- + opensm/osm_ucast_ftree.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/opensm/osm_ucast_ftree.c b/opensm/osm_ucast_ftree.c +index 7fa78efa..106ef6bf 100644 +--- a/opensm/osm_ucast_ftree.c ++++ b/opensm/osm_ucast_ftree.c +@@ -3866,7 +3866,9 @@ static void fabric_set_leaf_rank(IN ftree_fabric_t * p_ftree) + hca_get_guid_ho(p_hca)); + + for (i = 0; (i < p_hca->up_port_groups_num) +- && (!p_hca->up_port_groups[i]->is_cn); i++) ; ++ && (!p_hca->up_port_groups[i]->is_cn); i++) ++ ; ++ + CL_ASSERT(i < p_hca->up_port_groups_num); + CL_ASSERT(p_hca->up_port_groups[i]->remote_node_type == + IB_NODE_TYPE_SWITCH); +-- +2.20.1 + diff --git a/SOURCES/0003-osm_-port-ucast_ftree-.c-Remove-unused-static-functi.patch b/SOURCES/0003-osm_-port-ucast_ftree-.c-Remove-unused-static-functi.patch new file mode 100644 index 0000000..bb74f5b --- /dev/null +++ b/SOURCES/0003-osm_-port-ucast_ftree-.c-Remove-unused-static-functi.patch @@ -0,0 +1,57 @@ +From 393f6651c163058103d6e895dd027b32c4aa509c Mon Sep 17 00:00:00 2001 +From: Nicolas Morey-Chaisemartin +Date: Thu, 18 Apr 2019 09:10:48 +0200 +Subject: [PATCH 3/8] osm_[port ucast_ftree].c: Remove unused static functions + +Clears defined but unused warning from clang + +Signed-off-by: Nicolas Morey-Chaisemartin +Signed-off-by: Hal Rosenstock +--- + opensm/osm_port.c | 2 ++ + opensm/osm_ucast_ftree.c | 2 ++ + 2 files changed, 4 insertions(+) + +diff --git a/opensm/osm_port.c b/opensm/osm_port.c +index 1246edf9..7b1d58f9 100644 +--- a/opensm/osm_port.c ++++ b/opensm/osm_port.c +@@ -303,6 +303,7 @@ static inline uint64_t ptr_to_key(void const *p) + return k; + } + ++#if 0 + static inline void *key_to_ptr(uint64_t k) + { + void *p = 0; +@@ -310,6 +311,7 @@ static inline void *key_to_ptr(uint64_t k) + memcpy(&p, &k, sizeof(void *)); + return p; + } ++#endif + + /********************************************************************** + Traverse the fabric from the SM node following the DR path given and +diff --git a/opensm/osm_ucast_ftree.c b/opensm/osm_ucast_ftree.c +index 106ef6bf..a4b32e5c 100644 +--- a/opensm/osm_ucast_ftree.c ++++ b/opensm/osm_ucast_ftree.c +@@ -318,6 +318,7 @@ static inline ftree_tuple_key_t tuple_to_key(IN ftree_tuple_t tuple) + return key; + } + ++#if 0 + /***************************************************/ + + static inline void tuple_from_key(IN ftree_tuple_t tuple, +@@ -325,6 +326,7 @@ static inline void tuple_from_key(IN ftree_tuple_t tuple, + { + memcpy(tuple, &key, FTREE_TUPLE_LEN); + } ++#endif + + /*************************************************** + ** +-- +2.20.1 + diff --git a/SOURCES/0008-ib_types-Drop-packed-attribute-where-unnecessary.patch b/SOURCES/0008-ib_types-Drop-packed-attribute-where-unnecessary.patch new file mode 100644 index 0000000..bebb61b --- /dev/null +++ b/SOURCES/0008-ib_types-Drop-packed-attribute-where-unnecessary.patch @@ -0,0 +1,885 @@ +From 70722b4886f644170326b8be8d571bf058d955dc Mon Sep 17 00:00:00 2001 +From: Nicolas Morey-Chaisemartin +Date: Wed, 24 Apr 2019 07:47:09 +0200 +Subject: [PATCH 8/8] ib_types: Drop packed attribute where unnecessary + +For many of the IBA structures, the packed attribute has no effect. + +List of impacted struct and checks were done this way: + +Before applying this patch +- Generate a single file with all the IBA structs +(echo -e "#include \n#include \n\n\n"; for struct in $(git grep '^} PACK_SUFFIX' -- include/iba/ib_types.h | awk '{ print $NF }' | sed -e 's/;//'); do echo -e "$struct a_$struct;"; done) > ib_sizes.c +- Compile for both 32 and 64b +gcc -o ib_sizes.64.o -g3 -c ib_sizes.c -I./include/ +gcc -o ib_sizes.32.o -g3 -m32 -c ib_sizes.c -I./include/ +- Generate structure data using pahole +pahole ib_sizes.64.o > sizes.64.org +pahole ib_sizes.32.o > sizes.32.org + +After applying this patch: +- Compile for both 32 and 64b +gcc -o ib_sizes.64.o -g3 -c ib_sizes.c -I./include/ +gcc -o ib_sizes.32.o -g3 -m32 -c ib_sizes.c -I./include/ +- Generate structure data using pahole +pahole ib_sizes.64.o > sizes.64.new +pahole ib_sizes.32.o > sizes.32.new + +Diff pahole results: +diff sizes.64.org sizes.64.new +diff sizes.32.org sizes.32.new + +As the patch remove effect-less attribute, no diff shows up + +Signed-off-by: Nicolas Morey-Chaisemartin +Signed-off-by: Hal Rosenstock +--- + include/iba/ib_types.h | 214 +++++++++++------------------------------ + 1 file changed, 55 insertions(+), 159 deletions(-) + +diff --git a/include/iba/ib_types.h b/include/iba/ib_types.h +index fb1c3f9c..025f9714 100644 +--- a/include/iba/ib_types.h ++++ b/include/iba/ib_types.h +@@ -2256,25 +2256,23 @@ static inline boolean_t OSM_API ib_pkey_is_invalid(IN const ib_net16_t pkey) + * + * SYNOPSIS + */ +-#include + typedef union _ib_gid { + uint8_t raw[16]; + struct _ib_gid_unicast { + ib_gid_prefix_t prefix; + ib_net64_t interface_id; +- } PACK_SUFFIX unicast; ++ } unicast; + struct _ib_gid_multicast { + uint8_t header[2]; + uint8_t raw_group_id[14]; +- } PACK_SUFFIX multicast; ++ } multicast; + struct _ib_gid_ip_multicast { + uint8_t header[2]; + ib_net16_t signature; + ib_net16_t p_key; + uint8_t group_id[10]; +- } PACK_SUFFIX ip_multicast; +-} PACK_SUFFIX ib_gid_t; +-#include ++ } ip_multicast; ++} ib_gid_t; + /* + * FIELDS + * raw +@@ -2500,7 +2498,6 @@ ib_gid_get_guid(IN const ib_gid_t * const p_gid) + * + * SYNOPSIS + */ +-#include + typedef struct _ib_path_rec { + ib_net64_t service_id; + ib_gid_t dgid; +@@ -2517,8 +2514,7 @@ typedef struct _ib_path_rec { + uint8_t pkt_life; + uint8_t preference; + uint8_t resv2[6]; +-} PACK_SUFFIX ib_path_rec_t; +-#include ++} ib_path_rec_t; + /* + * FIELDS + * service_id +@@ -3488,7 +3484,6 @@ ib_path_rec_hop_limit(IN const ib_path_rec_t * const p_rec) + * + * SYNOPSIS + */ +-#include + typedef struct _ib_class_port_info { + uint8_t base_ver; + uint8_t class_ver; +@@ -3506,8 +3501,7 @@ typedef struct _ib_class_port_info { + ib_net16_t trap_pkey; + ib_net32_t trap_hop_qp; + ib_net32_t trap_qkey; +-} PACK_SUFFIX ib_class_port_info_t; +-#include ++} ib_class_port_info_t; + /* + * FIELDS + * base_ver +@@ -3807,7 +3801,6 @@ ib_sminfo_get_state(IN const ib_sm_info_t * const p_smi) + * + * SYNOPSIS + */ +-#include + typedef struct _ib_mad { + uint8_t base_ver; + uint8_t mgmt_class; +@@ -3819,8 +3812,7 @@ typedef struct _ib_mad { + ib_net16_t attr_id; + ib_net16_t resv; + ib_net32_t attr_mod; +-} PACK_SUFFIX ib_mad_t; +-#include ++} ib_mad_t; + /* + * FIELDS + * base_ver +@@ -4128,7 +4120,6 @@ ib_rmpp_get_resp_time(IN const ib_rmpp_mad_t * const p_rmpp_mad) + * SYNOPSIS + */ + #define IB_SMP_DATA_SIZE 64 +-#include + typedef struct _ib_smp { + uint8_t base_ver; + uint8_t mgmt_class; +@@ -4148,8 +4139,7 @@ typedef struct _ib_smp { + 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]; +-} PACK_SUFFIX ib_smp_t; +-#include ++} ib_smp_t; + /* + * FIELDS + * base_ver +@@ -4587,14 +4577,12 @@ ib_node_info_get_vendor_id(IN const ib_node_info_t * const p_ni) + + #define IB_NODE_DESCRIPTION_SIZE 64 + +-#include + typedef struct _ib_node_desc { + // 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]; +-} PACK_SUFFIX ib_node_desc_t; +-#include ++} ib_node_desc_t; + + #include + typedef struct _ib_node_record_t { +@@ -4615,7 +4603,6 @@ typedef struct _ib_node_record_t { + * + * SYNOPSIS + */ +-#include + typedef struct _ib_port_info { + ib_net64_t m_key; + ib_net64_t subnet_prefix; +@@ -4652,8 +4639,7 @@ typedef struct _ib_port_info { + ib_net16_t capability_mask2; + uint8_t link_speed_ext; /* LinkSpeedExtActive and LinkSpeedExtSupported */ + uint8_t link_speed_ext_enabled; /* reserv(3b), LinkSpeedExtEnabled(5b) */ +-} PACK_SUFFIX ib_port_info_t; +-#include ++} ib_port_info_t; + /************/ + + #define IB_PORT_STATE_MASK 0x0F +@@ -4726,7 +4712,6 @@ typedef struct _ib_port_info { + * + * SYNOPSIS + */ +-#include + typedef struct _ib_port_info_ext { + ib_net32_t cap_mask; + ib_net16_t fec_mode_active; +@@ -4737,8 +4722,7 @@ typedef struct _ib_port_info_ext { + ib_net16_t hdr_fec_mode_sup; + ib_net16_t hdr_fec_mode_enable; + uint8_t reserved[46]; +-} PACK_SUFFIX ib_port_info_ext_t; +-#include ++} ib_port_info_ext_t; + /************/ + + #define IB_PORT_EXT_NO_FEC_MODE_ACTIVE 0 +@@ -6563,7 +6547,6 @@ static inline uint8_t OSM_API ib_get_highest_link_width(IN const uint8_t widths) + * + * SYNOPSIS + */ +-#include + typedef struct _ib_mlnx_ext_port_info { + uint8_t resvd1[3]; + uint8_t state_change_enable; +@@ -6574,13 +6557,11 @@ typedef struct _ib_mlnx_ext_port_info { + uint8_t resvd4[3]; + uint8_t link_speed_active; + uint8_t resvd5[48]; +-} PACK_SUFFIX ib_mlnx_ext_port_info_t; +-#include ++} ib_mlnx_ext_port_info_t; + /************/ + + typedef uint8_t ib_svc_name_t[64]; + +-#include + typedef struct _ib_service_record { + ib_net64_t service_id; + ib_gid_t service_gid; +@@ -6593,8 +6574,7 @@ typedef struct _ib_service_record { + ib_net16_t service_data16[8]; + ib_net32_t service_data32[4]; + ib_net64_t service_data64[2]; +-} PACK_SUFFIX ib_service_record_t; +-#include ++} ib_service_record_t; + + #include + typedef struct _ib_portinfo_record { +@@ -6606,24 +6586,20 @@ typedef struct _ib_portinfo_record { + } PACK_SUFFIX ib_portinfo_record_t; + #include + +-#include + typedef struct _ib_portinfoext_record { + ib_net16_t lid; + uint8_t port_num; + uint8_t options; + ib_port_info_ext_t port_info_ext; +-} PACK_SUFFIX ib_portinfoext_record_t; +-#include ++} ib_portinfoext_record_t; + +-#include + typedef struct _ib_link_record { + ib_net16_t from_lid; + uint8_t from_port_num; + uint8_t to_port_num; + ib_net16_t to_lid; + uint8_t pad[2]; +-} PACK_SUFFIX ib_link_record_t; +-#include ++} ib_link_record_t; + + #include + typedef struct _ib_sminfo_record { +@@ -6643,14 +6619,12 @@ typedef struct _ib_sminfo_record { + * + * SYNOPSIS + */ +-#include + typedef struct _ib_lft_record { + ib_net16_t lid; + ib_net16_t block_num; + uint32_t resv0; + uint8_t lft[64]; +-} PACK_SUFFIX ib_lft_record_t; +-#include ++} ib_lft_record_t; + /************/ + + /****s* IBA Base: Types/ib_mft_record_t +@@ -6662,14 +6636,12 @@ typedef struct _ib_lft_record { + * + * SYNOPSIS + */ +-#include + typedef struct _ib_mft_record { + ib_net16_t lid; + ib_net16_t position_block_num; + uint32_t resv0; + ib_net16_t mft[IB_MCAST_BLOCK_SIZE]; +-} PACK_SUFFIX ib_mft_record_t; +-#include ++} ib_mft_record_t; + /************/ + + /****s* IBA Base: Types/ib_switch_info_t +@@ -6681,7 +6653,6 @@ typedef struct _ib_mft_record { + * + * SYNOPSIS + */ +-#include + typedef struct _ib_switch_info { + ib_net16_t lin_cap; + ib_net16_t rand_cap; +@@ -6696,17 +6667,14 @@ typedef struct _ib_switch_info { + uint8_t flags; + uint8_t resvd; + ib_net16_t mcast_top; +-} PACK_SUFFIX ib_switch_info_t; +-#include ++} ib_switch_info_t; + /************/ + +-#include + typedef struct _ib_switch_info_record { + ib_net16_t lid; + uint16_t resv0; + ib_switch_info_t switch_info; +-} PACK_SUFFIX ib_switch_info_record_t; +-#include ++} ib_switch_info_record_t; + + #define IB_SWITCH_PSC 0x04 + +@@ -6895,26 +6863,21 @@ ib_switch_info_is_enhanced_port0(IN const ib_switch_info_t * const p_si) + */ + #define GUID_TABLE_MAX_ENTRIES 8 + +-#include + typedef struct _ib_guid_info { + ib_net64_t guid[GUID_TABLE_MAX_ENTRIES]; +-} PACK_SUFFIX ib_guid_info_t; +-#include ++} ib_guid_info_t; + /************/ + +-#include + typedef struct _ib_guidinfo_record { + ib_net16_t lid; + uint8_t block_num; + uint8_t resv; + uint32_t reserved; + ib_guid_info_t guid_info; +-} PACK_SUFFIX ib_guidinfo_record_t; +-#include ++} ib_guidinfo_record_t; + + #define IB_MULTIPATH_MAX_GIDS 11 /* Support max that can fit into first MAD (for now) */ + +-#include + typedef struct _ib_multipath_rec_t { + ib_net32_t hop_flow_raw; + uint8_t tclass; +@@ -6930,8 +6893,7 @@ typedef struct _ib_multipath_rec_t { + uint8_t dgid_count; + uint8_t service_id_56lsb[7]; + ib_gid_t gids[IB_MULTIPATH_MAX_GIDS]; +-} PACK_SUFFIX ib_multipath_rec_t; +-#include ++} ib_multipath_rec_t; + /* + * FIELDS + * hop_flow_raw +@@ -7391,11 +7353,9 @@ ib_multipath_rec_service_id(IN const ib_multipath_rec_t * const p_rec) + * SYNOPSIS + */ + +-#include + typedef struct _ib_pkey_table { + ib_net16_t pkey_entry[IB_NUM_PKEY_ELEMENTS_IN_BLOCK]; +-} PACK_SUFFIX ib_pkey_table_t; +-#include ++} ib_pkey_table_t; + /************/ + + /****s* IBA Base: Types/ib_pkey_table_record_t +@@ -7407,7 +7367,6 @@ typedef struct _ib_pkey_table { + * + * SYNOPSIS + */ +-#include + typedef struct _ib_pkey_table_record { + ib_net16_t lid; // for CA: lid of port, for switch lid of port 0 + ib_net16_t block_num; +@@ -7415,8 +7374,7 @@ typedef struct _ib_pkey_table_record { + uint8_t reserved1; + uint16_t reserved2; + ib_pkey_table_t pkey_tbl; +-} PACK_SUFFIX ib_pkey_table_record_t; +-#include ++} ib_pkey_table_record_t; + /************/ + + #define IB_DROP_VL 15 +@@ -7430,11 +7388,9 @@ typedef struct _ib_pkey_table_record { + * + * SYNOPSIS + */ +-#include + typedef struct _ib_slvl_table { + uint8_t raw_vl_by_sl[IB_MAX_NUM_VLS / 2]; +-} PACK_SUFFIX ib_slvl_table_t; +-#include ++} ib_slvl_table_t; + /************/ + + /****s* IBA Base: Types/ib_slvl_table_record_t +@@ -7446,15 +7402,13 @@ typedef struct _ib_slvl_table { + * + * SYNOPSIS + */ +-#include + typedef struct _ib_slvl_table_record { + ib_net16_t 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; +-} PACK_SUFFIX ib_slvl_table_record_t; +-#include ++} ib_slvl_table_record_t; + /************/ + + /****f* IBA Base: Types/ib_slvl_table_set +@@ -7553,12 +7507,10 @@ ib_slvl_table_get(IN const ib_slvl_table_t * p_slvl_tbl, IN uint8_t sl_index) + * + * SYNOPSIS + */ +-#include + typedef struct _ib_vl_arb_element { + uint8_t vl; + uint8_t weight; +-} PACK_SUFFIX ib_vl_arb_element_t; +-#include ++} ib_vl_arb_element_t; + /************/ + + #define IB_NUM_VL_ARB_ELEMENTS_IN_BLOCK 32 +@@ -7572,11 +7524,9 @@ typedef struct _ib_vl_arb_element { + * + * SYNOPSIS + */ +-#include + typedef struct _ib_vl_arb_table { + ib_vl_arb_element_t vl_entry[IB_NUM_VL_ARB_ELEMENTS_IN_BLOCK]; +-} PACK_SUFFIX ib_vl_arb_table_t; +-#include ++} ib_vl_arb_table_t; + /************/ + + /****s* IBA Base: Types/ib_vl_arb_table_record_t +@@ -7588,21 +7538,18 @@ typedef struct _ib_vl_arb_table { + * + * SYNOPSIS + */ +-#include + typedef struct _ib_vl_arb_table_record { + ib_net16_t 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; +-} PACK_SUFFIX ib_vl_arb_table_record_t; +-#include ++} ib_vl_arb_table_record_t; + /************/ + + /* + * Global route header information received with unreliable datagram messages + */ +-#include + typedef struct _ib_grh { + ib_net32_t ver_class_flow; + ib_net16_t resv1; +@@ -7610,8 +7557,7 @@ typedef struct _ib_grh { + uint8_t hop_limit; + ib_gid_t src_gid; + ib_gid_t dest_gid; +-} PACK_SUFFIX ib_grh_t; +-#include ++} ib_grh_t; + + /****f* IBA Base: Types/ib_grh_get_ver_class_flow + * NAME +@@ -7719,7 +7665,6 @@ ib_grh_set_ver_class_flow(IN const uint8_t ver, + * + * SYNOPSIS + */ +-#include + typedef struct _ib_member_rec { + ib_gid_t mgid; + ib_gid_t port_gid; +@@ -7735,8 +7680,7 @@ typedef struct _ib_member_rec { + uint8_t proxy_join:1; + uint8_t reserved[2]; + uint8_t pad[4]; +-} PACK_SUFFIX ib_member_rec_t; +-#include ++} ib_member_rec_t; + /* + * FIELDS + * mgid +@@ -8599,14 +8543,12 @@ typedef struct _ib_inform_info_record { + * + * SYNOPSIS + */ +-#include + typedef struct _ib_perfmgt_mad { + ib_mad_t header; + uint8_t resv[40]; + #define IB_PM_DATA_SIZE 192 + uint8_t data[IB_PM_DATA_SIZE]; +-} PACK_SUFFIX ib_perfmgt_mad_t; +-#include ++} ib_perfmgt_mad_t; + /* + * FIELDS + * header +@@ -8632,7 +8574,6 @@ typedef struct _ib_perfmgt_mad { + * + * SYNOPSIS + */ +-#include + typedef struct _ib_port_counters { + uint8_t reserved; + uint8_t port_select; +@@ -8655,8 +8596,7 @@ typedef struct _ib_port_counters { + ib_net32_t xmit_pkts; + ib_net32_t rcv_pkts; + ib_net32_t xmit_wait; +-} PACK_SUFFIX ib_port_counters_t; +-#include ++} ib_port_counters_t; + + #define PC_LINK_INT(integ_buf_over) ((integ_buf_over & 0xF0) >> 4) + #define PC_BUF_OVERRUN(integ_buf_over) (integ_buf_over & 0x0F) +@@ -8670,7 +8610,6 @@ typedef struct _ib_port_counters { + * + * SYNOPSIS + */ +-#include + typedef struct _ib_port_counters_ext { + uint8_t reserved; + uint8_t port_select; +@@ -8698,8 +8637,7 @@ typedef struct _ib_port_counters_ext { + ib_net64_t vl15_dropped; + ib_net64_t xmit_wait; + ib_net64_t qp1_dropped; +-} PACK_SUFFIX ib_port_counters_ext_t; +-#include ++} ib_port_counters_ext_t; + + /****s* IBA Base: Types/ib_port_samples_control + * NAME +@@ -8767,7 +8705,6 @@ typedef struct _ib_port_samples_control { + * + * SYNOPSIS + */ +-#include + typedef struct _ib_port_samples_result { + ib_net16_t tag; + ib_net16_t sample_status; /* 14 bits res : 2 bits sample_status */ +@@ -8786,8 +8723,7 @@ typedef struct _ib_port_samples_result { + ib_net32_t counter12; + ib_net32_t counter13; + ib_net32_t counter14; +-} PACK_SUFFIX ib_port_samples_result_t; +-#include ++} ib_port_samples_result_t; + + /****s* IBA Base: Types/ib_port_xmit_data_sl + * NAME +@@ -8798,15 +8734,13 @@ typedef struct _ib_port_samples_result { + * + * SYNOPSIS + */ +-#include + typedef struct _ib_port_xmit_data_sl { + uint8_t reserved; + uint8_t port_select; + ib_net16_t counter_select; + ib_net32_t port_xmit_data_sl[16]; + uint8_t resv[124]; +-} PACK_SUFFIX ib_port_xmit_data_sl_t; +-#include ++} ib_port_xmit_data_sl_t; + + /****s* IBA Base: Types/ib_port_rcv_data_sl + * NAME +@@ -8817,15 +8751,13 @@ typedef struct _ib_port_xmit_data_sl { + * + * SYNOPSIS + */ +-#include + typedef struct _ib_port_rcv_data_sl { + uint8_t reserved; + uint8_t port_select; + ib_net16_t counter_select; + ib_net32_t port_rcv_data_sl[16]; + uint8_t resv[124]; +-} PACK_SUFFIX ib_port_rcv_data_sl_t; +-#include ++} ib_port_rcv_data_sl_t; + + /****d* IBA Base: Types/DM_SVC_NAME + * NAME +@@ -8850,14 +8782,12 @@ typedef struct _ib_port_rcv_data_sl { + * + * SYNOPSIS + */ +-#include + typedef struct _ib_dm_mad { + ib_mad_t header; + uint8_t resv[40]; + #define IB_DM_DATA_SIZE 192 + uint8_t data[IB_DM_DATA_SIZE]; +-} PACK_SUFFIX ib_dm_mad_t; +-#include ++} ib_dm_mad_t; + /* + * FIELDS + * header +@@ -8883,7 +8813,6 @@ typedef struct _ib_dm_mad { + * + * SYNOPSIS + */ +-#include + typedef struct _ib_iou_info { + ib_net16_t change_id; + uint8_t max_controllers; +@@ -8894,8 +8823,7 @@ typedef struct _ib_iou_info { + #define IOC_INSTALLED 0x1 + // Reserved values 0x02-0xE + #define SLOT_DOES_NOT_EXIST 0xF +-} PACK_SUFFIX ib_iou_info_t; +-#include ++} ib_iou_info_t; + /* + * FIELDS + * change_id +@@ -9023,7 +8951,6 @@ ioc_at_slot(IN const ib_iou_info_t * const p_iou_info, IN uint8_t slot) + * + * SYNOPSIS + */ +-#include + typedef struct _ib_ioc_profile { + ib_net64_t ioc_guid; + ib_net32_t vend_id; +@@ -9057,8 +8984,7 @@ typedef struct _ib_ioc_profile { + uint8_t resv6[9]; + #define CTRL_ID_STRING_LEN 64 + char id_string[CTRL_ID_STRING_LEN]; +-} PACK_SUFFIX ib_ioc_profile_t; +-#include ++} ib_ioc_profile_t; + /* + * FIELDS + * ioc_guid +@@ -9142,13 +9068,11 @@ ib_ioc_profile_set_vend_id(IN ib_ioc_profile_t * const p_ioc_profile, + * + * SYNOPSIS + */ +-#include + typedef struct _ib_svc_entry { + #define MAX_SVC_ENTRY_NAME_LEN 40 + char name[MAX_SVC_ENTRY_NAME_LEN]; + ib_net64_t id; +-} PACK_SUFFIX ib_svc_entry_t; +-#include ++} ib_svc_entry_t; + /* + * FIELDS + * name +@@ -9170,12 +9094,10 @@ typedef struct _ib_svc_entry { + * + * SYNOPSIS + */ +-#include + typedef struct _ib_svc_entries { + #define SVC_ENTRY_COUNT 4 + ib_svc_entry_t service_entry[SVC_ENTRY_COUNT]; +-} PACK_SUFFIX ib_svc_entries_t; +-#include ++} ib_svc_entries_t; + /* + * FIELDS + * service_entry +@@ -9203,7 +9125,6 @@ ib_dm_get_slot_lo_hi(IN const ib_net32_t slot_lo_hi, + /* + * IBA defined information describing an I/O controller + */ +-#include + typedef struct _ib_ioc_info { + ib_net64_t module_guid; + ib_net64_t iou_guid; +@@ -9211,8 +9132,7 @@ typedef struct _ib_ioc_info { + ib_net64_t access_key; + uint16_t initiators_conf; + uint8_t resv[38]; +-} PACK_SUFFIX ib_ioc_info_t; +-#include ++} ib_ioc_info_t; + + /* + * The following definitions are shared between the Access Layer and VPD +@@ -11569,14 +11489,12 @@ typedef struct _ib_ci_op { + #define IB_CC_MAD_HDR_SIZE (sizeof(ib_sa_mad_t) - IB_CC_LOG_DATA_SIZE \ + - IB_CC_MGT_DATA_SIZE) + +-#include + typedef struct _ib_cc_mad { + ib_mad_t header; + ib_net64_t cc_key; + uint8_t log_data[IB_CC_LOG_DATA_SIZE]; + uint8_t mgt_data[IB_CC_MGT_DATA_SIZE]; +-} PACK_SUFFIX ib_cc_mad_t; +-#include ++} ib_cc_mad_t; + /* + * FIELDS + * header +@@ -11688,13 +11606,11 @@ ib_cc_mad_get_mgt_data_ptr(IN const ib_cc_mad_t * const p_cc_mad) + * + * SYNOPSIS + */ +-#include + typedef struct _ib_cong_info { + uint8_t cong_info; + uint8_t resv; + uint8_t ctrl_table_cap; +-} PACK_SUFFIX ib_cong_info_t; +-#include ++} ib_cong_info_t; + /* + * FIELDS + * cong_info +@@ -11751,14 +11667,12 @@ typedef struct _ib_cong_key_info { + * + * SYNOPSIS + */ +-#include + typedef struct _ib_cong_log_event_sw { + ib_net16_t slid; + ib_net16_t dlid; + ib_net32_t sl; + ib_net32_t time_stamp; +-} PACK_SUFFIX ib_cong_log_event_sw_t; +-#include ++} ib_cong_log_event_sw_t; + /* + * FIELDS + * slid +@@ -11787,15 +11701,13 @@ typedef struct _ib_cong_log_event_sw { + * + * SYNOPSIS + */ +-#include + typedef struct _ib_cong_log_event_ca { + ib_net32_t local_qp_resv0; + ib_net32_t remote_qp_sl_service_type; + ib_net16_t remote_lid; + ib_net16_t resv1; + ib_net32_t time_stamp; +-} PACK_SUFFIX ib_cong_log_event_ca_t; +-#include ++} ib_cong_log_event_ca_t; + /* + * FIELDS + * resv0_local_qp +@@ -11895,7 +11807,6 @@ typedef struct _ib_cong_log { + * SYNOPSIS + */ + #define IB_CC_PORT_MASK_DATA_SIZE 32 +-#include + typedef struct _ib_sw_cong_setting { + ib_net32_t control_map; + uint8_t victim_mask[IB_CC_PORT_MASK_DATA_SIZE]; +@@ -11905,8 +11816,7 @@ typedef struct _ib_sw_cong_setting { + ib_net16_t cs_threshold_resv; + ib_net16_t cs_return_delay; + ib_net16_t marking_rate; +-} PACK_SUFFIX ib_sw_cong_setting_t; +-#include ++} ib_sw_cong_setting_t; + /* + * FIELDS + * +@@ -11960,13 +11870,11 @@ typedef struct _ib_sw_cong_setting { + * + * SYNOPSIS + */ +-#include + typedef struct _ib_sw_port_cong_setting_element { + uint8_t valid_ctrl_type_res_threshold; + uint8_t packet_size; + ib_net16_t cong_param; +-} PACK_SUFFIX ib_sw_port_cong_setting_element_t; +-#include ++} ib_sw_port_cong_setting_element_t; + /* + * FIELDS + * +@@ -12023,11 +11931,9 @@ typedef ib_sw_port_cong_setting_element_t ib_sw_port_cong_setting_block_t[IB_CC_ + * SYNOPSIS + */ + +-#include + typedef struct _ib_sw_port_cong_setting { + ib_sw_port_cong_setting_block_t block; +-} PACK_SUFFIX ib_sw_port_cong_setting_t; +-#include ++} ib_sw_port_cong_setting_t; + /* + * FIELDS + * +@@ -12047,7 +11953,6 @@ typedef struct _ib_sw_port_cong_setting { + * + * SYNOPSIS + */ +-#include + typedef struct _ib_ca_cong_entry { + ib_net16_t ccti_timer; + uint8_t ccti_increase; +@@ -12055,8 +11960,7 @@ typedef struct _ib_ca_cong_entry { + uint8_t ccti_min; + uint8_t resv0; + ib_net16_t resv1; +-} PACK_SUFFIX ib_ca_cong_entry_t; +-#include ++} ib_ca_cong_entry_t; + /* + * FIELDS + * +@@ -12089,13 +11993,11 @@ typedef struct _ib_ca_cong_entry { + * SYNOPSIS + */ + #define IB_CA_CONG_ENTRY_DATA_SIZE 16 +-#include + typedef struct _ib_ca_cong_setting { + ib_net16_t port_control; + ib_net16_t control_map; + ib_ca_cong_entry_t entry_list[IB_CA_CONG_ENTRY_DATA_SIZE]; +-} PACK_SUFFIX ib_ca_cong_setting_t; +-#include ++} ib_ca_cong_setting_t; + /* + * FIELDS + * +@@ -12125,11 +12027,9 @@ typedef struct _ib_ca_cong_setting { + * + * SYNOPSIS + */ +-#include + typedef struct _ib_cc_tbl_entry { + ib_net16_t shift_multiplier; +-} PACK_SUFFIX ib_cc_tbl_entry_t; +-#include ++} ib_cc_tbl_entry_t; + /* + * FIELDS + * +@@ -12153,13 +12053,11 @@ typedef struct _ib_cc_tbl_entry { + * SYNOPSIS + */ + #define IB_CC_TBL_ENTRY_LIST_MAX 64 +-#include + typedef struct _ib_cc_tbl { + ib_net16_t ccti_limit; + ib_net16_t resv; + ib_cc_tbl_entry_t entry_list[IB_CC_TBL_ENTRY_LIST_MAX]; +-} PACK_SUFFIX ib_cc_tbl_t; +-#include ++} ib_cc_tbl_t; + /* + * FIELDS + * +@@ -12182,11 +12080,9 @@ typedef struct _ib_cc_tbl { + * + * SOURCE + */ +-#include + typedef struct _ib_time_stamp { + ib_net32_t value; +-} PACK_SUFFIX ib_time_stamp_t; +-#include ++} ib_time_stamp_t; + /* + * FIELDS + * +-- +2.20.1 + diff --git a/SOURCES/opensm.launch b/SOURCES/opensm.launch new file mode 100644 index 0000000..ba21a71 --- /dev/null +++ b/SOURCES/opensm.launch @@ -0,0 +1,44 @@ +#!/bin/bash +# +# Launch the necessary OpenSM daemons for systemd +# +# sysconfig: /etc/sysconfig/opensm +# config: /etc/rdma/opensm.conf +# + +shopt -s nullglob + +prog=/usr/sbin/opensm +[ -f /etc/sysconfig/opensm ] && . /etc/sysconfig/opensm + +[ -n "$PRIORITY" ] && prio="-p $PRIORITY" + +if [ -z "$GUIDS" ]; then + CONFIGS="" + CONFIG_CNT=0 + for conf in /etc/rdma/opensm.conf.[0-9]*; do + CONFIGS="$CONFIGS $conf" + let CONFIG_CNT++ + done +else + GUID_CNT=0 + for guid in $GUIDS; do + let GUID_CNT++ + done +fi +# Start opensm +if [ -n "$GUIDS" ]; then + SUBNET_COUNT=0 + for guid in $GUIDS; do + SUBNET_PREFIX=`printf "0xfe800000000000%02d" $SUBNET_COUNT` + (while true; do $prog $prio -g $guid --subnet_prefix $SUBNET_PREFIX; sleep 30; done) & + let SUBNET_COUNT++ + done +elif [ -n "$CONFIGS" ]; then + for config in $CONFIGS; do + (while true; do $prog $prio -F $config; sleep 30; done) & + done +else + (while true; do $prog $prio; sleep 30; done) & +fi +exit 0 diff --git a/SOURCES/opensm.logrotate b/SOURCES/opensm.logrotate new file mode 100644 index 0000000..e16e227 --- /dev/null +++ b/SOURCES/opensm.logrotate @@ -0,0 +1,7 @@ +/var/log/opensm.log { + missingok + notifempty + copytruncate + weekly + compress +} diff --git a/SOURCES/opensm.partitions b/SOURCES/opensm.partitions new file mode 100644 index 0000000..958afeb --- /dev/null +++ b/SOURCES/opensm.partitions @@ -0,0 +1,74 @@ +# For reference: +# IPv4 IANA reserved multicast addresses: +# http://www.iana.org/assignments/multicast-addresses/multicast-addresses.txt +# IPv6 IANA reserved multicast addresses: +# http://www.iana.org/assignments/ipv6-multicast-addresses/ipv6-multicast-addresses.xml +# +# mtu = +# 1 = 256 +# 2 = 512 +# 3 = 1024 +# 4 = 2048 +# 5 = 4096 +# +# rate = +# 2 = 2.5 GBit/s (SDR 1x) +# 3 = 10 GBit/s (SDR 4x/QDR 1x) +# 4 = 30 GBit/s (SDR 12x) +# 5 = 5 GBit/s (DDR 1x) +# 6 = 20 GBit/s (DDR 4x) +# 7 = 40 GBit/s (QDR 4x) +# 8 = 60 GBit/s (DDR 12x) +# 9 = 80 GBit/s (QDR 8x) +# 10 = 120 GBit/s (QDR 12x) +# If ExtendedLinkSpeeds are supported, then these rate values are valid too +# 11 = 14 GBit/s (FDR 1x) +# 12 = 56 GBit/s (FDR 4x) +# 13 = 112 GBit/s (FDR 8x) +# 14 = 168 GBit/s (FDR 12x) +# 15 = 25 GBit/s (EDR 1x) +# 16 = 100 GBit/s (EDR 4x) +# 17 = 200 GBit/s (EDR 8x) +# 18 = 300 GBit/s (EDR 12x) + +Default=0x7fff, rate=3, mtu=4, scope=2, defmember=full: + ALL, ALL_SWITCHES=full; +Default=0x7fff, ipoib, rate=3, mtu=4, scope=2: + mgid=ff12:401b::ffff:ffff # IPv4 Broadcast address + mgid=ff12:401b::1 # IPv4 All Hosts group + mgid=ff12:401b::2 # IPv4 All Routers group + mgid=ff12:401b::16 # IPv4 IGMP group + mgid=ff12:401b::fb # IPv4 mDNS group + mgid=ff12:401b::fc # IPv4 Multicast Link Local Name Resolution group + mgid=ff12:401b::101 # IPv4 NTP group + mgid=ff12:401b::202 # IPv4 Sun RPC + mgid=ff12:601b::1 # IPv6 All Hosts group + mgid=ff12:601b::2 # IPv6 All Routers group + mgid=ff12:601b::16 # IPv6 MLDv2-capable Routers group + mgid=ff12:601b::fb # IPv6 mDNS group + mgid=ff12:601b::101 # IPv6 NTP group + mgid=ff12:601b::202 # IPv6 Sun RPC group + mgid=ff12:601b::1:3 # IPv6 Multicast Link Local Name Resolution group + ALL=full, ALL_SWITCHES=full; + +# 40GBit, 4K MTU IPoIB example +#ib0_2=0x0002, rate=7, mtu=5, scope=2, defmember=full: +# ALL, ALL_SWITCHES=full; +#ib0_2=0x0002, ipoib, rate=7, mtu=5, scope=2: +# mgid=ff12:401b::ffff:ffff # IPv4 Broadcast address +# mgid=ff12:401b::1 # IPv4 All Hosts group +# mgid=ff12:401b::2 # IPv4 All Routers group +# mgid=ff12:401b::16 # IPv4 IGMP group +# mgid=ff12:401b::fb # IPv4 mDNS group +# mgid=ff12:401b::fc # IPv4 Multicast Link Local Name Resolution group +# mgid=ff12:401b::101 # IPv4 NTP group +# mgid=ff12:401b::202 # IPv4 Sun RPC +# mgid=ff12:601b::1 # IPv6 All Hosts group +# mgid=ff12:601b::2 # IPv6 All Routers group +# mgid=ff12:601b::16 # IPv6 MLDv2-capable Routers group +# mgid=ff12:601b::fb # IPv6 mDNS group +# mgid=ff12:601b::101 # IPv6 NTP group +# mgid=ff12:601b::202 # IPv6 Sun RPC group +# mgid=ff12:601b::1:3 # IPv6 Multicast Link Local Name Resolution group +# ALL=full, ALL_SWITCHES=full; + diff --git a/SOURCES/opensm.rwtab b/SOURCES/opensm.rwtab new file mode 100644 index 0000000..c298bac --- /dev/null +++ b/SOURCES/opensm.rwtab @@ -0,0 +1 @@ +empty /var/cache/opensm diff --git a/SOURCES/opensm.service b/SOURCES/opensm.service new file mode 100644 index 0000000..6264b4d --- /dev/null +++ b/SOURCES/opensm.service @@ -0,0 +1,14 @@ +[Unit] +Description=Starts the OpenSM InfiniBand fabric Subnet Manager +Documentation=man:opensm +DefaultDependencies=false +Before=network.target remote-fs-pre.target +Requires=rdma.service +After=rdma.service + +[Service] +Type=forking +ExecStart=/usr/libexec/opensm-launch + +[Install] +WantedBy=network.target diff --git a/SOURCES/opensm.sysconfig b/SOURCES/opensm.sysconfig new file mode 100644 index 0000000..5f21efa --- /dev/null +++ b/SOURCES/opensm.sysconfig @@ -0,0 +1,72 @@ +# Problem #1: Multiple IB fabrics needing a subnet manager +# +# In the event that a machine has more than one IB subnet attached, +# and that machine is an opensm server, by default, opensm will +# only attach to one port and will not manage the fabric on the +# other port. There are two ways to solve this problem: +# +# 1) Start opensm on multiple machines and configure it to manage +# different fabrics on each machine +# 2) Configure opensm to start multiple instances on a single +# machine +# +# Both solutions to this problem require non-standard configurations. +# In other words, you would normally have to modify /etc/rdma/opensm.conf +# and once you do that, the file will no longer be updated for new +# options when opensm is upgraded. In an effort to allow people to +# have more than one subnet managed by opensm without having to modify +# the system default opensm.conf file, we have enabled two methods +# for modifying the default opensm config items needed to enable +# multiple fabric management. +# +# Method #1: Create multiple opensm.conf files in non-standard locations +# Copy /etc/rdma/opensm.conf to /etc/rdma/opensm.conf. +# (do this once for each instance you want started) +# Edit each copy of the opensm.conf file to reflect the necessary changes +# for a multiple instance startup. If you need to manage more than +# one fabric, you will have to change the guid option in each file +# to specify the guid of the specific port you want opensm attached +# to. +# +# The advantage to method #1 is that, on the off chance you want to do +# really special custom things on different ports, like have different +# QoS settings depending on which port you are attached to, you have the +# freedom to edit any and all settings for each instance without those +# changes affecting other instances or being lost when opensm upgrades. +# +# Method #2: Specify multiple GUIDS variable entries in this file +# Uncomment the below GUIDS variable and enter each guid you need to attach +# to into the list. If using this method you need to enter each +# guid into the list as we won't attach to any default ports, only +# those specified in the list. +# +#GUIDS="0x0002c90300048ca1 0x0002c90300048ca2" +# +# The obvious advantage to method #2 is that it's simple and doesn't +# clutter up your file system, but it is far more limited in what you +# can do. If you enable method #2, then even if you create the files +# referenced in method #1, they will be ignored. +# +# Problem #2: Activating a backup subnet manager +# +# The default priority of opensm is set so that it wants to be the +# primary subnet manager. This is great when you are only running +# opensm on one server, but if you want to have a non-primary opensm +# instance for failover, then you have to manually edit the opensm.conf +# file like for problem #1. This carries with it all the problems +# listed above. If you wish to enable opensm as a non-primary manager, +# then you can uncomment the PRIORITY variable below and set it to +# some number between 0 and 15, where 15 is the highest priority and +# the primary manager, with 0 being the lowest backup server. This method +# will work with the GUIDS option above, and also with the multiple +# config files in method #1 above. However, only a single priority is +# supported here. If you wanted more than one priority (say this machine +# is the primary on the first fabric, and second on the second fabric, +# while the other opensm server is primary on the second fabric and +# second on the primary), then the only way to do that is to use method #1 +# above and individually edit the config files. If you edit the config +# files to set the priority and then also set the priority here, then +# this setting will override the config files and render that particular +# edit useless. +# +#PRIORITY=15 diff --git a/SPECS/opensm.spec b/SPECS/opensm.spec new file mode 100644 index 0000000..fb89d08 --- /dev/null +++ b/SPECS/opensm.spec @@ -0,0 +1,298 @@ +%global __remake_config 1 + +Name: opensm +Version: 3.3.22 +Release: 2%{?dist} +Summary: OpenIB InfiniBand Subnet Manager and management utilities +Group: System Environment/Daemons +License: GPLv2 or BSD +Url: https://github.com/linux-rdma/opensm + +Source0: https://github.com/linux-rdma/opensm/releases/download/%{version}/%{name}-%{version}.tar.gz +Source2: opensm.logrotate +Source4: opensm.sysconfig +Source5: opensm.service +Source6: opensm.launch +Source7: opensm.rwtab +Source8: opensm.partitions + +Patch1: 0001-osm_opensm.c-Fix-use-of-enum-as-NULL-pointer-in-osm_.patch +Patch2: 0003-osm_-port-ucast_ftree-.c-Remove-unused-static-functi.patch +Patch3: 0002-osm_ucast_ftree.c-Fix-clang-warning-about-empty-loop.patch +Patch4: 0008-ib_types-Drop-packed-attribute-where-unnecessary.patch + +BuildRequires: libibumad-devel, systemd, systemd-units +BuildRequires: bison, flex, byacc, gcc +%if %{__remake_config} +BuildRequires: libtool, autoconf, automake +%endif +Requires: %{name}-libs%{?_isa} = %{version}-%{release}, logrotate, rdma +Requires(post): systemd +Requires(preun): systemd +Requires(postun): systemd +# RDMA is not currently built on 32-bit ARM: #1484155 +ExcludeArch: s390 %{arm} + +%description +OpenSM is the OpenIB project's Subnet Manager for Infiniband networks. +The subnet manager is run as a system daemon on one of the machines in +the infiniband fabric to manage the fabric's routing state. This package +also contains various tools for diagnosing and testing Infiniband networks +that can be used from any machine and do not need to be run on a machine +running the opensm daemon. + +%package libs +Summary: Libraries used by opensm and included utilities +Group: System Environment/Libraries + +%description libs +Shared libraries for Infiniband user space access + +%package devel +Summary: Development files for the opensm-libs libraries +Group: Development/Libraries +Requires: %{name}-libs%{?_isa} = %{version}-%{release} + +%description devel +Development environment for the opensm libraries + +%package static +Summary: Static version of the opensm libraries +Group: Development/Libraries +Requires: %{name}-devel%{?_isa} = %{version}-%{release} +%description static +Static version of opensm libraries + +%prep +%setup -q +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 +%patch4 -p1 + +%build +%if %{__remake_config} +./autogen.sh +%endif +%configure --with-opensm-conf-sub-dir=rdma +make %{?_smp_mflags} +cd opensm +./opensm -c ../opensm-%{version}.conf + +%install +make install DESTDIR=%{buildroot} +# remove unpackaged files from the buildroot +rm -f %{buildroot}%{_libdir}/*.la +rm -fr %{buildroot}%{_sysconfdir}/init.d +install -D -m644 opensm-%{version}.conf %{buildroot}%{_sysconfdir}/rdma/opensm.conf +install -D -m644 %{SOURCE2} %{buildroot}%{_sysconfdir}/logrotate.d/opensm +install -D -m644 %{SOURCE4} %{buildroot}%{_sysconfdir}/sysconfig/opensm +install -D -m644 %{SOURCE5} %{buildroot}%{_unitdir}/opensm.service +install -D -m755 %{SOURCE6} %{buildroot}%{_libexecdir}/opensm-launch +install -D -m644 %{SOURCE7} %{buildroot}%{_sysconfdir}/rwtab.d/opensm +install -D -m644 %{SOURCE8} %{buildroot}%{_sysconfdir}/rdma/partitions.conf +mkdir -p ${RPM_BUILD_ROOT}/var/cache/opensm + +%post +%systemd_post opensm.service + +%preun +%systemd_preun opensm.service + +%postun +if [ -d /var/cache/opensm ]; then + rm -fr /var/cache/opensm +fi +%systemd_postun_with_restart opensm.service + +%post libs -p /sbin/ldconfig + +%postun libs -p /sbin/ldconfig + +%files +%dir /var/cache/opensm +%{_sbindir}/* +%{_mandir}/*/* +%{_unitdir}/* +%{_libexecdir}/* +%config(noreplace) %{_sysconfdir}/logrotate.d/opensm +%config(noreplace) %{_sysconfdir}/rdma/opensm.conf +%config(noreplace) %{_sysconfdir}/rdma/partitions.conf +%config(noreplace) %{_sysconfdir}/sysconfig/opensm +%{_sysconfdir}/rwtab.d/opensm +%doc AUTHORS ChangeLog INSTALL README NEWS +%license COPYING + +%files libs +%{_libdir}/lib*.so.* + +%files devel +%{_libdir}/lib*.so +%{_includedir}/infiniband + +%files static +%{_libdir}/lib*.a + +%changelog +* Thu May 30 2019 Honggang Li - 3.3.22-2 +- Onboard gating configuration +- Resolves: bz1682401 + +* Wed May 15 2019 Honggang Li - 3.3.22-1 +- Rebase to latest upstream release 3.3.22 +- Resolves: bz1708475 + +* Fri Jan 11 2019 Honggang Li - 3.3.21-2 +- Restore the 'subnet_prefix' option +- Resolves: bz1664575 + +* Mon Sep 24 2018 Honggang Li - 3.3.21-1 +- Rebase to latest upstream release 3.3.21 +- Resolves: bz1602645 + +* Thu Feb 08 2018 Fedora Release Engineering - 3.3.20-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Thu Feb 1 2018 Honggang Li - 3.3.20-7 +- Fix BuildRequires +- Fix preuninstall script +- Resolves: bz1540934 + +* Mon Aug 28 2017 Honggang Li - 3.3.20-6 +- Add support for s309x + +* Sat Aug 26 2017 Honggang Li - 3.3.20-5 +- Disable support for ARM32. +- Resolves: bz1484155 + +* Thu Aug 03 2017 Fedora Release Engineering - 3.3.20-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Thu Jul 27 2017 Fedora Release Engineering - 3.3.20-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Sat Feb 11 2017 Fedora Release Engineering - 3.3.20-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Fri Jun 10 2016 Honggang Li - 3.3.20-1 +- Update to latest upstream release +- Resolves: bz1344691 + +* Wed Mar 16 2016 Doug Ledford - 3.3.19-1 +- Update to latest upstream release +- Incorporate features from RHEL opensm +- Resolves: bz1124202 + +* Thu Feb 04 2016 Fedora Release Engineering - 3.3.17-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Thu Jun 18 2015 Fedora Release Engineering - 3.3.17-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Sun Aug 17 2014 Fedora Release Engineering - 3.3.17-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Sat Jun 07 2014 Fedora Release Engineering - 3.3.17-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Thu May 29 2014 Michael Schwendt - 3.3.17-2 +- Don't include manual page directories (#1089412). +- Use standard group Development/Libraries in library devel packages. +- Use %%?_isa in base package dependencies. + +* Mon Mar 17 2014 Peter Robinson 3.3.17-1 +- Update to 3.3.17 + +* Sat Aug 03 2013 Fedora Release Engineering - 3.3.15-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Mon Mar 25 2013 Doug Ledford - 3.3.15-6 +- Oops, forgot to remove the -B option to opensm when starting it + +* Mon Mar 25 2013 Doug Ledford - 3.3.15-5 +- Drop the old sysv init script +- Fix opensm-launch to restart opensm in a loop. This works around the + fact that systemd starts opensm so early that we very well might not have + sync on the link yet. Without the physical link being up, opensm exits + immediately. This way opensm will get restarted every 30 seconds until + sync is active on the link or until the opensm service is stopped. +- Always install the newly generated opensm-%%{version}.conf as opensm.conf +- Make the launch work properly in the event that no GUIDs are set and + there are no numbered config files + +* Thu Feb 14 2013 Fedora Release Engineering - 3.3.15-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Wed Dec 05 2012 Doug Ledford - 3.3.15-3 +- Fix startup on read only root +- Update default config file +- Resolves: bz817591 + +* Wed Dec 05 2012 Doug Ledford - 3.3.15-2 +- More tweaks to systemd setup (proper scriptlets now) +- More tweaks to old sysv init script support (fix Requires) + +* Tue Nov 27 2012 Doug Ledford - 3.3.15-1 +- Update to latest upstream release +- Update to systemd startup + +* Fri Jul 20 2012 Fedora Release Engineering - 3.3.13-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Tue Mar 13 2012 Doug Ledford - 3.3.13-2 +- Fix the config file comment in the opensm init script +- Resolves: bz802727 + +* Tue Feb 28 2012 Doug Ledford - 3.3.13-1 +- Update to latest upstream version +- Fix a minor issue in init scripts that would cause systemd to try and + start/stop things in the wrong order +- Add a patch to allow us to specify the subnet prefix on the command line + +* Tue Jan 03 2012 Doug Ledford - 3.3.12-1 +- Update to latest upstream version + +* Mon Aug 15 2011 Kalev Lember - 3.3.9-2 +- Rebuilt for rpm bug #728707 + +* Wed Jul 20 2011 Doug Ledford - 3.3.9-1 +- Update to latest upstream version +- Add /etc/sysconfig/opensm for use by opensm init script +- Enable the ability to start more than one instance of opensm for multiple + fabric support +- Enable the ability to start opensm with a priority other than default for + support of backup opensm instances + +* Tue Feb 08 2011 Fedora Release Engineering - 3.3.5-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Mon Mar 08 2010 Doug Ledford - 3.3.5-1 +- Update to latest upstream release. We need various defines in ib_types.h + for the latest ibutils package to build properly, and the latest ibutils + package is needed because we found licensing problems in the older + tarballs during review. + +* Mon Jan 11 2010 Doug Ledford - 3.3.3-2 +- ExcludeArch s390(x) as there's no hardware support there + +* Thu Dec 03 2009 Doug Ledford - 3.3.3-1 +- Update to latest upstream release +- Minor tweaks to init script for LSB compliance + +* Sat Jul 25 2009 Fedora Release Engineering - 3.3.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Mon Jul 20 2009 Doug Ledford - 3.3.2-1 +- Update to latest upstream version + +* Wed Apr 22 2009 Doug Ledford - 3.3.1-1 +- Update to latest upstream version + +* Fri Mar 06 2009 Caolán McNamara - 3.2.1-3 +- fix bare elifs to rebuild + +* Thu Feb 26 2009 Fedora Release Engineering - 3.2.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Sun Jun 08 2008 Doug Ledford - 3.2.1-1 +- Initial package for Fedora review process