[OPENSM] update opensm from the OFED linux trunk.
authorsleybo <sleybo@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Thu, 25 Jan 2007 12:58:44 +0000 (12:58 +0000)
committersleybo <sleybo@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Thu, 25 Jan 2007 12:58:44 +0000 (12:58 +0000)
include many changes and new files.

git-svn-id: svn://openib.tc.cornell.edu/gen1/trunk@571 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86

261 files changed:
ulp/opensm/user/README.opensm-build [new file with mode: 0644]
ulp/opensm/user/TODO [new file with mode: 0644]
ulp/opensm/user/config.h [new file with mode: 0644]
ulp/opensm/user/doc/OpenSM_PKey_Mgr.txt [new file with mode: 0644]
ulp/opensm/user/doc/OpenSM_RN_0_3_1.pdf [new file with mode: 0644]
ulp/opensm/user/doc/OpenSM_UM_0_3.pdf [new file with mode: 0644]
ulp/opensm/user/doc/current-routing.txt [new file with mode: 0644]
ulp/opensm/user/doc/modular-routing.txt [new file with mode: 0644]
ulp/opensm/user/doc/opensm_release_notes_openib-2.0.5.txt [new file with mode: 0644]
ulp/opensm/user/doc/qos-config.txt [new file with mode: 0644]
ulp/opensm/user/include/complib/cl_dispatcher.h [new file with mode: 0644]
ulp/opensm/user/include/complib/cl_event_wheel.h [new file with mode: 0644]
ulp/opensm/user/include/iba/ib_types.h
ulp/opensm/user/include/iba/ib_types_extended.h
ulp/opensm/user/include/opensm/osm_attrib_req.h
ulp/opensm/user/include/opensm/osm_base.h
ulp/opensm/user/include/opensm/osm_console.h
ulp/opensm/user/include/opensm/osm_db.h
ulp/opensm/user/include/opensm/osm_db_pack.h
ulp/opensm/user/include/opensm/osm_drop_mgr.h
ulp/opensm/user/include/opensm/osm_errors.h
ulp/opensm/user/include/opensm/osm_fwd_tbl.h
ulp/opensm/user/include/opensm/osm_helper.h
ulp/opensm/user/include/opensm/osm_inform.h
ulp/opensm/user/include/opensm/osm_lid_mgr.h
ulp/opensm/user/include/opensm/osm_lin_fwd_rcv.h
ulp/opensm/user/include/opensm/osm_lin_fwd_rcv_ctrl.h
ulp/opensm/user/include/opensm/osm_lin_fwd_tbl.h
ulp/opensm/user/include/opensm/osm_link_mgr.h
ulp/opensm/user/include/opensm/osm_log.h
ulp/opensm/user/include/opensm/osm_mad_pool.h
ulp/opensm/user/include/opensm/osm_madw.h
ulp/opensm/user/include/opensm/osm_matrix.h
ulp/opensm/user/include/opensm/osm_mcast_fwd_rcv.h
ulp/opensm/user/include/opensm/osm_mcast_fwd_rcv_ctrl.h
ulp/opensm/user/include/opensm/osm_mcast_mgr.h
ulp/opensm/user/include/opensm/osm_mcast_tbl.h
ulp/opensm/user/include/opensm/osm_mcm_info.h
ulp/opensm/user/include/opensm/osm_mcm_port.h
ulp/opensm/user/include/opensm/osm_msgdef.h
ulp/opensm/user/include/opensm/osm_mtl_bind.h
ulp/opensm/user/include/opensm/osm_mtree.h
ulp/opensm/user/include/opensm/osm_multicast.h
ulp/opensm/user/include/opensm/osm_node.h
ulp/opensm/user/include/opensm/osm_node_desc_rcv.h
ulp/opensm/user/include/opensm/osm_node_desc_rcv_ctrl.h
ulp/opensm/user/include/opensm/osm_node_info_rcv.h
ulp/opensm/user/include/opensm/osm_node_info_rcv_ctrl.h
ulp/opensm/user/include/opensm/osm_opensm.h
ulp/opensm/user/include/opensm/osm_partition.h
ulp/opensm/user/include/opensm/osm_path.h
ulp/opensm/user/include/opensm/osm_pkey.h
ulp/opensm/user/include/opensm/osm_pkey_mgr.h
ulp/opensm/user/include/opensm/osm_pkey_rcv.h
ulp/opensm/user/include/opensm/osm_pkey_rcv_ctrl.h
ulp/opensm/user/include/opensm/osm_port.h
ulp/opensm/user/include/opensm/osm_port_info_rcv.h
ulp/opensm/user/include/opensm/osm_port_info_rcv_ctrl.h
ulp/opensm/user/include/opensm/osm_port_profile.h
ulp/opensm/user/include/opensm/osm_rand_fwd_tbl.h
ulp/opensm/user/include/opensm/osm_remote_sm.h
ulp/opensm/user/include/opensm/osm_req.h
ulp/opensm/user/include/opensm/osm_req_ctrl.h
ulp/opensm/user/include/opensm/osm_resp.h
ulp/opensm/user/include/opensm/osm_router.h [new file with mode: 0644]
ulp/opensm/user/include/opensm/osm_sa.h
ulp/opensm/user/include/opensm/osm_sa_class_port_info.h
ulp/opensm/user/include/opensm/osm_sa_class_port_info_ctrl.h
ulp/opensm/user/include/opensm/osm_sa_guidinfo_record.h
ulp/opensm/user/include/opensm/osm_sa_guidinfo_record_ctrl.h
ulp/opensm/user/include/opensm/osm_sa_informinfo.h
ulp/opensm/user/include/opensm/osm_sa_informinfo_ctrl.h
ulp/opensm/user/include/opensm/osm_sa_lft_record.h
ulp/opensm/user/include/opensm/osm_sa_lft_record_ctrl.h
ulp/opensm/user/include/opensm/osm_sa_link_record.h
ulp/opensm/user/include/opensm/osm_sa_link_record_ctrl.h
ulp/opensm/user/include/opensm/osm_sa_mad_ctrl.h
ulp/opensm/user/include/opensm/osm_sa_mcmember_record.h
ulp/opensm/user/include/opensm/osm_sa_mcmember_record_ctrl.h
ulp/opensm/user/include/opensm/osm_sa_multipath_record.h [new file with mode: 0644]
ulp/opensm/user/include/opensm/osm_sa_multipath_record_ctrl.h [new file with mode: 0644]
ulp/opensm/user/include/opensm/osm_sa_node_record.h
ulp/opensm/user/include/opensm/osm_sa_node_record_ctrl.h
ulp/opensm/user/include/opensm/osm_sa_path_record.h
ulp/opensm/user/include/opensm/osm_sa_path_record_ctrl.h
ulp/opensm/user/include/opensm/osm_sa_pkey_record.h
ulp/opensm/user/include/opensm/osm_sa_pkey_record_ctrl.h
ulp/opensm/user/include/opensm/osm_sa_portinfo_record.h
ulp/opensm/user/include/opensm/osm_sa_portinfo_record_ctrl.h
ulp/opensm/user/include/opensm/osm_sa_response.h
ulp/opensm/user/include/opensm/osm_sa_service_record.h
ulp/opensm/user/include/opensm/osm_sa_service_record_ctrl.h
ulp/opensm/user/include/opensm/osm_sa_slvl_record.h
ulp/opensm/user/include/opensm/osm_sa_slvl_record_ctrl.h
ulp/opensm/user/include/opensm/osm_sa_sminfo_record.h
ulp/opensm/user/include/opensm/osm_sa_sminfo_record_ctrl.h
ulp/opensm/user/include/opensm/osm_sa_sw_info_record.h [new file with mode: 0644]
ulp/opensm/user/include/opensm/osm_sa_sw_info_record_ctrl.h [new file with mode: 0644]
ulp/opensm/user/include/opensm/osm_sa_vlarb_record.h
ulp/opensm/user/include/opensm/osm_sa_vlarb_record_ctrl.h
ulp/opensm/user/include/opensm/osm_service.h
ulp/opensm/user/include/opensm/osm_slvl_map_rcv.h
ulp/opensm/user/include/opensm/osm_slvl_map_rcv_ctrl.h
ulp/opensm/user/include/opensm/osm_sm.h
ulp/opensm/user/include/opensm/osm_sm_mad_ctrl.h
ulp/opensm/user/include/opensm/osm_sm_state_mgr.h
ulp/opensm/user/include/opensm/osm_sminfo_rcv.h
ulp/opensm/user/include/opensm/osm_sminfo_rcv_ctrl.h
ulp/opensm/user/include/opensm/osm_state_mgr.h
ulp/opensm/user/include/opensm/osm_state_mgr_ctrl.h
ulp/opensm/user/include/opensm/osm_stats.h
ulp/opensm/user/include/opensm/osm_subnet.h
ulp/opensm/user/include/opensm/osm_sw_info_rcv.h
ulp/opensm/user/include/opensm/osm_sw_info_rcv_ctrl.h
ulp/opensm/user/include/opensm/osm_sweep_fail_ctrl.h
ulp/opensm/user/include/opensm/osm_switch.h
ulp/opensm/user/include/opensm/osm_trap_rcv.h
ulp/opensm/user/include/opensm/osm_trap_rcv_ctrl.h
ulp/opensm/user/include/opensm/osm_ts_useraccess.h
ulp/opensm/user/include/opensm/osm_ucast_mgr.h
ulp/opensm/user/include/opensm/osm_umadt.h
ulp/opensm/user/include/opensm/osm_version.h
ulp/opensm/user/include/opensm/osm_vl15intf.h
ulp/opensm/user/include/opensm/osm_vl_arb_rcv.h
ulp/opensm/user/include/opensm/osm_vl_arb_rcv_ctrl.h
ulp/opensm/user/include/opensm/st.h
ulp/opensm/user/include/unistd.h [new file with mode: 0644]
ulp/opensm/user/include/vendor/osm_vendor.h
ulp/opensm/user/include/vendor/osm_vendor_al.h
ulp/opensm/user/include/vendor/osm_vendor_api.h
ulp/opensm/user/include/vendor/osm_vendor_sa_api.h
ulp/opensm/user/include/vendor/osm_vendor_select.h
ulp/opensm/user/libopensm/SOURCES
ulp/opensm/user/libopensm/osm_helper.c
ulp/opensm/user/libopensm/osm_log.c
ulp/opensm/user/libopensm/osm_mad_pool.c
ulp/opensm/user/libvendor/SOURCES
ulp/opensm/user/libvendor/osm_vendor_al.c
ulp/opensm/user/libvendor/osm_vendor_mlx_sa.c
ulp/opensm/user/opensm/SOURCES
ulp/opensm/user/opensm/cl_dispatcher.c
ulp/opensm/user/opensm/cl_event_wheel.c
ulp/opensm/user/opensm/main.c
ulp/opensm/user/opensm/osm.h [new file with mode: 0644]
ulp/opensm/user/opensm/osm.rc [new file with mode: 0644]
ulp/opensm/user/opensm/osm_console.c
ulp/opensm/user/opensm/osm_db_files.c
ulp/opensm/user/opensm/osm_db_pack.c
ulp/opensm/user/opensm/osm_drop_mgr.c
ulp/opensm/user/opensm/osm_fwd_tbl.c
ulp/opensm/user/opensm/osm_inform.c
ulp/opensm/user/opensm/osm_lid_mgr.c
ulp/opensm/user/opensm/osm_lin_fwd_rcv.c
ulp/opensm/user/opensm/osm_lin_fwd_rcv_ctrl.c
ulp/opensm/user/opensm/osm_lin_fwd_tbl.c
ulp/opensm/user/opensm/osm_link_mgr.c
ulp/opensm/user/opensm/osm_matrix.c
ulp/opensm/user/opensm/osm_mcast_fwd_rcv.c
ulp/opensm/user/opensm/osm_mcast_fwd_rcv_ctrl.c
ulp/opensm/user/opensm/osm_mcast_mgr.c
ulp/opensm/user/opensm/osm_mcast_tbl.c
ulp/opensm/user/opensm/osm_mcm_info.c
ulp/opensm/user/opensm/osm_mcm_port.c
ulp/opensm/user/opensm/osm_mtree.c
ulp/opensm/user/opensm/osm_multicast.c
ulp/opensm/user/opensm/osm_node.c
ulp/opensm/user/opensm/osm_node_desc_rcv.c
ulp/opensm/user/opensm/osm_node_desc_rcv_ctrl.c
ulp/opensm/user/opensm/osm_node_info_rcv.c
ulp/opensm/user/opensm/osm_node_info_rcv_ctrl.c
ulp/opensm/user/opensm/osm_opensm.c
ulp/opensm/user/opensm/osm_pkey.c
ulp/opensm/user/opensm/osm_pkey_mgr.c
ulp/opensm/user/opensm/osm_pkey_rcv.c
ulp/opensm/user/opensm/osm_pkey_rcv_ctrl.c
ulp/opensm/user/opensm/osm_port.c
ulp/opensm/user/opensm/osm_port_info_rcv.c
ulp/opensm/user/opensm/osm_port_info_rcv_ctrl.c
ulp/opensm/user/opensm/osm_prtn.c [new file with mode: 0644]
ulp/opensm/user/opensm/osm_prtn_config.c [new file with mode: 0644]
ulp/opensm/user/opensm/osm_qos.c [new file with mode: 0644]
ulp/opensm/user/opensm/osm_remote_sm.c
ulp/opensm/user/opensm/osm_req.c
ulp/opensm/user/opensm/osm_req_ctrl.c
ulp/opensm/user/opensm/osm_resp.c
ulp/opensm/user/opensm/osm_router.c [new file with mode: 0644]
ulp/opensm/user/opensm/osm_sa.c
ulp/opensm/user/opensm/osm_sa_class_port_info.c
ulp/opensm/user/opensm/osm_sa_class_port_info_ctrl.c
ulp/opensm/user/opensm/osm_sa_guidinfo_record.c
ulp/opensm/user/opensm/osm_sa_guidinfo_record_ctrl.c
ulp/opensm/user/opensm/osm_sa_informinfo.c
ulp/opensm/user/opensm/osm_sa_informinfo_ctrl.c
ulp/opensm/user/opensm/osm_sa_lft_record.c
ulp/opensm/user/opensm/osm_sa_lft_record_ctrl.c
ulp/opensm/user/opensm/osm_sa_link_record.c
ulp/opensm/user/opensm/osm_sa_link_record_ctrl.c
ulp/opensm/user/opensm/osm_sa_mad_ctrl.c
ulp/opensm/user/opensm/osm_sa_mcmember_record.c
ulp/opensm/user/opensm/osm_sa_mcmember_record_ctrl.c
ulp/opensm/user/opensm/osm_sa_mft_record.c [new file with mode: 0644]
ulp/opensm/user/opensm/osm_sa_mft_record_ctrl.c [new file with mode: 0644]
ulp/opensm/user/opensm/osm_sa_multipath_record.c [new file with mode: 0644]
ulp/opensm/user/opensm/osm_sa_multipath_record_ctrl.c [new file with mode: 0644]
ulp/opensm/user/opensm/osm_sa_node_record.c
ulp/opensm/user/opensm/osm_sa_node_record_ctrl.c
ulp/opensm/user/opensm/osm_sa_path_record.c
ulp/opensm/user/opensm/osm_sa_path_record_ctrl.c
ulp/opensm/user/opensm/osm_sa_pkey_record.c
ulp/opensm/user/opensm/osm_sa_pkey_record_ctrl.c
ulp/opensm/user/opensm/osm_sa_portinfo_record.c
ulp/opensm/user/opensm/osm_sa_portinfo_record_ctrl.c
ulp/opensm/user/opensm/osm_sa_response.c
ulp/opensm/user/opensm/osm_sa_service_record.c
ulp/opensm/user/opensm/osm_sa_service_record_ctrl.c
ulp/opensm/user/opensm/osm_sa_slvl_record.c
ulp/opensm/user/opensm/osm_sa_slvl_record_ctrl.c
ulp/opensm/user/opensm/osm_sa_sminfo_record.c
ulp/opensm/user/opensm/osm_sa_sminfo_record_ctrl.c
ulp/opensm/user/opensm/osm_sa_sw_info_record.c [new file with mode: 0644]
ulp/opensm/user/opensm/osm_sa_sw_info_record_ctrl.c [new file with mode: 0644]
ulp/opensm/user/opensm/osm_sa_vlarb_record.c
ulp/opensm/user/opensm/osm_sa_vlarb_record_ctrl.c
ulp/opensm/user/opensm/osm_service.c
ulp/opensm/user/opensm/osm_slvl_map_rcv.c
ulp/opensm/user/opensm/osm_slvl_map_rcv_ctrl.c
ulp/opensm/user/opensm/osm_sm.c
ulp/opensm/user/opensm/osm_sm_mad_ctrl.c
ulp/opensm/user/opensm/osm_sm_state_mgr.c
ulp/opensm/user/opensm/osm_sminfo_rcv.c
ulp/opensm/user/opensm/osm_sminfo_rcv_ctrl.c
ulp/opensm/user/opensm/osm_state_mgr.c
ulp/opensm/user/opensm/osm_state_mgr_ctrl.c
ulp/opensm/user/opensm/osm_subnet.c
ulp/opensm/user/opensm/osm_sw_info_rcv.c
ulp/opensm/user/opensm/osm_sw_info_rcv_ctrl.c
ulp/opensm/user/opensm/osm_sweep_fail_ctrl.c
ulp/opensm/user/opensm/osm_switch.c
ulp/opensm/user/opensm/osm_trap_rcv.c
ulp/opensm/user/opensm/osm_trap_rcv_ctrl.c
ulp/opensm/user/opensm/osm_ucast_file.c [new file with mode: 0644]
ulp/opensm/user/opensm/osm_ucast_ftree.c [new file with mode: 0644]
ulp/opensm/user/opensm/osm_ucast_mgr.c
ulp/opensm/user/opensm/osm_ucast_updn.c
ulp/opensm/user/opensm/osm_vl15intf.c
ulp/opensm/user/opensm/osm_vl_arb_rcv.c
ulp/opensm/user/opensm/osm_vl_arb_rcv_ctrl.c
ulp/opensm/user/opensm/st.c
ulp/opensm/user/osmtest/SOURCES
ulp/opensm/user/osmtest/include/error.h
ulp/opensm/user/osmtest/include/osmt_inform.h
ulp/opensm/user/osmtest/include/osmt_mtl_regular_qp.h
ulp/opensm/user/osmtest/include/osmtest.h
ulp/opensm/user/osmtest/include/osmtest_base.h
ulp/opensm/user/osmtest/include/osmtest_subnet.h
ulp/opensm/user/osmtest/osmt_inform.c
ulp/opensm/user/osmtest/osmt_mtl_regular_qp.c
ulp/opensm/user/osmtest/osmt_multicast.c
ulp/opensm/user/osmtest/osmt_service.c
ulp/opensm/user/osmtest/osmt_slvl_vl_arb.c
ulp/opensm/user/osmtest/osmtest.c

