From 903d428e570b3746aaf279112b574af6ddb0125a Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Feb 02 2021 09:31:11 +0000 Subject: import opensm-3.3.21-4.el7_9 --- diff --git a/SOURCES/0001-osm_sa_mcmember_record.c-Allow-MCMR-requests-with-de.patch b/SOURCES/0001-osm_sa_mcmember_record.c-Allow-MCMR-requests-with-de.patch new file mode 100644 index 0000000..b511df6 --- /dev/null +++ b/SOURCES/0001-osm_sa_mcmember_record.c-Allow-MCMR-requests-with-de.patch @@ -0,0 +1,110 @@ +From 0a8d9392b649a6797060f653bae9b5e5648a87d3 Mon Sep 17 00:00:00 2001 +From: Daniel Klein +Date: Sun, 18 Oct 2020 14:39:25 +0300 +Subject: [PATCH] osm_sa_mcmember_record.c: Allow MCMR requests with default + subnet prefix + +Allow handling MCMR join/leave requests where PortGID is with the +default subnet prefix and OpenSM is configured to use non-default subnet +prefix. + +Signed-off-by: Daniel Klein +--- + opensm/osm_sa_mcmember_record.c | 31 +++++++++++++++++++++++++++---- + 1 file changed, 27 insertions(+), 4 deletions(-) + +diff --git a/opensm/osm_sa_mcmember_record.c b/opensm/osm_sa_mcmember_record.c +index 3a75a97545af..b334ea0a2f55 100644 +--- a/opensm/osm_sa_mcmember_record.c ++++ b/opensm/osm_sa_mcmember_record.c +@@ -974,6 +974,7 @@ static void mcmr_rcv_leave_mgrp(IN osm_sa_t * sa, IN osm_madw_t * p_madw) + ib_member_rec_t *p_recvd_mcmember_rec; + ib_member_rec_t mcmember_rec; + osm_mcm_alias_guid_t *p_mcm_alias_guid; ++ ib_net64_t prefix; + + OSM_LOG_ENTER(sa->p_log); + +@@ -981,6 +982,16 @@ static void mcmr_rcv_leave_mgrp(IN osm_sa_t * sa, IN osm_madw_t * p_madw) + p_recvd_mcmember_rec = + (ib_member_rec_t *) ib_sa_mad_get_payload_ptr(p_sa_mad); + ++ if (OSM_LOG_IS_ACTIVE_V2(sa->p_log, OSM_LOG_DEBUG)) { ++ OSM_LOG(sa->p_log, OSM_LOG_DEBUG, "Dump of record\n"); ++ osm_dump_mc_record_v2(sa->p_log, p_recvd_mcmember_rec, FILE_ID, OSM_LOG_DEBUG); ++ } ++ ++ /* Use ports actual subnet prefix */ ++ prefix = p_recvd_mcmember_rec->port_gid.unicast.prefix; ++ if (prefix == IB_DEFAULT_SUBNET_PREFIX) ++ p_recvd_mcmember_rec->port_gid.unicast.prefix = sa->p_subn->opt.subnet_prefix; ++ + mcmember_rec = *p_recvd_mcmember_rec; + + /* Validate the subnet prefix in the PortGID */ +@@ -1010,8 +1021,6 @@ static void mcmr_rcv_leave_mgrp(IN osm_sa_t * sa, IN osm_madw_t * p_madw) + "Requester port GUID 0x%" PRIx64 "\n", + cl_ntoh64(osm_physp_get_port_guid(p_req_physp))); + } +- OSM_LOG(sa->p_log, OSM_LOG_DEBUG, "Dump of record\n"); +- osm_dump_mc_record_v2(sa->p_log, &mcmember_rec, FILE_ID, OSM_LOG_DEBUG); + } + + p_mgrp = osm_get_mgrp_by_mgid(sa->p_subn, &p_recvd_mcmember_rec->mgid); +@@ -1048,6 +1057,8 @@ static void mcmr_rcv_leave_mgrp(IN osm_sa_t * sa, IN osm_madw_t * p_madw) + &mcmember_rec); + CL_PLOCK_RELEASE(sa->p_lock); + ++ /* Return response with same subnet prefix of the request */ ++ mcmember_rec.port_gid.unicast.prefix = prefix; + mcmr_rcv_respond(sa, p_madw, &mcmember_rec); + + Exit: +@@ -1156,14 +1167,25 @@ static void mcmr_rcv_join_mgrp(IN osm_sa_t * sa, IN osm_madw_t * p_madw) + uint8_t is_new_group; /* TRUE = there is a need to create a group */ + uint8_t join_state; + boolean_t proxy; ++ ib_net64_t prefix; + + OSM_LOG_ENTER(sa->p_log); + + p_sa_mad = osm_madw_get_sa_mad_ptr(p_madw); + p_recvd_mcmember_rec = ib_sa_mad_get_payload_ptr(p_sa_mad); + ++ if (OSM_LOG_IS_ACTIVE_V2(sa->p_log, OSM_LOG_DEBUG)) { ++ OSM_LOG(sa->p_log, OSM_LOG_DEBUG, "Dump of incoming record\n"); ++ osm_dump_mc_record_v2(sa->p_log, p_recvd_mcmember_rec, FILE_ID, OSM_LOG_DEBUG); ++ } ++ + portguid = p_recvd_mcmember_rec->port_gid.unicast.interface_id; + ++ /* Use ports actual subnet prefix */ ++ prefix = p_recvd_mcmember_rec->port_gid.unicast.prefix; ++ if (prefix == IB_DEFAULT_SUBNET_PREFIX) ++ p_recvd_mcmember_rec->port_gid.unicast.prefix = sa->p_subn->opt.subnet_prefix; ++ + mcmember_rec = *p_recvd_mcmember_rec; + + /* Validate the subnet prefix in the PortGID */ +@@ -1193,8 +1215,6 @@ static void mcmr_rcv_join_mgrp(IN osm_sa_t * sa, IN osm_madw_t * p_madw) + "Requester port GUID 0x%" PRIx64 "\n", + cl_ntoh64(osm_physp_get_port_guid(p_req_physp))); + } +- OSM_LOG(sa->p_log, OSM_LOG_DEBUG, "Dump of incoming record\n"); +- osm_dump_mc_record_v2(sa->p_log, &mcmember_rec, FILE_ID, OSM_LOG_DEBUG); + } + + /* make sure the requested port guid is known to the SM */ +@@ -1422,6 +1442,9 @@ static void mcmr_rcv_join_mgrp(IN osm_sa_t * sa, IN osm_madw_t * p_madw) + /* Release the lock as we don't need it. */ + CL_PLOCK_RELEASE(sa->p_lock); + ++ /* Return response with same subnet prefix of the request */ ++ mcmember_rec.port_gid.unicast.prefix = prefix; ++ + if (OSM_LOG_IS_ACTIVE_V2(sa->p_log, OSM_LOG_DEBUG)) + osm_dump_mc_record_v2(sa->p_log, &mcmember_rec, FILE_ID, OSM_LOG_DEBUG); + +-- +2.25.4 + diff --git a/SPECS/opensm.spec b/SPECS/opensm.spec index 958f4c4..3ab6ed2 100644 --- a/SPECS/opensm.spec +++ b/SPECS/opensm.spec @@ -3,7 +3,7 @@ Name: opensm Version: 3.3.21 -Release: 3%{?dist} +Release: 4%{?dist} Summary: OpenIB InfiniBand Subnet Manager and management utilities License: GPLv2 or BSD Url: https://github.com/linux-rdma/opensm @@ -19,6 +19,7 @@ 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 +Patch6: 0001-osm_sa_mcmember_record.c-Allow-MCMR-requests-with-de.patch BuildRequires: libibumad-devel, libtool, bison, flex, byacc, systemd, gcc %if %{__remake_config} BuildRequires: libtool, autoconf, automake @@ -63,6 +64,7 @@ Static version of opensm libraries %patch3 -p1 %patch4 -p1 %patch5 -p1 +%patch6 -p1 %build %if %{__remake_config} @@ -127,6 +129,10 @@ fi %{_libdir}/lib*.a %changelog +* Tue Dec 08 2020 Honggang Li - 3.3.21-4 +- Allow MCMR requests with default subnet prefix +- Resolves: bz1898273 + * Tue Apr 28 2020 Honggang Li - 3.3.21-3 - Fix subnet_prefix issue - Resolves: bz1828452