diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0e7ac41 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/opensm-3.3.21.tar.gz diff --git a/.opensm.metadata b/.opensm.metadata new file mode 100644 index 0000000..886e1d4 --- /dev/null +++ b/.opensm.metadata @@ -0,0 +1 @@ +4e6bd48c8bb39edec50a078fbd3a1b606be42a47 SOURCES/opensm-3.3.21.tar.gz diff --git a/SOURCES/0001-Use-precision-specifier-for-scanf.patch b/SOURCES/0001-Use-precision-specifier-for-scanf.patch new file mode 100644 index 0000000..25d1ab8 --- /dev/null +++ b/SOURCES/0001-Use-precision-specifier-for-scanf.patch @@ -0,0 +1,44 @@ +From 2b9cf6fe72592379e4be1f2129c8031f0c2b5273 Mon Sep 17 00:00:00 2001 +From: Honggang Li +Date: Fri, 12 Oct 2018 19:54:56 +0800 +Subject: [PATCH] Use precision specifier for scanf + +If user input a string larger than the length of buffer, the stack memory +will be corrupted. + +Signed-off-by: Honggang Li +Signed-off-by: Hal Rosenstock +--- + opensm/main.c | 2 +- + osmtest/osmtest.c | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/opensm/main.c b/opensm/main.c +index 2d23fe2befef..8def799cea0f 100644 +--- a/opensm/main.c ++++ b/opensm/main.c +@@ -499,7 +499,7 @@ static ib_net64_t get_port_guid(IN osm_opensm_t * p_osm, uint64_t port_guid) + fflush(stdout); + if (scanf("%u", &choice) <= 0) { + char junk[128]; +- if (scanf("%s", junk) <= 0) ++ if (scanf("%127s", junk) <= 0) + printf("\nError: Cannot scan!\n"); + } else if (choice == 0) + return 0; +diff --git a/osmtest/osmtest.c b/osmtest/osmtest.c +index 281b247a2e69..fa2e0704b8cc 100644 +--- a/osmtest/osmtest.c ++++ b/osmtest/osmtest.c +@@ -7352,7 +7352,7 @@ osmtest_get_user_port(IN osmtest_t * const p_osmt, + fflush(stdout); + if (scanf("%u", &choice) <= 0) { + char junk[256]; +- if (scanf("%s", junk) <= 0) ++ if (scanf("%255s", junk) <= 0) + printf("\nError: Cannot scan!\n"); + } else if (choice && choice <= num_ports) + break; +-- +2.15.0-rc1 + diff --git a/SOURCES/0002-osm_helper.c-Fix-lsea_str_fixed_width-OVERRUN-issue.patch b/SOURCES/0002-osm_helper.c-Fix-lsea_str_fixed_width-OVERRUN-issue.patch new file mode 100644 index 0000000..edd26e1 --- /dev/null +++ b/SOURCES/0002-osm_helper.c-Fix-lsea_str_fixed_width-OVERRUN-issue.patch @@ -0,0 +1,42 @@ +From c6c7973478c07869b99478b44a6d49db6738b5f0 Mon Sep 17 00:00:00 2001 +From: Honggang Li +Date: Tue, 22 Jan 2019 16:02:54 +0800 +Subject: [PATCH 2/5] osm_helper.c: Fix lsea_str_fixed_width OVERRUN issue + +Issue was found by Coverity. + +When (lsea == IB_LINK_SPEED_EXT_ACTIVE_50 == 4), lsea_str_fixed_width[lsea] +will overrun array. + +Defect type: OVERRUN +4. opensm-3.3.21/opensm/osm_helper.c:3225: cond_at_least: Checking "lsea == 0" implies that "lsea" is at least 1 on the false branch. +6. opensm-3.3.21/opensm/osm_helper.c:3231: cond_between: Checking "lsea > 4" implies that "lsea" is between 1 and 4 (inclusive) on the false branch. +7. opensm-3.3.21/opensm/osm_helper.c:3233: overrun-local: Overrunning array "lsea_str_fixed_width" of 4 8-byte elements at element index 4 (byte offset 32) using index "lsea" (which evaluates to 4). +// 3231| if (lsea > IB_LINK_SPEED_EXT_ACTIVE_50) +// 3232| return lsa_str_fixed_width[3]; +// 3233|-> return lsea_str_fixed_width[lsea]; +// 3234| } +// 3235| + +Signed-off-by: Honggang Li +Signed-off-by: Hal Rosenstock +Signed-off-by: Honggang Li +--- + opensm/osm_helper.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/opensm/osm_helper.c b/opensm/osm_helper.c +index e62775822014..f1219b225703 100644 +--- a/opensm/osm_helper.c ++++ b/opensm/osm_helper.c +@@ -3214,6 +3214,7 @@ static const char *lsea_str_fixed_width[] = { + "Std ", + "14 ", + "25 ", ++ "????", + "50" + }; + +-- +2.15.0-rc1 + diff --git a/SOURCES/0003-osm_helper.c-Make-50-string-proper-fixed-width-in-ls.patch b/SOURCES/0003-osm_helper.c-Make-50-string-proper-fixed-width-in-ls.patch new file mode 100644 index 0000000..c5aa90a --- /dev/null +++ b/SOURCES/0003-osm_helper.c-Make-50-string-proper-fixed-width-in-ls.patch @@ -0,0 +1,28 @@ +From d1cbc9e5309c2009f0d73f4181cd8dde0505cd59 Mon Sep 17 00:00:00 2001 +From: Hal Rosenstock +Date: Tue, 22 Jan 2019 18:23:27 +0200 +Subject: [PATCH 3/5] osm_helper.c: Make "50" string proper fixed width in + lsea_str_fixed_width + +Signed-off-by: Hal Rosenstock +Signed-off-by: Honggang Li +--- + opensm/osm_helper.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/opensm/osm_helper.c b/opensm/osm_helper.c +index f1219b225703..9791172f212c 100644 +--- a/opensm/osm_helper.c ++++ b/opensm/osm_helper.c +@@ -3215,7 +3215,7 @@ static const char *lsea_str_fixed_width[] = { + "14 ", + "25 ", + "????", +- "50" ++ "50 " + }; + + const char *osm_get_lsa_str(IN uint8_t lsa, IN uint8_t lsea, IN uint8_t state, +-- +2.15.0-rc1 + diff --git a/SOURCES/0004-main.c-Remove-NO_EFFECT-code.patch b/SOURCES/0004-main.c-Remove-NO_EFFECT-code.patch new file mode 100644 index 0000000..b302716 --- /dev/null +++ b/SOURCES/0004-main.c-Remove-NO_EFFECT-code.patch @@ -0,0 +1,37 @@ +From bd289653605c39555cf8deb96b6093ec07b8b0dd Mon Sep 17 00:00:00 2001 +From: Honggang Li +Date: Tue, 22 Jan 2019 11:06:30 +0800 +Subject: [PATCH 4/5] main.c: Remove NO_EFFECT code + +Issue was found by Coverity. + +opensm-3.3.21/opensm/main.c:1165: unsigned_compare: This less-than-zero comparison of an unsigned value is never true. "temp < 0U". +// 1163| case 15: +// 1164| temp = strtoul(optarg, NULL, 0); +// 1165|-> if (temp < 0 || temp >= IB_MAX_NUM_VLS) { +// 1166| fprintf(stderr, +// 1167| "ERROR: maximum #VLs for nue routing must be between 0 + +Signed-off-by: Honggang Li +Signed-off-by: Hal Rosenstock +Signed-off-by: Honggang Li +--- + opensm/main.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/opensm/main.c b/opensm/main.c +index 56bf7d5c588a..9932cd667378 100644 +--- a/opensm/main.c ++++ b/opensm/main.c +@@ -1165,7 +1165,7 @@ int main(int argc, char *argv[]) + break; + case 15: + temp = strtoul(optarg, NULL, 0); +- if (temp < 0 || temp >= IB_MAX_NUM_VLS) { ++ if (temp >= IB_MAX_NUM_VLS) { + fprintf(stderr, + "ERROR: maximum #VLs for nue routing must be between 0 and %d\n", + IB_MAX_NUM_VLS); +-- +2.15.0-rc1 + diff --git a/SOURCES/0005-osm_-link_mgr-trap_rcv-.c-Check-the-return-value-of-.patch b/SOURCES/0005-osm_-link_mgr-trap_rcv-.c-Check-the-return-value-of-.patch new file mode 100644 index 0000000..777e724 --- /dev/null +++ b/SOURCES/0005-osm_-link_mgr-trap_rcv-.c-Check-the-return-value-of-.patch @@ -0,0 +1,111 @@ +From 1da99335fa1b1efd086e537682203ff65a09bed9 Mon Sep 17 00:00:00 2001 +From: Hal Rosenstock +Date: Tue, 22 Jan 2019 11:28:47 +0800 +Subject: [PATCH 5/5] osm_[link_mgr trap_rcv].c: Check the return value of + osm_get_port_by_guid + +Issue was found by Coverity. + +3. Defect type: NULL_RETURNS +8. opensm-3.3.21/opensm/osm_trap_rcv.c:254: returned_null: "osm_get_port_by_guid" returns null (checked 46 out of 49 times). +9. opensm-3.3.21/opensm/osm_trap_rcv.c:254: var_assigned: Assigning: "p_port" = null return value from "osm_get_port_by_guid". +10. opensm-3.3.21/opensm/osm_trap_rcv.c:256: dereference: Dereferencing a null pointer "p_port". +11. opensm-3.3.21/opensm/osm_congestion_control.c:678: example_assign: Example 1: Assigning: "p_port" = return value from "osm_get_port_by_guid(p_cc->subn, port_guid)". +12. opensm-3.3.21/opensm/osm_congestion_control.c:679: example_checked: Example 1 (cont.): "p_port" has its value checked in "p_port". +13. opensm-3.3.21/opensm/osm_drop_mgr.c:91: example_assign: Example 2: Assigning: "p_remote_port" = return value from "osm_get_port_by_guid(sm->p_subn, p_remote_physp->port_guid)". +14. opensm-3.3.21/opensm/osm_drop_mgr.c:94: example_checked: Example 2 (cont.): "p_remote_port" has its value checked in "p_remote_port". +15. opensm-3.3.21/opensm/osm_guid_info_rcv.c:105: example_assign: Example 3: Assigning: "p_port" = return value from "osm_get_port_by_guid(sm->p_subn, port_guid)". +16. opensm-3.3.21/opensm/osm_guid_info_rcv.c:106: example_checked: Example 3 (cont.): "p_port" has its value checked in "p_port". +17. opensm-3.3.21/opensm/osm_inform.c:434: example_assign: Example 4: Assigning: "p_src_port" = return value from "osm_get_port_by_guid(p_subn, source_gid.unicast.interface_id)". +18. opensm-3.3.21/opensm/osm_inform.c:436: example_checked: Example 4 (cont.): "p_src_port" has its value checked in "p_src_port". +19. opensm-3.3.21/opensm/osm_lid_mgr.c:1112: example_assign: Example 5: Assigning: "p_port" = return value from "osm_get_port_by_guid(p_mgr->p_subn, p_mgr->p_subn->sm_port_guid)". +20. opensm-3.3.21/opensm/osm_lid_mgr.c:1114: example_checked: Example 5 (cont.): "p_port" has its value checked in "p_port". +// 1112| p_port = osm_get_port_by_guid(p_mgr->p_subn, +// 1113| p_mgr->p_subn->sm_port_guid); +// 1114|-> if (!p_port) { +// 1115| OSM_LOG(p_mgr->p_log, OSM_LOG_ERROR, "ERR 0308: " +// 1116| "Can't acquire SM's port object, GUID 0x%016" PRIx64 + +4. Defect type: NULL_RETURNS +3. opensm-3.3.21/opensm/osm_link_mgr.c:126: returned_null: "osm_get_port_by_guid" returns null (checked 46 out of 49 times). +4. opensm-3.3.21/opensm/osm_link_mgr.c:126: var_assigned: Assigning: "p_port" = null return value from "osm_get_port_by_guid". +5. opensm-3.3.21/opensm/osm_link_mgr.c:128: dereference: Dereferencing a null pointer "p_port". +6. opensm-3.3.21/opensm/osm_congestion_control.c:678: example_assign: Example 1: Assigning: "p_port" = return value from "osm_get_port_by_guid(p_cc->subn, port_guid)". +7. opensm-3.3.21/opensm/osm_congestion_control.c:679: example_checked: Example 1 (cont.): "p_port" has its value checked in "p_port". +8. opensm-3.3.21/opensm/osm_drop_mgr.c:91: example_assign: Example 2: Assigning: "p_remote_port" = return value from "osm_get_port_by_guid(sm->p_subn, p_remote_physp->port_guid)". +9. opensm-3.3.21/opensm/osm_drop_mgr.c:94: example_checked: Example 2 (cont.): "p_remote_port" has its value checked in "p_remote_port". +10. opensm-3.3.21/opensm/osm_guid_info_rcv.c:105: example_assign: Example 3: Assigning: "p_port" = return value from "osm_get_port_by_guid(sm->p_subn, port_guid)". +11. opensm-3.3.21/opensm/osm_guid_info_rcv.c:106: example_checked: Example 3 (cont.): "p_port" has its value checked in "p_port". +12. opensm-3.3.21/opensm/osm_inform.c:434: example_assign: Example 4: Assigning: "p_src_port" = return value from "osm_get_port_by_guid(p_subn, source_gid.unicast.interface_id)". +13. opensm-3.3.21/opensm/osm_inform.c:436: example_checked: Example 4 (cont.): "p_src_port" has its value checked in "p_src_port". +14. opensm-3.3.21/opensm/osm_lid_mgr.c:1112: example_assign: Example 5: Assigning: "p_port" = return value from "osm_get_port_by_guid(p_mgr->p_subn, p_mgr->p_subn->sm_port_guid)". +15. opensm-3.3.21/opensm/osm_lid_mgr.c:1114: example_checked: Example 5 (cont.): "p_port" has its value checked in "p_port". +// 1112| p_port = osm_get_port_by_guid(p_mgr->p_subn, +// 1113| p_mgr->p_subn->sm_port_guid); +// 1114|-> if (!p_port) { +// 1115| OSM_LOG(p_mgr->p_log, OSM_LOG_ERROR, "ERR 0308: " +// 1116| "Can't acquire SM's port object, GUID 0x%016" PRIx64 + +Pointed-out-by: Honggang Li + +Signed-off-by: Hal Rosenstock +Signed-off-by: Honggang Li +--- + opensm/osm_link_mgr.c | 2 ++ + opensm/osm_trap_rcv.c | 13 ++++++++++++- + 2 files changed, 14 insertions(+), 1 deletion(-) + +diff --git a/opensm/osm_link_mgr.c b/opensm/osm_link_mgr.c +index 64ddaf7d1560..ca69375378a0 100644 +--- a/opensm/osm_link_mgr.c ++++ b/opensm/osm_link_mgr.c +@@ -112,6 +112,7 @@ static int link_mgr_set_physp_pi(osm_sm_t * sm, IN osm_physp_t * p_physp, + OSM_LOG_ENTER(sm->p_log); + + p_node = osm_physp_get_node_ptr(p_physp); ++ CL_ASSERT(p_node); + + p_old_pi = &p_physp->port_info; + +@@ -125,6 +126,7 @@ static int link_mgr_set_physp_pi(osm_sm_t * sm, IN osm_physp_t * p_physp, + if (!p_pi->base_lid) { + p_port = osm_get_port_by_guid(sm->p_subn, + osm_physp_get_port_guid(p_physp)); ++ CL_ASSERT(p_port); + p_pi->base_lid = p_port->lid; + sm->lid_mgr.dirty = TRUE; + send_set = TRUE; +diff --git a/opensm/osm_trap_rcv.c b/opensm/osm_trap_rcv.c +index 51a836981e8c..ba50d9f2fcdb 100644 +--- a/opensm/osm_trap_rcv.c ++++ b/opensm/osm_trap_rcv.c +@@ -253,7 +253,16 @@ static int disable_port(osm_sm_t *sm, osm_physp_t *p) + if (!pi->base_lid) { + p_port = osm_get_port_by_guid(sm->p_subn, + osm_physp_get_port_guid(p)); +- pi->base_lid = p_port->lid; ++ if (p_port) ++ pi->base_lid = p_port->lid; ++ else { ++ OSM_LOG(sm->p_log, OSM_LOG_ERROR, ++ "ERR 3804: Port 0x%" PRIx64 ++ " not found, port set failed\n", ++ cl_ntoh64(osm_physp_get_port_guid(p))); ++ status = IB_ERROR; ++ goto EXIT; ++ } + } + pi->master_sm_base_lid = sm->p_subn->sm_base_lid; + } +@@ -263,6 +272,8 @@ static int disable_port(osm_sm_t *sm, osm_physp_t *p) + cl_hton32(osm_physp_get_port_num(p)), + FALSE, m_key, + 0, CL_DISP_MSGID_NONE, &context); ++ ++EXIT: + return status; + } + +-- +2.15.0-rc1 + diff --git a/SOURCES/opensm-3.3.13-prefix.patch b/SOURCES/opensm-3.3.13-prefix.patch new file mode 100644 index 0000000..2446f1c --- /dev/null +++ b/SOURCES/opensm-3.3.13-prefix.patch @@ -0,0 +1,60 @@ +diff --git a/man/opensm.8.in b/man/opensm.8.in +index df55768..79e1bfb 100644 +--- a/man/opensm.8.in ++++ b/man/opensm.8.in +@@ -11,6 +11,7 @@ opensm \- InfiniBand subnet manager and administration (SM/SA) + [\-g(uid) ] + [\-l(mc) ] + [\-p(riority) ] ++[\-\-subnet_prefix ] + [\-\-smkey ] + [\-\-sm_sl ] + [\-r(eassign_lids)] +@@ -136,6 +137,13 @@ This will effect the handover cases, where master + is chosen by priority and GUID. Range goes from 0 + (default and lowest priority) to 15 (highest). + .TP ++\fB\-\-subnet_prefix\fR ++This option specifies the subnet prefix to use in ++on the fabric. The default prefix is ++0xfe80000000000000. OpenMPI in particular requires ++separate fabrics plugged into different ports to ++have different prefixes or else it won't run. ++.TP + \fB\-\-smkey\fR + This option specifies the SM\'s SM_Key (64 bits). + This will effect SM authentication. +diff --git a/opensm/main.c b/opensm/main.c +index 2d23fe2..b4bb348 100644 +--- a/opensm/main.c ++++ b/opensm/main.c +@@ -161,6 +161,9 @@ static void show_usage(void) + " This will effect the handover cases, where master\n" + " is chosen by priority and GUID. Range goes\n" + " from 0 (lowest priority) to 15 (highest).\n\n"); ++ printf("--subnet_prefix \n" ++ " Set the subnet prefix to something other than the\n" ++ " default value of 0xfe80000000000000\n\n"); + printf("--smkey, -k \n" + " This option specifies the SM's SM_Key (64 bits).\n" + " This will effect SM authentication.\n" +@@ -665,6 +668,7 @@ int main(int argc, char *argv[]) + {"once", 0, NULL, 'o'}, + {"reassign_lids", 0, NULL, 'r'}, + {"priority", 1, NULL, 'p'}, ++ {"subnet_prefix", 1, NULL, 15}, + {"smkey", 1, NULL, 'k'}, + {"routing_engine", 1, NULL, 'R'}, + {"ucast_cache", 0, NULL, 'A'}, +@@ -1008,6 +1012,11 @@ int main(int argc, char *argv[]) + printf(" Priority = %d\n", temp); + break; + ++ case 16: ++ opt.subnet_prefix = cl_hton64(strtoull(optarg, NULL, 16)); ++ printf(" Subnet_Prefix = <0x%" PRIx64 ">\n", cl_hton64(opt.subnet_prefix)); ++ break; ++ + case 'k': + sm_key = cl_hton64(strtoull(optarg, NULL, 16)); + printf(" SM Key <0x%" PRIx64 ">\n", cl_hton64(sm_key)); 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.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..64f2fb4 --- /dev/null +++ b/SPECS/opensm.spec @@ -0,0 +1,256 @@ +%define _hardened_build 1 +%global __remake_config 1 + +Name: opensm +Version: 3.3.21 +Release: 2%{?dist} +Summary: OpenIB InfiniBand Subnet Manager and management utilities +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 +Patch0: opensm-3.3.13-prefix.patch +Patch1: 0001-Use-precision-specifier-for-scanf.patch +Patch2: 0002-osm_helper.c-Fix-lsea_str_fixed_width-OVERRUN-issue.patch +Patch3: 0003-osm_helper.c-Make-50-string-proper-fixed-width-in-ls.patch +Patch4: 0004-main.c-Remove-NO_EFFECT-code.patch +Patch5: 0005-osm_-link_mgr-trap_rcv-.c-Check-the-return-value-of-.patch +BuildRequires: libibumad-devel, libtool, bison, flex, byacc, systemd, 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 + +%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 + +%description libs +Shared libraries for Infiniband user space access + +%package devel +Summary: Development files for the opensm-libs libraries +Requires: %{name}-libs%{?_isa} = %{version}-%{release} + +%description devel +Development environment for the opensm libraries + +%package static +Summary: Static version of the opensm libraries +Requires: %{name}-devel%{?_isa} = %{version}-%{release} +%description static +Static version of opensm libraries + +%prep +%setup -q +%patch0 -p1 +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 +%patch4 -p1 +%patch5 -p1 + +%build +%if %{__remake_config} +./autogen.sh +%endif +%configure --with-opensm-conf-sub-dir=rdma CFLAGS="$CFLAGS -fno-strict-aliasing" +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 +mkdir -p ${RPM_BUILD_ROOT}/var/cache/opensm +install -m 755 scripts/sldd.sh %{buildroot}%{_sbindir}/sldd.sh + +%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}/sysconfig/opensm +%{_sysconfdir}/rwtab.d/opensm +%doc AUTHORS ChangeLog INSTALL README NEWS doc/performance-manager-HOWTO.txt doc/QoS_management_in_OpenSM.txt doc/partition-config.txt doc/opensm-sriov.txt doc/current-routing.txt doc/opensm_release_notes-3.3.txt +%license COPYING + +%files libs +%{_libdir}/lib*.so.* + +%files devel +%{_libdir}/lib*.so +%{_includedir}/infiniband + +%files static +%{_libdir}/lib*.a + +%changelog +* Wed Feb 13 2019 Honggang Li - 3.3.21-2 +- Fix a few defects +- Resolves: bz1668201 + +* Mon Jan 21 2019 Honggang Li - 3.3.21-1 +- Rebase to latest upstream release 3.3.21 +- Resolves: bz1535978, bz1653660 + +* Tue Jun 19 2018 Honggang Li - 3.3.20-3 +- Fix BuildRequires +- Resolves: bz1567528 + +* Wed Nov 1 2017 Honggang Li - 3.3.20-2 +- Fix up preuninstall script +- Resolves: bz1508334 + +* Mon Oct 16 2017 Honggang Li - 3.3.20-1 +- Cleanup the spec file +- Rebase to latest upstream release 3.3.20 +- Resolves: bz1456524 + +* Fri Jun 05 2015 Doug Ledford - 3.3.19-1 +- Update to latest upstream release +- Build on s390 +- Related: bz1186159 + +* Fri Oct 17 2014 Doug Ledford - 3.3.18-2 +- Fix an issue found by rpmdiff +- Related: bz1061587 + +* Thu Oct 09 2014 Doug Ledford - 3.3.18-1 +- Update to latest upstream release +- Resolves: bz1061587, bz1042745, bz884555, bz948475 + +* Fri Dec 27 2013 Daniel Mach - 3.3.15-7 +- Mass rebuild 2013-12-27 + +* 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