diff --git a/ulp/opensm/user/README.opensm-build b/ulp/opensm/user/README.opensm-build
new file mode 100644 (file)
index 0000000..cccd07a
--- /dev/null
@@ -0,0 +1,24 @@
+##### Begin svn/gen1/trunk/src/userspace/osm/README.opensm-build
+
+# How to Build the OpenSM Subnet Manager
+# ----------------------------------------
+
+# This file is arranged as a shell script so you can paste or execute
+# it.  This is for building from the SVN source at openib.org.
+                                                                                          
+# 1. Complete steps outlined in README.kernel-build.
+# 2. Complete steps outlined in README.user-build.
+
+# set TOP to wherever you've checked out the openib repository.
+TOP=/usr/src/openib
+
+export TSHOME=$TOP/src/linux-kernel/infiniband/include/
+export MTHOME=$TOP/src/userspace/hw/mellanox-hca/mthome/
+
+# Add util dir to path for makedepend
+export PATH=$TOP/src/userspace/osm/util:$PATH
+
+cd $TOP/src/userspace/osm
+make VENDOR=ts
+
+##### end
\ No newline at end of file
diff --git a/ulp/opensm/user/TODO b/ulp/opensm/user/TODO
new file mode 100644 (file)
index 0000000..684ef45
--- /dev/null
@@ -0,0 +1,16 @@
+Support new HOQ value for the ports feeding HCA ports
+
+Support Static Lid assignment with a flag for specifying a file with guid to lid.
+
+Support PKey comp in Path Record
+Support SL comp in Path Record
+
+Support VL traversal in Path Record - compute the SL accordingly 
+ Make it a runtime option, So we do not pay the price if no SL are used.
+
+Support a fast Path Record mode - if the fabric is totally uniform in rate and
+ MTU. No need to traverse the path at all...
+
+Improve the MinHop routing algorithm such that it only calc the min hops 
+for switches, then 
+
diff --git a/ulp/opensm/user/config.h b/ulp/opensm/user/config.h
new file mode 100644 (file)
index 0000000..5d7c42d
--- /dev/null
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2002-2006 Mellanox Technologies LTD. All rights reserved.
+ * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
+ *
+ * This software is available to you under the OpenIB.org BSD license
+ * below:
+ *
+ *     Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *      - Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *
+ *      - Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * $Id$
+ */
+
+/*
+ * Abstract:
+ *     Windows-specific definitions
+ *
+ * Environment:
+ *     Windows
+ *
+ * $Revision: $
+ */
+
+#ifndef _CONFIG_h_
+#define _CONFIG_h_
+
+#include <sys/stat.h>
+#include <stdio.h>
+#include <io.h>
+
+#define chmod(a,b) _chmod(a,b)
+#define S_IRUSR _S_IREAD
+#define S_IWUSR _S_IWRITE
+
+#define snprintf _snprintf
+#define fileno _fileno
+
+#define stat _stat
+#define fstat(a,b) fstat_alias((a),(b))
+
+inline int 
+fstat_alias(int filedes, struct _stat *buf)
+{
+    return _fstat(filedes, buf);
+}
+
+#endif /*_CONFIG_h_ */
+
+
+
+
diff --git a/ulp/opensm/user/doc/OpenSM_PKey_Mgr.txt b/ulp/opensm/user/doc/OpenSM_PKey_Mgr.txt
new file mode 100644 (file)
index 0000000..df4031c
--- /dev/null
@@ -0,0 +1,79 @@
+OpenSM Partition Management
+---------------------------
+
+Roadmap:
+Phase 1 - provide partition management at the EndPort (HCA, Router and Switch 
+          Port 0) level with no routing affects.
+Phase 2 - routing engine should take partitions into account.
+
+Phase 1 functionality:
+
+Supported Policy:
+
+1. EndPort partition groups are to be defined by listing the 
+   PortGUIDs as full and limited members.
+
+2. Each partition group might be assigned an explicit P_Key (only the 15 
+   LSB bits are valid) or the SM should assign it randomly. 
+
+3. A flag should control the generation of IPoIB broadcast group for
+   that partition. Extra optional MGIDs can be provided to be setup (on
+   top of the IPoIB broadcast group). 
+
+4. A global flag "Disconnect Unconfigured EndPorts": If TRUE prevents
+   EndPorts that are not explicitly defined as part of any partition
+   (thus "unconfigured") to communicate with any other EndPort. Otherwise, it
+   will let these EndPorts send packets to all other EndPorts.
+
+Functionality:
+
+1. The policy should be updated:
+   - during SM bringup
+   - after kill -HUP
+   - through SNMP (once it is supported)
+
+2. Partition tables will be updated on full sweep (new port/trap etc).
+   As a first step, the policy feasibility should be
+   verified. Feasibility could be limited by the EndPorts supports for
+   number of partitions, etc. Unrealizable policy should be reported
+   and extra rules ignored after providing error messages. 
+
+3. Each EndPort will be assigned P_Keys as follows:
+
+   a. Default partition group limited membership as defined by rule #4 below.
+     (only the SM port will get 0xffff).
+
+   b. P_Keys for all partition groups it is part of as defined in 
+      the policy.
+
+   c. P_Key update will preserve index for the existing P_Keys on the
+      port. If port has limited resources that will require reuse of,
+      on index a message will be provided and some of the settings will be
+      ommitted. P_Key indexes will not change under any circumstances.
+
+4. Each Switch Leaf Port (a switch port that is connected to an
+   EndPort) should be configured according to the same rules that
+   apply to the EndPort connected to that switch port. 
+   This actually enables unauthorized port isolation (with future
+   usage of M_Key and ProtectBits). 
+
+5. Policy entries matching a non EndPort will be flagged as
+   erroneous in the log file and ignored. 
+
+6. At the end of the P_Key setting phase, a check for successful
+   setting should be made.
+   Errors should be clearly logged and cause a new sweep. 
+   
+7. Each partition that is marked to support IPoIB should define a
+   broadcast MGRP. If the partition does not support IPoIB, it should 
+   define a dummy MGRP with parameters blocking IPoIB drivers from 
+   registering to it.
+
+Phase 2 functionality:
+
+The partition policy should be considered during the routing such that
+links are associated with particular partition or a set of
+partitions. Policy should be enhanced to provide hints for how to do
+that (correlating to QoS too). The exact algorithm is TBD. 
+
+
diff --git a/ulp/opensm/user/doc/OpenSM_RN_0_3_1.pdf b/ulp/opensm/user/doc/OpenSM_RN_0_3_1.pdf
new file mode 100644 (file)
index 0000000..4eaacf8
Binary files /dev/null and b/ulp/opensm/user/doc/OpenSM_RN_0_3_1.pdf differ
diff --git a/ulp/opensm/user/doc/OpenSM_UM_0_3.pdf b/ulp/opensm/user/doc/OpenSM_UM_0_3.pdf
new file mode 100644 (file)
index 0000000..9951171
Binary files /dev/null and b/ulp/opensm/user/doc/OpenSM_UM_0_3.pdf differ
diff --git a/ulp/opensm/user/doc/current-routing.txt b/ulp/opensm/user/doc/current-routing.txt
new file mode 100644 (file)
index 0000000..3cc6f99
--- /dev/null
@@ -0,0 +1,202 @@
+Current OpenSM Routing
+1/2/07
+
+OpenSM offers three routing engines:
+
+1.  Min Hop Algorithm - based on the minimum hops to each node where the 
+path length is optimized.
+
+2.  UPDN Unicast routing algorithm - also based on the minimum hops to each 
+node, but it is constrained to ranking rules. This algorithm should be chosen 
+if the subnet is not a pure Fat Tree, and deadlock may occur due to a 
+loop in the subnet.
+
+3.  Fat-tree Unicast routing algorithm - this algorithm optimizes routing
+of fat-trees for congestion-free "shift" communication pattern. 
+It should be chosen if a subnet is a symmetrical fat-tree. 
+Similar to UPDN routing, Fat-tree routing is credit-loop-free.
+
+OpenSM now also offers a file method which can load routes from a table. See 
+modular-routing.txt for more information on this.
+
+The basic routing algorithm is comprised of two stages:
+1. MinHop matrix calculation
+   How many hops are required to get from each port to each LID ?
+   The algorithm to fill these tables is different if you run standard
+(min hop) or Up/Down.
+   For standard routing, a "relaxation" algorithm is used to propagate
+min hop from every destination LID through neighbor switches
+   For Up/Down routing, a BFS from every target is used. The BFS tracks link
+direction (up or down) and avoid steps that will perform up after a down
+step was used.
+
+2. Once MinHop matrices exist, each switch is visited and for each target LID a
+decision is made as to what port should be used to get to that LID.
+   This step is common to standard and Up/Down routing. Each port has a
+counter counting the number of target LIDs going through it.
+   When there are multiple alternative ports with same MinHop to a LID,
+the one with less previously assigned ports is selected. 
+   If LMC > 0, more checks are added: Within each group of LIDs assigned to 
+same target port, 
+   a. use only ports which have same MinHop 
+   b. first prefer the ones that go to different systemImageGuid (then
+the previous LID of the same LMC group)
+   c. if none - prefer those which go through another NodeGuid
+   d. fall back to the number of paths method (if all go to same node).
+
+
+Effect of Topology Changes
+
+OpenSM will preserve existing routing in any case where there is no change in
+the fabric switches unless the -r (--reassign_lids) option is specified.
+
+-r
+--reassign_lids
+          This option causes OpenSM to reassign LIDs to all
+          end nodes. Specifying -r on a running subnet
+          may disrupt subnet traffic.
+          Without -r, OpenSM attempts to preserve existing
+          LID assignments resolving multiple use of same LID.
+
+If a link is added or removed, OpenSM does not recalculate
+the routes that do not have to change. A route has to change 
+if the port is no longer UP or no longer the MinHop. When routing changes 
+are performed, the same algorithm for balancing the routes is invoked.
+
+In the case of using the file based routing, any topology changes are
+currently ignored The 'file' routing engine just loads the LFTs from the file 
+specified, with no reaction to real topology. Obviously, this will not be able 
+to recheck LIDs (by GUID) for disconnected nodes, and LFTs for non-existent 
+switches will be skipped. Multicast is not affected by 'file' routing engine 
+(this uses min hop tables).
+
+
+Min Hop Algorithm
+-----------------
+
+The Min Hop algorithm is invoked when neither UPDN or the file method are
+specified.
+The Min Hop algorithm is divided into two stages: computation of
+min-hop tables on every switch and LFT output port assignment. Link
+subscription is also equalized with the ability to override based on
+port GUID. The latter is supplied by:
+
+-i <equalize-ignore-guids-file>
+-ignore-guids <equalize-ignore-guids-file>
+          This option provides the means to define a set of ports
+          (by guids) that will be ignored by the link load
+          equalization algorithm.
+
+LMC awareness routes based on (remote) system or switch basis.
+
+
+UPDN Routing Algorithm
+----------------------
+
+Purpose of UPDN Algorithm
+
+The UPDN algorithm is designed to prevent deadlocks from occurring in loops 
+of the subnet. A loop-deadlock is a situation in which it is no longer 
+possible to send data between any two hosts connected through the loop. As 
+such, the UPDN routing algorithm should be used if the subnet is not a pure 
+Fat Tree, and one of its loops may experience a deadlock (due, for example, 
+to high pressure).
+
+The UPDN algorithm is based on the following main stages:
+
+1.  Auto-detect root nodes - based on the CA hop length from any switch in 
+the subnet, a statistical histogram is built for each switch (hop num vs 
+number of occurrences). If the histogram reflects a specific column (higher
+than others) for a certain node, then it is marked as a root node. Since 
+the algorithm is statistical, it may not find any root nodes. The list of 
+the root nodes found by this auto-detect stage is used by the ranking 
+process stage.
+
+    Note 1: The user can override the node list manually.
+    Note 2: If this stage cannot find any root nodes, and the user did not 
+            specify a guid list file, OpenSM defaults back to the Min Hop 
+            routing algorithm.
+
+2.  Ranking process - All root switch nodes (found in stage 1) are assigned 
+a rank of 0. Using the BFS algorithm, the rest of the switch nodes in the 
+subnet are ranked incrementally. This ranking aids in the process of enforcing 
+rules that ensure loop-free paths.
+
+3.  Min Hop Table setting - after ranking is done, a BFS algorithm is run from 
+each (CA or switch) node in the subnet. During the BFS process, the FDB table 
+of each switch node traversed by BFS is updated, in reference to the starting 
+node, based on the ranking rules and guid values.
+
+At the end of the process, the updated FDB tables ensure loop-free paths 
+through the subnet.
+
+
+UPDN Algorithm Usage
+
+Activation through OpenSM
+
+Use '-R updn' option (instead of old '-u') to activate the UPDN algorithm.
+Use `-a <guid_list_file>' for adding an UPDN guid file that contains the 
+root nodes for ranking.
+If the `-a' option is not used, OpenSM uses its auto-detect root nodes 
+algorithm.
+
+Notes on the guid list file:
+1.   A valid guid file specifies one guid in each line. Lines with an invalid 
+format will be discarded.
+2.   The user should specify the root switch guids. However, it is also 
+possible to specify CA guids; OpenSM will use the guid of the switch (if 
+it exists) that connects the CA to the subnet as a root node.
+
+
+To learn more about deadlock-free routing, see the article 
+"Deadlock Free Message Routing in Multiprocessor Interconnection Networks" 
+by William J Dally and Charles L Seitz (1985).
+
+
+Fat-tree Routing Algorithm
+--------------------------
+
+Purpose:
+
+The fat-tree algorithm optimizes routing for "shift" communication pattern. 
+It should be chosen if a subnet is a symmetrical fat-tree of various types.
+It supports not just K-ary-N-Trees, by handling for non-constant K, 
+cases where not all leafs (CAs) are present, any CBB ratio.
+As in UPDN, fat-tree also prevents credit-loop-deadlocks.
+Fat-tree algorithm supports topologies that comply with the following rules:
+  - Tree rank should be between two and eight (inclusively)
+  - Switches of the same rank should have the same number
+    of UP-going port groups*, unless they are root switches,
+    in which case the shouldn't have UP-going ports at all.
+  - Switches of the same rank should have the same number
+    of DOWN-going port groups, unless they are leaf switches.
+  - Switches of the same rank should have the same number
+    of ports in each UP-going port group.
+  - Switches of the same rank should have the same number
+    of ports in each DOWN-going port group.
+*ports that are connected to the same remote switch are referenced as
+'port group'. 
+
+Note that although fat-tree algorithm supports trees with non-integer CBB 
+ratio, the routing will not be as balanced as in case of integer CBB ratio.
+In addition to this, although the algorithm allows leaf switches to have any 
+number of CAs, the closer the tree is to be fully populated, the more effective
+the "shift" communication pattern will be.
+
+The algorithm also dumps CA ordering file (osm-ftree-ca-order.dump) in the
+same directory where the OpenSM log resides. This ordering file provides the 
+CA order that may be used to create efficient communication pattern, that
+will match the routing tables.
+
+
+Usage:
+
+Activation through OpenSM
+
+Use '-R ftree' option to activate the fat-tree algorithm.
+
+Note: LMC > 0 is not supported by fat-tree routing. If this is
+specified, the default routing algorithm is invoked instead.
+
diff --git a/ulp/opensm/user/doc/modular-routing.txt b/ulp/opensm/user/doc/modular-routing.txt
new file mode 100644 (file)
index 0000000..0a59346
--- /dev/null
@@ -0,0 +1,78 @@
+Modular Routine Engine
+
+Modular routing engine structure has been added to allow
+for ease of "plugging" new routing modules.
+
+Currently, only unicast callbacks are supported. Multicast
+can be added later.
+
+One of existing routing modules is up-down "updn", which may
+be activated with '-R updn' option (instead of old '-u').
+
+General usage is:
+$ opensm -R 'module-name'
+
+There is also a trivial routing module which is able
+to load LFT tables from a dump file.
+
+Main features:
+
+- this will load switch LFTs and/or LID matrices (min hops tables)
+- this will load switch LFTs according to the path entries introduced in
+  the dump file
+- no additional checks will be performed (such as "is port connected", etc.)
+- in case when fabric LIDs were changed this will try to reconstruct LFTs
+  correctly if endport GUIDs are represented in the dump file (in order
+  to disable this GUIDs may be removed from the dump file or zeroed)
+
+The dump file format is compatible with output of 'ibroute' util and for
+whole fabric may be generated with script like this:
+
+  for sw_lid in `ibswitches | awk '{print $NF}'` ; do
+       ibroute $sw_lid
+  done > /path/to/dump_file
+
+, or using DR paths:
+
+  for sw_dr in `ibnetdiscover -v \
+               | sed -ne '/^DR path .* switch /s/^DR path \[\(.*\)\].*$/\1/p' \
+               | sed -e 's/\]\[/,/g' \
+               | sort -u` ; do
+       ibroute -D ${sw_dr}
+  done > /path/to/dump_file
+
+This script is dump_lfts.sh
+
+In order to activate new module use:
+
+  opensm -R file -U /path/to/dump_file
+
+If the dump_file is not found or is in error, the default routing 
+algorithm is utilized.
+
+The ability to dump switch lid matrices (aka min hops tables) to file and
+later to load these is also supported.
+
+The usage is similar to unicast forwarding tables loading from dump
+file (introduced by 'file' routing engine), but new lid matrix file
+name should be specified by -M or --lid_matrix_file option. For example:
+
+  opensm -R file -M ./opensm-lid-matrix.dump
+
+The dump file is named 'opensm-lid-matrix.dump' and will be generated in
+standard opensm dump directory (/var/log by default) when
+OSM_LOG_ROUTING logging flag is set.
+
+When routing engine 'file' is activated, but dump file is not specified
+or not cannot be open default lid matrix algorithm will be used.
+
+There is also a switch forwarding tables dumper which generates
+a file compatible with dump_lfts.sh output. This file can be used
+as input for forwarding tables loading by 'file' routing engine.
+Both or one of options -U and -M can be specified together with '-R file'.
+
+NOTE: ibroute has been updated (for switch management ports) to support this.
+Also, lmc was added to switch management ports. ibroute needs to be r7855 or
+later from the trunk.
+
+
diff --git a/ulp/opensm/user/doc/opensm_release_notes_openib-2.0.5.txt b/ulp/opensm/user/doc/opensm_release_notes_openib-2.0.5.txt
new file mode 100644 (file)
index 0000000..a655573
--- /dev/null
@@ -0,0 +1,487 @@
+                        OpenSM Release Notes 2.0.5
+                       ============================
+
+Version: OpenFabrics Enterprise Distribution (OFED) 1.1
+Repo:    https://openib.org/svn/gen2/branches/1.1/src/userspace/management/osm
+Version: 9535 (openib-2.0.5)
+Date:    October 2006
+
+1 Overview
+----------
+This document describes the contents of the OpenSM OFED 1.1 release. 
+OpenSM is an InfiniBand compliant Subnet Manager and Administration,
+and runs on top of OpenIB. The OpenSM version for this release 
+is openib-2.0.5
+
+This document includes the following sections:
+1 This Overview section (describing new features and software
+  dependencies)
+2 Known Issues And Limitations
+3 Unsupported IB compliance statements
+4 Major Bug Fixes
+5 Main Verification Flows
+6 Qualified software stacks and devices
+
+1.1 Major New Features
+
+* Partition manager: 
+  The partition manager provides a means to setup multiple partitions 
+  by providing a partition policy file. For details please read the
+  doc/partition-config.txt or the opensm man page.
+
+* Basic QoS Manager: 
+  Provides a uniform configuration of the entire fabric with values defined 
+  in the OpenSM options file. The options support different settings for 
+  CAs, Switches, and Routers. Note that this is disabled by default and
+  using -Q enables QoS fabric setup. 
+
+* Loading pre-routes from a file:
+  A new routing module enables loading pre-routes from a file. 
+  To use this option you should use the command line options:
+  "-R file --U <your routing file>" or 
+  "--routing_engine file --ucast_file <your routing file>"
+  For more information refer to the file doc/modular-routing.txt
+  or the opensm man page.
+
+* SA MultiPathRecord support:
+  The SA can now handle requests for multiple PathRecords in one query.
+  This includes methods SA GetMulti/GetMultiResp and dual sided RMPP.
+
+* PPC64 is now QAed and supported
+
+* Support LMC > 0 for Switch Enhanced Port 0:
+  Allows enhanced switch port 0 (ESP0) to have a non zero
+  LMC. Use the configured subnet wide LMC for this. Modifications were
+  necessary to the LID assignment and routing to support this. 
+  Also, added an option to the configuration to use LMC configured for
+  subnet for enhanced switch port 0 or set it to 0 even if a non zero
+  LMC is configured for the subnet. The default is currently the
+  latter option. The new configuration option is: lmc_esp0
+
+1.2 Minor New Features:
+
+* IPoIB broadcast group configuration:
+  It is now possible to control the IPoIB broadcast group parameters
+  (MTU, rate, SL) through the partitions configuration file.
+
+* Limiting OpenSM log file size:
+  By providing the command line option: "-L <size in MB>" or
+  "--log_limit <size in MB>" the user can limit the generated log 
+  file size. When specified, the log file will be truncated upon reaching
+  this limit.
+
+* Favor 1K MTU for Tavor (MT23108) HCA
+  In cases where a PathRecord or MultiPathRecord is queried and the
+  requestor does not specify the MTU or does specify it in a way
+  that allows for MTU to be 1K and one of the path ends in a Tavor,
+  limit the MTU to 1K max.
+
+* Man pages:
+  Added opensm.8 and osmtest.8
+
+* Leaf VL stall count control:
+  A new parameter (leaf_vl_stall_count) for controlling the number of
+  sequential packets dropped on a switch port driving a HCA/TCA/Router
+  that cause the port to enter the VLStalled state was added to the
+  options file.
+
+* SM Polling/Handover defaults changed
+  The default SMInfo polling retries was decreased from 18 to 4
+  which reduces the default handover time from 3 min to 40 seconds.
+
+1.3 Library API Changes
+
+* cl_mem* APIs deprecated in complib:
+  These functions are now considered as deprecated and should be
+  replaced by direct calls to malloc, free, memset, etc.
+
+* osm_log_init_v2 API added in libopensm:
+  Supports providing the new option for log file truncation.
+
+1.4 Software Dependencies
+
+OpenSM depends on the installation of either OFED 1.1, OFED 1.0,
+OpenIB gen2 (e.g. IBG2 distribution), OpenIB gen1 (e.g. IBGD
+distribution), or Mellanox VAPI stacks. The qualified driver versions
+are provided in Table 2, "Qualified IB Stacks".
+
+1.5 Supported Devices Firmware
+
+The main task of OpenSM is to initialize InfiniBand devices. The
+qualified devices and their corresponding firmware versions 
+are listed in Table 3.
+
+2 Known Issues And Limitations
+------------------------------
+
+* No Service / Key associations:
+  There is no way to manage Service access by Keys. 
+
+* No SM to SM SMDB synchronization: 
+  Puts the burden of re-registering services, multicast groups, and
+  inform-info on the client application (or IB access layer core). 
+
+* No "port down" event handling:
+  Changing the switch port through which OpenSM connects to the IB
+  fabric may cause incorrect operation. Please restart OpenSM whenever
+  such a connectivity change is made.
+
+* Changing connections during SM operation:
+  Under some conditions the SM can get confused by a change in 
+  cabling (moving a cable from one switch port to the other) and 
+  momentarily see this as having the same GUID appear connected 
+  to two different IB ports. Under some conditions, when the SM fails to 
+  get the corresponding change event it might mistakenly report this case
+  as a "duplicated GUID" case and abort. It is advisable to double-check
+  the syslog after each such change in connectivity and restart
+  OpenSM if it has exited.
+  
+3 Unsupported IB Compliance Statements
+--------------------------------------
+The following section lists all the IB compliance statements which
+OpenSM does not support. Please refer to the IB specification for detailed
+information regarding each compliance statement. 
+
+* C14-22 (Authentication):
+  M_Key M_KeyProtectBits and M_KeyLeasePeriod shall be set in one
+  SubnSet method. As a work-around, an OpenSM option is provided for
+  defining the protect bits.
+
+* C14-67 (Authentication):
+  On SubnGet(SMInfo) and SubnSet(SMInfo) - if M_Key is not zero then
+  the SM shall generate a SubnGetResp if the M_Key matches, or
+  silently drop the packet if M_Key does not match.
+
+* C15-0.1.23.4 (Authentication):
+  InformInfoRecords shall always be provided with the QPN set to 0,
+  except for the case of a trusted request, in which case the actual
+  subscriber QPN shall be returned. 
+
+* o13-17.1.2 (Event-FWD):
+  If no permission to forward, the subscription should be removed and
+  no further forwarding should occur.
+
+* C14-24.1.1.5 and C14-62.1.1.22 (Initialization):
+  GUIDInfo - SM should enable assigning Port GUIDInfo.
+
+* C14-44 (Initialization):
+  If the SM discovers that it is missing an M_Key to update CA/RT/SW,
+  it should notify the higher level.
+
+* C14-62.1.1.12 (Initialization):
+  PortInfo:M_Key - Set the M_Key to a node based random value.
+
+* C14-62.1.1.13 (Initialization):
+  PortInfo:P_KeyProtectBits - set according to an optional policy.
+
+* C14-62.1.1.24 (Initialization):
+  SwitchInfo:DefaultPort - should be configured for random FDB.
+
+* C14-62.1.1.32 (Initialization):
+  RandomForwardingTable should be configured.
+
+* o15-0.1.12 (Multicast):
+  If the JoinState is SendOnlyNonMember = 1 (only), then the endport
+  should join as sender only.
+
+* o15-0.1.8 (Multicast):
+  If a request for creating an MCG with fields that cannot be met,
+  return ERR_REQ_INVALID (currently ignores SL and FlowLabelTClass).
+
+* C15-0.1.8.6 (SA-Query):
+  Respond to SubnAdmGetTraceTable - this is an optional attribute.
+
+* C15-0.1.13 Services:
+  Reject ServiceRecord create, modify or delete if the given
+  ServiceP_Key does not match the one included in the ServiceGID port
+  and the port that sent the request.
+
+* C15-0.1.14 (Services):
+  Provide means to associate service name and ServiceKeys.
+
+4 Major Bug Fixes
+-----------------
+
+The following is a list of bugs that were fixed. Note that other less critical
+or visible bugs were also fixed.
+
+* "Broken" fabric (duplicated port GUIDs) handling improved
+  Replace assert with a real check to handle invalid physical port
+  in osm_node_info_rcv.c which could occur on a broken fabric
+
+* SA client synchronous request failed but status returned was IB_SUCCESS
+  even if there was no response.
+  There was a missing setting of the status in the synchronous case.
+* Memory leak fixes:
+  1. In libvendor/osm_vendor_ibumad.c:osm_vendor_get_all_port_attr
+  2. In libvendor/osm_vendor_ibumad_sa.c:__osmv_sa_mad_rcv_cb
+  3. On receiving SMInfo SA request from a node that does not share a 
+         partition, the response mad was allocated but never free'd 
+         as it was never sent.
+
+* Set(InformInfo) OpenSM Deadlock:
+  When receiving a request with unknown LID
+
+* PathRecord to inconsistent multicast destination:
+  Fix the return error when multicast destination is not consistently
+  indicated.
+
+* Remove double calculation of reversible path 
+  In osm_sa_path_record.c:__osm_pr_rcv_get_lid_pair_path a PathRecord 
+  query used to double check if the path is reversible
+
+* Some PathRecord log messages use "net order":
+  Fix GUID net to host conversion in some osm_log messages
+
+* DR/LID routed SMPs direction bit handling:
+  osm_resp.c:osm_resp_make_resp_smp, set direction bit only if direct
+  routed class. This bug caused two issues:
+  1. Get/Set responses always had direction bit set. 
+  2. Trap represses never had direction bit set.
+  The direction bit needs setting in direct routed responses and it
+  doesn't exist in LID routed responses. 
+  osm_sm_mad_ctrl.c: did not detect the "direction bit" correctly.
+
+* OpenSM crash due to transaction lookup (interop with Cisco stack)
+  When a wire TID that maps to internal TID of zero (after applying
+  mask) was received the lookup of the transaction was successful.
+  The stale transaction pointed to "free'd" memory.
+
+* Better handling for Path/MultiPath requests for raw traffic
+
+* Wrong ProducerType provided in Notice Reports:
+  When formating an SM generated report, the ProducerType was using
+  CL_NTOH32 which can not be used to format a 24bit network order number.
+
+* OpenSM break on PPC64 
+  complib: Fixed memory corruption in cl_pool.c:cl_qcpool_init. This
+  affected big endian 64-bit architectures only. 
+
+* Illegal Set(InformInfo) was wrongly successful in updating the SMDB
+  osm_sa_informinfo.c: In osm_infr_rcv_process_set_method, if sending
+  error, don't call osm_infr_rcv_process_set_method 
+
+* RMPP queries of InformInfoRecord fail
+  ib_types.h: Pad ib_inform_info_record_t to be modulo 8 in size so
+  that attribute offset is calculated properly 
+
+* Returning "invalid request" rather than "unsupported method/attribute"
+  In these cases, a noncompliant response was being provided.
+
+* Noncompliant response for SubnAdmGet(PortInfoRecord) with no match
+  osm_pir_rcv_process, now returns "SA no records error" for SubnAdmGet
+  with 0 records found
+
+* Noncompliant non base LID returned by some queries:
+  The following attributes used to return the request LID rather than
+  its base LID in responses: PKeyTableRecord, GUIDInfoRecord,
+  SLtoVLMappingTableRecord, VLArbitrationTableRecord, LinkRecord
+
+* Noncompliant SubnAdmGet and SubnAdmGetTable:
+  Mixing of error codes in case of no records or multiple records
+  fixed for the attributes: 
+  LinearForwardingTableRecord, GUIDInfoRecord,
+  VLArbitrationTableRecord, LinkRecord, PathRecord
+
+* segfault in InformInfo flows
+  Under stress concurrent Set/Delete/Get flows. Fixed by adding
+  missing lock.
+
+* SA queries containing LID out if range did not return ERR_REQ_INVALID
+
+5 Main Verification Flows
+-------------------------
+
+OpenSM verification is run using the following activities:
+* osmtest - a stand-alone program
+* ibmgtsim (IB management simulator) based - a set of flows that
+  simulate clusters, inject errors and verify OpenSM capability to
+  respond and bring up the network correctly.
+* small cluster regression testing - where the SM is used on back to
+  back or single switch configurations. The regression includes
+  multiple OpenSM dedicated tests.
+* cluster testing - when we run OpenSM to setup a large cluster, perform
+  hand-off, reboots and reconnects, verify routing correctness and SA
+  responsiveness at the ULP level (IPoIB and SDP).
+
+5.1 osmtest
+
+osmtest is an automated verification tool used for OpenSM
+testing. Its verification flows are described by list below. 
+
+* Inventory File: Obtain and verify all port info, node info, link and path
+  records parameters.
+
+* Service Record:
+   - Register new service
+   - Register another service (with a lease period)
+   - Register another service (with service p_key set to zero)
+   - Get all services by name
+   - Delete the first service
+   - Delete the third service
+   - Added bad flows of get/delete  non valid service
+   - Add / Get same service with different data 
+   - Add / Get / Delete by different component  mask values (services
+     by Name & Key / Name & Data / Name & Id / Id only )
+
+* Multicast Member Record: 
+   - Query of existing Groups (IPoIB)
+   - BAD Join with insufficient comp mask (o15.0.1.3)
+   - Create given MGID=0 (o15.0.1.4)
+   - Create given MGID=0xFF12A01C,FE800000,00000000,12345678 (o15.0.1.4)
+   - Create BAD MGID=0xFA. (o15.0.1.6)
+   - Create BAD MGID=0xFF12A01B w/ link-local not set (o15.0.1.6)
+   - New MGID with invalid join state (o15.0.1.9)
+   - Retry of existing MGID - See JoinState update (o15.0.1.11)
+   - BAD RATE when connecting to existing MGID (o15.0.1.13)
+   - Partial JoinState delete request - removing FullMember (o15.0.1.14)
+   - Full Delete of a group (o15.0.1.14)
+   - Verify Delete by trying to Join deleted group (o15.0.1.14)
+   - BAD Delete of IPoIB membership (no prev join) (o15.0.1.15)
+
+* GUIDInfo Record:
+   - All GUIDInfoRecords in subnet are obtained
+
+* MultiPathRecord:
+   - Perform some compliant and noncompliant MultiPathRecord requests
+   - Validation is via status in responses and IB analyzer
+
+* PKeyTableRecord:
+  - Perform some compliant and noncompliant PKeyTableRecord queries
+  - Validation is via status in responses and IB analyzer
+
+* LinearForwardingTableRecord:
+  - Perform some compliant and noncompliant LinearForwardingTableRecord queries
+  - Validation is via status in responses and IB analyzer
+
+* Event Forwarding: Register for trap forwarding using reports
+   - Send a trap and wait for report
+   - Unregister non-existing
+
+* Trap 64/65 Flow: Register to Trap 64-65, create traps (by
+  disconnecting/connecting ports) and wait for report, then unregister.
+
+* Stress Test: send PortInfoRecord queries, both single and RMPP and
+  check for the rate of responses as well as their validity.
+
+
+5.2 IB Management Simulator OpenSM Test Flows:
+
+The simulator provides ability to simulate the SM handling of virtual
+topologies that are not limited to actual lab equipment availability.
+OpenSM was simulated to bring up clusters of up to 10,000 nodes. Daily
+regressions use smaller (16 and 128 nodes clusters).
+
+The following test flows are run on the IB management simulator:
+
+* Stability:
+  Up to 12 links from the fabric are randomly selected to drop packets
+  at drop rates up to 90%. The SM is required to succeed in bringing the
+  fabric up. The resulting routing is verified to be correct as well.
+
+* LID Manager:
+  Using LMC = 2 the fabric is initialized with LIDs. Faults such as
+  zero LID, Duplicated LID, non-aligned (to LMC) LIDs are 
+  randomly assigned to various nodes and other errors are randomly
+  output to the guid2lid cache file. The SM sweep is run 5 times and
+  after each iteration a complete verification is made to ensure that all
+  LIDs that could possibly be maintained are kept, as well as that all nodes
+  were assigned a legal LID range.
+
+* Multicast Routing:
+  Nodes randomly join the 0xc000 group and eventually the
+  resulting routing is verified for completeness and adherence to
+  Up/Down routing rules. 
+
+* osmtest:
+  The complete osmtest flow as described in the previous table is run on
+  the simulated fabrics.
+
+* Stress Test:
+  This flow merges fabric, LID and stability issues with continuous 
+  PathRecord, ServiceRecord and Multicast Join/Leave activity to
+  stress the SM/SA during continuous sweeps. InformInfo Set/Delete/Get
+  were added to the test such both existing and non existing nodes
+  perform them in random order.
+
+5.3 OpenSM Regression
+
+Using a back-to-back or single switch connection, the following set of
+tests is run nightly on the stacks described in table 2. The included
+tests are:
+
+* Stress Testing: Flood the SA with queries from multiple channel
+  adapters to check the robustness of the entire stack up to the SA.
+
+* Dynamic Changes: Dynamic Topology changes, through randomly
+  dropping SMP packets, used to test OpenSM adaptation to an unstable
+  network & verify DB correctness.
+
+* Trap Injection: This flow injects traps to the SM and verifies that it
+  handles them gracefully. 
+
+* SA Query Test: This test exhaustively checks the SA responses to all
+  possible single component mask. To do that the test examines the
+  entire set of records the SA can provide, classifies them by their
+  field values and then selects every field (using component mask and a
+  value) and verifies that the response matches the expected set of records.
+  A random selection using multiple component mask bits is also performed.
+
+5.4 Cluster testing:
+
+Cluster testing is usually run before a distribution release. It
+involves real hardware setups of 16 to 32 nodes (or more if a beta site
+is available). Each test is validated by running all-to-all ping through the IB
+interface. The test procedure includes:
+
+* Cluster bringup 
+
+* Hand-off between 2 or 3 SM's while performing:
+  - Node reboots
+  - Switch power cycles (disconnecting the SM's)
+
+* Unresponsive port detection and recovery
+
+* osmtest from multiple nodes
+
+* Trap injection and recovery
+
+
+6 Qualification 
+----------------
+
+Table 2 - Qualified IB Stacks
+=============================
+
+Stack                                    | Version
+-----------------------------------------|--------------------------
+OFED                                     |   1.1
+OFED                                     |   1.0
+OpenIB Gen2 (IBG2 distribution)          |   1.0
+OpenIB Gen1 (IBGD distribution)          |   1.8.0
+VAPI (Mellanox InfiniBand HCA Driver)    |   3.2 and later
+
+Table 3 - Qualified Devices and Corresponding Firmware 
+======================================================
+
+Mellanox
+Device  |   FW versions 
+--------|-----------------------------------------------------------
+MT43132 |   InfiniScale - fw-43132  5.2.0 (and later)
+MT47396 |   InfiniScale III - fw-47396 0.5.0 (and later)
+MT23108 |   InfiniHost - fw-23108   3.3.2 (and later)
+MT25204 |   InfiniHost III Lx - fw-25204  1.0.1i (and later)
+MT25208 |   InfiniHost III Ex (InfiniHost Mode) - fw-25208  4.6.2 (and later)
+MT25208 |   InfiniHost III Ex (MemFree Mode) - fw-25218  5.0.1 (and later)
+
+QLogic/PathScale
+Device  |   Note
+--------|-----------------------------------------------------------
+iPath   | QHT6040 (PathScale InfiniPath HT-460)
+iPath   | QHT6140 (PathScale InfiniPath HT-465)
+iPath   | QLE6140 (PathScale InfiniPath PE-880)
+
+Note: OpenSM does not run on an IBM Galaxy (eHCA) as it does not expose 
+QP0 and QP1. However, it does support it as a device on the subnet.
+
diff --git a/ulp/opensm/user/doc/qos-config.txt b/ulp/opensm/user/doc/qos-config.txt
new file mode 100644 (file)
index 0000000..c90e6f7
--- /dev/null
@@ -0,0 +1,45 @@
+Trivial low level QoS configuration proposition
+===============================================
+
+Basically there is a set of QoS related low-level configuration parameters.
+All these parameter names are prefixed by "qos_" string. Here is a full
+list of these parameters:
+
+  qos_max_vls    - The maximum number of VLs that will be on the subnet
+  qos_high_limit - The limit of High Priority component of VL Arbitration
+                   table (IBA 7.6.9)
+  qos_vlarb_low  - High priority VL Arbitration table (IBA 7.6.9) template
+  qos_vlarb_high - Low priority VL Arbitration table (IBA 7.6.9) template
+                   Both VL arbitration templates are pairs of VL and weight
+  qos_sl2vl      - SL2VL Mapping table (IBA 7.6.6) template. It is a list
+                   of VLs corresponding to SLs 0-15 (Note the VL15 used
+                   here means drop this SL)
+
+Typical default values (hard-coded in OpenSM initialization) are:
+
+  qos_max_vls=15
+  qos_high_limit=0
+  qos_vlarb_low=0:0,1:4,2:4,3:4,4:4,5:4,6:4,7:4,8:4,9:4,10:4,11:4,12:4,13:4,14:4
+  qos_vlarb_high=0:4,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0
+  qos_sl2vl=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,7
+
+The syntax is compatible with rest of OpenSM configuration options and
+values may be stored in OpenSM config file (cached options file).
+
+In addition to the above, we may define separate QoS configuration
+parameters sets for various target types. As targets, we currently support
+CAs, routers, switch external ports, and switch's enhanced port 0. The
+names of such specialized parameters are prefixed by "qos_<type>_"
+string. Here is a full list of the currently supported sets:
+
+  qos_ca_  - QoS configuration parameters set for CAs.
+  qos_rtr_ - parameters set for routers.
+  qos_sw0_ - parameters set for switches' port 0.
+  qos_swe_ - parameters set for switches' external ports.
+
+Examples:
+
+  qos_sw0_max_vls=2
+  qos_ca_sl2vl=0,1,2,3,5,5,5,12,12,0,
+  qos_swe_high_limit=0
+
diff --git a/ulp/opensm/user/include/complib/cl_dispatcher.h b/ulp/opensm/user/include/complib/cl_dispatcher.h
new file mode 100644 (file)
index 0000000..123bd09
--- /dev/null
@@ -0,0 +1,660 @@
+/*
+ * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2002-2006 Mellanox Technologies LTD. All rights reserved.
+ * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
+ *
+ * This software is available to you under the OpenIB.org BSD license
+ * below:
+ *
+ *     Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *      - Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *
+ *      - Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * $Id$
+ */
+
+
+/*
+ * Abstract:
+ *     Declaration of dispatcher abstraction.
+ * 
+ * Environment:
+ *     All
+ *
+ * $Revision: 1.4 $
+ */
+
+#ifndef _CL_DISPATCHER_H_
+#define _CL_DISPATCHER_H_
+
+#include <complib/cl_atomic.h>
+#include <complib/cl_threadpool.h>
+#include <complib/cl_qlist.h>
+#include <complib/cl_qpool.h>
+#include <complib/cl_spinlock.h>
+#include <complib/cl_ptr_vector.h>
+
+#ifdef __cplusplus
+#  define BEGIN_C_DECLS extern "C" {
+#  define END_C_DECLS   }
+#else /* !__cplusplus */
+#  define BEGIN_C_DECLS
+#  define END_C_DECLS
+#endif /* __cplusplus */
+
+BEGIN_C_DECLS
+
+/****h* Component Library/Dispatcher
+* NAME
+*      Dispatcher
+*
+* DESCRIPTION
+*      The Dispatcher provides a facility for message routing to
+*      asynchronous worker threads.
+*
+*      The Dispatcher functions operate on a cl_dispatcher_t structure
+*      which should be treated as opaque and should be manipulated
+*      only through the provided functions.
+*
+* SEE ALSO
+*      Structures:
+*              cl_dispatcher_t
+*
+*      Initialization/Destruction:
+*              cl_disp_construct, cl_disp_init, cl_disp_shutdown, cl_disp_destroy
+*
+*      Manipulation:
+*              cl_disp_post, cl_disp_reset, cl_disp_wait_on
+*********/
+
+/****s* Component Library: Dispatcher/cl_disp_msgid_t
+* NAME
+*      cl_disp_msgid_t
+*
+* DESCRIPTION
+*      Defines the type of dispatcher messages.
+*
+* SYNOPSIS
+*/
+typedef uint32_t cl_disp_msgid_t;
+/**********/
+
+/****s* Component Library: Dispatcher/CL_DISP_MSGID_NONE
+* NAME
+*      CL_DISP_MSGID_NONE
+*
+* DESCRIPTION
+*      Defines a message value that means "no message".
+*      This value is used during registration by Dispatcher clients
+*      that do not wish to receive messages.
+*
+*      No Dispatcher message is allowed to have this value.
+*
+* SYNOPSIS
+*/
+#define CL_DISP_MSGID_NONE     0xFFFFFFFF
+/**********/
+
+/****s* Component Library: Dispatcher/CL_DISP_INVALID_HANDLE
+* NAME
+*      CL_DISP_INVALID_HANDLE
+*
+* DESCRIPTION
+*      Defines the value of an invalid Dispatcher registration handle.
+*
+* SYNOPSIS
+*/
+#define CL_DISP_INVALID_HANDLE ((cl_disp_reg_handle_t)0)
+/*********/
+
+/****f* Component Library: Dispatcher/cl_pfn_msgrcv_cb_t
+* NAME
+*      cl_pfn_msgrcv_cb_t
+*
+* DESCRIPTION
+*      This typedef defines the prototype for client functions invoked
+*      by the Dispatcher.  The Dispatcher calls the corresponding
+*      client function when delivering a message to the client.
+*
+*      The client function must be reentrant if the user creates a
+*      Dispatcher with more than one worker thread.
+*
+* SYNOPSIS
+*/
+typedef void 
+(*cl_pfn_msgrcv_cb_t)(
+       IN      void*                           context,
+       IN      void*                           p_data );
+/*
+* PARAMETERS
+*      context
+*              [in] Client specific context specified in a call to
+*              cl_disp_register
+*
+*      p_data
+*              [in] Pointer to the client specific data payload
+*              of this message.
+*
+* RETURN VALUE
+*      This function does not return a value.
+*
+* NOTES
+*      This typedef provides a function prototype reference for
+*      the function provided by Dispatcher clients as a parameter
+*      to the cl_disp_register function.
+*
+* SEE ALSO
+*      Dispatcher, cl_disp_register
+*********/
+
+/****f* Component Library: Dispatcher/cl_pfn_msgdone_cb_t
+* NAME
+*      cl_pfn_msgdone_cb_t
+*
+* DESCRIPTION
+*      This typedef defines the prototype for client functions invoked
+*      by the Dispatcher.  The Dispatcher calls the corresponding
+*      client function after completing delivery of a message.
+*
+*      The client function must be reentrant if the user creates a
+*      Dispatcher with more than one worker thread.
+*
+* SYNOPSIS
+*/
+typedef void 
+(*cl_pfn_msgdone_cb_t)(
+       IN      void*                           context,
+       IN      void*                           p_data );
+/*
+* PARAMETERS
+*      context
+*              [in] Client specific context specified in a call to
+*              cl_disp_post
+*
+*      p_data
+*              [in] Pointer to the client specific data payload
+*              of this message.
+*
+* RETURN VALUE
+*      This function does not return a value.
+*
+* NOTES
+*      This typedef provides a function prototype reference for
+*      the function provided by Dispatcher clients as a parameter
+*      to the cl_disp_post function.
+*
+* SEE ALSO
+*      Dispatcher, cl_disp_post
+*********/
+
+/****s* Component Library: Dispatcher/cl_dispatcher_t
+* NAME
+*      cl_dispatcher_t
+*
+* DESCRIPTION
+*      Dispatcher structure.
+*
+*      The Dispatcher is thread safe.
+*
+*      The cl_dispatcher_t structure should be treated as opaque and should
+*      be manipulated only through the provided functions.
+*
+* SYNOPSIS
+*/
+typedef struct _cl_dispatcher
+{
+  cl_spinlock_t      lock;
+  cl_ptr_vector_t    reg_vec;
+  cl_qlist_t         reg_list;
+  cl_thread_pool_t   worker_threads;
+  cl_qlist_t         msg_fifo;
+  cl_qpool_t         msg_pool;
+  uint64_t           last_msg_queue_time_us;
+} cl_dispatcher_t;
+/*
+* FIELDS
+*      reg_vec
+*              Vector of registration info objects.  Indexed by message msg_id.
+*
+*      lock
+*              Spinlock to guard internal structures.
+*
+*      msg_fifo
+*              FIFO of messages being processed by the Dispatcher.  New
+*              messages are posted to the tail of the FIFO.  Worker threads
+*              pull messages from the front.
+*
+*      worker_threads
+*              Thread pool of worker threads to dispose of posted messages.
+*
+*      msg_pool
+*              Pool of message objects to be processed through the FIFO.
+*
+*      reg_count
+*              Count of the number of registrants.
+*
+*      state
+*              Indicates the state of the object.
+* 
+*       last_msg_queue_time_us
+*               The time that the last message spent in the Q in usec
+*      
+* SEE ALSO
+*      Dispatcher
+*********/
+
+/****s* Component Library: Dispatcher/cl_disp_reg_info_t
+* NAME
+*      cl_disp_reg_info_t
+*
+* DESCRIPTION
+*      Defines the dispatcher registration object structure.
+*
+*      The cl_disp_reg_info_t structure is for internal use by the
+*      Dispatcher only.
+*
+* SYNOPSIS
+*/
+typedef struct _cl_disp_reg_info
+{
+       cl_list_item_t                  list_item;
+       cl_pfn_msgrcv_cb_t              pfn_rcv_callback;
+       const void                              *context;
+       atomic32_t                              ref_cnt;
+       cl_disp_msgid_t                 msg_id;
+       cl_dispatcher_t                 *p_disp;
+
+} cl_disp_reg_info_t;
+/*
+* FIELDS
+*      pfn_rcv_callback
+*              Client's message receive callback.
+*
+*      context
+*              Client's context for message receive callback.
+*
+*      rcv_thread_count
+*              Number of threads currently in the receive callback.
+*
+*      msg_done_thread_count
+*              Number of threads currently in the message done callback.
+*
+*      state
+*              State of this registration object.
+*                      DISP_REGSTATE_INIT: initialized and inactive
+*                      DISP_REGSTATE_ACTIVE: in active use
+*                      DISP_REGSTATE_UNREGPEND: unregistration is pending
+*
+*      msg_id
+*              Dispatcher message msg_id value for this registration object.
+*
+*      p_disp
+*              Pointer to parent Dispatcher.
+*
+* SEE ALSO
+*********/
+
+/****s* Component Library: Dispatcher/cl_disp_msg_t
+* NAME
+*      cl_disp_msg_t
+*
+* DESCRIPTION
+*      Defines the dispatcher message structure.
+*
+*      The cl_disp_msg_t structure is for internal use by the
+*      Dispatcher only.
+*
+* SYNOPSIS
+*/
+typedef struct _cl_disp_msg
+{
+  cl_pool_item_t         item;
+  const void            *p_data;
+  cl_disp_reg_info_t    *p_src_reg;
+  cl_disp_reg_info_t    *p_dest_reg;
+  cl_pfn_msgdone_cb_t    pfn_xmt_callback;
+  uint64_t               in_time;
+  const void            *context;
+} cl_disp_msg_t;
+/*
+* FIELDS
+*      item
+*              List & Pool linkage.  Must be first element in the structure!!
+*
+*      msg_id
+*              The message's numberic ID value.
+*
+*      p_data
+*              Pointer to the data payload for this message.  The payload
+*              is opaque to the Dispatcher.
+*
+*      p_reg_info
+*              Pointer to the registration info of the sender.
+*
+*      pfn_xmt_callback
+*              Client's message done callback.
+*
+*       in_time 
+*               The absolute time the message was inserted into the queue
+*
+*      context
+*              Client's message done callback context.
+*              
+* SEE ALSO
+*********/
+
+/****s* Component Library: Dispatcher/cl_disp_reg_info_t
+* NAME
+*      cl_disp_reg_info_t
+*
+* DESCRIPTION
+*      Defines the Dispatcher registration handle.  This handle
+*      should be treated as opaque by the client.
+*
+* SYNOPSIS
+*/
+typedef const struct _cl_disp_reg_info *cl_disp_reg_handle_t;
+/**********/
+
+/****f* Component Library: Dispatcher/cl_disp_construct
+* NAME
+*      cl_disp_construct
+*
+* DESCRIPTION
+*      This function constructs a Dispatcher object.
+*
+* SYNOPSIS
+*/
+void
+cl_disp_construct(
+       IN      cl_dispatcher_t* const p_disp );
+/*
+* PARAMETERS
+*      p_disp
+*              [in] Pointer to a Dispatcher.
+*
+* RETURN VALUE
+*      This function does not return a value.
+*
+* NOTES
+*      Allows calling cl_disp_init and cl_disp_destroy.
+*
+* SEE ALSO
+*      Dispatcher, cl_disp_init, cl_disp_destroy
+*********/
+
+/****f* Component Library: Dispatcher/cl_disp_init
+* NAME
+*      cl_disp_init
+*
+* DESCRIPTION
+*      This function initializes a Dispatcher object.
+*
+* SYNOPSIS
+*/
+cl_status_t
+cl_disp_init(
+       IN      cl_dispatcher_t* const  p_disp,
+       IN      const uint32_t                  thread_count,
+    IN const char* const               name );
+/*
+* PARAMETERS
+*      p_disp
+*              [in] Pointer to a Dispatcher.
+*
+*      thread_count
+*              [in] The number of worker threads to create in this Dispatcher.
+*              A value of 0 causes the Dispatcher to create one worker thread
+*              per CPU in the system.  When the Dispatcher is created with
+*              only one thread, the Dispatcher guarantees to deliver posted
+*              messages in order.  When the Dispatcher is created with more
+*              than one thread, messages may be delivered out of order.
+*
+*      name
+*              [in] Name to associate with the threads.  The name may be up to 16
+*              characters, including a terminating null character.  All threads
+*              created in the Dispatcher have the same name.
+*
+* RETURN VALUE
+*      CL_SUCCESS if the operation is successful.
+*
+* SEE ALSO
+*      Dispatcher, cl_disp_destoy, cl_disp_register, cl_disp_unregister, 
+*      cl_disp_post
+*********/
+
+/****f* Component Library: Dispatcher/cl_disp_shutdown
+* NAME
+*      cl_disp_shutdown
+*
+* DESCRIPTION
+*      This function shutdown a Dispatcher object. So it unreg all messages and
+*  clears the fifo and waits for the threads to exit
+*
+* SYNOPSIS
+*/
+void
+cl_disp_shutdown(
+       IN cl_dispatcher_t* const p_disp );
+/*
+* PARAMETERS
+*      p_disp
+*              [in] Pointer to a Dispatcher.
+*
+* RETURN VALUE
+*      This function does not return a value.
+*
+* NOTES
+*      This function does not returns until all worker threads
+*      have exited client callback functions and been successfully
+*      shutdowned.
+*
+* SEE ALSO
+*      Dispatcher, cl_disp_construct, cl_disp_init
+*********/
+
+/****f* Component Library: Dispatcher/cl_disp_destroy
+* NAME
+*      cl_disp_destroy
+*
+* DESCRIPTION
+*      This function destroys a Dispatcher object.
+*
+* SYNOPSIS
+*/
+void
+cl_disp_destroy(
+       IN cl_dispatcher_t* const p_disp );
+/*
+* PARAMETERS
+*      p_disp
+*              [in] Pointer to a Dispatcher.
+*
+* RETURN VALUE
+*      This function does not return a value.
+*
+* SEE ALSO
+*      Dispatcher, cl_disp_construct, cl_disp_init
+*********/
+
+/****f* Component Library: Dispatcher/cl_disp_register
+* NAME
+*      cl_disp_register
+*
+* DESCRIPTION
+*      This function registers a client with a Dispatcher object.
+*
+* SYNOPSIS
+*/
+cl_disp_reg_handle_t
+cl_disp_register(
+       IN cl_dispatcher_t* const p_disp,
+       IN const cl_disp_msgid_t msg_id,
+       IN cl_pfn_msgrcv_cb_t pfn_callback OPTIONAL,
+       IN const void* const context );
+/*
+* PARAMETERS
+*      p_disp
+*              [in] Pointer to a Dispatcher.
+*
+*      msg_id
+*              [in] Numberic message ID for which the client is registering.
+*              If the client does not wish to receive any messages,
+*              (a send-only client) then the caller should set this value
+*              to CL_DISP_MSGID_NONE.  For efficiency, numeric message msg_id
+*              values should start with 0 and should be contiguous, or nearly so.
+*
+*      pfn_callback
+*              [in] Message receive callback.  The Dispatcher calls this
+*              function after receiving a posted message with the
+*              appropriate message msg_id value.  Send-only clients may specify
+*              NULL for this value.
+*
+*      context
+*              [in] Client context value passed to the cl_pfn_msgrcv_cb_t
+*              function.
+*
+* RETURN VALUE
+*      On success a Dispatcher registration handle.
+*      CL_CL_DISP_INVALID_HANDLE otherwise.
+*
+* SEE ALSO
+*      Dispatcher, cl_disp_unregister, cl_disp_post
+*********/
+
+/****f* Component Library: Dispatcher/cl_disp_unregister
+* NAME
+*      cl_disp_unregister
+*
+* DESCRIPTION
+*      This function unregisters a client from a Dispatcher.
+*
+* SYNOPSIS
+*/
+void
+cl_disp_unregister(
+       IN const cl_disp_reg_handle_t handle );
+/*
+* PARAMETERS
+*      handle
+*              [in] cl_disp_reg_handle_t value return by cl_disp_register.
+*
+* RETURN VALUE
+*      This function does not return a value.
+*
+* NOTES
+*      This function will not return until worker threads have exited
+*      the callback functions for this client.  Do not invoke this
+*      function from a callback.
+*
+* SEE ALSO
+*      Dispatcher, cl_disp_register
+*********/
+
+/****f* Component Library: Dispatcher/cl_disp_post
+* NAME
+*      cl_disp_post
+*
+* DESCRIPTION
+*      This function posts a message to a Dispatcher object.
+*
+* SYNOPSIS
+*/
+cl_status_t
+cl_disp_post(
+       IN const cl_disp_reg_handle_t handle,
+       IN const cl_disp_msgid_t msg_id,
+       IN const void* const p_data,
+       IN cl_pfn_msgdone_cb_t pfn_callback OPTIONAL,
+       IN const void* const context );
+/*
+* PARAMETERS
+*      handle
+*              [in] cl_disp_reg_handle_t value return by cl_disp_register.
+*
+*      msg_id
+*              [in] Numeric message msg_id value associated with this message.
+*
+*      p_data
+*              [in] Data payload for this message.
+*
+*      pfn_callback
+*              [in] Pointer to a cl_pfn_msgdone_cb_t function.
+*              The Dispatcher calls this function after the message has been
+*              processed by the recipient.
+*              The caller may pass NULL for this value, which indicates no
+*              message done callback is necessary.
+*
+*      context
+*              [in] Client context value passed to the cl_pfn_msgdone_cb_t
+*              function.
+*      
+* RETURN VALUE
+*      CL_SUCCESS if the message was successfully queued in the Dispatcher.
+*
+* NOTES
+*      The caller must not modify the memory pointed to by p_data until
+*      the Dispatcher call the pfn_callback function.
+*
+* SEE ALSO
+*      Dispatcher
+*********/
+
+/****f* Component Library: Dispatcher/cl_disp_get_queue_status
+* NAME
+*      cl_disp_get_queue_status
+*
+* DESCRIPTION
+*      This function posts a message to a Dispatcher object.
+*
+* SYNOPSIS
+*/
+void
+cl_disp_get_queue_status(
+  IN const cl_disp_reg_handle_t handle,
+  OUT uint32_t *p_num_queued_msgs,
+  OUT uint64_t *p_last_msg_queue_time_ms);
+/*
+* PARAMETERS
+*   handle
+*     [in] cl_disp_reg_handle_t value return by cl_disp_register.
+*
+*   p_last_msg_queue_time_ms
+*     [out] pointer to a variable to hold the time the last popped up message 
+*           spent in the queue 
+*
+*   p_num_queued_msgs
+*     [out] number of messages in the queue
+*
+* RETURN VALUE
+*      Thr time the last popped up message stayed in the queue, in msec
+*
+* NOTES
+*      Extarnel Locking is not required.
+*
+* SEE ALSO
+*      Dispatcher
+*********/
+
+END_C_DECLS
+
+#endif /* !defined(_CL_DISPATCHER_H_) */
+
diff --git a/ulp/opensm/user/include/complib/cl_event_wheel.h b/ulp/opensm/user/include/complib/cl_event_wheel.h
new file mode 100644 (file)
index 0000000..129eadd
--- /dev/null
@@ -0,0 +1,493 @@
+/*
+ * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2002-2006 Mellanox Technologies LTD. All rights reserved.
+ * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
+ *
+ * This software is available to you under the OpenIB.org BSD license
+ * below:
+ *
+ *     Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *      - Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *
+ *      - Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * $Id$
+ */
+
+
+/*
+ * Abstract:
+ *     Declaration of event wheel abstraction.
+ * 
+ * Environment:
+ *     All
+ *
+ * $Revision: 1.4 $
+ */
+
+#ifndef _CL_EVENT_WHEEL_H_
+#define _CL_EVENT_WHEEL_H_
+
+#include <complib/cl_atomic.h>
+#include <complib/cl_qlist.h>
+#include <complib/cl_qmap.h>
+#include <complib/cl_timer.h>
+#include <complib/cl_spinlock.h>
+#include <opensm/osm_log.h>
+
+#ifdef __cplusplus
+#  define BEGIN_C_DECLS extern "C" {
+#  define END_C_DECLS   }
+#else /* !__cplusplus */
+#  define BEGIN_C_DECLS
+#  define END_C_DECLS
+#endif /* __cplusplus */
+
+BEGIN_C_DECLS
+
+/****h* Component Library/Event_Wheel
+* NAME
+*      Event_Wheel
+*
+* DESCRIPTION
+*      The Event_Wheel provides a facility for registering delayed events
+*      and getting called once they timeout.
+*
+*      The Event_Wheel functions operate on a cl_event_wheel_t structure
+*      which should be treated as opaque and should be manipulated
+*      only through the provided functions.
+*
+* SEE ALSO
+*      Structures:
+*              cl_event_wheel_t
+*
+*      Initialization/Destruction:
+*              cl_event_wheel_construct, cl_event_wheel_init, cl_event_wheel_destroy
+*
+*      Manipulation:
+*              cl_event_wheel_reg, cl_event_wheel_unreg
+*
+*********/
+
+/****f* Component Library: Event_Wheel/cl_pfn_event_aged_cb_t
+* NAME
+*      cl_pfn_event_aged_cb_t
+*
+* DESCRIPTION
+*      This typedef defines the prototype for client functions invoked
+*      by the Event_Wheel.  The Event_Wheel calls the corresponding
+*      client function when the specific item has aged.
+*
+* SYNOPSIS
+*/
+typedef uint64_t
+(*cl_pfn_event_aged_cb_t)(
+  IN  uint64_t       key,
+  IN  uint32_t       num_regs,
+  IN   void*                           context);
+/*
+* PARAMETERS
+*  key
+*     [in] The key used for registering the item in the call to
+*     cl_event_wheel_reg
+*
+*  num_regs
+*     [in] The number of times this event was registered (pushed in time).
+*
+*      context
+*              [in] Client specific context specified in a call to
+*              cl_event_wheel_reg
+*
+* RETURN VALUE
+*      This function returns the abosolute time the event should fire in [usec].
+*  If lower then current time means the event should be unregistered
+*  immediatly.
+*
+* NOTES
+*      This typedef provides a function prototype reference for
+*      the function provided by Event_Wheel clients as a parameter
+*      to the cl_event_wheel_reg function.
+*
+* SEE ALSO
+*      Event_Wheel, cl_event_wheel_reg
+*********/
+
+/****s* Component Library: Event_Wheel/cl_event_wheel_t
+* NAME
+*      cl_event_wheel_t
+*
+* DESCRIPTION
+*      Event_Wheel structure.
+*
+*      The Event_Wheel is thread safe.
+*
+*      The cl_event_wheel_t structure should be treated as opaque and should
+*      be manipulated only through the provided functions.
+*
+* SYNOPSIS
+*/
+typedef struct _cl_event_wheel
+{
+  cl_spinlock_t                   lock;
+  cl_spinlock_t           *p_external_lock;
+    
+  cl_qmap_t                events_map;
+  boolean_t                closing;
+  cl_qlist_t               events_wheel;
+  cl_timer_t               timer;
+  osm_log_t                *p_log;
+} cl_event_wheel_t;
+/*
+* FIELDS
+*      lock
+*              Spinlock to guard internal structures.
+*
+*       p_external_lock
+*               Reference to external spinlock to guard internal structures
+*               if the event wheel is part of a larger object protected by its own lock
+*
+*      events_map
+*              A Map holding all registered event items by their key.
+*
+*  closing 
+*     A flag indicating the event wheel is closing. This means that
+*     callbacks that are called when closing == TRUE should just be ignored.
+*
+*      events_wheel
+*              A list of the events sorted by expiration time.
+*
+*      timer
+*              The timer scheduling event time propagation.
+*
+*  p_log
+*     Pointer to opensm log object.
+*
+* SEE ALSO
+*      Event_Wheel
+*********/
+
+/****s* Component Library: Event_Wheel/cl_event_wheel_reg_info_t
+* NAME
+*      cl_event_wheel_reg_info_t
+*
+* DESCRIPTION
+*      Defines the event_wheel registration object structure.
+*
+*      The cl_event_wheel_reg_info_t structure is for internal use by the
+*      Event_Wheel only.
+*
+* SYNOPSIS
+*/
+typedef struct _cl_event_wheel_reg_info
+{
+  cl_map_item_t          map_item;
+  cl_list_item_t                        list_item;
+  uint64_t               key;
+  cl_pfn_event_aged_cb_t pfn_aged_callback;
+  uint64_t               aging_time;
+  uint32_t               num_regs;
+  void                                *context;
+  cl_event_wheel_t              *p_event_wheel;
+} cl_event_wheel_reg_info_t;
+/*
+* FIELDS
+*  map_item 
+*     The map item of this event 
+*
+*  list_item
+*     The sorted by aging time list item
+*
+*  key
+*     The key by which one can find the event
+*
+*      pfn_aged_callback
+*              The clients Event-Aged callback
+*
+*  aging_time
+*     The delta time [msec] for which the event should age.
+*
+*  num_regs
+*     The number of times the same event (key) was registered
+*
+*      context
+*              Client's context for event-aged callback.
+*
+*      p_event_wheel
+*              Pointer to this event wheel object
+*
+* SEE ALSO
+*********/
+
+/****f* Component Library: Event_Wheel/cl_event_wheel_construct
+* NAME
+*      cl_event_wheel_construct
+*
+* DESCRIPTION
+*      This function constructs a Event_Wheel object.
+*
+* SYNOPSIS
+*/
+void
+cl_event_wheel_construct(
+       IN      cl_event_wheel_t* const p_event_wheel );
+/*
+* PARAMETERS
+*      p_event_wheel
+*              [in] Pointer to a Event_Wheel.
+*
+* RETURN VALUE
+*      This function does not return a value.
+*
+* NOTES
+*      Allows calling cl_event_wheel_init and cl_event_wheel_destroy.
+*
+* SEE ALSO
+*      Event_Wheel, cl_event_wheel_init, cl_event_wheel_destroy
+*********/
+
+/****f* Component Library: Event_Wheel/cl_event_wheel_init
+* NAME
+*      cl_event_wheel_init
+*
+* DESCRIPTION
+*      This function initializes a Event_Wheel object.
+*
+* SYNOPSIS
+*/
+cl_status_t
+cl_event_wheel_init(
+  IN   cl_event_wheel_t* const p_event_wheel,
+  IN    osm_log_t               *p_log);
+
+/*
+* PARAMETERS
+*      p_event_wheel
+*              [in] Pointer to a Event_Wheel.
+*
+*  p_log
+*     [in] Pointer to opensm log object to be used for logging
+*
+* RETURN VALUE
+*      CL_SUCCESS if the operation is successful.
+*
+* SEE ALSO
+*      Event_Wheel, cl_event_wheel_destoy, cl_event_wheel_reg, cl_event_wheel_unreg
+*      
+*********/
+
+/****f* Component Library: Event_Wheel/cl_event_wheel_init
+* NAME
+*      cl_event_wheel_init
+*
+* DESCRIPTION
+*      This function initializes a Event_Wheel object.
+*
+* SYNOPSIS
+*/
+cl_status_t
+cl_event_wheel_init_ex(
+  IN   cl_event_wheel_t* const p_event_wheel,
+  IN    osm_log_t               *p_log,
+  IN    cl_spinlock_t           *p_external_lock);
+
+/*
+* PARAMETERS
+*  p_event_wheel
+*     [in] Pointer to a Event_Wheel.
+*
+*  p_log
+*     [in] Pointer to opensm log object to be used for logging
+*
+*  p_external_lock
+*     [in] Reference to external spinlock to guard internal structures
+*          if the event wheel is part of a larger object protected by its own lock
+*
+* RETURN VALUE
+*      CL_SUCCESS if the operation is successful.
+*
+* SEE ALSO
+*      Event_Wheel, cl_event_wheel_destoy, cl_event_wheel_reg, cl_event_wheel_unreg
+*      
+*********/
+
+/****f* Component Library: Event_Wheel/cl_event_wheel_destroy
+* NAME
+*      cl_event_wheel_destroy
+*
+* DESCRIPTION
+*      This function destroys a Event_Wheel object.
+*
+* SYNOPSIS
+*/
+void
+cl_event_wheel_destroy(
+       IN cl_event_wheel_t* const p_event_wheel );
+/*
+* PARAMETERS
+*      p_event_wheel
+*              [in] Pointer to a Event_Wheel.
+*
+* RETURN VALUE
+*      This function does not return a value.
+*
+* NOTES
+*      This function does not returns until all client callback functions
+*  been successfully finished.
+*
+* SEE ALSO
+*      Event_Wheel, cl_event_wheel_construct, cl_event_wheel_init
+*********/
+
+/****f* Component Library: Event_Wheel/cl_event_wheel_dump
+* NAME
+*      cl_event_wheel_dump
+*
+* DESCRIPTION
+*      This function dumps the details of an Event_Whell object.
+*
+* SYNOPSIS
+*/
+void
+cl_event_wheel_dump(
+       IN cl_event_wheel_t* const p_event_wheel );
+/*
+* PARAMETERS
+*      p_event_wheel
+*              [in] Pointer to a Event_Wheel.
+*
+* RETURN VALUE
+*      This function does not return a value.
+*
+* NOTES
+*      Note that this function should be called inside a lock of the event wheel!
+*  It doesn't aquire the lock by itself. 
+*
+* SEE ALSO
+*      Event_Wheel, cl_event_wheel_construct, cl_event_wheel_init
+*********/
+
+/****f* Component Library: Event_Wheel/cl_event_wheel_reg
+* NAME
+*      cl_event_wheel_reg
+*
+* DESCRIPTION
+*      This function registers a client with a Event_Wheel object.
+*
+* SYNOPSIS
+*/
+cl_status_t
+cl_event_wheel_reg(
+       IN cl_event_wheel_t* const p_event_wheel,
+       IN const uint64_t          key,
+       IN const uint64_t          aging_time_usec,
+       IN cl_pfn_event_aged_cb_t  pfn_callback,
+       IN void* const context );
+/*
+* PARAMETERS
+*      p_event_wheel
+*              [in] Pointer to a Event_Wheel.
+*
+*      key
+*              [in] The specifc Key by which events are registered.
+*
+*  aging_time_usec
+*     [in] The absolute time this event should age in usec
+*
+*      pfn_callback
+*              [in] Event Aging callback.  The Event_Wheel calls this
+*              function after the time the event has registed for has come.
+*
+*      context
+*              [in] Client context value passed to the cl_pfn_event_aged_cb_t
+*              function.
+*
+* RETURN VALUE
+*      On success a Event_Wheel CL_SUCCESS or CL_ERROR otherwise.
+*
+* SEE ALSO
+*      Event_Wheel, cl_event_wheel_unreg
+*********/
+
+/****f* Component Library: Event_Wheel/cl_event_wheel_unreg
+* NAME
+*      cl_event_wheel_unreg
+*
+* DESCRIPTION
+*      This function unregisters a client event from a Event_Wheel.
+*
+* SYNOPSIS
+*/
+void
+cl_event_wheel_unreg(
+  IN cl_event_wheel_t* const p_event_wheel,
+  IN uint64_t key );
+/*
+* PARAMETERS
+*      p_event_wheel
+*              [in] Pointer to a Event_Wheel.
+*
+*      key
+*              [in] The key used for registering the event
+*
+* RETURN VALUE
+*      This function does not return a value.
+*
+* NOTES
+*  After the event has aged it is automatically removed from 
+*  the event wheel. So it should only be invoked when the need arises
+*  to remove existing events before they age.
+*
+* SEE ALSO
+*      Event_Wheel, cl_event_wheel_reg
+*********/
+
+/****f* Component Library: Event_Wheel/cl_event_wheel_num_regs
+* NAME
+*      cl_event_wheel_num_regs
+*
+* DESCRIPTION
+*      This function returns the number of times an event was registered.
+*
+* SYNOPSIS
+*/
+uint32_t 
+cl_event_wheel_num_regs(
+  IN cl_event_wheel_t* const p_event_wheel,
+  IN uint64_t key );
+/*
+* PARAMETERS
+*      p_event_wheel
+*              [in] Pointer to a Event_Wheel.
+*
+*      key
+*              [in] The key used for registering the event
+*
+* RETURN VALUE
+*      The number of times the event was registered.
+*  0 if never registered or eventually aged.
+*
+* SEE ALSO
+*      Event_Wheel, cl_event_wheel_reg, cl_event_wheel_unreg
+*********/
+
+END_C_DECLS
+
+#endif /* !defined(_CL_EVENT_WHEEL_H_) */
+
index 691e41a..9dd1ed6 100644 (file)
@@ -39,7 +39,6 @@
 #include <string.h>
 #include <complib/cl_types.h>
 #include <complib/cl_byteswap.h>
-#include <complib/cl_memory.h>
 
 #ifdef __cplusplus
 #  define BEGIN_C_DECLS extern "C" {
@@ -53,25 +52,16 @@ BEGIN_C_DECLS
 
 #if defined( WIN32 ) || defined( _WIN64 )
     #if defined( EXPORT_AL_SYMBOLS )
-         #define AL_EXPORT     __declspec(dllexport)
+         #define OSM_EXPORT    __declspec(dllexport)
     #else
-         #define AL_EXPORT     __declspec(dllimport)
+         #define OSM_EXPORT    __declspec(dllimport)
     #endif
-
-    #ifdef CL_KERNEL
-        #define AL_API
-        #define AL_INLINE      static inline
-    #else
-        #define AL_API         __stdcall
-        #define AL_INLINE      static inline
-        /* Defined for some unique access function that are defined only in osm ib_types */
-        #define OSM_INLINE static inline
-    #endif     /* CL_KERNEL */
+    #define OSM_API __stdcall
+    #define OSM_CDECL __cdecl
 #else
-    #define AL_EXPORT  extern
-    #define AL_INLINE  static inline
-    #define OSM_INLINE static inline
-    #define AL_API
+    #define OSM_EXPORT extern
+    #define OSM_API
+    #define OSM_CDECL
     #define __ptr64
 #endif
 
@@ -538,6 +528,30 @@ BEGIN_C_DECLS
 #define IB_MCLASS_VENDOR_LOW_RANGE_MAX 0x0f
 /**********/
 
+/****d* IBA Base: Constants/IB_MCLASS_DEV_ADM
+* NAME
+*      IB_MCLASS_DEV_ADM
+*
+* DESCRIPTION
+*      Subnet Management Class, Device Administration
+*
+* SOURCE
+*/
+#define IB_MCLASS_DEV_ADM 0x10
+/**********/
+
+/****d* IBA Base: Constants/IB_MCLASS_BIS
+* NAME
+*      IB_MCLASS_BIS
+*
+* DESCRIPTION
+*      Subnet Management Class, BIS
+*
+* SOURCE
+*/
+#define IB_MCLASS_BIS 0x12
+/**********/
+
 /****d* IBA Base: Constants/IB_MCLASS_VENDOR_HIGH_RANGE_MIN
 * NAME
 *      IB_MCLASS_VENDOR_HIGH_RANGE_MIN
@@ -572,7 +586,7 @@ BEGIN_C_DECLS
 *
 * SYNOPSIS
 */
-AL_INLINE boolean_t     AL_API
+static inline boolean_t        OSM_API
 ib_class_is_vendor_specific_low(
        IN              const   uint8_t class_code )
 {
@@ -604,7 +618,7 @@ ib_class_is_vendor_specific_low(
 *
 * SYNOPSIS
 */
-AL_INLINE boolean_t     AL_API
+static inline boolean_t        OSM_API
 ib_class_is_vendor_specific_high(
        IN              const   uint8_t class_code )
 {
@@ -636,7 +650,7 @@ ib_class_is_vendor_specific_high(
 *
 * SYNOPSIS
 */
-AL_INLINE boolean_t     AL_API
+static inline boolean_t        OSM_API
 ib_class_is_vendor_specific(
        IN              const   uint8_t class_code )
 {
@@ -658,6 +672,38 @@ ib_class_is_vendor_specific(
 *  ib_class_is_vendor_specific_low, ib_class_is_vendor_specific_high
 *********/
 
+/****f* IBA Base: Types/ib_class_is_rmpp
+* NAME
+*      ib_class_is_rmpp
+*
+* DESCRIPTION
+*      Indicates if the Class Code supports RMPP
+*
+* SYNOPSIS
+*/
+static inline boolean_t        OSM_API
+ib_class_is_rmpp(
+        IN              const   uint8_t class_code )
+{
+       return( (class_code == IB_MCLASS_SUBN_ADM) ||
+               (class_code == IB_MCLASS_DEV_MGMT) ||
+               (class_code == IB_MCLASS_DEV_ADM) ||
+               (class_code == IB_MCLASS_BIS) ||
+               ib_class_is_vendor_specific_high( class_code ) ); 
+}
+/*
+* PARAMETERS
+*      class_code
+*              [in] The Management Datagram Class Code
+*
+* RETURN VALUE
+*      TRUE if the class supports RMPP
+*      FALSE otherwise.
+*
+* NOTES
+*
+*********/
+
 /*
  *     MAD methods
  */
@@ -1127,6 +1173,18 @@ ib_class_is_vendor_specific(
 #define IB_MAD_ATTR_PORTINFO_RECORD                    (CL_NTOH16(0x0012))
 /**********/
 
+/****d* IBA Base: Constants/IB_MAD_ATTR_SWITCH_INFO_RECORD
+* NAME
+*       IB_MAD_ATTR_SWITCH_INFO_RECORD
+*
+* DESCRIPTION
+*       SwitchInfoRecord attribute (15.2.5)
+*
+* SOURCE
+*/
+#define IB_MAD_ATTR_SWITCH_INFO_RECORD                 (CL_NTOH16(0x0014))
+/**********/
+
 /****d* IBA Base: Constants/IB_MAD_ATTR_LINK_RECORD
 * NAME
 *      IB_MAD_ATTR_LINK_RECORD
@@ -1223,6 +1281,18 @@ ib_class_is_vendor_specific(
 #define IB_MAD_ATTR_LFT_RECORD                         (CL_NTOH16(0x0015))
 /**********/
 
+/****d* IBA Base: Constants/IB_MAD_ATTR_MFT_RECORD
+* NAME
+*       IB_MAD_ATTR_MFT_RECORD
+*
+* DESCRIPTION
+*       MulticastForwardingTableRecord attribute (15.2.5.8)
+*
+* SOURCE
+*/
+#define IB_MAD_ATTR_MFT_RECORD                         (CL_NTOH16(0x0017))
+/**********/
+
 /****d* IBA Base: Constants/IB_MAD_ATTR_PKEYTBL_RECORD
 * NAME
 *      IB_MAD_ATTR_PKEYTBL_RECORD
@@ -1285,7 +1355,7 @@ ib_class_is_vendor_specific(
 
 /****d* IBA Base: Constants/IB_MAD_ATTR_TRACE_RECORD
 * NAME
-*      IB_MAD_ATTR_MTRACE_RECORD
+*      IB_MAD_ATTR_TRACE_RECORD
 *
 * DESCRIPTION
 *      TraceRecord attribute (15.2.5)
@@ -1319,6 +1389,17 @@ ib_class_is_vendor_specific(
 #define IB_MAD_ATTR_SVC_ASSOCIATION_RECORD             (CL_NTOH16(0x003B))
 /**********/
 
+/****d* IBA Base: Constants/IB_MAD_ATTR_INFORM_INFO_RECORD
+* NAME
+*      IB_MAD_ATTR_INFORM_INFO_RECORD
+*
+* DESCRIPTION
+*      InformInfo Record attribute (15.2.5)
+*
+* SOURCE
+*/
+#define IB_MAD_ATTR_INFORM_INFO_RECORD                 (CL_NTOH16(0x00F3))
+
 /****d* IBA Base: Constants/IB_MAD_ATTR_IO_UNIT_INFO
 * NAME
 *      IB_MAD_ATTR_IO_UNIT_INFO
@@ -1617,6 +1698,18 @@ ib_class_is_vendor_specific(
 * SOURCE
 */
 #define IB_PATH_REC_SELECTOR_MASK                      0xC0
+
+/****d* IBA Base: Constants/IB_MULTIPATH_REC_SELECTOR_MASK
+* NAME
+*       IB_MULTIPATH_REC_SELECTOR_MASK
+*
+* DESCRIPTION
+*       Mask for the selector field for multipath record MTU, rate,
+*       and packet lifetime.
+*
+* SOURCE
+*/
+#define IB_MULTIPATH_REC_SELECTOR_MASK                       0xC0
 /**********/
 
 /****d* IBA Base: Constants/IB_PATH_REC_BASE_MASK
@@ -1632,6 +1725,19 @@ ib_class_is_vendor_specific(
 #define IB_PATH_REC_BASE_MASK                          0x3F
 /**********/
 
+/****d* IBA Base: Constants/IB_MULTIPATH_REC_BASE_MASK
+* NAME
+*       IB_MULTIPATH_REC_BASE_MASK
+*
+* DESCRIPTION
+*       Mask for the base value field for multipath record MTU, rate,
+*       and packet lifetime.
+*
+* SOURCE
+*/
+#define IB_MULTIPATH_REC_BASE_MASK                      0x3F
+/**********/
+
 /****h* IBA Base/Type Definitions
 * NAME
 *      Type Definitions
@@ -1723,7 +1829,7 @@ static const char* const __ib_node_type_str[] =
 *
 * SYNOPSIS
 */
-AL_INLINE const char*    AL_API
+static inline const char*      OSM_API
 ib_get_node_type_str(
        IN uint32_t node_type )
 {
@@ -1765,7 +1871,7 @@ static const char* const __ib_port_state_str[] =
 *
 * SYNOPSIS
 */
-AL_INLINE const char*    AL_API
+static inline const char*      OSM_API
 ib_get_port_state_str(
        IN                              uint8_t                                         port_state )
 {
@@ -1796,7 +1902,7 @@ ib_get_port_state_str(
 *
 * SYNOPSIS
 */
-AL_INLINE uint8_t    AL_API
+static inline uint8_t  OSM_API
 ib_get_port_state_from_str(
        IN                              char*                                           p_port_state_str )
 {
@@ -1851,7 +1957,7 @@ ib_get_port_state_from_str(
 *
 * SYNOPSIS
 */
-AL_INLINE ib_net16_t     AL_API
+static inline ib_net16_t       OSM_API
 ib_pkey_get_base(
        IN      const   ib_net16_t              pkey )
 {
@@ -1879,7 +1985,7 @@ ib_pkey_get_base(
 *
 * SYNOPSIS
 */
-AL_INLINE boolean_t     AL_API
+static inline boolean_t        OSM_API
 ib_pkey_is_full_member(
        IN      const   ib_net16_t              pkey )
 {
@@ -1911,7 +2017,7 @@ ib_pkey_is_full_member(
 *
 * SYNOPSIS
 */
-OSM_INLINE boolean_t     AL_API
+static inline boolean_t        OSM_API
 ib_pkey_is_invalid(
        IN      const   ib_net16_t              pkey )
 {
@@ -1976,13 +2082,56 @@ typedef union _ib_gid
 * SEE ALSO
 *********/
 
-AL_INLINE boolean_t     AL_API
+/****f* IBA Base: Types/ib_gid_is_multicast
+* NAME
+*      ib_gid_is_multicast
+*
+* DESCRIPTION
+*       Returns a boolean indicating whether a GID is a multicast GID.
+*
+* SYNOPSIS
+*/
+static inline boolean_t        OSM_API
 ib_gid_is_multicast(
        IN      const   ib_gid_t*               p_gid )
 {
        return( p_gid->raw[0] == 0xFF );
 }
 
+/****f* IBA Base: Types/ib_gid_get_scope
+* NAME
+*      ib_gid_get_scope
+*
+* DESCRIPTION
+*      Returns scope of (assumed) multicast GID.
+*
+* SYNOPSIS
+*/
+static inline uint8_t OSM_API
+ib_mgid_get_scope(
+       IN      const   ib_gid_t*               p_gid )
+{
+       return( p_gid->raw[1] & 0x0F );
+}
+
+/****f* IBA Base: Types/ib_gid_set_scope
+* NAME
+*      ib_gid_set_scope
+*
+* DESCRIPTION
+*      Sets scope of (assumed) multicast GID.
+*
+* SYNOPSIS
+*/
+static inline void OSM_API
+ib_mgid_set_scope(
+        IN             ib_gid_t* const         p_gid,
+       IN      const   uint8_t                 scope )
+{
+       p_gid->raw[1] &= 0xF0;
+       p_gid->raw[1] |= scope & 0x0F;
+}
+
 /****f* IBA Base: Types/ib_gid_set_default
 * NAME
 *      ib_gid_set_default
@@ -1992,7 +2141,7 @@ ib_gid_is_multicast(
 *
 * SYNOPSIS
 */
-AL_INLINE void     AL_API
+static inline void     OSM_API
 ib_gid_set_default(
        IN              ib_gid_t* const         p_gid,
        IN      const   ib_net64_t              interface_id )
@@ -2026,7 +2175,7 @@ ib_gid_set_default(
 *
 * SYNOPSIS
 */
-AL_INLINE ib_net64_t     AL_API
+static inline ib_net64_t       OSM_API
 ib_gid_get_subnet_prefix(
        IN      const   ib_gid_t* const         p_gid )
 {
@@ -2056,11 +2205,12 @@ ib_gid_get_subnet_prefix(
 *
 * SYNOPSIS
 */
-AL_INLINE boolean_t     AL_API
+static inline boolean_t        OSM_API
 ib_gid_is_link_local(
        IN      const   ib_gid_t* const         p_gid )
 {
-       return( ib_gid_get_subnet_prefix( p_gid ) == IB_DEFAULT_SUBNET_PREFIX );
+       return( ( ib_gid_get_subnet_prefix( p_gid ) &
+               CL_HTON64( 0xFFC0000000000000ULL ) ) == IB_DEFAULT_SUBNET_PREFIX );
 }
 /*
 * PARAMETERS
@@ -2087,7 +2237,7 @@ ib_gid_is_link_local(
 *
 * SYNOPSIS
 */
-AL_INLINE boolean_t     AL_API
+static inline boolean_t        OSM_API
 ib_gid_is_site_local(
        IN      const   ib_gid_t* const         p_gid )
 {
@@ -2100,7 +2250,7 @@ ib_gid_is_site_local(
 *              [in] Pointer to the GID object.
 *
 * RETURN VALUES
-*      Returns TRUE if the unicast GID scoping indicates link local,
+*      Returns TRUE if the unicast GID scoping indicates site local,
 *      FALSE otherwise.
 *
 * NOTES
@@ -2118,7 +2268,7 @@ ib_gid_is_site_local(
 *
 * SYNOPSIS
 */
-AL_INLINE ib_net64_t     AL_API
+static inline ib_net64_t       OSM_API
 ib_gid_get_guid(
        IN      const   ib_gid_t* const         p_gid )
 {
@@ -2252,7 +2402,7 @@ typedef struct _ib_path_rec
 #define IB_LR_COMPMASK_TO_PORT            (CL_HTON64(((uint64_t)1)<<2))
 #define IB_LR_COMPMASK_TO_LID             (CL_HTON64(((uint64_t)1)<<3))
 
-/* VL Arbitration Record MASKs */
+/* VL Arbitration Record Masks */
 #define IB_VLA_COMPMASK_LID               (CL_HTON64(((uint64_t)1)<<0))
 #define IB_VLA_COMPMASK_OUT_PORT          (CL_HTON64(((uint64_t)1)<<1))
 #define IB_VLA_COMPMASK_BLOCK             (CL_HTON64(((uint64_t)1)<<2))
@@ -2267,10 +2417,21 @@ typedef struct _ib_path_rec
 #define IB_PKEY_COMPMASK_BLOCK            (CL_HTON64(((uint64_t)1)<<1))
 #define IB_PKEY_COMPMASK_PORT             (CL_HTON64(((uint64_t)1)<<2))
 
+/* Switch Info Record Masks */
+#define IB_SWIR_COMPMASK_LID             (CL_HTON64(((uint64_t)1)<<0))
+#define IB_SWIR_COMPMASK_RESERVED1       (CL_HTON64(((uint64_t)1)<<1))
+
 /* LFT Record Masks */
 #define IB_LFTR_COMPMASK_LID              (CL_HTON64(((uint64_t)1)<<0))
 #define IB_LFTR_COMPMASK_BLOCK            (CL_HTON64(((uint64_t)1)<<1))
 
+/* MFT Record Masks */
+#define IB_MFTR_COMPMASK_LID             (CL_HTON64(((uint64_t)1)<<0))
+#define IB_MFTR_COMPMASK_POSITION        (CL_HTON64(((uint64_t)1)<<1))
+#define IB_MFTR_COMPMASK_RESERVED1       (CL_HTON64(((uint64_t)1)<<2))
+#define IB_MFTR_COMPMASK_BLOCK           (CL_HTON64(((uint64_t)1)<<3))
+#define IB_MFTR_COMPMASK_RESERVED2       (CL_HTON64(((uint64_t)1)<<4))
+
 /* NodeInfo Record Masks */
 #define IB_NR_COMPMASK_LID                (CL_HTON64(((uint64_t)1)<<0))
 #define IB_NR_COMPMASK_RESERVED1          (CL_HTON64(((uint64_t)1)<<1))
@@ -2413,6 +2574,59 @@ typedef struct _ib_path_rec
 #define IB_GIR_COMPMASK_GID6           (CL_HTON64(((uint64_t)1)<<10))
 #define IB_GIR_COMPMASK_GID7           (CL_HTON64(((uint64_t)1)<<11))
 
+/* MultiPath Record Component Masks */
+#define IB_MPR_COMPMASK_RAWTRAFFIC     (CL_HTON64(((uint64_t)1)<<0))
+#define IB_MPR_COMPMASK_RESV0          (CL_HTON64(((uint64_t)1)<<1))
+#define IB_MPR_COMPMASK_FLOWLABEL      (CL_HTON64(((uint64_t)1)<<2))
+#define IB_MPR_COMPMASK_HOPLIMIT       (CL_HTON64(((uint64_t)1)<<3))
+#define IB_MPR_COMPMASK_TCLASS         (CL_HTON64(((uint64_t)1)<<4))
+#define IB_MPR_COMPMASK_REVERSIBLE     (CL_HTON64(((uint64_t)1)<<5))
+#define IB_MPR_COMPMASK_NUMBPATH       (CL_HTON64(((uint64_t)1)<<6))
+#define IB_MPR_COMPMASK_PKEY           (CL_HTON64(((uint64_t)1)<<7))
+#define IB_MPR_COMPMASK_RESV1          (CL_HTON64(((uint64_t)1)<<8))
+#define IB_MPR_COMPMASK_SL             (CL_HTON64(((uint64_t)1)<<9))
+#define IB_MPR_COMPMASK_MTUSELEC       (CL_HTON64(((uint64_t)1)<<10))
+#define IB_MPR_COMPMASK_MTU            (CL_HTON64(((uint64_t)1)<<11))
+#define IB_MPR_COMPMASK_RATESELEC      (CL_HTON64(((uint64_t)1)<<12))
+#define IB_MPR_COMPMASK_RATE           (CL_HTON64(((uint64_t)1)<<13))
+#define IB_MPR_COMPMASK_PKTLIFETIMESELEC (CL_HTON64(((uint64_t)1)<<14))
+#define IB_MPR_COMPMASK_PKTLIFETIME    (CL_HTON64(((uint64_t)1)<<15))
+#define IB_MPR_COMPMASK_RESV2          (CL_HTON64(((uint64_t)1)<<16))
+#define IB_MPR_COMPMASK_INDEPSELEC     (CL_HTON64(((uint64_t)1)<<17))
+#define IB_MPR_COMPMASK_RESV3          (CL_HTON64(((uint64_t)1)<<18))
+#define IB_MPR_COMPMASK_SGIDCOUNT      (CL_HTON64(((uint64_t)1)<<19))
+#define IB_MPR_COMPMASK_DGIDCOUNT      (CL_HTON64(((uint64_t)1)<<20))
+#define IB_MPR_COMPMASK_RESV4          (CL_HTON64(((uint64_t)1)<<21))
+
+/* SMInfo Record Component Masks */
+#define IB_SMIR_COMPMASK_LID           (CL_HTON64(((uint64_t)1)<<0))
+#define IB_SMIR_COMPMASK_RESV0         (CL_HTON64(((uint64_t)1)<<1))
+#define IB_SMIR_COMPMASK_GUID          (CL_HTON64(((uint64_t)1)<<2))
+#define IB_SMIR_COMPMASK_SMKEY         (CL_HTON64(((uint64_t)1)<<3))
+#define IB_SMIR_COMPMASK_ACTCOUNT      (CL_HTON64(((uint64_t)1)<<4))
+#define IB_SMIR_COMPMASK_PRIORITY      (CL_HTON64(((uint64_t)1)<<5))
+#define IB_SMIR_COMPMASK_SMSTATE       (CL_HTON64(((uint64_t)1)<<6))
+
+/* InformInfo Record Component Masks */
+#define IB_IIR_COMPMASK_SUBSCRIBERGID  (CL_HTON64(((uint64_t)1)<<0))
+#define IB_IIR_COMPMASK_ENUM           (CL_HTON64(((uint64_t)1)<<1))
+#define IB_IIR_COMPMASK_RESV0          (CL_HTON64(((uint64_t)1)<<2))
+#define IB_IIR_COMPMASK_GID            (CL_HTON64(((uint64_t)1)<<3))
+#define IB_IIR_COMPMASK_LIDRANGEBEGIN  (CL_HTON64(((uint64_t)1)<<4))
+#define IB_IIR_COMPMASK_LIDRANGEEND    (CL_HTON64(((uint64_t)1)<<5))
+#define IB_IIR_COMPMASK_RESV1          (CL_HTON64(((uint64_t)1)<<6))
+#define IB_IIR_COMPMASK_ISGENERIC      (CL_HTON64(((uint64_t)1)<<7))
+#define IB_IIR_COMPMASK_SUBSCRIBE      (CL_HTON64(((uint64_t)1)<<8))
+#define IB_IIR_COMPMASK_TYPE           (CL_HTON64(((uint64_t)1)<<9))
+#define IB_IIR_COMPMASK_TRAPNUMB       (CL_HTON64(((uint64_t)1)<<10))
+#define IB_IIR_COMPMASK_DEVICEID       (CL_HTON64(((uint64_t)1)<<10))
+#define IB_IIR_COMPMASK_QPN            (CL_HTON64(((uint64_t)1)<<11))
+#define IB_IIR_COMPMASK_RESV2          (CL_HTON64(((uint64_t)1)<<12))
+#define IB_IIR_COMPMASK_RESPTIME       (CL_HTON64(((uint64_t)1)<<13))
+#define IB_IIR_COMPMASK_RESV3          (CL_HTON64(((uint64_t)1)<<14))
+#define IB_IIR_COMPMASK_PRODTYPE       (CL_HTON64(((uint64_t)1)<<15))
+#define IB_IIR_COMPMASK_VENDID         (CL_HTON64(((uint64_t)1)<<15))
+
 /****f* IBA Base: Types/ib_path_rec_init_local
 * NAME
 *      ib_path_rec_init_local
@@ -2422,7 +2636,7 @@ typedef struct _ib_path_rec
 *
 * SYNOPSIS
 */
-AL_INLINE void     AL_API
+static inline void     OSM_API
 ib_path_rec_init_local(
        IN      ib_path_rec_t* const    p_rec,
        IN      ib_gid_t* const         p_dgid,
@@ -2532,7 +2746,7 @@ ib_path_rec_init_local(
 *
 * SYNOPSIS
 */
-AL_INLINE uint8_t     AL_API
+static inline uint8_t  OSM_API
 ib_path_rec_num_path(
        IN      const   ib_path_rec_t* const    p_rec )
 {
@@ -2561,7 +2775,7 @@ ib_path_rec_num_path(
 *
 * SYNOPSIS
 */
-AL_INLINE uint8_t     AL_API
+static inline uint8_t  OSM_API
 ib_path_rec_sl(
        IN      const   ib_path_rec_t* const    p_rec )
 {
@@ -2590,7 +2804,7 @@ ib_path_rec_sl(
 *
 * SYNOPSIS
 */
-AL_INLINE uint8_t     AL_API
+static inline uint8_t  OSM_API
 ib_path_rec_mtu(
        IN      const   ib_path_rec_t* const    p_rec )
 {
@@ -2625,7 +2839,7 @@ ib_path_rec_mtu(
 *
 * SYNOPSIS
 */
-AL_INLINE uint8_t     AL_API
+static inline uint8_t  OSM_API
 ib_path_rec_mtu_sel(
        IN      const   ib_path_rec_t* const    p_rec )
 {
@@ -2658,7 +2872,7 @@ ib_path_rec_mtu_sel(
 *
 * SYNOPSIS
 */
-AL_INLINE uint8_t     AL_API
+static inline uint8_t  OSM_API
 ib_path_rec_rate(
        IN      const   ib_path_rec_t* const    p_rec )
 {
@@ -2697,7 +2911,7 @@ ib_path_rec_rate(
 *
 * SYNOPSIS
 */
-AL_INLINE uint8_t     AL_API
+static inline uint8_t  OSM_API
 ib_path_rec_rate_sel(
        IN      const   ib_path_rec_t* const    p_rec )
 {
@@ -2730,7 +2944,7 @@ ib_path_rec_rate_sel(
 *
 * SYNOPSIS
 */
-AL_INLINE uint8_t     AL_API
+static inline uint8_t  OSM_API
 ib_path_rec_pkt_life(
        IN      const   ib_path_rec_t* const    p_rec )
 {
@@ -2742,7 +2956,7 @@ ib_path_rec_pkt_life(
 *              [in] Pointer to the path record object.
 *
 * RETURN VALUES
-*      Encoded path pkt_life = 4.096 Âµsec * 2 ** PacketLifeTime.
+*      Encoded path pkt_life = 4.096 µsec * 2 ** PacketLifeTime.
 *
 * NOTES
 *
@@ -2759,7 +2973,7 @@ ib_path_rec_pkt_life(
 *
 * SYNOPSIS
 */
-AL_INLINE uint8_t     AL_API
+static inline uint8_t  OSM_API
 ib_path_rec_pkt_life_sel(
        IN      const   ib_path_rec_t* const    p_rec )
 {
@@ -2792,7 +3006,7 @@ ib_path_rec_pkt_life_sel(
 *
 * SYNOPSIS
 */
-AL_INLINE uint32_t     AL_API
+static inline uint32_t OSM_API
 ib_path_rec_flow_lbl(
        IN      const   ib_path_rec_t* const    p_rec )
 {
@@ -2821,7 +3035,7 @@ ib_path_rec_flow_lbl(
 *
 * SYNOPSIS
 */
-AL_INLINE uint8_t     AL_API
+static inline uint8_t  OSM_API
 ib_path_rec_hop_limit(
        IN      const   ib_path_rec_t* const    p_rec )
 {
@@ -3024,7 +3238,7 @@ typedef struct _ib_sm_info
 *
 * SYNOPSIS
 */
-AL_INLINE uint8_t     AL_API
+static inline uint8_t  OSM_API
 ib_sminfo_get_priority(
        IN      const   ib_sm_info_t* const             p_smi )
 {
@@ -3052,7 +3266,7 @@ ib_sminfo_get_priority(
 *
 * SYNOPSIS
 */
-AL_INLINE uint8_t     AL_API
+static inline uint8_t  OSM_API
 ib_sminfo_get_state(
        IN      const   ib_sm_info_t* const             p_smi )
 {
@@ -3170,7 +3384,7 @@ typedef struct _ib_rmpp_mad
 *
 * SYNOPSIS
 */
-AL_INLINE void     AL_API
+static inline void     OSM_API
 ib_mad_init_new(
        IN              ib_mad_t* const         p_mad,
        IN              const   uint8_t         mgmt_class,
@@ -3233,7 +3447,7 @@ ib_mad_init_new(
 *
 * SYNOPSIS
 */
-AL_INLINE void     AL_API
+static inline void     OSM_API
 ib_mad_init_response(
        IN      const   ib_mad_t* const         p_req_mad,
        IN              ib_mad_t* const         p_mad,
@@ -3278,7 +3492,7 @@ ib_mad_init_response(
 *
 * SYNOPSIS
 */
-AL_INLINE boolean_t     AL_API
+static inline boolean_t        OSM_API
 ib_mad_is_response(
        IN      const   ib_mad_t* const         p_mad )
 {
@@ -3333,7 +3547,7 @@ ib_mad_is_response(
 *
 * SYNOPSIS
 */
-AL_INLINE boolean_t     AL_API
+static inline boolean_t        OSM_API
 ib_rmpp_is_flag_set(
        IN      const   ib_rmpp_mad_t* const    p_rmpp_mad,
        IN      const   uint8_t                 flag )
@@ -3358,7 +3572,7 @@ ib_rmpp_is_flag_set(
 *      ib_mad_t, ib_rmpp_mad_t
 *********/
 
-AL_INLINE void     AL_API
+static inline void     OSM_API
 ib_rmpp_set_resp_time(
        IN              ib_rmpp_mad_t* const    p_rmpp_mad,
        IN      const   uint8_t                 resp_time )
@@ -3368,7 +3582,7 @@ ib_rmpp_set_resp_time(
 }
 
 
-AL_INLINE uint8_t     AL_API
+static inline uint8_t  OSM_API
 ib_rmpp_get_resp_time(
        IN      const   ib_rmpp_mad_t* const    p_rmpp_mad )
 {
@@ -3504,7 +3718,7 @@ typedef struct _ib_smp
 *
 * SYNOPSIS
 */
-AL_INLINE ib_net16_t     AL_API
+static inline ib_net16_t       OSM_API
 ib_smp_get_status(
        IN      const   ib_smp_t* const         p_smp )
 {
@@ -3533,7 +3747,7 @@ ib_smp_get_status(
 *
 * SYNOPSIS
 */
-AL_INLINE boolean_t     AL_API
+static inline boolean_t        OSM_API
 ib_smp_is_response(
        IN      const   ib_smp_t* const         p_smp )
 {
@@ -3562,7 +3776,7 @@ ib_smp_is_response(
 *
 * SYNOPSIS
 */
-AL_INLINE boolean_t     AL_API
+static inline boolean_t        OSM_API
 ib_smp_is_d(
        IN      const   ib_smp_t* const         p_smp )
 {
@@ -3595,7 +3809,7 @@ ib_smp_is_d(
 *
 * SYNOPSIS
 */
-AL_INLINE void     AL_API
+static inline void     OSM_API
 ib_smp_init_new(
        IN              ib_smp_t* const         p_smp,
        IN      const   uint8_t                 method,
@@ -3625,14 +3839,14 @@ ib_smp_init_new(
        p_smp->dr_slid = dr_slid;
        p_smp->dr_dlid = dr_dlid;
 
-       cl_memclr( p_smp->resv1,
+       memset( p_smp->resv1, 0,
                sizeof(p_smp->resv1) +
                sizeof(p_smp->data) +
                sizeof(p_smp->initial_path) +
                sizeof(p_smp->return_path) );
 
        /* copy the path */
-       cl_memcpy( &p_smp->initial_path, path_out,
+       memcpy( &p_smp->initial_path, path_out,
                sizeof( p_smp->initial_path ) );
 }
 /*
@@ -3682,7 +3896,7 @@ ib_smp_init_new(
 *
 * SYNOPSIS
 */
-AL_INLINE void*     AL_API
+static inline void*    OSM_API
 ib_smp_get_payload_ptr(
        IN      const   ib_smp_t* const         p_smp )
 {
@@ -3776,14 +3990,14 @@ typedef struct _ib_sa_mad
 /**********/
 #define IB_SA_MAD_HDR_SIZE (sizeof(ib_sa_mad_t) - IB_SA_DATA_SIZE)
 
-AL_INLINE uint32_t     AL_API
+static inline uint32_t OSM_API
 ib_get_attr_size(
        IN      const   ib_net16_t                              attr_offset )
 {
        return( ((uint32_t)cl_ntoh16( attr_offset )) << 3 );
 }
 
-AL_INLINE ib_net16_t     AL_API
+static inline ib_net16_t       OSM_API
 ib_get_attr_offset(
        IN      const   uint32_t                                attr_size )
 {
@@ -3799,7 +4013,7 @@ ib_get_attr_offset(
 *
 * SYNOPSIS
 */
-AL_INLINE void*     AL_API
+static inline void*    OSM_API
 ib_sa_mad_get_payload_ptr(
        IN      const   ib_sa_mad_t* const              p_sa_mad )
 {
@@ -3836,7 +4050,7 @@ ib_sa_mad_get_payload_ptr(
 *
 * SYNOPSIS
 */
-AL_INLINE uint8_t     AL_API
+static inline uint8_t  OSM_API
 ib_node_info_get_local_port_num(
        IN      const   ib_node_info_t* const   p_ni )
 {
@@ -3867,7 +4081,7 @@ ib_node_info_get_local_port_num(
 *
 * SYNOPSIS
 */
-AL_INLINE ib_net32_t     AL_API
+static inline ib_net32_t       OSM_API
 ib_node_info_get_vendor_id(
        IN      const   ib_node_info_t* const   p_ni )
 {
@@ -3963,6 +4177,7 @@ typedef struct _ib_port_info
 
 #define IB_PORT_STATE_MASK                     0x0F
 #define IB_PORT_LMC_MASK                       0x07
+#define IB_PORT_LMC_MAX                                0x07
 #define IB_PORT_MPB_MASK                       0xC0
 #define IB_PORT_MPB_SHIFT                      6
 #define IB_PORT_LINK_SPEED_SHIFT               4
@@ -4015,7 +4230,7 @@ typedef struct _ib_port_info
 *
 * SYNOPSIS
 */
-AL_INLINE uint8_t     AL_API
+static inline uint8_t  OSM_API
 ib_port_info_get_port_state(
        IN      const   ib_port_info_t* const   p_pi )
 {
@@ -4043,7 +4258,7 @@ ib_port_info_get_port_state(
 *
 * SYNOPSIS
 */
-AL_INLINE void     AL_API
+static inline void     OSM_API
 ib_port_info_set_port_state(
        IN              ib_port_info_t* const   p_pi,
        IN      const   uint8_t                 port_state )
@@ -4075,7 +4290,7 @@ ib_port_info_set_port_state(
 *
 * SYNOPSIS
 */
-AL_INLINE uint8_t     AL_API
+static inline uint8_t  OSM_API
 ib_port_info_get_vl_cap(
        IN const ib_port_info_t* const p_pi)
 {
@@ -4103,7 +4318,7 @@ ib_port_info_get_vl_cap(
 *
 * SYNOPSIS
 */
-OSM_INLINE uint8_t     AL_API
+static inline uint8_t  OSM_API
 ib_port_info_get_init_type(
        IN const ib_port_info_t* const p_pi)
 {
@@ -4131,7 +4346,7 @@ ib_port_info_get_init_type(
 *
 * SYNOPSIS
 */
-AL_INLINE uint8_t     AL_API
+static inline uint8_t  OSM_API
 ib_port_info_get_op_vls(
        IN const ib_port_info_t* const p_pi)
 {
@@ -4159,7 +4374,7 @@ ib_port_info_get_op_vls(
 *
 * SYNOPSIS
 */
-AL_INLINE void     AL_API
+static inline void     OSM_API
 ib_port_info_set_op_vls(
        IN              ib_port_info_t* const   p_pi,
        IN      const   uint8_t                 op_vls )
@@ -4191,11 +4406,11 @@ ib_port_info_set_op_vls(
 *
 * SYNOPSIS
 */
-AL_INLINE void     AL_API
+static inline void     OSM_API
 ib_port_info_set_state_no_change(
        IN              ib_port_info_t* const   p_pi )
 {
-       ib_port_info_set_port_state( p_pi, 0 );
+       ib_port_info_set_port_state( p_pi, IB_LINK_NO_CHANGE );
        p_pi->state_info2 = 0;
 }
 /*
@@ -4220,7 +4435,7 @@ ib_port_info_set_state_no_change(
 *
 * SYNOPSIS
 */
-AL_INLINE uint8_t     AL_API
+static inline uint8_t  OSM_API
 ib_port_info_get_link_speed_sup(
        IN      const   ib_port_info_t* const   p_pi )
 {
@@ -4251,7 +4466,7 @@ ib_port_info_get_link_speed_sup(
 *
 * SYNOPSIS
 */
-AL_INLINE void     AL_API
+static inline void     OSM_API
 ib_port_info_set_link_speed_sup(
        IN      uint8_t const           speed,
        IN      ib_port_info_t*         p_pi )
@@ -4286,7 +4501,7 @@ ib_port_info_set_link_speed_sup(
 *
 * SYNOPSIS
 */
-OSM_INLINE uint8_t     AL_API
+static inline uint8_t  OSM_API
 ib_port_info_get_port_phys_state(
        IN      const   ib_port_info_t* const   p_pi )
 {
@@ -4317,7 +4532,7 @@ ib_port_info_get_port_phys_state(
 *
 * SYNOPSIS
 */
-AL_INLINE void     AL_API
+static inline void     OSM_API
 ib_port_info_set_port_phys_state(
        IN      uint8_t const           phys_state,
        IN      ib_port_info_t*         p_pi )
@@ -4352,7 +4567,7 @@ ib_port_info_set_port_phys_state(
 *
 * SYNOPSIS
 */
-OSM_INLINE uint8_t     AL_API
+static inline uint8_t  OSM_API
 ib_port_info_get_link_down_def_state(
        IN      const   ib_port_info_t* const   p_pi )
 {
@@ -4380,7 +4595,7 @@ ib_port_info_get_link_down_def_state(
 *
 * SYNOPSIS
 */
-AL_INLINE void     AL_API
+static inline void     OSM_API
 ib_port_info_set_link_down_def_state(
        IN              ib_port_info_t* const   p_pi,
        IN      const   uint8_t                 link_dwn_state )
@@ -4412,7 +4627,7 @@ ib_port_info_set_link_down_def_state(
 *
 * SYNOPSIS
 */
-OSM_INLINE uint8_t    AL_API
+static inline uint8_t  OSM_API
 ib_port_info_get_link_speed_active(
        IN      const   ib_port_info_t* const   p_pi )
 {
@@ -4463,8 +4678,7 @@ ib_port_info_get_link_speed_active(
 *
 * SYNOPSIS
 */
-
-AL_INLINE uint8_t     AL_API
+static inline uint8_t  OSM_API
 ib_port_info_compute_rate(
        IN      const   ib_port_info_t* const   p_pi )
 {
@@ -4561,7 +4775,7 @@ ib_port_info_compute_rate(
 *
 * SYNOPSIS
 */
-AL_INLINE uint8_t     AL_API
+static inline uint8_t  OSM_API
 ib_path_get_ipd(
        IN              uint8_t         local_link_width_supported,
        IN              uint8_t         path_rec_rate )
@@ -4632,7 +4846,7 @@ ib_path_get_ipd(
 *
 * SYNOPSIS
 */
-AL_INLINE uint8_t     AL_API
+static inline uint8_t  OSM_API
 ib_port_info_get_mtu_cap(
        IN      const   ib_port_info_t* const   p_pi )
 {
@@ -4660,7 +4874,7 @@ ib_port_info_get_mtu_cap(
 *
 * SYNOPSIS
 */
-AL_INLINE uint8_t     AL_API
+static inline uint8_t  OSM_API
 ib_port_info_get_neighbor_mtu(
        IN const ib_port_info_t* const p_pi )
 {
@@ -4688,7 +4902,7 @@ ib_port_info_get_neighbor_mtu(
 *
 * SYNOPSIS
 */
-AL_INLINE void     AL_API
+static inline void     OSM_API
 ib_port_info_set_neighbor_mtu(
        IN              ib_port_info_t* const   p_pi,
        IN      const   uint8_t                 mtu )
@@ -4722,7 +4936,7 @@ ib_port_info_set_neighbor_mtu(
 *
 * SYNOPSIS
 */
-OSM_INLINE uint8_t     AL_API
+static inline uint8_t  OSM_API
 ib_port_info_get_master_smsl(
        IN const ib_port_info_t* const p_pi )
 {
@@ -4750,7 +4964,7 @@ ib_port_info_get_master_smsl(
 *
 * SYNOPSIS
 */
-AL_INLINE void     AL_API
+static inline void     OSM_API
 ib_port_info_set_master_smsl(
        IN              ib_port_info_t* const   p_pi,
        IN      const   uint8_t                 smsl )
@@ -4782,7 +4996,7 @@ ib_port_info_set_master_smsl(
 *
 * SYNOPSIS
 */
-AL_INLINE void     AL_API
+static inline void     OSM_API
 ib_port_info_set_timeout(
        IN              ib_port_info_t* const   p_pi,
        IN      const   uint8_t                 timeout )
@@ -4817,7 +5031,7 @@ ib_port_info_set_timeout(
 *
 * SYNOPSIS
 */
-OSM_INLINE void     AL_API
+static inline void     OSM_API
 ib_port_info_set_client_rereg(
        IN              ib_port_info_t* const   p_pi,
        IN      const   uint8_t                 client_rereg )
@@ -4852,7 +5066,7 @@ ib_port_info_set_client_rereg(
 *
 * SYNOPSIS
 */
-OSM_INLINE uint8_t     AL_API
+static inline uint8_t  OSM_API
 ib_port_info_get_timeout(
   IN                   ib_port_info_t const*   p_pi )
 {
@@ -4880,7 +5094,7 @@ ib_port_info_get_timeout(
 *
 * SYNOPSIS
 */
-OSM_INLINE uint8_t     AL_API
+static inline uint8_t  OSM_API
 ib_port_info_get_client_rereg(
   IN                   ib_port_info_t const* p_pi )
 {
@@ -4909,7 +5123,7 @@ ib_port_info_get_client_rereg(
 *
 * SYNOPSIS
 */
-OSM_INLINE void     AL_API
+static inline void     OSM_API
 ib_port_info_set_hoq_lifetime(
   IN           ib_port_info_t* const   p_pi,
   IN   const   uint8_t                 hoq_life )
@@ -4943,7 +5157,7 @@ ib_port_info_set_hoq_lifetime(
 *
 * SYNOPSIS
 */
-OSM_INLINE uint8_t     AL_API
+static inline uint8_t  OSM_API
 ib_port_info_get_hoq_lifetime(
   IN   const   ib_port_info_t* const   p_pi )
 {
@@ -4973,7 +5187,7 @@ ib_port_info_get_hoq_lifetime(
 *
 * SYNOPSIS
 */
-OSM_INLINE void     AL_API
+static inline void     OSM_API
 ib_port_info_set_vl_stall_count(
   IN           ib_port_info_t* const   p_pi,
   IN   const   uint8_t                 vl_stall_count )
@@ -5007,7 +5221,7 @@ ib_port_info_set_vl_stall_count(
 *
 * SYNOPSIS
 */
-OSM_INLINE uint8_t     AL_API
+static inline uint8_t  OSM_API
 ib_port_info_get_vl_stall_count(
   IN   const ib_port_info_t* const     p_pi )
 {
@@ -5036,7 +5250,7 @@ ib_port_info_get_vl_stall_count(
 *
 * SYNOPSIS
 */
-AL_INLINE uint8_t     AL_API
+static inline uint8_t  OSM_API
 ib_port_info_get_lmc(
        IN      const   ib_port_info_t* const   p_pi )
 {
@@ -5064,12 +5278,12 @@ ib_port_info_get_lmc(
 *
 * SYNOPSIS
 */
-AL_INLINE void     AL_API
+static inline void     OSM_API
 ib_port_info_set_lmc(
        IN              ib_port_info_t* const   p_pi,
        IN      const   uint8_t                 lmc )
 {
-       CL_ASSERT( lmc <= 0x7 );
+       CL_ASSERT( lmc <= IB_PORT_LMC_MAX );
        p_pi->mkey_lmc = (uint8_t)((p_pi->mkey_lmc & 0xF8) | lmc);
 }
 /*
@@ -5097,7 +5311,7 @@ ib_port_info_set_lmc(
 *
 * SYNOPSIS
 */
-OSM_INLINE uint8_t     AL_API
+static inline uint8_t  OSM_API
 ib_port_info_get_link_speed_enabled(
        IN      const   ib_port_info_t* const   p_pi )
 {
@@ -5125,7 +5339,7 @@ ib_port_info_get_link_speed_enabled(
 *
 * SYNOPSIS
 */
-AL_INLINE void     AL_API
+static inline void     OSM_API
 ib_port_info_set_link_speed_enabled(
        IN              ib_port_info_t* const   p_pi,
        IN      const   uint8_t                 link_speed_enabled )
@@ -5157,7 +5371,7 @@ ib_port_info_set_link_speed_enabled(
 *
 * SYNOPSIS
 */
-AL_INLINE uint8_t     AL_API
+static inline uint8_t  OSM_API
 ib_port_info_get_mpb(
        IN      const   ib_port_info_t* const   p_pi )
 {
@@ -5186,7 +5400,7 @@ ib_port_info_get_mpb(
 *
 * SYNOPSIS
 */
-AL_INLINE void     AL_API
+static inline void     OSM_API
 ib_port_info_set_mpb(
        IN              ib_port_info_t*         p_pi,
        IN              uint8_t                 mpb )
@@ -5218,7 +5432,7 @@ ib_port_info_set_mpb(
 *
 * SYNOPSIS
 */
-OSM_INLINE uint8_t     AL_API
+static inline uint8_t  OSM_API
 ib_port_info_get_local_phy_err_thd(
        IN      const   ib_port_info_t* const   p_pi )
 {
@@ -5246,7 +5460,7 @@ ib_port_info_get_local_phy_err_thd(
 *
 * SYNOPSIS
 */
-OSM_INLINE uint8_t     AL_API
+static inline uint8_t  OSM_API
 ib_port_info_get_overrun_err_thd(
        IN      const   ib_port_info_t* const   p_pi )
 {
@@ -5274,7 +5488,7 @@ ib_port_info_get_overrun_err_thd(
 *
 * SYNOPSIS
 */
-OSM_INLINE void     AL_API
+static inline void     OSM_API
 ib_port_info_set_phy_and_overrun_err_thd(
   IN           ib_port_info_t* const   p_pi,
   IN           uint8_t                 phy_threshold,
@@ -5362,7 +5576,7 @@ typedef struct _ib_sminfo_record
 *      ib_lft_record_t
 *
 * DESCRIPTION
-*      IBA defined LinearForwardingTable. (14.2.5.6)
+*      IBA defined LinearForwardingTableRecord (15.2.5.6)
 *
 * SYNOPSIS
 */
@@ -5377,6 +5591,26 @@ typedef struct _ib_lft_record
 #include <complib/cl_packoff.h>
 /************/
 
+/****s* IBA Base: Types/ib_mft_record_t
+* NAME
+*      ib_mft_record_t
+*
+* DESCRIPTION
+*      IBA defined MulticastForwardingTableRecord (15.2.5.8)
+*
+* SYNOPSIS
+*/
+#include <complib/cl_packon.h>
+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 <complib/cl_packoff.h>
+/************/
+
 /****s* IBA Base: Types/ib_switch_info_t
 * NAME
 *      ib_switch_info_t
@@ -5427,7 +5661,7 @@ typedef struct _ib_switch_info_record
 *
 * SYNOPSIS
 */
-AL_INLINE boolean_t     AL_API
+static inline boolean_t        OSM_API
 ib_switch_info_get_state_change(
        IN      const   ib_switch_info_t* const p_si )
 {
@@ -5455,7 +5689,7 @@ ib_switch_info_get_state_change(
 *
 * SYNOPSIS
 */
-AL_INLINE void     AL_API
+static inline void     OSM_API
 ib_switch_info_clear_state_change(
        IN              ib_switch_info_t* const p_si )
 {
@@ -5474,10 +5708,9 @@ ib_switch_info_clear_state_change(
 * SEE ALSO
 *********/
 
-
-/****f* IBA Base: Types/ib_switch_info_is_enhanced_port_0
+/****f* IBA Base: Types/ib_switch_info_is_enhanced_port0
 * NAME
-*      ib_switch_info_is_enhanced_port_0
+*      ib_switch_info_is_enhanced_port0
 *
 * DESCRIPTION
 *      Returns TRUE if the enhancedPort0 bit is on (meaning the switch
@@ -5486,9 +5719,9 @@ ib_switch_info_clear_state_change(
 *
 * SYNOPSIS
 */
-OSM_INLINE boolean_t     AL_API
-ib_switch_info_is_enhanced_port_0(
-       IN              const   ib_switch_info_t* const         p_si )
+static inline boolean_t        OSM_API
+ib_switch_info_is_enhanced_port0(
+       IN      const   ib_switch_info_t* const p_si )
 {
        return( (p_si->flags & 0x08) == 0x08 );
 }
@@ -5536,6 +5769,316 @@ typedef struct _ib_guidinfo_record
 }      PACK_SUFFIX ib_guidinfo_record_t;
 #include <complib/cl_packoff.h>
 
+#define IB_MULTIPATH_MAX_GIDS 11       /* Support max that can fit into first MAD (for now) */
+
+#include <complib/cl_packon.h>
+typedef struct _ib_multipath_rec_t
+{
+       ib_net32_t              hop_flow_raw;
+       uint8_t                 tclass;
+       uint8_t                 num_path;
+       ib_net16_t              pkey;
+       uint8_t                 resv0;
+       uint8_t                 sl;
+       uint8_t                 mtu;
+       uint8_t                 rate;
+       uint8_t                 pkt_life;
+       uint8_t                 resv1;
+       uint8_t                 independence;   /* formerly resv2 */
+       uint8_t                 sgid_count;
+       uint8_t                 dgid_count;
+       uint8_t                 resv3[7];
+       ib_gid_t                gids[IB_MULTIPATH_MAX_GIDS];
+}      PACK_SUFFIX ib_multipath_rec_t;
+#include <complib/cl_packoff.h>
+/*
+* FIELDS
+*       hop_flow_raw
+*               Global routing parameters: hop count, flow label and raw bit.
+*
+*       tclass
+*               Another global routing parameter.
+*
+*       num_path
+*     Reversible path - 1 bit to say if path is reversible.
+*               num_path [6:0] In queries, maximum number of paths to return.
+*               In responses, undefined.
+*
+*       pkey
+*               Partition key (P_Key) to use on this path.
+*
+*       sl
+*               Service level to use on this path.
+*
+*       mtu
+*               MTU and MTU selector fields to use on this path
+*       rate
+*               Rate and rate selector fields to use on this path.
+*
+*       pkt_life
+*               Packet lifetime
+*
+*       preference
+*               Indicates the relative merit of this path versus other path
+*               records returned from the SA.  Lower numbers are better.
+*
+* SEE ALSO
+*********/
+
+/****f* IBA Base: Types/ib_multipath_rec_num_path
+* NAME
+*       ib_multipath_rec_num_path
+*
+* DESCRIPTION
+*       Get max number of paths to return.
+*
+* SYNOPSIS
+*/
+static inline uint8_t  OSM_API
+ib_multipath_rec_num_path(
+       IN      const   ib_multipath_rec_t* const       p_rec )
+{
+        return( p_rec->num_path &0x7F );
+}
+/*
+* PARAMETERS
+*       p_rec
+*               [in] Pointer to the multipath record object.
+*
+* RETURN VALUES
+*       Maximum number of paths to return for each unique SGID_DGID combination.
+*
+* NOTES
+*
+* SEE ALSO
+*       ib_multipath_rec_t
+*********/
+
+/****f* IBA Base: Types/ib_multipath_rec_sl
+* NAME
+*       ib_multipath_rec_sl
+*
+* DESCRIPTION
+*       Get multipath service level.
+*
+* SYNOPSIS
+*/
+static inline uint8_t  OSM_API
+ib_multipath_rec_sl(
+       IN      const   ib_multipath_rec_t* const       p_rec )
+{
+        return( (uint8_t)((cl_ntoh16( p_rec->sl )) & 0xF) );
+}
+/*
+* PARAMETERS
+*       p_rec
+*               [in] Pointer to the multipath record object.
+*
+* RETURN VALUES
+*      SL.
+*
+* NOTES
+*
+* SEE ALSO
+*       ib_multipath_rec_t
+*********/
+
+/****f* IBA Base: Types/ib_multipath_rec_mtu
+* NAME
+*       ib_multipath_rec_mtu
+*
+* DESCRIPTION
+*       Get encoded path MTU.
+*
+* SYNOPSIS
+*/
+static inline uint8_t  OSM_API
+ib_multipath_rec_mtu(
+       IN      const   ib_multipath_rec_t* const       p_rec )
+{
+        return( (uint8_t)(p_rec->mtu & IB_MULTIPATH_REC_BASE_MASK) );
+}
+/*
+* PARAMETERS
+*       p_rec
+*               [in] Pointer to the multipath record object.
+*
+* RETURN VALUES
+*       Encoded path MTU.
+*               1: 256
+*               2: 512
+*               3: 1024
+*               4: 2048
+*               5: 4096
+*               others: reserved
+*
+* NOTES
+*
+* SEE ALSO
+*       ib_multipath_rec_t
+*********/
+
+/****f* IBA Base: Types/ib_multipath_rec_mtu_sel
+* NAME
+*       ib_multipath_rec_mtu_sel
+*
+* DESCRIPTION
+*       Get encoded multipath MTU selector.
+*
+* SYNOPSIS
+*/
+static inline uint8_t  OSM_API
+ib_multipath_rec_mtu_sel(
+       IN      const   ib_multipath_rec_t* const       p_rec )
+{
+        return( (uint8_t)((p_rec->mtu & IB_MULTIPATH_REC_SELECTOR_MASK) >> 6) );
+}
+/*
+* PARAMETERS
+*       p_rec
+*               [in] Pointer to the multipath record object.
+*
+* RETURN VALUES
+*       Encoded path MTU selector value (for queries).
+*               0: greater than MTU specified
+*               1: less than MTU specified
+*               2: exactly the MTU specified
+*               3: largest MTU available
+*
+* NOTES
+*
+* SEE ALSO
+*       ib_multipath_rec_t
+*********/
+
+/****f* IBA Base: Types/ib_multipath_rec_rate
+* NAME
+*       ib_multipath_rec_rate
+*
+* DESCRIPTION
+*       Get encoded multipath rate.
+*
+* SYNOPSIS
+*/
+static inline uint8_t  OSM_API
+ib_multipath_rec_rate(
+       IN      const   ib_multipath_rec_t* const       p_rec )
+{
+        return( (uint8_t)(p_rec->rate & IB_MULTIPATH_REC_BASE_MASK) );
+}
+/*
+* PARAMETERS
+*       p_rec
+*               [in] Pointer to the multipath record object.
+*
+* RETURN VALUES
+*       Encoded multipath rate.
+*               2: 2.5 Gb/sec.
+*               3: 10 Gb/sec.
+*               4: 30 Gb/sec.
+*               others: reserved
+*
+* NOTES
+*
+* SEE ALSO
+*       ib_multipath_rec_t
+*********/
+
+/****f* IBA Base: Types/ib_multipath_rec_rate_sel
+* NAME
+*       ib_multipath_rec_rate_sel
+*
+* DESCRIPTION
+*       Get encoded multipath rate selector.
+*
+* SYNOPSIS
+*/
+static inline uint8_t  OSM_API
+ib_multipath_rec_rate_sel(
+       IN      const   ib_multipath_rec_t* const       p_rec )
+{
+        return( (uint8_t)((p_rec->rate & IB_MULTIPATH_REC_SELECTOR_MASK) >> 6) );
+}
+/*
+* PARAMETERS
+*       p_rec
+*               [in] Pointer to the multipath record object.
+*
+* RETURN VALUES
+*       Encoded path rate selector value (for queries).
+*               0: greater than rate specified
+*               1: less than rate specified
+*               2: exactly the rate specified
+*               3: largest rate available
+*
+* NOTES
+*
+* SEE ALSO
+*       ib_multipath_rec_t
+*********/
+
+/****f* IBA Base: Types/ib_multipath_rec_pkt_life
+* NAME
+*       ib_multipath_rec_pkt_life
+*
+* DESCRIPTION
+*       Get encoded multipath pkt_life.
+*
+* SYNOPSIS
+*/
+static inline uint8_t  OSM_API
+ib_multipath_rec_pkt_life(
+       IN      const   ib_multipath_rec_t* const       p_rec )
+{
+        return( (uint8_t)(p_rec->pkt_life & IB_MULTIPATH_REC_BASE_MASK) );
+}
+/*
+* PARAMETERS
+*       p_rec
+*               [in] Pointer to the multipath record object.
+*
+* RETURN VALUES
+*       Encoded multipath pkt_life = 4.096 µsec * 2 ** PacketLifeTime.
+*
+* NOTES
+*
+* SEE ALSO
+*       ib_multipath_rec_t
+*********/
+
+/****f* IBA Base: Types/ib_multipath_rec_pkt_life_sel
+* NAME
+*       ib_multipath_rec_pkt_life_sel
+*
+* DESCRIPTION
+*       Get encoded multipath pkt_lifetime selector.
+*
+* SYNOPSIS
+*/
+static inline uint8_t  OSM_API
+ib_multipath_rec_pkt_life_sel(
+       IN      const   ib_multipath_rec_t* const       p_rec )
+{
+        return( (uint8_t)((p_rec->pkt_life & IB_MULTIPATH_REC_SELECTOR_MASK) >> 6 ));
+}
+/*
+* PARAMETERS
+*       p_rec
+*               [in] Pointer to the multipath record object.
+*
+* RETURN VALUES
+*       Encoded path pkt_lifetime selector value (for queries).
+*               0: greater than rate specified
+*               1: less than rate specified
+*               2: exactly the rate specified
+*               3: smallest packet lifetime available
+*
+* NOTES
+*
+* SEE ALSO
+*       ib_multipath_rec_t
+*********/
+
 #define IB_NUM_PKEY_ELEMENTS_IN_BLOCK          32
 /****s* IBA Base: Types/ib_pkey_table_t
 * NAME
@@ -5629,7 +6172,7 @@ typedef struct _ib_slvl_table_record
 *
 * SYNOPSIS
 */
-AL_INLINE void     AL_API
+static inline void     OSM_API
 ib_slvl_table_set(
   IN           ib_slvl_table_t*        p_slvl_tbl,
   IN           uint8_t                 sl_index,
@@ -5679,7 +6222,7 @@ ib_slvl_table_set(
 *
 * SYNOPSIS
 */
-OSM_INLINE uint8_t     AL_API
+static inline uint8_t  OSM_API
 ib_slvl_table_get(
   IN   const   ib_slvl_table_t*        p_slvl_tbl,
   IN           uint8_t                 sl_index )
@@ -5797,7 +6340,7 @@ typedef struct _ib_grh
 *
 * SYNOPSIS
 */
-AL_INLINE void     AL_API
+static inline void     OSM_API
 ib_grh_get_ver_class_flow(
        IN      const   ib_net32_t              ver_class_flow,
        OUT             uint8_t* const          p_ver,
@@ -5849,7 +6392,7 @@ ib_grh_get_ver_class_flow(
 *
 * SYNOPSIS
 */
-AL_INLINE ib_net32_t     AL_API
+static inline ib_net32_t       OSM_API
 ib_grh_set_ver_class_flow(
        IN      const   uint8_t                 ver,
        IN      const   uint8_t                 tclass,
@@ -5909,10 +6452,7 @@ typedef struct _ib_member_rec
        uint8_t                                 pkt_life;
        ib_net32_t                              sl_flow_hop;
        uint8_t                                 scope_state;
-/*     uint8_t                                 proxy_join:1; */
-/* TODO : Under DDK got C4214 which note that using bitfield can cause problems 
-    in porting to other compilers  */
-    uint8_t                 proxy_join;
+       uint8_t                                 proxy_join:1;
        uint8_t                                 reserved[2];
        uint8_t                                 pad[4];
 
@@ -5968,27 +6508,26 @@ typedef struct _ib_member_rec
 *
 * SYNOPSIS
 */
-AL_INLINE void     AL_API
+static inline void     OSM_API
 ib_member_get_sl_flow_hop(
        IN const ib_net32_t sl_flow_hop,
        OUT uint8_t* const p_sl,
        OUT uint32_t* const p_flow_lbl,
        OUT uint8_t* const p_hop )
 {
-       ib_net32_t tmp_sl_flow_hop;
+       uint32_t tmp;
 
-       if (p_sl)
-               *p_sl = (uint8_t)(sl_flow_hop & 0x0f);
-
-       tmp_sl_flow_hop = sl_flow_hop >> 4;
+       tmp = cl_ntoh32(sl_flow_hop);
+       if (p_hop)
+               *p_hop = (uint8_t)tmp;
+       tmp >>= 8;
 
        if (p_flow_lbl)
-               *p_flow_lbl = (uint32_t)(tmp_sl_flow_hop & 0xfffff);
-
-       tmp_sl_flow_hop = tmp_sl_flow_hop >> 20;
+               *p_flow_lbl = (uint32_t)(tmp & 0xfffff);
+       tmp >>= 20;
 
-       if (p_hop)
-               *p_hop = (uint8_t)(tmp_sl_flow_hop & 0xff);
+       if (p_sl)
+               *p_sl = (uint8_t)tmp;
 }
 /*
 * PARAMETERS
@@ -6020,20 +6559,16 @@ ib_member_get_sl_flow_hop(
 *
 * SYNOPSIS
 */
-AL_INLINE ib_net32_t     AL_API
+static inline ib_net32_t       OSM_API
 ib_member_set_sl_flow_hop(
        IN const uint8_t sl,
        IN const uint32_t flow_label,
        IN const uint8_t hop_limit )
 {
-       ib_net32_t              sl_flow_hop;
+       uint32_t tmp;
 
-       sl_flow_hop = hop_limit;
-       sl_flow_hop = sl_flow_hop << 20;
-       sl_flow_hop = sl_flow_hop | flow_label;
-       sl_flow_hop = sl_flow_hop << 2;
-       sl_flow_hop = sl_flow_hop | sl;
-       return (sl_flow_hop);
+       tmp = (sl << 28) | ((flow_label & 0xfffff) << 8) | hop_limit;
+       return cl_hton32(tmp);
 }
 /*
 * PARAMETERS
@@ -6065,7 +6600,7 @@ ib_member_set_sl_flow_hop(
 *
 * SYNOPSIS
 */
-AL_INLINE void     AL_API
+static inline void     OSM_API
 ib_member_get_scope_state(
        IN      const   uint8_t                 scope_state,
        OUT             uint8_t* const          p_scope,
@@ -6109,7 +6644,7 @@ ib_member_get_scope_state(
 *
 * SYNOPSIS
 */
-AL_INLINE uint8_t     AL_API
+static inline uint8_t  OSM_API
 ib_member_set_scope_state(
        IN      const   uint8_t                 scope,
        IN      const   uint8_t                 state )
@@ -6148,7 +6683,7 @@ ib_member_set_scope_state(
 *
 * SYNOPSIS
 */
-AL_INLINE void     AL_API
+static inline void     OSM_API
 ib_member_set_join_state(
        IN OUT          ib_member_rec_t         *p_mc_rec,
        IN      const   uint8_t                 state )
@@ -6311,7 +6846,7 @@ typedef struct _ib_mad_notice_attr    // Total Size calc  Accumulated
 *
 * SYNOPSIS
 */
-OSM_INLINE boolean_t     AL_API
+static inline boolean_t        OSM_API
 ib_notice_is_generic(
   IN           const   ib_mad_notice_attr_t *p_ntc )
 {
@@ -6338,7 +6873,7 @@ ib_notice_is_generic(
 *
 * SYNOPSIS
 */
-AL_INLINE uint8_t     AL_API
+static inline uint8_t  OSM_API
 ib_notice_get_type(
   IN           const   ib_mad_notice_attr_t *p_ntc )
 {
@@ -6365,7 +6900,7 @@ ib_notice_get_type(
 *
 * SYNOPSIS
 */
-AL_INLINE ib_net32_t     AL_API
+static inline ib_net32_t       OSM_API
 ib_notice_get_prod_type(
   IN              const        ib_mad_notice_attr_t *p_ntc )
 {
@@ -6396,7 +6931,7 @@ ib_notice_get_prod_type(
 *
 * SYNOPSIS
 */
-AL_INLINE void     AL_API
+static inline void     OSM_API
 ib_notice_set_prod_type(
   IN ib_mad_notice_attr_t *p_ntc,
   IN ib_net32_t prod_type_val )
@@ -6420,6 +6955,40 @@ ib_notice_set_prod_type(
 *      ib_mad_notice_attr_t
 *********/
 
+/****f* IBA Base: Types/ib_notice_set_prod_type_ho
+* NAME
+*      ib_notice_set_prod_type_ho
+*
+* DESCRIPTION
+*      Set the notice Producer Type of Generic Notice given Host Order
+*
+* SYNOPSIS
+*/
+static inline void     OSM_API
+ib_notice_set_prod_type_ho(
+  IN ib_mad_notice_attr_t *p_ntc,
+  IN uint32_t prod_type_val_ho )
+{
+  p_ntc->g_or_v.generic.prod_type_lsb = 
+         cl_hton16( (uint16_t)(prod_type_val_ho & 0x0000ffff) );
+  p_ntc->g_or_v.generic.prod_type_msb = 
+         (uint8_t)( (prod_type_val_ho & 0x00ff0000) >> 16);
+}
+/*
+* PARAMETERS
+*      p_ntc
+*              [in] Pointer to the notice MAD attribute
+*
+*      prod_type
+*              [in] The producer Type code in host order
+*
+* RETURN VALUES
+*      None
+*
+* SEE ALSO
+*      ib_mad_notice_attr_t
+*********/
+
 /****f* IBA Base: Types/ib_notice_get_vend_id
 * NAME
 *      ib_notice_get_vend_id
@@ -6429,7 +6998,7 @@ ib_notice_set_prod_type(
 *
 * SYNOPSIS
 */
-AL_INLINE ib_net32_t     AL_API
+static inline ib_net32_t       OSM_API
 ib_notice_get_vend_id(
   IN           const   ib_mad_notice_attr_t *p_ntc )
 {
@@ -6460,7 +7029,7 @@ ib_notice_get_vend_id(
 *
 * SYNOPSIS
 */
-AL_INLINE void     AL_API
+static inline void     OSM_API
 ib_notice_set_vend_id(
   IN ib_mad_notice_attr_t *p_ntc,
   IN ib_net32_t vend_id )
@@ -6474,8 +7043,42 @@ ib_notice_set_vend_id(
 *      p_ntc
 *              [in] Pointer to the notice MAD attribute
 *
-*  vend_id
-*     [in] The producer Type code
+*      vend_id
+*              [in] The producer Type code
+*
+* RETURN VALUES
+*      None
+*
+* SEE ALSO
+*      ib_mad_notice_attr_t
+*********/
+
+/****f* IBA Base: Types/ib_notice_set_vend_id_ho
+* NAME
+*      ib_notice_set_vend_id_ho
+*
+* DESCRIPTION
+*      Set the notice Producer Type of Generic Notice given a host order value
+*
+* SYNOPSIS
+*/
+static inline void     OSM_API
+ib_notice_set_vend_id_ho(
+  IN ib_mad_notice_attr_t *p_ntc,
+  IN uint32_t vend_id_ho )
+{
+  p_ntc->g_or_v.vend.vend_id_lsb = 
+         cl_hton16((uint16_t)(vend_id_ho & 0x0000ffff));
+  p_ntc->g_or_v.vend.vend_id_msb =
+         (uint8_t)((vend_id_ho & 0x00ff0000) >> 16);
+}
+/*
+* PARAMETERS
+*      p_ntc
+*              [in] Pointer to the notice MAD attribute
+*
+*      vend_id_ho
+*              [in] The producer Type code in host order
 *
 * RETURN VALUES
 *      None
@@ -6528,7 +7131,7 @@ typedef struct _ib_inform_info
 *
 * SYNOPSIS
 */
-OSM_INLINE void     AL_API
+static inline void     OSM_API
 ib_inform_info_get_qpn_resp_time(
   IN   const   ib_net32_t              qpn_resp_time_val,
   OUT          ib_net32_t* const       p_qpn,
@@ -6569,7 +7172,7 @@ ib_inform_info_get_qpn_resp_time(
 *
 * SYNOPSIS
 */
-OSM_INLINE void     AL_API
+static inline void     OSM_API
 ib_inform_info_set_qpn(
   IN   ib_inform_info_t        *p_ii,
   IN   ib_net32_t const        qpn)
@@ -6600,7 +7203,7 @@ ib_inform_info_set_qpn(
 *
 * SYNOPSIS
 */
-OSM_INLINE ib_net32_t     AL_API
+static inline ib_net32_t       OSM_API
 ib_inform_info_get_node_type(
   IN           const   ib_inform_info_t  *p_inf)
 {
@@ -6633,7 +7236,7 @@ ib_inform_info_get_node_type(
 *
 * SYNOPSIS
 */
-OSM_INLINE ib_net32_t     AL_API
+static inline ib_net32_t       OSM_API
 ib_inform_info_get_vend_id(
   IN           const   ib_inform_info_t  *p_inf)
 {
@@ -6673,7 +7276,7 @@ typedef struct _ib_inform_info_record
        ib_net16_t                      subscriber_enum;
        uint8_t                         reserved[6];
        ib_inform_info_t                inform_info;
-
+       uint8_t                         pad[4];
 }      PACK_SUFFIX ib_inform_info_record_t;
 #include <complib/cl_packoff.h>
 
@@ -6784,7 +7387,7 @@ typedef struct _ib_iou_info
 *
 * SYNOPSIS
 */
-AL_INLINE uint8_t     AL_API
+static inline uint8_t  OSM_API
 ib_iou_info_diag_dev_id(
        IN      const   ib_iou_info_t* const    p_iou_info )
 {
@@ -6813,7 +7416,7 @@ ib_iou_info_diag_dev_id(
 *
 * SYNOPSIS
 */
-AL_INLINE uint8_t     AL_API
+static inline uint8_t  OSM_API
 ib_iou_info_option_rom(
        IN      const   ib_iou_info_t*  const   p_iou_info )
 {
@@ -6842,7 +7445,7 @@ ib_iou_info_option_rom(
 *
 * SYNOPSIS
 */
-AL_INLINE uint8_t     AL_API
+static inline uint8_t  OSM_API
 ioc_at_slot(
        IN      const   ib_iou_info_t*  const   p_iou_info,
        IN              uint8_t                 slot )
@@ -6988,7 +7591,7 @@ typedef struct _ib_ioc_profile
 * ib_dm_mad_t
 *********/
 
-AL_INLINE uint32_t     AL_API
+static inline uint32_t OSM_API
 ib_ioc_profile_get_vend_id(
        IN      const   ib_ioc_profile_t* const         p_ioc_profile )
 {
@@ -6996,7 +7599,7 @@ ib_ioc_profile_get_vend_id(
 }
 
 
-AL_INLINE void     AL_API
+static inline void     OSM_API
 ib_ioc_profile_set_vend_id(
        IN              ib_ioc_profile_t* const         p_ioc_profile,
        IN      const   uint32_t                        vend_id )
@@ -7061,7 +7664,7 @@ typedef struct _ib_svc_entries
 * ib_dm_mad_t, ib_svc_entry_t
 *********/
 
-AL_INLINE void     AL_API
+static inline void     OSM_API
 ib_dm_get_slot_lo_hi(
        IN      const   ib_net32_t              slot_lo_hi,
        OUT             uint8_t         *const  p_slot,
@@ -7260,7 +7863,6 @@ typedef struct _ib_rdd* __ptr64                   ib_rdd_handle_t;
 typedef struct _ib_mr* __ptr64                 ib_mr_handle_t;
 typedef struct _ib_mw* __ptr64                 ib_mw_handle_t;
 typedef struct _ib_qp* __ptr64                 ib_qp_handle_t;
-typedef struct _ib_srq* __ptr64                        ib_srq_handle_t;
 typedef struct _ib_eec* __ptr64                        ib_eec_handle_t;
 typedef struct _ib_cq* __ptr64                 ib_cq_handle_t;
 typedef struct _ib_av* __ptr64                 ib_av_handle_t;
@@ -7302,6 +7904,7 @@ typedef enum _ib_api_status_t
        IB_OVERFLOW,
        IB_MAX_MCAST_QPS_REACHED,
        IB_INVALID_QP_STATE,
+       IB_INVALID_EEC_STATE,
        IB_INVALID_APM_STATE,
        IB_INVALID_PORT_STATE,
        IB_INVALID_STATE,
@@ -7312,7 +7915,6 @@ typedef enum _ib_api_status_t
        IB_INVALID_MAX_WRS,
        IB_INVALID_MAX_SGE,
        IB_INVALID_CQ_SIZE,
-       IB_INVALID_SRQ_SIZE,
        IB_INVALID_SERVICE_TYPE,
        IB_INVALID_GID,
        IB_INVALID_LID,
@@ -7320,33 +7922,30 @@ typedef enum _ib_api_status_t
        IB_INVALID_CA_HANDLE,
        IB_INVALID_AV_HANDLE,
        IB_INVALID_CQ_HANDLE,
+       IB_INVALID_EEC_HANDLE,
        IB_INVALID_QP_HANDLE,
-       IB_INVALID_SRQ_HANDLE,
        IB_INVALID_PD_HANDLE,
        IB_INVALID_MR_HANDLE,
-       IB_INVALID_FMR_HANDLE,
        IB_INVALID_MW_HANDLE,
+       IB_INVALID_RDD_HANDLE,
        IB_INVALID_MCAST_HANDLE,
        IB_INVALID_CALLBACK,
-       IB_INVALID_AL_HANDLE,                                   /* InfiniBand Access Layer */
-       IB_INVALID_HANDLE,                                              /* InfiniBand Access Layer */
-       IB_ERROR,                                                               /* InfiniBand Access Layer */
-       IB_REMOTE_ERROR,                                                /* Infiniband Access Layer */
-       IB_VERBS_PROCESSING_DONE,                               /* See Notes above                 */
+       IB_INVALID_AL_HANDLE,                   /* InfiniBand Access Layer */
+       IB_INVALID_HANDLE,                      /* InfiniBand Access Layer */
+       IB_ERROR,                               /* InfiniBand Access Layer */
+       IB_REMOTE_ERROR,                        /* Infiniband Access Layer */
+       IB_VERBS_PROCESSING_DONE,               /* See Notes above         */
        IB_INVALID_WR_TYPE,
        IB_QP_IN_TIMEWAIT,
        IB_EE_IN_TIMEWAIT,
        IB_INVALID_PORT,
        IB_NOT_DONE,
-       IB_INVALID_INDEX,
-       IB_NO_MATCH,
-       IB_PENDING,
-       IB_UNKNOWN_ERROR                                                /* ALWAYS LAST ENUM VALUE! */
+       IB_UNKNOWN_ERROR                        /* ALWAYS LAST ENUM VALUE! */
 
 }      ib_api_status_t;
 /*****/
 
-AL_EXPORT const char* ib_error_str[];
+OSM_EXPORT const char* ib_error_str[];
 
 /****f* IBA Base: Types/ib_get_err_str
 * NAME
@@ -7357,7 +7956,7 @@ AL_EXPORT const char* ib_error_str[];
 *
 * SYNOPSIS
 */
-AL_INLINE const char*    AL_API
+static inline const char*      OSM_API
 ib_get_err_str(
        IN              ib_api_status_t                 status )
 {
@@ -7533,7 +8132,7 @@ typedef enum _ib_async_event_t
 *
 *****/
 
-AL_EXPORT const char* ib_async_event_str[];
+OSM_EXPORT const char* ib_async_event_str[];
 
 /****f* IBA Base: Types/ib_get_async_event_str
 * NAME
@@ -7544,7 +8143,7 @@ AL_EXPORT const char* ib_async_event_str[];
 *
 * SYNOPSIS
 */
-AL_INLINE const char*    AL_API
+static inline const char*      OSM_API
 ib_get_async_event_str(
        IN              ib_async_event_t                event )
 {
@@ -9130,7 +9729,7 @@ typedef enum _ib_wc_status_t
 *              The completed work request was canceled by the user.
 *****/
 
-AL_EXPORT const char* ib_wc_status_str[];
+OSM_EXPORT const char* ib_wc_status_str[];
 
 /****f* IBA Base: Types/ib_get_wc_status_str
 * NAME
@@ -9141,7 +9740,7 @@ AL_EXPORT const char* ib_wc_status_str[];
 *
 * SYNOPSIS
 */
-AL_INLINE const char*    AL_API
+static inline const char*      OSM_API
 ib_get_wc_status_str(
        IN              ib_wc_status_t                  wc_status )
 {
index 46e446f..22a20db 100644 (file)
@@ -79,7 +79,7 @@
 #define IB_PATH_RECORD_RATE_80_GBS              9
 #define IB_PATH_RECORD_RATE_120_GBS             10
 
-
+typedef struct _ib_srq* __ptr64                 ib_srq_handle_t;
 
 /*
  *     The following definitions are shared between the Access Layer and VPD
index c532c58..7344b4a 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
- * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
+ * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2002-2006 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
  * This software is available to you under the OpenIB.org BSD license
@@ -75,6 +75,7 @@ BEGIN_C_DECLS
 *      Steve King, Intel
 *
 *********/
+
 /****s* OpenSM: Attribute Request/osm_attrib_req_t
 * NAME
 *      osm_attrib_req_t
@@ -115,3 +116,4 @@ typedef struct _osm_attrib_req
 END_C_DECLS
 
 #endif         /* _OSM_ATTRIB_REQ_H_ */
+
index f06331e..cc054b3 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
- * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
+ * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2002-2006 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
  * This software is available to you under the OpenIB.org BSD license
@@ -77,6 +77,7 @@ BEGIN_C_DECLS
 *      Steve King, Intel
 *
 *********/
+
 /****h* OpenSM/Base
 * NAME
 *      Base
@@ -93,6 +94,7 @@ BEGIN_C_DECLS
 *      Steve King, Intel
 *
 *********/
+
 /****s* OpenSM: Base/OSM_DEFAULT_M_KEY
 * NAME
 *      OSM_DEFAULT_M_KEY
@@ -173,16 +175,15 @@ BEGIN_C_DECLS
 *      OSM_DEFAULT_TMP_DIR
 *
 * DESCRIPTION
-*      Specifies the default temporary directory for the log file, subnet.lst
-*  and the other log files (with the exception of osm.log for Linux being 
-*  in /var/log).
+*      Specifies the default temporary directory for the log file,
+*  osm-subnet.lst, and other log files.
 *
 * SYNOPSIS
 */
 #ifdef __WIN__
 #define OSM_DEFAULT_TMP_DIR GetOsmTempPath()
 #else
-#define OSM_DEFAULT_TMP_DIR "/tmp/"
+#define OSM_DEFAULT_TMP_DIR "/var/log/"
 #endif
 /***********/
 
@@ -219,6 +220,22 @@ BEGIN_C_DECLS
 #endif
 /***********/
 
+/****d* OpenSM: Base/OSM_DEFAULT_PARTITION_CONFIG_FILE
+* NAME
+*      OSM_DEFAULT_PARTITION_CONFIG_FILE
+*
+* DESCRIPTION
+*      Specifies the default partition config file name
+*
+* SYNOPSIS
+*/
+#ifdef __WIN__
+#define OSM_DEFAULT_PARTITION_CONFIG_FILE strcat(GetOsmCachePath(), "osm-partitions.conf")
+#else
+#define OSM_DEFAULT_PARTITION_CONFIG_FILE "/etc/osm-partitions.conf"
+#endif
+/***********/
+
 /****d* OpenSM: Base/OSM_DEFAULT_SWEEP_INTERVAL_SECS
 * NAME
 *      OSM_DEFAULT_SWEEP_INTERVAL_SECS
@@ -230,6 +247,7 @@ BEGIN_C_DECLS
 */
 #define OSM_DEFAULT_SWEEP_INTERVAL_SECS 10
 /***********/
+
 /****d* OpenSM: Base/OSM_DEFAULT_TRANS_TIMEOUT_MILLISEC
 * NAME
 *      OSM_DEFAULT_TRANS_TIMEOUT_MILLISEC
@@ -299,15 +317,30 @@ BEGIN_C_DECLS
 #define OSM_DEFAULT_LEAF_HEAD_OF_QUEUE_LIFE 0xC
 /***********/
 
+/****d* OpenSM: Base/OSM_DEFAULT_VL_STALL_COUNT
+* NAME
+*      OSM_DEFAULT_LEAF_VL_COUNT
+*
+* DESCRIPTION
+*      Sets the number of consecutive head of queue life time drops that 
+*  puts the VL into stalled state. In stalled state, the port is supposed
+*  to drop everything for 8*(head of queue lifetime) 
+*
+* SYNOPSIS
+*/
+#define OSM_DEFAULT_VL_STALL_COUNT 0x7
+/***********/
+
 /****d* OpenSM: Base/OSM_DEFAULT_LEAF_VL_STALL_COUNT
 * NAME
 *      OSM_DEFAULT_LEAF_VL_STALL_COUNT
 *
 * DESCRIPTION
-*      Sets the number of contiguous head of queue life time drops that 
-*  puts the VL into stalled state. In stalled state the port supposed to
-*  drop everything for 8*(head of queue lifetime) 
-*  We use here the value of 1 - so any drop due to HOQ means stalling the VL
+*      Sets the number of consecutive head of queue life time drops that 
+*  puts the VL into stalled state. In stalled state, the port is supposed
+*  to drop everything for 8*(head of queue lifetime). This value is for
+*  switch ports driving a CA port.
+*  We use the value of 1 here - so any drop due to HOQ means stalling the VL
 *
 * SYNOPSIS
 */
@@ -333,7 +366,7 @@ BEGIN_C_DECLS
 *      OSM_DEFAULT_UNHEALTHY_TIMEOUT
 *
 * DESCRIPTION
-*      Specifies the default timeout for setting port as un-healthy.
+*      Specifies the default timeout for setting port as unhealthy.
 *      timeout time = 60000000us
 *  We use here ~60sec.
 *
@@ -434,11 +467,11 @@ BEGIN_C_DECLS
 *
 * DESCRIPTION
 *   Specifies the number of polling retries before the SM goes back
-*   to DISCOVERY stage. So the total time for handoff is 3min.
+*   to DISCOVERY stage. So the default total time for handoff is 40 sec.
 *
 * SYNOPSIS
 */
-#define OSM_SM_DEFAULT_POLLING_RETRY_NUMBER 18
+#define OSM_SM_DEFAULT_POLLING_RETRY_NUMBER 4
 /**********/
 
 /****d* OpenSM: Base/OSM_NO_PATH
@@ -474,20 +507,44 @@ typedef enum _osm_thread_state
 /***********/
 
 /*
- * OSM_CAP ARE C15-0.1.7 Table 152 
+ * OSM_CAP are from Table 117 and C15-0.1.7 Table 186
  */
 
+/****d* OpenSM: Base/OSM_CAP_IS_TRAP_SUP
+* Name
+*      OSM_CAP_IS_SUBN_TRAP_SUP
+*
+* DESCRIPTION
+*      Management class generates Trap() MADs
+*
+* SYNOPSIS
+*/
+#define OSM_CAP_IS_SUBN_TRAP_SUP (1 << 0)
+/***********/
+
+/****d* OpenSM: Base/OSM_CAP_IS_GET_SET_NOTICE_SUP
+* Name
+*      OSM_CAP_IS_GET_SET_NOTICE_SUP
+*
+* DESCRIPTION
+*       Management class supports Get/Set(Notice)
+*
+* SYNOPSIS
+*/
+#define OSM_CAP_IS_SUBN_GET_SET_NOTICE_SUP (1 << 1)
+/***********/
+
 /****d* OpenSM: Base/OSM_CAP_IS_SUBN_OPT_RECS_SUP
 * Name
 *      OSM_CAP_IS_SUBN_OPT_RECS_SUP
 *
 * DESCRIPTION
-*      Support all optional attributes not including:
-*  MCMemberRecord, TraceRecord, MultPiathRecord
+*      Support all optional attributes except:
+*  MCMemberRecord, TraceRecord, MultiPathRecord
 *
 * SYNOPSIS
 */
-#define OSM_CAP_IS_SUBN_OPT_RECS_SUP (1 << 8);
+#define OSM_CAP_IS_SUBN_OPT_RECS_SUP (1 << 8)
 /***********/
 
 /****d* OpenSM: Base/OSM_CAP_IS_UD_MCAST_SUP
@@ -499,19 +556,19 @@ typedef enum _osm_thread_state
 *
 * SYNOPSIS
 */
-#define OSM_CAP_IS_UD_MCAST_SUP (1 << 9);
+#define OSM_CAP_IS_UD_MCAST_SUP (1 << 9)
 /***********/
 
-/****d* OpenSM: Base/OSM_CAP_IS_MULTI_PATH_SUP
+/****d* OpenSM: Base/OSM_CAP_IS_MULTIPATH_SUP
 * Name
-*      OSM_CAP_IS_MULTI_PATH_SUP
+*      OSM_CAP_IS_MULTIPATH_SUP
 *
 * DESCRIPTION
-*      Multi Path is supported
+*      MultiPathRecord and TraceRecord are supported
 *
 * SYNOPSIS
 */
-#define OSM_CAP_IS_MULTI_PATH_SUP (1 << 10);
+#define OSM_CAP_IS_MULTIPATH_SUP (1 << 10)
 /***********/
 
 /****d* OpenSM: Base/OSM_CAP_IS_REINIT_SUP
@@ -523,7 +580,27 @@ typedef enum _osm_thread_state
 *
 * SYNOPSIS
 */
-#define OSM_CAP_IS_REINIT_SUP (1 << 11);
+#define OSM_CAP_IS_REINIT_SUP (1 << 11)
+/***********/
+
+/****d* OpenSM: Base/OSM_CAP_IS_PORT_INFO_CAPMASK_MATCH_SUPPORTED
+* Name
+*      OSM_CAP_IS_PORT_INFO_CAPMASK_MATCH_SUPPORTED
+*
+* DESCRIPTION
+*      SM/SA supports enhanced SA PortInfoRecord searches per 1.2 Errata:
+*  ClassPortInfo:CapabilityMask.IsPortInfoCapMaskMatchSupported is 1, 
+*  then the AttributeModifier of the SubnAdmGet() and SubnAdmGetTable() 
+*  methods affects the matching behavior on the PortInfo:CapabilityMask 
+*  component. If the high-order bit (bit 31) of the AttributeModifier 
+*  is set to 1, matching on the CapabilityMask component will not be an 
+*  exact bitwise match as described in <ref to 15.4.4>.  Instead, 
+*  matching will only be performed on those bits which are set to 1 in 
+*  the PortInfo:CapabilityMask embedded in the query. 
+*
+* SYNOPSIS
+*/
+#define OSM_CAP_IS_PORT_INFO_CAPMASK_MATCH_SUPPORTED (1 << 13)
 /***********/
 
 /****d* OpenSM: Base/osm_sm_state_t
@@ -636,11 +713,6 @@ typedef enum _osm_state_mgr_mode
 *
 **********/
 
-#define OSM_REPORT_BUF_SIZE                            0x10000
-#define OSM_REPORT_LINE_SIZE                   0x256
-#define OSM_REPORT_BUF_THRESHOLD (OSM_REPORT_BUF_SIZE / OSM_REPORT_LINE_SIZE)
-
-
 /****d* OpenSM: Base/osm_sm_signal_t
 * NAME
 *      osm_sm_signal_t
@@ -700,6 +772,40 @@ typedef enum _osm_mcast_req_type
 #define MAX_UPDN_GUID_FILE_LINE_LENGTH 120
 /**********/
 
+/****s* OpenSM: Base/VendorOUIs
+* NAME
+*      VendorOUIs
+*
+* DESCRIPTION
+*      Known device vendor ID and GUID OUIs
+*
+* SYNOPSIS
+*/
+#define OSM_VENDOR_ID_INTEL         0x00D0B7
+#define OSM_VENDOR_ID_MELLANOX      0x0002C9
+#define OSM_VENDOR_ID_REDSWITCH     0x000617
+#define OSM_VENDOR_ID_SILVERSTORM   0x00066A
+#define OSM_VENDOR_ID_TOPSPIN       0x0005AD
+#define OSM_VENDOR_ID_FUJITSU       0x00E000
+#define OSM_VENDOR_ID_FUJITSU2      0x000B5D
+#define OSM_VENDOR_ID_VOLTAIRE      0x0008F1
+#define OSM_VENDOR_ID_YOTTAYOTTA    0x000453
+#define OSM_VENDOR_ID_PATHSCALE     0x001175
+#define OSM_VENDOR_ID_IBM           0x000255
+#define OSM_VENDOR_ID_DIVERGENET    0x00084E
+#define OSM_VENDOR_ID_FLEXTRONICS   0x000B8C
+#define OSM_VENDOR_ID_AGILENT       0x0030D3
+#define OSM_VENDOR_ID_OBSIDIAN      0x001777
+#define OSM_VENDOR_ID_BAYMICRO      0x000BC1
+#define OSM_VENDOR_ID_LSILOGIC      0x00A0B8
+#define OSM_VENDOR_ID_DDN           0x0001FF
+#define OSM_VENDOR_ID_PANTA         0x001393
+#define OSM_VENDOR_ID_HP            0x001708
+#define OSM_VENDOR_ID_RIOWORKS      0x005045
+
+/**********/
+
 END_C_DECLS
 
 #endif /* _OSM_BASE_H_ */
+
index 9addec7..da0fac3 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
- * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
+ * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2002-2006 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
  * This software is available to you under the OpenIB.org BSD license
@@ -31,6 +31,7 @@
  * $Id$
  */
 
+
 #ifndef _OSM_CONSOLE_H_
 #define _OSM_CONSOLE_H_
 
@@ -54,3 +55,4 @@ void osm_console_prompt(void);
 END_C_DECLS
 
 #endif /* _OSM_CONSOLE_H_ */
+
index 6528629..cb68b47 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
- * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
+ * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2002-2006 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
  * This software is available to you under the OpenIB.org BSD license
@@ -35,7 +35,6 @@
 #ifndef _OSM_DB_H_
 #define _OSM_DB_H_
 
-
 /*
  * Abstract:
  * Declaration of the DB interface.
@@ -64,7 +63,7 @@ BEGIN_C_DECLS
 * DESCRIPTION
 *      The OpenSM database interface provide the means to restore persistat
 *  data, query, modify, delete and evemtually commit it back to the
-*  persistant media. 
+*  persistent media. 
 *
 *  The interface is defined such that it can is not "data dependant":
 *  All keys and data items are texts.
@@ -248,7 +247,7 @@ osm_db_domain_init(
 *      osm_db_restore
 *
 * DESCRIPTION
-*      Reads the entire domain from persistant storage - overrides all
+*      Reads the entire domain from persistent storage - overrides all
 *  existing cached data (if any).
 *
 * SYNOPSIS
@@ -260,7 +259,7 @@ osm_db_restore(
 * PARAMETERS
 *
 *      p_domain
-*              [in] Pointer to the database domain object to restore from persistant db
+*              [in] Pointer to the database domain object to restore from persistent db
 *
 * RETURN VALUES
 *      0 if successful 1 otherwize
@@ -311,7 +310,7 @@ int osm_db_store(
 * PARAMETERS
 *
 *      p_domain
-*              [in] Pointer to the database domain object to restore from persistant db
+*              [in] Pointer to the database domain object to restore from persistent db
 *
 * RETURN VALUES
 *      0 if successful 1 otherwize
@@ -453,3 +452,4 @@ osm_db_delete(
 END_C_DECLS
 
 #endif         /* _OSM_DB_H_ */
+
index 4c382a4..52cdaac 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
- * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
+ * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2002-2006 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
  * This software is available to you under the OpenIB.org BSD license
@@ -252,3 +252,4 @@ osm_db_guid2lid_delete(
 END_C_DECLS
 
 #endif /* _OSM_DB_PACK_H_ */
+
index 42d246a..81c51fa 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
- * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
+ * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2002-2006 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
  * This software is available to you under the OpenIB.org BSD license
@@ -44,7 +44,6 @@
  * $Revision: 1.4 $
  */
 
-
 #ifndef _OSM_DROP_MGR_H_
 #define _OSM_DROP_MGR_H_
 
@@ -82,6 +81,7 @@ BEGIN_C_DECLS
 *      Steve King, Intel
 *
 *********/
+
 /****s* OpenSM: Drop Manager/osm_drop_mgr_t
 * NAME
 *      osm_drop_mgr_t
@@ -256,3 +256,4 @@ void osm_drop_mgr_process(
 END_C_DECLS
 
 #endif /* _OSM_DROP_MGR_H_ */
+
index adcd33e..c1ffb72 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
- * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
+ * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2002-2006 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
  * This software is available to you under the OpenIB.org BSD license
        Drop Manager
        1900 - 19FF
 
-       Linear Fowarding Receive Controller
+       Linear Forwarding Receive Controller
        2000 - 20FF
 
-       Linear Fowarding Receiver
+       Linear Forwarding Receiver
        2100 - 21FF
 
        Vendor Specific
        Generic Responder
        2500 - 25FF
 
-       Linear Fowarding Receive Controller
+       Linear Forwarding Receive Controller
        2600 - 26FF
 
-       Linear Fowarding Receiver
+       Linear Forwarding Receiver
        2700 - 27FF
        
        SA MAD controller
        PortInfo Record Controller
        3000 - 30FF
 
-    Link Record Controller
+       Link Record Controller
        3100 - 31FF
 
        Path Record Controller
        SA Response
        3700 - 37FF
 
-    Link Record Receiver
+       Link Record Receiver
        3800 - 38FF
 
-       Multicast Fowarding Receive Controller
+       Multicast Forwarding Receive Controller
        3900 - 39FF
 
-       Multicast Fowarding Receiver
+       Multicast Forwarding Receiver
        4000 - 40FF
 
        SMInfo Record Receiver
 */
 
 #endif /* _OSM_ERRORS_H_ */
+
index 0045b21..ac31131 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
- * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
+ * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2002-2006 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
  * This software is available to you under the OpenIB.org BSD license
@@ -113,8 +113,9 @@ typedef struct _osm_fwd_tbl_t
 *              then this pointer is NULL.
 *
 * SEE ALSO
-*      Forwarding Table object, Random Fowarding Table object.
+*      Forwarding Table object, Random Forwarding Table object.
 *********/
+
 /****f* OpenSM: Forwarding Table/osm_fwd_tbl_init
 * NAME
 *      osm_fwd_tbl_init
@@ -144,6 +145,7 @@ osm_fwd_tbl_init(
 *
 * SEE ALSO
 *********/
+
 /****f* OpenSM: Forwarding Table/osm_fwd_tbl_destroy
 * NAME
 *      osm_fwd_tbl_destroy
@@ -226,7 +228,6 @@ osm_fwd_tbl_set(
        else
                osm_rand_fwd_tbl_set( p_tbl->p_rnd_tbl, lid_ho, port );
 }
-
 /*
 * PARAMETERS
 *      p_tbl
@@ -269,7 +270,6 @@ osm_fwd_tbl_set_block(
                return( osm_rand_fwd_tbl_set_block( p_tbl->p_rnd_tbl,
                                p_block, block_num ) );
 }
-
 /*
 * PARAMETERS
 *      p_tbl
@@ -302,7 +302,6 @@ osm_fwd_tbl_get_size(
        else
                return( osm_rand_fwd_tbl_get_size( p_tbl->p_rnd_tbl ) );
 }
-
 /*
 * PARAMETERS
 *      p_tbl
@@ -386,3 +385,4 @@ osm_fwd_tbl_get_max_block_id_in_use(
 END_C_DECLS
 
 #endif         /* _OSM_FWD_TBL_H_ */
+
index 300bd19..a713c5c 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
- * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
+ * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2002-2006 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
  * This software is available to you under the OpenIB.org BSD license
@@ -36,7 +36,7 @@
 #define _OSM_HELPER_H_
 
 #include <iba/ib_types.h>
-#include <opensm/cl_dispatcher.h>
+#include <complib/cl_dispatcher.h>
 #include <opensm/osm_base.h>
 #include <opensm/osm_log.h>
 #include <opensm/osm_msgdef.h>
@@ -62,7 +62,6 @@ BEGIN_C_DECLS
  * $Revision: 1.7 $
  */
 
-
 /****f* OpenSM: Helper/ib_get_sa_method_str
  * NAME
  *     ib_get_sa_method_str
@@ -213,6 +212,12 @@ osm_dump_path_record(
        IN const ib_path_rec_t* const p_pr,
        IN const osm_log_level_t log_level );
 
+void
+osm_dump_multipath_record(
+       IN osm_log_t* const p_log,
+       IN const ib_multipath_rec_t* const p_mpr,
+       IN const osm_log_level_t log_level );
+
 void
 osm_dump_node_record(
        IN osm_log_t* const p_log,
@@ -227,7 +232,7 @@ osm_dump_mc_record(
 
 void
 osm_dump_link_record(
-       IN osm_log_t*                           const p_log,
+       IN osm_log_t*                   const p_log,
        IN const ib_link_record_t*      const p_lr,
        IN const osm_log_level_t        log_level );
 
@@ -255,6 +260,24 @@ osm_dump_inform_info(
        IN const ib_inform_info_t* const p_ii,
        IN const osm_log_level_t log_level );
 
+void
+osm_dump_inform_info_record(
+       IN osm_log_t* const p_log,
+       IN const ib_inform_info_record_t* const p_iir,
+       IN const osm_log_level_t log_level );
+
+void
+osm_dump_switch_info_record(
+       IN osm_log_t* const p_log,
+       IN const ib_switch_info_record_t* const p_sir,
+       IN const osm_log_level_t log_level );
+
+void
+osm_dump_sm_info_record(
+       IN osm_log_t* const p_log,
+       IN const ib_sminfo_record_t* const p_smir,
+       IN const osm_log_level_t log_level );
+
 void
 osm_dump_pkey_block( 
        IN osm_log_t* const p_log,
@@ -594,3 +617,4 @@ osm_get_sm_mgr_state_str(
 END_C_DECLS
 
 #endif /* _OSM_HELPER_H_ */
+
index e8ad23f..70849ea 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
- * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
+ * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2002-2006 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
  * This software is available to you under the OpenIB.org BSD license
@@ -31,6 +31,7 @@
  * $Id$
  */
 
+
 /*
  * Abstract:
  *     Declaration of osm_inform_rec_t.
@@ -75,7 +76,7 @@ BEGIN_C_DECLS
 * DESCRIPTION
 *      The Inform record encapsulates the information needed by the
 *      SA to manage InformInfo registrations and sending Reports(Notice)
-*  when SM receives Traps for registered LIDs.  
+*      when SM receives Traps for registered LIDs.
 *
 *      The inform records is not thread safe, thus callers must provide
 *      serialization.
@@ -87,6 +88,7 @@ BEGIN_C_DECLS
 *    Eitan Zahavi, Mellanox
 *
 *********/
+
 /****s* OpenSM: Inform Record/osm_infr_t
 * NAME
 *      osm_infr_t
@@ -101,18 +103,27 @@ BEGIN_C_DECLS
 */
 typedef struct _osm_infr_t
 {
-  cl_list_item_t                               list_item;
-  osm_bind_handle_t                    h_bind;     // a handle of lower level mad srvc
-  osm_infr_rcv_t*          p_infr_rcv; // the receiver of inform_info's
-  osm_mad_addr_t           report_addr;
-  ib_inform_info_record_t      inform_record;
+       cl_list_item_t          list_item;
+       osm_bind_handle_t       h_bind;
+       osm_infr_rcv_t*         p_infr_rcv;
+       osm_mad_addr_t          report_addr;
+       ib_inform_info_record_t inform_record;
 } osm_infr_t;
 /*
 * FIELDS
 *      list_item
 *              List Item for qlist linkage.  Must be first element!!
 *
-*  inform_record
+*      h_bind
+*              A handle of lower level mad srvc
+*
+*      p_infr_rcv
+*              The receiver of inform_info's
+*
+*      report_addr
+*              Report address
+*
+*      inform_record
 *              The Inform Info Record
 *
 * SEE ALSO
@@ -129,7 +140,7 @@ typedef struct _osm_infr_t
 */
 osm_infr_t*
 osm_infr_new(
-                                IN const osm_infr_t *p_infr_rec );
+       IN const osm_infr_t *p_infr_rec );
 /*
 * PARAMETERS
 *      p_inf_rec
@@ -145,7 +156,6 @@ osm_infr_new(
 *      Inform Record, osm_infr_construct, osm_infr_destroy
 *********/
 
-
 /****f* OpenSM: Inform Record/osm_infr_init
 * NAME
 *      osm_infr_new
@@ -158,7 +168,7 @@ osm_infr_new(
 void
 osm_infr_init(
        IN osm_infr_t* const p_infr,
-       IN const osm_infr_t *p_infr_rec  );
+       IN const osm_infr_t *p_infr_rec );
 /*
 * PARAMETERS
 *      p_infr
@@ -212,37 +222,6 @@ osm_infr_destroy(
 *      Inform Record, osm_infr_construct, osm_infr_destroy
 *********/
 
-/****f* OpenSM: Inform Record/osm_infr_get_by_rid
-* NAME
-*      osm_infr_get_by_rid
-*
-* DESCRIPTION
-*      Find a matching osm_infr_t in the subnet DB by inform_info_record RID 
-*
-* SYNOPSIS
-*/
-osm_infr_t*
-osm_infr_get_by_rid(
-       IN osm_subn_t   const   *p_subn,
-       IN osm_log_t    *p_log,
-       IN ib_inform_info_record_t* const p_inf_rec );
-/*
-* PARAMETERS
-*      p_subn 
-*              [in] Pointer to the subnet object
-*
-*  p_log
-*     [in] Pointer to the log object
-*
-*  p_inf_rec
-*     [in] Pointer to an inform_info record with the search RID
-*
-*  RETURN
-*     The matching osm_infr_t
-* SEE ALSO
-*      Inform Record, osm_infr_construct, osm_infr_destroy
-*********/
-
 /****f* OpenSM: Inform Record/osm_infr_get_by_rec
 * NAME
 *      osm_infr_get_by_rec
@@ -256,20 +235,20 @@ osm_infr_t*
 osm_infr_get_by_rec(
        IN osm_subn_t   const   *p_subn,
        IN osm_log_t    *p_log,
-       IN osm_infr_t* const p_infr_rec );
+       IN osm_infr_t*  const   p_infr_rec );
 /*
 * PARAMETERS
 *      p_subn 
 *              [in] Pointer to the subnet object
 *
-*  p_log
-*     [in] Pointer to the log object
+*      p_log
+*              [in] Pointer to the log object
 *
-*  p_inf_rec
-*     [in] Pointer to an inform_info record 
+*      p_inf_rec
+*              [in] Pointer to an inform_info record
 *
-*  RETURN
-*     The matching osm_infr_t
+* RETURN
+*      The matching osm_infr_t
 * SEE ALSO
 *      Inform Record, osm_infr_construct, osm_infr_destroy
 *********/
@@ -302,19 +281,19 @@ osm_infr_remove_from_db(
 */
 ib_api_status_t
 osm_report_notice(
-                                               IN osm_log_t* const p_log,
-                                               IN osm_subn_t*  p_subn,
-                                               IN ib_mad_notice_attr_t *p_ntc);
+       IN osm_log_t* const p_log,
+       IN osm_subn_t* p_subn,
+       IN ib_mad_notice_attr_t* p_ntc );
 /*
 * PARAMETERS
 *      p_rcv
 *              [in] Pointer to the trap receiver
 *
-*  p_ntc
-*     [in] Pointer to a copy of the incoming trap notice attribute.
+*      p_ntc
+*              [in] Pointer to a copy of the incoming trap notice attribute.
 *
-*  RETURN
-*     IB_SUCCESS on good completion
+* RETURN
+*      IB_SUCCESS on good completion
 *
 * SEE ALSO
 *      Inform Record, osm_trap_rcv
@@ -323,3 +302,4 @@ osm_report_notice(
 END_C_DECLS
 
 #endif         /* _OSM_INFR_H_ */
+
index 7fe07c8..0d63d2e 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
- * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
+ * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2002-2006 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
  * This software is available to you under the OpenIB.org BSD license
  * $Revision: 1.4 $
  */
 
-
 #ifndef _OSM_LID_MGR_H_
 #define _OSM_LID_MGR_H_
 
-
 #include <complib/cl_passivelock.h>
 #include <opensm/osm_base.h>
 #include <opensm/osm_madw.h>
@@ -86,6 +84,7 @@ BEGIN_C_DECLS
 *      Steve King, Intel
 *
 *********/
+
 /****s* OpenSM: LID Manager/osm_lid_mgr_t
 * NAME
 *      osm_lid_mgr_t
@@ -115,8 +114,8 @@ typedef struct _osm_lid_mgr
 *      p_subn
 *              Pointer to the Subnet object for this subnet.
 *
-*  p_db
-*     Pointer to the database (persistency) object
+*      p_db
+*              Pointer to the database (persistency) object
 *
 *      p_req
 *              Pointer to the Requester object sending SMPs.
@@ -127,18 +126,18 @@ typedef struct _osm_lid_mgr
 *      p_lock
 *              Pointer to the serializing lock.
 *
-*  p_g2l
-*     Pointer to the database domain storing guid to lid mapping.
+*      p_g2l
+*              Pointer to the database domain storing guid to lid mapping.
 *
-*  used_lids
-*     A vector the maps from the lid to its guid. keeps track of 
-*     existing and non existing mapping of guid->lid 
+*      used_lids
+*              A vector the maps from the lid to its guid. keeps track of 
+*              existing and non existing mapping of guid->lid 
 * 
-*  free_ranges
-*     A list of available free lid ranges. The list is initialized 
-*     by the code that initializes the lid assignment and is consumed by the 
-*     procedure that finds a free range. It holds elements of type
-*     osm_lid_mgr_range_t
+*      free_ranges
+*              A list of available free lid ranges. The list is initialized 
+*              by the code that initializes the lid assignment and is consumed 
+*              by the procedure that finds a free range. It holds elements of 
+*              type osm_lid_mgr_range_t
 *
 * SEE ALSO
 *      LID Manager object
@@ -223,7 +222,7 @@ osm_lid_mgr_init(
        IN osm_lid_mgr_t* const p_mgr,
        IN osm_req_t* const p_req,
        IN osm_subn_t* const p_subn,
-   IN osm_db_t* const p_db,
+       IN osm_db_t* const p_db,
        IN osm_log_t* const p_log,
        IN cl_plock_t* const p_lock );
 /*
@@ -237,6 +236,9 @@ osm_lid_mgr_init(
 *      p_subn
 *              [in] Pointer to the Subnet object for this subnet.
 *
+*      p_db
+*              [in] Pointer to the database object.
+*
 *      p_log
 *              [in] Pointer to the log object.
 *
@@ -317,3 +319,4 @@ osm_lid_mgr_process_subnet(
 END_C_DECLS
 
 #endif /* _OSM_LID_MGR_H_ */
+
index 9850a7f..3ba174d 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
- * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
+ * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2002-2006 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
  * This software is available to you under the OpenIB.org BSD license
@@ -44,7 +44,6 @@
  * $Revision: 1.4 $
  */
 
-
 #ifndef _OSM_LFT_RCV_H_
 #define _OSM_LFT_RCV_H_
 
@@ -81,6 +80,7 @@ BEGIN_C_DECLS
 *      Steve King, Intel
 *
 *********/
+
 /****s* OpenSM: LFT Receiver/osm_lft_rcv_t
 * NAME
 *      osm_lft_rcv_t
@@ -252,3 +252,4 @@ void osm_lft_rcv_process(
 END_C_DECLS
 
 #endif /* _OSM_LFT_RCV_H_ */
+
index a62f5fc..907034d 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
- * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
+ * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2002-2006 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
  * This software is available to you under the OpenIB.org BSD license
@@ -48,8 +48,7 @@
 #ifndef _OSM_LFT_RCV_CTRL_H_
 #define _OSM_LFT_RCV_CTRL_H_
 
-
-#include <opensm/cl_dispatcher.h>
+#include <complib/cl_dispatcher.h>
 #include <opensm/osm_base.h>
 #include <opensm/osm_madw.h>
 #include <opensm/osm_lin_fwd_rcv.h>
@@ -83,6 +82,7 @@ BEGIN_C_DECLS
 *      Steve King, Intel
 *
 *********/
+
 /****s* OpenSM: LFT Receive Controller/osm_lft_rcv_ctrl_t
 * NAME
 *      osm_lft_rcv_ctrl_t
@@ -230,3 +230,4 @@ osm_lft_rcv_ctrl_init(
 END_C_DECLS
 
 #endif         /* OSM_LFT_RCV_CTRL_H_ */
+
index 31fb18f..b7763ab 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
- * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
+ * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2002-2006 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
  * This software is available to you under the OpenIB.org BSD license
@@ -47,6 +47,7 @@
 #ifndef _OSM_LIN_FWD_TBL_H_
 #define _OSM_LIN_FWD_TBL_H_
 
+#include <string.h>
 #include <iba/ib_types.h>
 #include <opensm/osm_base.h>
 
@@ -77,6 +78,7 @@ BEGIN_C_DECLS
 *      Steve King, Intel
 *
 *********/
+
 /****s* OpenSM: Forwarding Table/osm_lin_fwd_tbl_t
 * NAME
 *      osm_lin_fwd_tbl_t
@@ -105,8 +107,9 @@ typedef struct _osm_lin_fwd_tbl
 *              corresponding LID.  Index is by LID.
 *
 * SEE ALSO
-*      Forwarding Table object, Random Fowarding Table object.
+*      Forwarding Table object, Random Forwarding Table object.
 *********/
+
 /****f* OpenSM: Forwarding Table/osm_lin_tbl_new
 * NAME
 *      osm_lin_tbl_new
@@ -133,6 +136,7 @@ osm_lin_tbl_new(
 *
 * SEE ALSO
 *********/
+
 /****f* OpenSM: Forwarding Table/osm_lin_tbl_delete
 * NAME
 *      osm_lin_tbl_delete
@@ -198,7 +202,6 @@ osm_lin_fwd_tbl_set(
 * SEE ALSO
 *********/
 
-
 /****f* OpenSM: Forwarding Table/osm_lin_fwd_tbl_get
 * NAME
 *      osm_lin_fwd_tbl_get
@@ -261,6 +264,7 @@ osm_lin_fwd_tbl_get_size(
 *
 * SEE ALSO
 *********/
+
 /****f* OpenSM: Forwarding Table/osm_lin_fwd_tbl_get_lids_per_block
 * NAME
 *      osm_lin_fwd_tbl_get_lids_per_block
@@ -320,7 +324,6 @@ osm_lin_fwd_tbl_get_max_block_id_in_use(
 * SEE ALSO
 *********/
 
-
 /****f* OpenSM: Forwarding Table/osm_lin_fwd_tbl_set_block
 * NAME
 *      osm_lin_fwd_tbl_set_block
@@ -348,7 +351,7 @@ osm_lin_fwd_tbl_set_block(
        if( lid_start + num_lids > p_tbl->size )
                return( IB_INVALID_PARAMETER );
 
-       cl_memcpy( &p_tbl->port_tbl[lid_start], p_block, num_lids );
+       memcpy( &p_tbl->port_tbl[lid_start], p_block, num_lids );
        return( IB_SUCCESS );
 }
 /*
@@ -373,3 +376,4 @@ osm_lin_fwd_tbl_set_block(
 END_C_DECLS
 
 #endif         /* _OSM_LIN_FWD_TBL_H_ */
+
index 76c9dc8..c61b8a1 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
- * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
+ * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2002-2006 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
  * This software is available to you under the OpenIB.org BSD license
  * $Revision: 1.4 $
  */
 
-
 #ifndef _OSM_LINK_MGR_H_
 #define _OSM_LINK_MGR_H_
 
-
 #include <complib/cl_passivelock.h>
 #include <opensm/osm_base.h>
 #include <opensm/osm_madw.h>
@@ -83,6 +81,7 @@ BEGIN_C_DECLS
 *      Steve King, Intel
 *
 *********/
+
 /****s* OpenSM: Link Manager/osm_link_mgr_t
 * NAME
 *      osm_link_mgr_t
@@ -269,3 +268,4 @@ osm_link_mgr_process(
 END_C_DECLS
 
 #endif /* _OSM_LINK_MGR_H_ */
+
index e5a324e..f111a6e 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
- * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
+ * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2002-2006 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
  * This software is available to you under the OpenIB.org BSD license
@@ -44,7 +44,6 @@
  * $Revision: 1.6 $
  */
 
-
 #ifndef _OSM_LOG_H_
 #define _OSM_LOG_H_
 
 #include <iba/ib_types.h>
 #include <stdio.h>
 
+#ifdef __GNUC__
+#define STRICT_OSM_LOG_FORMAT __attribute__((format(printf, 3, 4)))
+#else
+#define STRICT_OSM_LOG_FORMAT
+#endif
+
 #ifdef __cplusplus
 #  define BEGIN_C_DECLS extern "C" {
 #  define END_C_DECLS   }
@@ -68,7 +73,7 @@
 BEGIN_C_DECLS
 
 #define LOG_ENTRY_SIZE_MAX             4096
-#define BUF_SIZE                               LOG_ENTRY_SIZE_MAX
+#define BUF_SIZE                       LOG_ENTRY_SIZE_MAX
 
 #define __func__ __FUNCTION__
 
@@ -91,15 +96,15 @@ BEGIN_C_DECLS
 *********/
 typedef uint8_t osm_log_level_t;
 
-#define OSM_LOG_NONE                      0x00
+#define OSM_LOG_NONE                   0x00
 #define OSM_LOG_ERROR                  0x01
-#define OSM_LOG_INFO                      0x02
+#define OSM_LOG_INFO                   0x02
 #define OSM_LOG_VERBOSE                        0x04
 #define OSM_LOG_DEBUG                  0x08
 #define OSM_LOG_FUNCS                  0x10
 #define OSM_LOG_FRAMES                 0x20
 #define OSM_LOG_ROUTING                        0x40
-#define OSM_LOG_SYS           0x80
+#define OSM_LOG_SYS                    0x80
 
 /*
        DEFAULT - turn on ERROR and INFO only
@@ -118,12 +123,13 @@ typedef struct _osm_log
 {
        osm_log_level_t                 level;
        cl_spinlock_t                   lock;
-       boolean_t                               flush;
-    FILE*                out_port;
+       unsigned long                   count;
+       unsigned long                   max_size;
+       boolean_t                       flush;
+       FILE*                           out_port;
 } osm_log_t;
 /*********/
 
-
 /****f* OpenSM: Log/osm_log_construct
 * NAME
 *      osm_log_construct
@@ -148,13 +154,13 @@ osm_log_construct(
 *      This function does not return a value.
 *
 * NOTES
-*      Allows calling osm_log_init, osm_log_destroy
+*      Allows calling osm_log_init, osm_log_init_v2, osm_log_destroy
 *
 *      Calling osm_log_construct is a prerequisite to calling any other
-*      method except osm_log_init.
+*      method except osm_log_init or osm_log_init_v2.
 *
 * SEE ALSO
-*      Log object, osm_log_init,
+*      Log object, osm_log_init, osm_log_init_v2,
 *      osm_log_destroy
 *********/
 
@@ -177,9 +183,8 @@ osm_log_destroy(
          fclose(p_log->out_port);
          p_log->out_port = stdout;
        }
-   closelog();
+       closelog();
 }
-
 /*
 * PARAMETERS
 *      p_log
@@ -193,62 +198,31 @@ osm_log_destroy(
 *      Log object.
 *      Further operations should not be attempted on the destroyed object.
 *      This function should only be called after a call to
-*      osm_log_construct or osm_log_init.
+*      osm_log_construct, osm_log_init, or osm_log_init_v2.
 *
 * SEE ALSO
 *      Log object, osm_log_construct,
-*      osm_log_init
+*      osm_log_init, osm_log_init_v2
 *********/
 
-/****f* OpenSM: Log/osm_log_init
+/****f* OpenSM: Log/osm_log_init_v2
 * NAME
-*      osm_log_init
+*      osm_log_init_v2
 *
 * DESCRIPTION
-*      The osm_log_init function initializes a
+*      The osm_log_init_v2 function initializes a
 *      Log object for use.
 *
 * SYNOPSIS
 */
-static inline ib_api_status_t
-osm_log_init(
+ib_api_status_t
+osm_log_init_v2(
   IN osm_log_t* const p_log,
   IN const boolean_t flush,
   IN const uint8_t log_flags,
   IN const char *log_file,
-  IN const boolean_t accum_log_file )
-{
-  p_log->level = log_flags;
-  p_log->flush = flush;
-
-  if (log_file == NULL)
-  {
-    p_log->out_port = stdout;
-  }
-  else
-  {
-    if (accum_log_file)
-      p_log->out_port = fopen(log_file, "a+");
-    else
-      p_log->out_port = fopen(log_file, "w+");
-
-    if (!p_log->out_port)
-    {
-      if (accum_log_file)
-        printf("Cannot open %s for appending. Permission denied\n", log_file);
-      else
-        printf("Cannot open %s for writing. Permission denied\n", log_file);
-
-      return(IB_UNKNOWN_ERROR);
-    }
-  }
-  openlog("OpenSM", LOG_CONS | LOG_PID, LOG_USER);
-
-  if (cl_spinlock_init( &p_log->lock ) == CL_SUCCESS) 
-    return IB_SUCCESS;
-  else
-    return IB_ERROR;
-}
+  IN const unsigned long max_size,
+  IN const boolean_t accum_log_file );
 /*
 * PARAMETERS
 *      p_log
@@ -277,6 +251,27 @@ osm_log_init(
 *      osm_log_destroy
 *********/
 
+/****f* OpenSM: Log/osm_log_init
+* NAME
+*      osm_log_init
+*
+* DESCRIPTION
+*      The osm_log_init function initializes a
+*      Log object for use. It is a wrapper for osm_log_init_v2().
+*
+* SYNOPSIS
+*/
+ib_api_status_t
+osm_log_init(
+  IN osm_log_t* const p_log,
+  IN const boolean_t flush,
+  IN const uint8_t log_flags,
+  IN const char *log_file,
+  IN const boolean_t accum_log_file );
+/*
+ * Same as osm_log_init_v2() but without max_size parameter
+ */
+
 /****f* OpenSM: Log/osm_log_get_level
 * NAME
 *      osm_log_get_level
@@ -306,6 +301,7 @@ osm_log_get_level(
 *      Log object, osm_log_construct,
 *      osm_log_destroy
 *********/
+
 /****f* OpenSM: Log/osm_log_set_level
 * NAME
 *      osm_log_set_level
@@ -339,6 +335,7 @@ osm_log_set_level(
 *      Log object, osm_log_construct,
 *      osm_log_destroy
 *********/
+
 /****f* OpenSM: Log/osm_log_is_active
 * NAME
 *      osm_log_is_active
@@ -375,12 +372,14 @@ osm_log_is_active(
 *      osm_log_destroy
 *********/
 
+extern int osm_log_printf(osm_log_t *p_log, osm_log_level_t level,
+                         const char *fmt, ...);
 
 void
 osm_log(
        IN osm_log_t* const p_log,
        IN const osm_log_level_t verbosity,
-       IN const char *p_str, ... );
+       IN const char *p_str, ... ) STRICT_OSM_LOG_FORMAT;
 
 void
 osm_log_raw(
@@ -472,3 +471,4 @@ osm_is_debug(void);
 END_C_DECLS
 
 #endif         /* _OSM_LOG_H_ */
+
index 1d55478..c251208 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
- * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
+ * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2002-2006 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
  * This software is available to you under the OpenIB.org BSD license
@@ -402,3 +402,4 @@ osm_mad_pool_get_outstanding(
 END_C_DECLS
 
 #endif /* _OSM_MAD_POOL_H_ */
+
index c5ac28d..a0aa29e 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
- * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
+ * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2002-2006 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
  * This software is available to you under the OpenIB.org BSD license
  * $Revision: 1.5 $
  */
 
-
 #ifndef _OSM_MADW_H_
 #define _OSM_MADW_H_
 
+#include <string.h>
 #include <iba/ib_types.h>
 #include <complib/cl_qlist.h>
-#include <opensm/cl_dispatcher.h>
+#include <complib/cl_dispatcher.h>
 #include <opensm/osm_base.h>
 #include <vendor/osm_vendor.h>
 
@@ -75,25 +75,24 @@ BEGIN_C_DECLS
 typedef struct _osm_bind_info
 {
     ib_net64_t         port_guid;
-    uint8_t                    mad_class;
-    uint8_t                    class_version;
+    uint8_t            mad_class;
+    uint8_t            class_version;
     boolean_t          is_responder;
     boolean_t          is_trap_processor;
     boolean_t          is_report_processor;
     uint32_t           send_q_size;
     uint32_t           recv_q_size;
-
 } osm_bind_info_t;
 /*
 * FIELDS
-*   portguid
-*      PortGuid of local port 
+*      portguid
+*              PortGuid of local port 
 *
-*   class
-*      Mgmt Class ID 
+*      class
+*              Mgmt Class ID 
 *
-*   class_version
-*               Mgmt Class version
+*      class_version
+*              Mgmt Class version
 *
 *      is_responder
 *              True if this is a GSI Agent
@@ -132,6 +131,7 @@ typedef struct _osm_bind_info
 *      Steve King, Intel
 *
 *********/
+
 /****s* OpenSM: MAD Wrapper/osm_ni_context_t
 * NAME
 *      osm_ni_context_t
@@ -144,8 +144,7 @@ typedef struct _osm_bind_info
 typedef struct _osm_ni_context
 {
   ib_net64_t                   node_guid;
-  uint8_t                              port_num;
-
+  uint8_t                      port_num;
 } osm_ni_context_t;
 /*
 * FIELDS
@@ -162,7 +161,6 @@ typedef struct _osm_ni_context
 * 
 * SEE ALSO
 *********/
-/*********/
 
 /****s* OpenSM: MAD Wrapper/osm_pi_context_t
 * NAME
@@ -177,10 +175,11 @@ typedef struct _osm_pi_context
 {
   ib_net64_t                   node_guid;
   ib_net64_t                   port_guid;
-  boolean_t                       set_method;
-  boolean_t                       light_sweep;
-  boolean_t          update_master_sm_base_lid;
-  boolean_t          ignore_errors;
+  boolean_t                    set_method;
+  boolean_t                    light_sweep;
+  boolean_t                    update_master_sm_base_lid;
+  boolean_t                    ignore_errors;
+  boolean_t                    active_transition;
 } osm_pi_context_t;
 /*********/
 
@@ -196,9 +195,9 @@ typedef struct _osm_pi_context
 typedef struct _osm_nd_context
 {
        ib_net64_t                      node_guid;
-
 } osm_nd_context_t;
 /*********/
+
 /****s* OpenSM: MAD Wrapper/osm_si_context_t
 * NAME
 *      osm_si_context_t
@@ -213,9 +212,9 @@ typedef struct _osm_si_context
        ib_net64_t                      node_guid;
        boolean_t                       set_method;
        boolean_t                       light_sweep;
-
 } osm_si_context_t;
 /*********/
+
 /****s* OpenSM: MAD Wrapper/osm_lft_context_t
 * NAME
 *      osm_lft_context_t
@@ -229,9 +228,9 @@ typedef struct _osm_lft_context
 {
        ib_net64_t                      node_guid;
        boolean_t                       set_method;
-
 } osm_lft_context_t;
 /*********/
+
 /****s* OpenSM: MAD Wrapper/osm_mft_context_t
 * NAME
 *      osm_mft_context_t
@@ -245,9 +244,9 @@ typedef struct _osm_mft_context
 {
        ib_net64_t                      node_guid;
        boolean_t                       set_method;
-
 } osm_mft_context_t;
 /*********/
+
 /****s* OpenSM: MAD Wrapper/osm_smi_context_t
 * NAME
 *      osm_smi_context_t
@@ -259,11 +258,11 @@ typedef struct _osm_mft_context
 */
 typedef struct _osm_smi_context
 {
-  ib_net64_t             port_guid;
-  boolean_t         set_method;
-
+  ib_net64_t           port_guid;
+  boolean_t            set_method;
 } osm_smi_context_t;
 /*********/
+
 /****s* OpenSM: MAD Wrapper/osm_pkey_context_t
 * NAME
 *      osm_pkey_context_t
@@ -277,9 +276,10 @@ typedef struct _osm_pkey_context
 {
   ib_net64_t                   node_guid;
   ib_net64_t                   port_guid;
-  boolean_t                       set_method;
+  boolean_t                    set_method;
 } osm_pkey_context_t;
 /*********/
+
 /****s* OpenSM: MAD Wrapper/osm_slvl_context_t
 * NAME
 *      osm_slvl_context_t
@@ -293,9 +293,10 @@ typedef struct _osm_slvl_context
 {
   ib_net64_t                   node_guid;
   ib_net64_t                   port_guid;
-  boolean_t                       set_method;
+  boolean_t                    set_method;
 } osm_slvl_context_t;
 /*********/
+
 /****s* OpenSM: MAD Wrapper/osm_vla_context_t
 * NAME
 *      osm_vla_context_t
@@ -309,13 +310,14 @@ typedef struct _osm_vla_context
 {
   ib_net64_t                   node_guid;
   ib_net64_t                   port_guid;
-  boolean_t                       set_method;
+  boolean_t                    set_method;
 } osm_vla_context_t;
 /*********/
+
 #ifndef OSM_VENDOR_INTF_OPENIB
 /****s* OpenSM: MAD Wrapper/osm_arbitrary_context_t
 * NAME
-*      osm_sa_context_t
+*      osm_arbitrary_context_t
 *
 * DESCRIPTION
 *      Context needed by arbitrary recipient.
@@ -329,6 +331,7 @@ typedef struct _osm_arbitrary_context
 } osm_arbitrary_context_t;
 /*********/
 #endif
+
 /****s* OpenSM: MAD Wrapper/osm_madw_context_t
 * NAME
 *      osm_madw_context_t
@@ -340,15 +343,16 @@ typedef struct _osm_arbitrary_context
 */
 typedef union _osm_madw_context
 {
-       osm_ni_context_t                ni_context;
-       osm_pi_context_t                pi_context;
-       osm_nd_context_t                nd_context;
-       osm_si_context_t                si_context;
-       osm_lft_context_t               lft_context;
-       osm_mft_context_t               mft_context;
-       osm_smi_context_t               smi_context;
+       osm_ni_context_t        ni_context;
+       osm_pi_context_t        pi_context;
+       osm_nd_context_t        nd_context;
+       osm_si_context_t        si_context;
+       osm_lft_context_t       lft_context;
+       osm_mft_context_t       mft_context;
+       osm_smi_context_t       smi_context;
        osm_slvl_context_t      slvl_context;
        osm_pkey_context_t      pkey_context;
+       osm_vla_context_t       vla_context;
 #ifndef OSM_VENDOR_INTF_OPENIB
        osm_arbitrary_context_t arb_context;
 #endif
@@ -366,38 +370,35 @@ typedef union _osm_madw_context
 typedef struct _osm_mad_addr
 {
     ib_net16_t dest_lid;
-    uint8_t            path_bits;
-    uint8_t    static_rate;
+    uint8_t    path_bits;
+    uint8_t    static_rate;
 
     union addr_type
     {
         struct _smi
                {
                  ib_net16_t            source_lid;    
-                 uint8_t                       port_num;       
+                 uint8_t               port_num;       
         } smi;
 
         struct _gsi
                {
             ib_net32_t                 remote_qp;          
-            ib_net32_t         remote_qkey;       
+            ib_net32_t                 remote_qkey;       
             ib_net16_t                 pkey;
             uint8_t                    service_level;          
-            boolean_t          global_route;
+            boolean_t                  global_route;
             ib_grh_t                   grh_info;
         } gsi;
     } addr_type;
 
 } osm_mad_addr_t;
-
 /*
 * FIELDS
 *
 * SEE ALSO
 *********/
 
-
-
 /****s* OpenSM: MAD Wrapper/osm_madw_t
 * NAME
 *      osm_madw_t
@@ -415,12 +416,11 @@ typedef struct _osm_madw
        osm_mad_addr_t                                  mad_addr;
        osm_bind_info_t                                 bind_info;
        osm_madw_context_t                              context;
-       uint32_t                                                mad_size;
+       uint32_t                                        mad_size;
        ib_api_status_t                                 status;
        cl_disp_msgid_t                                 fail_msg;
-       boolean_t                                               resp_expected;
+       boolean_t                                       resp_expected;
        const ib_mad_t                                  *p_mad;
-
 } osm_madw_t;
 /*
 * FIELDS
@@ -485,8 +485,8 @@ osm_madw_construct(
                Don't touch the pool_item since that is an opaque object.
                Clear all other objects in the mad wrapper.
        */
-       cl_memclr( ((uint8_t *)p_madw) + sizeof( cl_pool_item_t ),
-                       sizeof(*p_madw) - sizeof( cl_pool_item_t ) );
+       memset( ((uint8_t *)p_madw) + sizeof( cl_pool_item_t ), 0,
+               sizeof(*p_madw) - sizeof( cl_pool_item_t ) );
 }
 /*
 * PARAMETERS
@@ -535,6 +535,7 @@ void osm_madw_destroy(
 * SEE ALSO
 *      MAD Wrapper object, osm_madw_construct, osm_madw_init
 *********/
+
 /****f* OpenSM: MAD Wrapper/osm_madw_init
 * NAME
 *      osm_madw_init
@@ -578,6 +579,7 @@ osm_madw_init(
 *
 * SEE ALSO
 *********/
+
 /****f* OpenSM: MAD Wrapper/osm_madw_get_smp_ptr
 * NAME
 *      osm_madw_get_smp_ptr
@@ -663,6 +665,7 @@ osm_madw_get_ni_context_ptr(
 *
 * SEE ALSO
 *********/
+
 /****f* OpenSM: MAD Wrapper/osm_madw_get_pi_context_ptr
 * NAME
 *      osm_madw_get_pi_context_ptr
@@ -690,6 +693,7 @@ osm_madw_get_pi_context_ptr(
 *
 * SEE ALSO
 *********/
+
 /****f* OpenSM: MAD Wrapper/osm_madw_get_nd_context_ptr
 * NAME
 *      osm_madw_get_nd_context_ptr
@@ -717,6 +721,7 @@ osm_madw_get_nd_context_ptr(
 *
 * SEE ALSO
 *********/
+
 /****f* OpenSM: MAD Wrapper/osm_madw_get_lft_context_ptr
 * NAME
 *      osm_madw_get_lft_context_ptr
@@ -744,6 +749,7 @@ osm_madw_get_lft_context_ptr(
 *
 * SEE ALSO
 *********/
+
 /****f* OpenSM: MAD Wrapper/osm_madw_get_mft_context_ptr
 * NAME
 *      osm_madw_get_mft_context_ptr
@@ -771,6 +777,7 @@ osm_madw_get_mft_context_ptr(
 *
 * SEE ALSO
 *********/
+
 /****f* OpenSM: MAD Wrapper/osm_madw_get_si_context_ptr
 * NAME
 *      osm_madw_get_si_context_ptr
@@ -826,6 +833,7 @@ osm_madw_get_smi_context_ptr(
 *
 * SEE ALSO
 *********/
+
 /****f* OpenSM: MAD Wrapper/osm_madw_get_pkey_context_ptr
 * NAME
 *      osm_madw_get_pkey_context_ptr
@@ -853,6 +861,7 @@ osm_madw_get_pkey_context_ptr(
 *
 * SEE ALSO
 *********/
+
 /****f* OpenSM: MAD Wrapper/osm_madw_get_slvl_context_ptr
 * NAME
 *      osm_madw_get_slvl_context_ptr
@@ -1148,3 +1157,4 @@ osm_madw_copy_context(
 END_C_DECLS
 
 #endif         /* _OSM_MADW_H_ */
+
index 98ea62e..a6de385 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
- * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
+ * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2002-2006 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
  * This software is available to you under the OpenIB.org BSD license
@@ -188,6 +188,7 @@ void osm_lid_matrix_destroy(
 * SEE ALSO
 *      LID Matrix object, osm_lid_matrix_construct, osm_lid_matrix_init
 *********/
+
 /****f* OpenSM: LID Matrix/osm_lid_matrix_init
 * NAME
 *      osm_lid_matrix_init
@@ -286,6 +287,7 @@ osm_lid_matrix_get_max_lid_ho(
 *
 * SEE ALSO
 *********/
+
 /****f* OpenSM: LID Matrix/osm_lid_matrix_get_num_ports
 * NAME
 *      osm_lid_matrix_get_num_ports
@@ -313,12 +315,13 @@ osm_lid_matrix_get_num_ports(
 *
 * SEE ALSO
 *********/
+
 /****f* OpenSM: LID Matrix/osm_lid_matrix_get_least_hops
 * NAME
 *      osm_lid_matrix_get_least_hops
 *
 * DESCRIPTION
-*      Returns the number of ports in this lid matrix.
+*      Returns the least number of hops for specified lid
 *
 * SYNOPSIS
 */
@@ -342,7 +345,7 @@ osm_lid_matrix_get_least_hops(
 *              [in] LID (host order) for which to retrieve the shortest hop count.
 *
 * RETURN VALUES
-*      Returns the number of ports in this lid matrix.
+*      Returns the least number of hops for specified lid
 *
 * NOTES
 *
@@ -385,6 +388,7 @@ osm_lid_matrix_set(
 *
 * SEE ALSO
 *********/
+
 /****f* OpenSM: LID Matrix/osm_lid_matrix_set_min_lid_size
 * NAME
 *      osm_lid_matrix_set_min_lid_size
@@ -447,3 +451,4 @@ osm_lid_matrix_clear(
 END_C_DECLS
 
 #endif         /* _OSM_MATRIX_H_ */
+
index 9b73e8c..0a81216 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
- * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
+ * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2002-2006 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
  * This software is available to you under the OpenIB.org BSD license
@@ -44,7 +44,6 @@
  * $Revision: 1.4 $
  */
 
-
 #ifndef _OSM_MFT_RCV_H_
 #define _OSM_MFT_RCV_H_
 
@@ -81,6 +80,7 @@ BEGIN_C_DECLS
 *      Steve King, Intel
 *
 *********/
+
 /****s* OpenSM: MFT Receiver/osm_mft_rcv_t
 * NAME
 *      osm_mft_rcv_t
@@ -256,3 +256,4 @@ osm_mft_rcv_process(
 END_C_DECLS
 
 #endif /* _OSM_MFT_RCV_H_ */
+
index b9747fa..c664ecb 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
- * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
+ * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2002-2006 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
  * This software is available to you under the OpenIB.org BSD license
@@ -49,8 +49,7 @@
 #ifndef _OSM_MFT_RCV_CTRL_H_
 #define _OSM_MFT_RCV_CTRL_H_
 
-
-#include <opensm/cl_dispatcher.h>
+#include <complib/cl_dispatcher.h>
 #include <opensm/osm_base.h>
 #include <opensm/osm_madw.h>
 #include <opensm/osm_mcast_fwd_rcv.h>
@@ -85,6 +84,7 @@ BEGIN_C_DECLS
 *      Steve King, Intel
 *
 *********/
+
 /****s* OpenSM: MFT Receive Controller/osm_mft_rcv_ctrl_t
 * NAME
 *      osm_mft_rcv_ctrl_t
@@ -232,3 +232,4 @@ osm_mft_rcv_ctrl_init(
 END_C_DECLS
 
 #endif         /* OSM_MFT_RCV_CTRL_H_ */
+
index 477bf92..c975b96 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
- * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
+ * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2002-2006 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
  * This software is available to you under the OpenIB.org BSD license
  * $Revision: 1.4 $
  */
 
-
 #ifndef _OSM_MCAST_MGR_H_
 #define _OSM_MCAST_MGR_H_
 
-
 #include <complib/cl_passivelock.h>
 #include <opensm/osm_base.h>
 #include <opensm/osm_madw.h>
@@ -86,6 +84,7 @@ BEGIN_C_DECLS
 *      Steve King, Intel
 *
 *********/
+
 /****s* OpenSM: Multicast Manager/osm_mcast_mgr_t
 * NAME
 *      osm_mcast_mgr_t
@@ -265,50 +264,6 @@ osm_mcast_mgr_process(
 *      Multicast Manager, Node Info Response Controller
 *********/
 
-/****f* OpenSM: Multicast Manager/osm_mcast_mgr_process_mgrp
-* NAME
-*      osm_mcast_mgr_process_mgrp
-*
-* DESCRIPTION
-*      Processes a specific multicast group.  This function is called
-*      by the SM to process a multicast group.  Note that this function
-*      returns BEFORE the switch tables have been configured over the wire,
-*      and AFTER switch table configuration MADs are all placed in the
-*      VL15 FIFOs.  In other words, the switch table configuration is
-*      imminent but probably not yet complete at the time this call returns.
-*
-* SYNOPSIS
-*/
-osm_signal_t
-osm_mcast_mgr_process_mgrp(
-  IN osm_mcast_mgr_t*      const p_mgr,
-  IN osm_mgrp_t*           const p_mgrp,
-  IN osm_mcast_req_type_t        req_type,
-  IN ib_net64_t                  port_guid );
-/*
-* PARAMETERS
-*      p_mgr
-*              [in] Pointer to an osm_mcast_mgr_t object.
-*
-*      p_mgrp
-*              [in] Pointer to the multicast group to process.
-*
-*  req_type
-*     [in] Type of the multicast request that caused this processing
-*          (MC create/join/leave).
-*
-*  port_guid
-*     [in] Port guid of the port that was added/removed due to this call.
-*
-* RETURN VALUES
-*      OSM_SIGNAL_DONE
-*      OSM_SIGNAL_DONE_PENDING
-*
-* NOTES
-*
-* SEE ALSO
-*********/
-
 /****f* OpenSM: Multicast Manager/osm_mcast_mgr_process_mgrp_cb
 * NAME
 *      osm_mcast_mgr_process_mgrp_cb
@@ -381,3 +336,4 @@ osm_mcast_mgr_process_single(
 END_C_DECLS
 
 #endif /* _OSM_MCAST_MGR_H_ */
+
index 7588d9d..f4adad3 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
- * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
+ * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2002-2006 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
  * This software is available to you under the OpenIB.org BSD license
@@ -74,14 +74,13 @@ BEGIN_C_DECLS
 */
 typedef struct _osm_mcast_fwd_tbl
 {
-       uint8_t                                 num_ports;
-       uint8_t                                 max_position;
-       uint16_t                                max_block;
-       int16_t                                 max_block_in_use;
-       uint16_t                                num_entries;
-       uint16_t                                max_mlid_ho;
-       uint16_t                                (*p_mask_tbl)[][IB_MCAST_POSITION_MAX];
-
+       uint8_t                         num_ports;
+       uint8_t                         max_position;
+       uint16_t                        max_block;
+       int16_t                         max_block_in_use;
+       uint16_t                        num_entries;
+       uint16_t                        max_mlid_ho;
+       uint16_t                        (*p_mask_tbl)[][IB_MCAST_POSITION_MAX];
 } osm_mcast_tbl_t;
 /*
 * FIELDS
@@ -142,6 +141,7 @@ osm_mcast_tbl_init(
 *
 * SEE ALSO
 *********/
+
 /****f* OpenSM: Forwarding Table/osm_mcast_tbl_delete
 * NAME
 *      osm_mcast_tbl_delete
@@ -256,7 +256,6 @@ osm_mcast_tbl_clear_mlid(
 * SEE ALSO
 *********/
 
-
 /****f* OpenSM: Forwarding Table/osm_mcast_tbl_is_port
 * NAME
 *      osm_mcast_tbl_is_port
@@ -353,9 +352,9 @@ osm_mcast_tbl_set_block(
 * SEE ALSO
 *********/
 
-/****f* OpenSM: Switch/osm_switch_get_mcast_tbl_block
+/****f* OpenSM: Forwarding Table/osm_mcast_get_tbl_block
 * NAME
-*      osm_switch_get_mcast_tbl_block
+*      osm_mcast_get_tbl_block
 *
 * DESCRIPTION
 *      Retrieve a multicast forwarding table block.
@@ -393,9 +392,9 @@ osm_mcast_tbl_get_block(
 * SEE ALSO
 *********/
 
-/****f* OpenSM: Switch/osm_switch_get_max_block
+/****f* OpenSM: Forwarding Table/osm_mcast_tbl_get_max_block
 * NAME
-*      osm_switch_get_max_block
+*      osm_mcast_tbl_get_max_block
 *
 * DESCRIPTION
 *      Returns the maximum block ID in this table.
@@ -421,9 +420,9 @@ osm_mcast_tbl_get_max_block(
 * SEE ALSO
 *********/
 
-/****f* OpenSM: Switch/osm_switch_get_max_block
+/****f* OpenSM: Forwarding Table/osm_mcast_tbl_get_max_block_in_use
 * NAME
-*      osm_switch_get_max_block
+*      osm_mcast_tbl_get_max_block_in_use
 *
 * DESCRIPTION
 *      Returns the maximum block ID in use in this table.
@@ -451,9 +450,9 @@ osm_mcast_tbl_get_max_block_in_use(
 * SEE ALSO
 *********/
 
-/****f* OpenSM: Switch/osm_switch_get_max_position
+/****f* OpenSM: Forwarding Table/osm_mcast_tbl_get_max_position
 * NAME
-*      osm_switch_get_max_position
+*      osm_mcast_tbl_get_max_position
 *
 * DESCRIPTION
 *      Returns the maximum position in this table.
@@ -482,3 +481,4 @@ osm_mcast_tbl_get_max_position(
 END_C_DECLS
 
 #endif         /* _OSM_MCAST_TBL_H_ */
+
index fe7ca2a..6f6e864 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
- * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
+ * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2002-2006 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
  * This software is available to you under the OpenIB.org BSD license
@@ -47,6 +47,7 @@
 #ifndef _OSM_MCM_INFO_H_
 #define _OSM_MCM_INFO_H_
 
+#include <string.h>
 #include <iba/ib_types.h>
 #include <complib/cl_qlist.h>
 #include <opensm/osm_base.h>
@@ -105,7 +106,7 @@ static inline void
 osm_mcm_info_construct(
        IN osm_mcm_info_t* const p_mcm )
 {
-       cl_memclr( p_mcm, sizeof(*p_mcm) );
+       memset( p_mcm, 0, sizeof(*p_mcm) );
 }
 /*
 * PARAMETERS
@@ -233,3 +234,4 @@ osm_mcm_info_delete(
 END_C_DECLS
 
 #endif         /* _OSM_MCM_INFO_H_ */
+
index 7a23240..78232dd 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
- * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
+ * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2002-2006 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
  * This software is available to you under the OpenIB.org BSD license
@@ -31,6 +31,7 @@
  * $Id$
  */
 
+
 /*
  * Abstract:
  *     Declaration of osm_mcm_port_t.
@@ -75,11 +76,10 @@ BEGIN_C_DECLS
 */
 typedef struct _osm_mcm_port
 {
-    cl_map_item_t                      map_item;
-       ib_gid_t                                port_gid;
-       uint8_t                                 scope_state;
-  boolean_t             proxy_join;
-
+       cl_map_item_t   map_item;
+       ib_gid_t        port_gid;
+       uint8_t         scope_state;
+       boolean_t       proxy_join;
 } osm_mcm_port_t;
 /*
 * FIELDS
@@ -92,10 +92,11 @@ typedef struct _osm_mcm_port
 *      scope_state
 *              ???
 *
-*  proxy_join
-*     If FALSE - Join was performed by the endport identified by PortGID
-*     If TRUE - Join was performed on behalf of the endport identified 
-*               by PortGID by another port within the same partition
+*      proxy_join
+*              If FALSE - Join was performed by the endport identified
+*              by PortGID. If TRUE - Join was performed on behalf of
+*              the endport identified by PortGID by another port within
+*              the same partition.
 *
 * SEE ALSO
 *      MCM Port Object
@@ -265,3 +266,4 @@ osm_mcm_port_delete(
 END_C_DECLS
 
 #endif         /* _OSM_MCM_PORT_H_ */
+
index b6a7946..8b591d1 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
- * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
+ * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2002-2006 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
  * This software is available to you under the OpenIB.org BSD license
@@ -42,7 +42,6 @@
  * $Revision: 1.5 $
  */
 
-
 #ifndef _OSM_MSGDEF_H_
 #define _OSM_MSGDEF_H_
 
@@ -76,6 +75,7 @@ BEGIN_C_DECLS
 *      Steve King, Intel
 *
 *********/
+
 /****s* OpenSM: Dispatcher Messages/OSM_MSG_REQ
 * NAME
 *      OSM_MSG_REQ
@@ -84,12 +84,12 @@ BEGIN_C_DECLS
 *      Initiates a QP0 attribute request.
 *
 * NOTES
-*      Sent by:                                osm_sm_t
+*      Sent by:                        osm_sm_t
 *      Received by:                    osm_req_ctrl_t
 *      Delivery notice:                yes
 * 
-*
 ***********/
+
 /****s* OpenSM: Dispatcher Messages/OSM_MSG_MAD_NODE_INFO
 * NAME
 *      OSM_MSG_MAD_NODE_INFO
@@ -98,12 +98,13 @@ BEGIN_C_DECLS
 *      Message for received NodeInfo MADs.
 *
 * NOTES
-*      Sent by:                                osm_mad_ctrl_t
+*      Sent by:                        osm_mad_ctrl_t
 *      Received by:                    osm_ni_rcv_ctrl_t
 *      Delivery notice:                yes
 * 
 *
 ***********/
+
 /****s* OpenSM: Dispatcher Messages/OSM_MSG_MAD_PORT_INFO
 * NAME
 *      OSM_MSG_MAD_PORT_INFO
@@ -112,12 +113,13 @@ BEGIN_C_DECLS
 *      Message for received PortInfo MADs.
 *
 * NOTES
-*      Sent by:                                osm_mad_ctrl_t
+*      Sent by:                        osm_mad_ctrl_t
 *      Received by:                    osm_pi_rcv_ctrl_t
 *      Delivery notice:                yes
 * 
 *
 ***********/
+
 /****s* OpenSM: Dispatcher Messages/OSM_MSG_MAD_SWITCH_INFO
 * NAME
 *      OSM_MSG_MAD_SWITCH_INFO
@@ -126,11 +128,12 @@ BEGIN_C_DECLS
 *      Message for received SwitchInfo MADs.
 *
 * NOTES
-*      Sent by:                                osm_mad_ctrl_t
+*      Sent by:                        osm_mad_ctrl_t
 *      Received by:                    osm_si_rcv_ctrl_t
 *      Delivery notice:                yes
 * 
 ***********/
+
 /****s* OpenSM: Dispatcher Messages/OSM_MSG_MAD_NODE_DESC
 * NAME
 *      OSM_MSG_MAD_NODE_DESC
@@ -139,12 +142,13 @@ BEGIN_C_DECLS
 *      Message for received NodeDescription MADs.
 *
 * NOTES
-*      Sent by:                                osm_mad_ctrl_t
+*      Sent by:                        osm_mad_ctrl_t
 *      Received by:                    osm_nd_rcv_ctrl_t
 *      Delivery notice:                yes
 * 
 * SOURCE
 ***********/
+
 /****d* OpenSM: Dispatcher Messages/OSM_MSG_NO_SMPS_OUTSTANDING
 * NAME
 *   OSM_MSG_NO_SMPS_OUTSTANDING
@@ -189,9 +193,16 @@ enum
        OSM_MSG_MAD_VL_ARB,
        OSM_MSG_MAD_SLVL,
        OSM_MSG_MAD_GUIDINFO_RECORD,
+       OSM_MSG_MAD_INFORM_INFO_RECORD,
+       OSM_MSG_MAD_SWITCH_INFO_RECORD,
+       OSM_MSG_MAD_MFT_RECORD,
+#if defined (VENDOR_RMPP_SUPPORT) && defined (DUAL_SIDED_RMPP)
+       OSM_MSG_MAD_MULTIPATH_RECORD,
+#endif
        OSM_MSG_MAX
 };
 
 END_C_DECLS
 
 #endif /* _OSM_MSGDEF_H_ */
+
index c424772..4394ff2 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
- * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
+ * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2002-2006 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
  * This software is available to you under the OpenIB.org BSD license
@@ -31,6 +31,7 @@
  * $Id$
  */
 
+
 #ifndef _OSM_BIND_H_
 #define _OSM_BIND_H_
 
@@ -140,3 +141,4 @@ osm_mtl_send_mad(
 END_C_DECLS
 
 #endif // _OSM_BIND_H_
+
index 77de6e9..24e4a85 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
- * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
+ * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2002-2006 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
  * This software is available to you under the OpenIB.org BSD license
  * $Revision: 1.4 $
  */
 
-
 #ifndef _OSM_MTREE_H_
 #define _OSM_MTREE_H_
 
+#include <string.h>
 #include <iba/ib_types.h>
 #include <complib/cl_qmap.h>
 #include <opensm/osm_base.h>
@@ -106,12 +106,11 @@ BEGIN_C_DECLS
 */
 typedef struct _osm_mtree_node
 {
-       cl_map_item_t                                   map_item;
-       osm_switch_t                                    *p_sw;
-       uint8_t                                                 max_children;
-       struct _osm_mtree_node                  *p_up;
-       struct _osm_mtree_node                  *child_array[1];
-
+       cl_map_item_t           map_item;
+       osm_switch_t            *p_sw;
+       uint8_t                 max_children;
+       struct _osm_mtree_node  *p_up;
+       struct _osm_mtree_node  *child_array[1];
 } osm_mtree_node_t;
 /*
 * FIELDS
@@ -151,7 +150,7 @@ static inline void
 osm_mtree_node_construct(
        IN osm_mtree_node_t* const p_mtn )
 {
-       cl_memclr( p_mtn, sizeof(*p_mtn) );
+       memset( p_mtn, 0, sizeof(*p_mtn) );
 }
 /*
 * PARAMETERS
@@ -376,3 +375,4 @@ osm_mtree_node_get_switch_ptr(
 END_C_DECLS
 
 #endif         /* _OSM_MTREE_H_ */
+
index 17962ca..b182d3b 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
- * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
+ * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2002-2006 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
  * This software is available to you under the OpenIB.org BSD license
@@ -31,6 +31,7 @@
  * $Id$
  */
 
+
 /*
  * Abstract:
  *     Declaration of osm_mgrp_t.
@@ -159,15 +160,15 @@ typedef struct osm_mcast_mgr_ctxt
 */
 typedef struct _osm_mgrp
 {
-       cl_map_item_t                                   map_item;
-       ib_net16_t                                              mlid;
-       osm_mtree_node_t                                *p_root;
-       cl_qmap_t                                               mcm_port_tbl;
-       ib_member_rec_t                         mcmember_rec;
-       boolean_t                                               well_known;
-       boolean_t                                               to_be_deleted;
-   uint32_t                   last_change_id;
-   uint32_t                   last_tree_id;
+       cl_map_item_t           map_item;
+       ib_net16_t              mlid;
+       osm_mtree_node_t        *p_root;
+       cl_qmap_t               mcm_port_tbl;
+       ib_member_rec_t         mcmember_rec;
+       boolean_t               well_known;
+       boolean_t               to_be_deleted;
+       uint32_t                last_change_id;
+       uint32_t                last_tree_id;
 } osm_mgrp_t;
 /*
 * FIELDS
@@ -175,7 +176,8 @@ typedef struct _osm_mgrp
 *              Map Item for qmap linkage.  Must be first element!!
 *
 *      mlid
-*              The network ordered LID of this Multicast Group (must be >= 0xC000).
+*              The network ordered LID of this Multicast Group (must be
+*              >= 0xC000).
 *
 *      p_root
 *              Pointer to the root "tree node" in the single spanning tree
@@ -183,34 +185,33 @@ typedef struct _osm_mgrp
 *              switches.  Member ports are not represented in the tree.
 *
 *      mcm_port_tbl
-*              Table (sorted by port GUID) of osm_mcm_port_t objects representing
-*              the member ports of this multicast group.
+*              Table (sorted by port GUID) of osm_mcm_port_t objects
+*              representing the member ports of this multicast group.
 *
 *      mcmember_rec
 *              Hold the parameters of the Multicast Group.
 *
 *      well_known
-*              Indicates that this is the wellknow multicast group which is created
-*              during the initialization of SM/SA and will be present even if 
-*              there are no ports for this group
+*              Indicates that this is the wellknow multicast group which
+*              is created during the initialization of SM/SA and will be
+*              present even if there are no ports for this group
 *
-*  to_be_deleted
-*     Since groups are deleted only after re-route we need to track the
-*     fact the group is about to be deleted so we can track the fact a 
-*     new join is actually a create request.
+*      to_be_deleted
+*              Since groups are deleted only after re-route we need to
+*              track the fact the group is about to be deleted so we can
+*              track the fact a new join is actually a create request.
 *
-*  last_change_id
-*     a counter for the number of changes applied to the group.
-*     this counter shuold be incremented on any modification to the group:
-*     joining or leaving of ports.
+*      last_change_id
+*              a counter for the number of changes applied to the group.
+*              This counter shuold be incremented on any modification
+*              to the group: joining or leaving of ports.
 *
-*  last_tree_id 
-*     the last change id used for building the current tree.
+*      last_tree_id
+*              the last change id used for building the current tree.
 *
 * SEE ALSO
 *********/
 
-
 /****f* OpenSM: Vendor API/osm_mgrp_func_t
 * NAME
 *      osm_mgrp_func_t
@@ -517,6 +518,7 @@ osm_mgrp_add_port(
 *
 * SEE ALSO
 *********/
+
 /****f* OpenSM: Multicast Group/osm_mgrp_is_port_present
 * NAME
 *      osm_mgrp_is_port_present
@@ -553,8 +555,6 @@ osm_mgrp_is_port_present(
 * SEE ALSO
 *********/
 
-
-
 /****f* OpenSM: Multicast Group/osm_mgrp_remove_port
 * NAME
 *      osm_mgrp_remove_port
@@ -695,7 +695,6 @@ osm_mgrp_apply_func(
 *      Multicast Group
 *********/
 
-
 /****f* OpenSM: Multicast Group/osm_mgrp_send_delete_notice
 * NAME
 *      osm_mgrp_send_delete_notice
@@ -767,3 +766,4 @@ osm_mgrp_send_create_notice(
 END_C_DECLS
 
 #endif         /* _OSM_MULTICAST_H_ */
+
index 244edaf..db24954 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
- * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
+ * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2002-2006 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
  * This software is available to you under the OpenIB.org BSD license
@@ -64,6 +64,8 @@
 
 BEGIN_C_DECLS
 
+struct _osm_switch;
+
 /****h* OpenSM/Node
 * NAME
 *      Node
@@ -98,20 +100,24 @@ BEGIN_C_DECLS
 */
 typedef struct _osm_node
 {
-       cl_map_item_t                           map_item;
-       ib_node_info_t                          node_info;
-       ib_node_desc_t                          node_desc;
-       uint32_t                                        discovery_count;
-       uint32_t                                        physp_tbl_size;
-       osm_physp_t                                     physp_table[1];
-
+       cl_map_item_t   map_item;
+       struct _osm_switch *sw;
+       ib_node_info_t  node_info;
+       ib_node_desc_t  node_desc;
+       uint32_t        discovery_count;
+       uint32_t        physp_tbl_size;
+       osm_physp_t     physp_table[1];
 } osm_node_t;
-
 /*
 * FIELDS
 *      map_item
 *              Linkage structure for cl_qmap.  MUST BE FIRST MEMBER!
 *
+*      sw
+*              For switch node contains pointer to appropriate osm_switch
+*              structure. NULL for non-switch nodes. Can be used for fast
+*              access to switch object and for simple node type detection
+*
 *      node_info
 *              The IBA defined NodeInfo data for this node.
 *
@@ -131,8 +137,8 @@ typedef struct _osm_node
 *      phsyp_table
 *              Array of physical port objects belonging to this node.
 *              Index is contiguous by local port number.
-*              For switches, port 0 is the always the managment port. (14.2.5.6)
-*              MUST BE LAST MEMBER! - Since it Grows !!!!
+*              For switches, port 0 is the always the management port (14.2.5.6).
+*              MUST BE LAST MEMBER! - Since it grows !!!!
 *
 * SEE ALSO
 *      Node object
@@ -291,6 +297,7 @@ osm_node_get_physp_ptr(
 * SEE ALSO
 *      Node object
 *********/
+
 /****f* OpenSM: Node/osm_node_get_any_physp_ptr
 * NAME
 *      osm_node_get_any_physp_ptr
@@ -391,6 +398,7 @@ osm_node_get_type(
 * SEE ALSO
 *      Node object
 *********/
+
 /****f* OpenSM: Node/osm_node_get_num_physp
 * NAME
 *      osm_node_get_num_physp
@@ -665,6 +673,7 @@ osm_node_discovery_count_get(
 * SEE ALSO
 *      Node object
 *********/
+
 /****f* OpenSM: Node/osm_node_discovery_count_reset
 * NAME
 *      osm_node_discovery_count_reset
@@ -694,6 +703,7 @@ osm_node_discovery_count_reset(
 * SEE ALSO
 *      Node object
 *********/
+
 /****f* OpenSM: Node/osm_node_discovery_count_inc
 * NAME
 *      osm_node_discovery_count_inc
@@ -790,6 +800,7 @@ osm_node_link(
 * SEE ALSO
 *      Node object
 *********/
+
 /****f* OpenSM: Node/osm_node_unlink
 * NAME
 *      osm_node_unlink
@@ -943,3 +954,4 @@ osm_node_link_has_valid_ports(
 END_C_DECLS
 
 #endif /* _OSM_NODE_H_ */
+
index 72cc1fe..6e48cd2 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
- * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
+ * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2002-2006 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
  * This software is available to you under the OpenIB.org BSD license
@@ -45,7 +45,6 @@
  * $Revision: 1.4 $
  */
 
-
 #ifndef _OSM_ND_RCV_H_
 #define _OSM_ND_RCV_H_
 
@@ -82,6 +81,7 @@ BEGIN_C_DECLS
 *      Steve King, Intel
 *
 *********/
+
 /****s* OpenSM: Node Description Receiver/osm_nd_rcv_t
 * NAME
 *      osm_nd_rcv_t
@@ -253,3 +253,4 @@ void osm_nd_rcv_process(
 END_C_DECLS
 
 #endif /* _OSM_ND_RCV_H_ */
+
index d62991a..d838a60 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
- * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
+ * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2002-2006 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
  * This software is available to you under the OpenIB.org BSD license
@@ -48,8 +48,7 @@
 #ifndef _OSM_ND_RCV_CTRL_H_
 #define _OSM_ND_RCV_CTRL_H_
 
-
-#include <opensm/cl_dispatcher.h>
+#include <complib/cl_dispatcher.h>
 #include <opensm/osm_base.h>
 #include <opensm/osm_madw.h>
 #include <opensm/osm_node_desc_rcv.h>
@@ -82,6 +81,7 @@ BEGIN_C_DECLS
 *      Steve King, Intel
 *
 *********/
+
 /****s* OpenSM: Node Description Receive Controller/osm_nd_rcv_ctrl_t
 * NAME
 *      osm_nd_rcv_ctrl_t
@@ -229,3 +229,4 @@ osm_nd_rcv_ctrl_init(
 END_C_DECLS
 
 #endif         /* OSM_ND_RCV_CTRL_H_ */
+
index d5e589d..ca202fd 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
- * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
+ * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2002-2006 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
  * This software is available to you under the OpenIB.org BSD license
  * $Revision: 1.4 $
  */
 
-
 #ifndef _OSM_NI_RCV_H_
 #define _OSM_NI_RCV_H_
 
-
 #include <complib/cl_passivelock.h>
 #include <opensm/osm_base.h>
 #include <opensm/osm_madw.h>
@@ -86,6 +84,7 @@ BEGIN_C_DECLS
 *      Steve King, Intel
 *
 *********/
+
 /****s* OpenSM: Node Info Receiver/osm_ni_rcv_t
 * NAME
 *      osm_ni_rcv_t
@@ -100,11 +99,11 @@ BEGIN_C_DECLS
 */
 typedef struct _osm_ni_rcv
 {
-       osm_subn_t                                      *p_subn;
-       osm_req_t                                       *p_gen_req;
-       osm_log_t                                       *p_log;
+       osm_subn_t                              *p_subn;
+       osm_req_t                               *p_gen_req;
+       osm_log_t                               *p_log;
        osm_state_mgr_t                         *p_state_mgr;
-       cl_plock_t                                      *p_lock;
+       cl_plock_t                              *p_lock;
 
 } osm_ni_rcv_t;
 /*
@@ -262,7 +261,7 @@ boolean_t osm_ni_rcv_is_inited(
 *
 * NOTES
 *      The osm_ni_rcv_construct or osm_ni_rcv_init must be
-*      called before using     this function.
+*      called before using this function.
 *
 * SEE ALSO
 *      Node Info Receiver object, osm_ni_rcv_construct,
@@ -303,3 +302,4 @@ void osm_ni_rcv_process(
 END_C_DECLS
 
 #endif /* _OSM_NI_RCV_H_ */
+
index d9c9cea..72b1f67 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
- * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
+ * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2002-2006 Mellanox Technologies LTD. All rights reserved.
  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
  *
  * This software is available to you under the OpenIB.org BSD license
  * $Revision: 1.4 $
  */
 
-
 #ifndef _OSM_NI_RCV_CTRL_H_
 #define _OSM_NI_RCV_CTRL_H_
 
-
-#include <opensm/cl_dispatcher.h>
+#include <complib/cl_dispatcher.h>
 #include <opensm/osm_base.h>
 #include <opensm/osm_madw.h>
 #include <opensm/osm_log.h>
@@ -83,6 +81,7 @@ BEGIN_C_DECLS
 *      Steve King, Intel
 *
 *********/
+
 /****s* OpenSM: Node Info Receive Controller/osm_ni_rcv_ct