Imported Upstream version 3.3.19
Ana Guerrero López
8 years ago
0 | 0 | |
1 | ** Version: HEAD | |
1 | ** Version: opensm-3.3.19 | |
2 | ||
3 | Wed Dec 17 20:01:21 2014 +0200 Hal Rosenstock | |
4 | fa92807d9c0d60b6aaa66c5303b19a8c5ec101c6 | |
5 | ||
6 | * Update opensm_release_notes-3.3.txt | |
7 | ||
8 | Wed Dec 17 19:41:39 2014 +0200 Hal Rosenstock | |
9 | 2a30f922f4414763aac72d7f55c00c919bd2e63b | |
10 | ||
11 | * Update package number for OpenSM to 3.3.19 for release | |
12 | ||
13 | Wed Dec 17 19:38:29 2014 +0200 Hal Rosenstock | |
14 | e29f77a6996da847e235b75316be9577b081f498 | |
15 | ||
16 | * Update (internal) shared library versions | |
17 | ||
18 | Sat Dec 13 18:19:13 2014 +0200 Hal Rosenstock | |
19 | 28fd4eefb2e112039a3ac0081890adb4d6fd3597 | |
20 | ||
21 | * osm_[subnet congestion_control].c: Cosmetic commentary change | |
22 | ||
23 | Sat Dec 13 16:54:51 2014 +0200 Hal Rosenstock | |
24 | 391c244f350b91a03a4b3a0591737f27ca3bbb33 | |
25 | ||
26 | * osm_congestion_control.c: Added Mellanox copyright | |
27 | ||
28 | Sat Dec 13 16:49:48 2014 +0200 Hal Rosenstock | |
29 | 7e08621264f70af7f9875409bae86938f0aaa448 | |
30 | ||
31 | * osm_congestion_control.c: In cc_rcv_mad, add attribute ID and modifier to log message | |
32 | ||
33 | Sat Dec 13 16:37:31 2014 +0200 Hal Rosenstock | |
34 | 62075d689bee0fd75beb5ecdace97424670930f4 | |
35 | ||
36 | * osm_perfmgr.c: Fix endian of MAD status in pc_recv_process | |
37 | ||
38 | Sat Dec 13 16:36:03 2014 +0200 Hal Rosenstock | |
39 | cd94c9cc7c4d096c4450e760b392f0c23cdc6753 | |
40 | ||
41 | * osm_congestion_control.c: Fix endian of MAD status in cc_rcv_mad | |
42 | ||
43 | Sat Dec 13 16:31:44 2014 +0200 Hal Rosenstock | |
44 | cb5df8bbbbb67aceb6ddfd15fbff4979d5bed437 | |
45 | ||
46 | * osm_congestion_control.c: Fix endian of node and port GUIDs in some log messages | |
47 | ||
48 | Sat Dec 13 16:11:34 2014 +0200 Hal Rosenstock | |
49 | 68887fb2388a6f1c7154ffa70bc89eab43177f98 | |
50 | ||
51 | * osm_congestion_control.c: Cosmetic changes | |
52 | ||
53 | Tue Dec 9 19:32:18 2014 +0200 Daniel Klein | |
54 | 5077198d156636c547f2a4ab4099439ddccd390e | |
55 | ||
56 | * osm_perfmgr.c: Reset physp_discovered before discovery | |
57 | ||
58 | Wed Dec 10 09:30:50 2014 +0200 Shlomi Nimrodi | |
59 | 1331a46b017ff83e819f85bdbd3d1659182c3225 | |
60 | ||
61 | * osm_subnet.[h c]: Fix possibility for open file descriptor issue | |
62 | ||
63 | Mon Dec 8 10:39:12 2014 -0800 Albert Chu | |
64 | ce15bb76b58e50f2606e1c96077d40216a610bcc | |
65 | ||
66 | * osm_perfmgr.c: Output remote port on perfmgr error counter log messages | |
67 | ||
68 | Mon Dec 1 11:11:00 2014 +0200 Tomer Cohen | |
69 | 030ac82209e920f09ff24ebe101a41e5c9bb3103 | |
70 | ||
71 | * osm_sa.c: Improve ERR 4C05 log message | |
72 | ||
73 | Tue Dec 2 14:01:33 2014 +0200 Daniel Klein | |
74 | fbb63d6c3d9b7bcaf34c47a7840b74d39b0c8807 | |
75 | ||
76 | * osm_subnet.c: Update MEPI supported devices white list | |
77 | ||
78 | Tue Dec 2 20:52:21 2014 +0200 Hal Rosenstock | |
79 | 0774229f1f2ec90665b6798456921c6b661b7d76 | |
80 | ||
81 | * osm_subnet.c: Cosmetic formatting change | |
82 | ||
83 | Tue Nov 18 16:14:22 2014 +0200 Daniel Klein | |
84 | 5871ef71c177de927f105caa7c6a56aadc3d3d1d | |
85 | ||
86 | * osm_sa.c: Check return value from chmod in opensm_dump_to_file | |
87 | ||
88 | Thu Nov 20 11:15:11 2014 +0200 Daniel Klein | |
89 | 8d51ae5dabdbe66f8e276ad372c8f4adcada85b2 | |
90 | ||
91 | * osm_state_mgr.c: Avoid continuing discovery when SM port is unresponsive | |
92 | ||
93 | Mon Nov 17 19:18:39 2014 +0200 Daniel Klein | |
94 | 61cd0cfb9760904d1d49cf190bbaffe4c058d781 | |
95 | ||
96 | * osm_switch.c: Fix potential memory leak due to misuse of realloc | |
97 | ||
98 | Tue Dec 11 12:27:03 2012 +0200 Alex Netes | |
99 | c78adde242ddcd67f8f1a84ab8721d25fa886f03 | |
100 | ||
101 | * osm_req.c: Initialize dest_port_guid in req_determine_mkey | |
102 | ||
103 | Tue Nov 4 16:03:21 2014 +0200 Daniel Klein | |
104 | dd5e5dff8e1865a6c2d06ebbdf2a303562885a85 | |
105 | ||
106 | * osm_mcast_mgr.c: Add MLID to error 0A06 log message | |
107 | ||
108 | Thu Apr 25 19:20:31 2013 +0300 Alex Netes | |
109 | f017063f57ce2abaedd24c420915c72db9815c91 | |
110 | ||
111 | * Better way to handle polling other MASTER SM | |
112 | ||
113 | Thu Oct 30 16:30:15 2014 +0200 Hal Rosenstock | |
114 | 63900bcc9fdba2c02b32a8ace2123f28ffaf276e | |
115 | ||
116 | * osm_vendor_ibumad.h: Use UMAD_MAX_DEVICES for OSM_UMAD_MAX_CAS | |
117 | ||
118 | Tue Oct 14 08:53:08 2014 +0200 Daniel Klein | |
119 | 25e5ee52cc2df4fba81483d0c9d220b5dbbbf975 | |
120 | ||
121 | * complib/cl_dispatcher.c: Check registrations vector size when searching for handlers | |
122 | ||
123 | Tue Oct 7 16:17:47 2014 +0200 Dan Ben Yosef | |
124 | a5c0200ea101a24f3f1753e608cb0b677403a562 | |
125 | ||
126 | * iba/ib_types.h: Add support for new MAD SM:PortInfoExtended and for modifying PM:PortExtendedSpeedsCounters | |
127 | ||
128 | Tue Oct 21 17:18:21 2014 +0200 Hal Rosenstock | |
129 | 3f9953573f0cecb482d17d01da7cb8e2f867a85e | |
130 | ||
131 | * osm_port_info_rcv.c: In osm_pi_rcv_process, move assert before first log message | |
132 | ||
133 | Tue Oct 21 10:26:02 2014 +0200 Vladimir Koushnir | |
134 | 6b0fb4d1881e3c227d4c2950b1bee208728a81d9 | |
135 | ||
136 | * osm_lid_mgr.c: Send client reregistration in case of SM LID change | |
137 | ||
138 | Sun Oct 19 18:25:09 2014 +0200 Shlomi Nimrodi | |
139 | 5d231f8791fc166ceba6a5171d122e7409f2524c | |
140 | ||
141 | * osm_pkey_mgr.c: Use calloc instead of malloc in pkey_mgr_process_physical_port | |
142 | ||
143 | Mon Oct 13 15:29:24 2014 +0200 Vladimir Koushnir | |
144 | 985859e552dcb8802b1bad1250cf848745f2373d | |
145 | ||
146 | * Fix turning on first_time_master_sweep flag | |
147 | ||
148 | Tue Oct 7 10:01:10 2014 +0200 Daniel Klein | |
149 | 4629e80e48d6a618e55b372a191d884b556738b3 | |
150 | ||
151 | * osm_mcast_mgr.c: Invalidate cache due to multicast routing errors | |
152 | ||
153 | Tue Sep 16 16:32:38 2014 +0300 Daniel Klein | |
154 | a0b94442bfb217fbecf2f108781cc0863ae8da08 | |
155 | ||
156 | * Change osm_subn_t.log_max_size type to uint32_t | |
157 | ||
158 | Thu Sep 25 17:40:40 2014 +0300 Hal Rosenstock | |
159 | b5abaa2883ecb3973febe97bcc15c7ce45b3c97d | |
160 | ||
161 | * osmeventplugin.c: Add include of osm_config.h as first OpenSM include | |
162 | ||
163 | Sat Sep 20 14:43:04 2014 +0300 Hal Rosenstock | |
164 | ecce4e36ac1c1cc270a266195add5fe257e5b1e8 | |
165 | ||
166 | * osm_console.c: Handle LinkSpeed[Ext]Active 0 for portstatus command | |
167 | ||
168 | Sat Sep 20 14:40:14 2014 +0300 Hal Rosenstock | |
169 | f6228104335e429a3803facba6daa3e79fd86061 | |
170 | ||
171 | * osm_console.c: Fix unknown speed/width port reporting for portstatus command | |
172 | ||
173 | Sat Sep 20 00:59:21 2014 +0300 Hal Rosenstock | |
174 | ffdd042751408e73c722e12658fccc44bb8a5778 | |
175 | ||
176 | * osm_console_io.c: In is_authorized, STRING_UNKNOWN is define | |
177 | ||
178 | Mon Sep 15 14:29:06 2014 +0300 Tomer Cohen | |
179 | a6ba88828ae6ca19689b10e5802e7d60967a8d00 | |
180 | ||
181 | * Add missing keyword in partition definition in man page and partition.txt doc | |
182 | ||
183 | Wed Sep 17 14:14:55 2014 +0300 Hal Rosenstock | |
184 | 7444e5e2e83d69aa8842217bd5b5e32ca1ecd52f | |
185 | ||
186 | * Fix the difference in osm_opensm struct size between OpenSM and plugin(s) | |
187 | ||
188 | Sun Sep 14 15:13:18 2014 +0300 Hal Rosenstock | |
189 | caf764fc02e8ec5997436f3ceafa5ae2abdb291c | |
190 | ||
191 | * osm_subnet.h: Fixed commentary typo | |
192 | ||
193 | Thu Sep 11 18:13:56 2014 +0300 Vladimir Koushnir | |
194 | 117bc826b396acc118974f66cbf00e27741344fe | |
195 | ||
196 | * osm_prtn.c: Change message verbosity for log message in osm_prtn_add_port | |
197 | ||
198 | Sun Sep 7 11:34:17 2014 +0300 Daniel Klein | |
199 | b6a1dd4741bc4c49ccd15bf5de8003bf097ee068 | |
200 | ||
201 | * osm_state_mgr.c: Avoid ucast cache invalidation due to errors during initialization | |
202 | ||
203 | Mon Sep 1 17:49:48 2014 +0300 Tomer Cohen | |
204 | 3b172ab597516e05aa691aae22f210d73016257a | |
205 | ||
206 | * osm_config.h.in: Fixed the difference in osm_opensm_t struct size between opensm and plugins | |
207 | ||
208 | Thu Sep 4 20:46:25 2014 +0300 Hal Rosenstock | |
209 | d13d4bdbab25aefa58762d371b55d03b613868f1 | |
210 | ||
211 | * osm_console.c: Track and report unknown/speed width ports | |
212 | ||
213 | Thu Aug 28 14:44:39 2014 +0300 Hal Rosenstock | |
214 | d63e7f6d79ebbf3bb2ce43eb2ab5e22fefb6d8dc | |
215 | ||
216 | * osm_sa_path_record.c: Cosmetic formatting changes | |
217 | ||
218 | Mon Aug 18 18:57:57 2014 +0300 Hal Rosenstock | |
219 | 48d159b7b9f631d6b2e62360bf351e0fe9c2d77c | |
220 | ||
221 | * libvendor/osm_vendor_ibumad.c: Remove GID index 0 check in umad_receiver | |
222 | ||
223 | Tue Aug 12 17:23:51 2014 +0300 Tomer Cohen | |
224 | d7f1d02bb4855d8941765ea2095c4f6ee945a63c | |
225 | ||
226 | * libvendor/osm_vendor_ibumad.c: memset osm_mad_addr_t before setting fields | |
227 | ||
228 | Tue Aug 12 15:32:17 2014 +0300 Hal Rosenstock | |
229 | 96f89d61f28a74256410e8b02203e0926ddaf9fa | |
230 | ||
231 | * osm_console.c: Included unknown speed/width ports in "possible issues" | |
232 | ||
233 | Thu Aug 7 21:12:56 2014 +0300 Hal Rosenstock | |
234 | 44df23554aeb7b498b0ed01c778371119575aa38 | |
235 | ||
236 | * osm_dump.c: In dump_topology_node, handle link_width_active of 4 for 8X | |
237 | ||
238 | Mon Aug 4 15:40:43 2014 +0300 Shlomi Nimrodi | |
239 | a1e58e03840fae6b334caf908a95da7c76c39b41 | |
240 | ||
241 | * osm_link_mgr.c: Fix bug in mlnx extended port info setting | |
242 | ||
243 | Wed Aug 6 23:25:18 2014 +0300 Hal Rosenstock | |
244 | fcb696784930ef2a2c9f665a90003da3ac5edd1e | |
245 | ||
246 | * osm_subnet.c: Improve sweep_on_trap documentation in generated conf file | |
247 | ||
248 | Mon Aug 4 03:13:04 2014 +0300 Hal Rosenstock | |
249 | 47a6b00477bff9d83376bf97452b8871c1fc08df | |
250 | ||
251 | * osm_sa_multipath_record.c: Better logging for 4514, 4515, and 4505 error messages | |
252 | ||
253 | Mon Aug 4 03:10:52 2014 +0300 Hal Rosenstock | |
254 | 115529be7bf139357e6554f54ccd342813448f2d | |
255 | ||
256 | * osm_sa_path_record.c: Better logging for 1F02 error message | |
257 | ||
258 | Sun Aug 3 11:12:54 2014 +0300 Vladimir Koushnir | |
259 | fe079dfe054d35fcb107df4bca6fa95f79ec2cce | |
260 | ||
261 | * osm_sa_path_record.c: Better logging for 1F05 and 1F03 error messages | |
262 | ||
263 | Sun Aug 3 02:22:33 2014 +0300 Hal Rosenstock | |
264 | 43c378f4b5ca4856995722998f985f46a6437c3e | |
265 | ||
266 | * osm_ucast_mgr.c: A couple of cosmetic log message changes in ucast_mgr_route | |
267 | ||
268 | Thu Jul 24 14:18:01 2014 +0300 Hal Rosenstock | |
269 | 9a5e51405392ba13770bd5d909f1d6aee40cb599 | |
270 | ||
271 | * osmtest/osmtest.c: Cosmetic formatting change | |
272 | ||
273 | Tue Jul 22 17:32:15 2014 +0300 Hal Rosenstock | |
274 | 90db6c3da1947de2b0860319a50e1df451e21572 | |
275 | ||
276 | * osm_state_mgr.c: Cosmetic formatting changes | |
277 | ||
278 | Tue Jul 22 14:16:11 2014 +0300 Hal Rosenstock | |
279 | e7139affd49237d3e5ed1ef55154772053958f69 | |
280 | ||
281 | * osmtest/osmtest.c: Fix osmtest_get_sm_gid when running osmtest on node other than SM node | |
282 | ||
283 | Tue Jul 22 04:27:58 2014 +0300 Hal Rosenstock | |
284 | 83ea812d714e50601dc2aa89fd30e55a3d6ef84c | |
285 | ||
286 | * doc/performance-manager-HOWTO.txt: Update perfmgr config options documentation | |
287 | ||
288 | Mon Jul 21 18:52:22 2014 +0300 Hal Rosenstock | |
289 | d4d5af39285fc7fd720c412455c58b494065bc16 | |
290 | ||
291 | * libvendor/osm_vendor_ibumad_sa.c: Fixed endian in debug log message | |
292 | ||
293 | Mon Jul 21 18:49:47 2014 +0300 Hal Rosenstock | |
294 | c1080b9cc58fb0b1db7b3c3a4a8c7338f91cf31c | |
295 | ||
296 | * osmtest/main.c: Cosmetic change to output for consistency | |
297 | ||
298 | ** Version: opensm-3.3.18 | |
2 | 299 | |
3 | 300 | Wed Jul 16 22:28:15 2014 +0300 Hal Rosenstock |
4 | 301 | 77f713a8fdb1ce31a24488b370b14dd6f3cf7aaf |
301 | 301 | |
302 | 302 | cl_spinlock_acquire(&p_disp->lock); |
303 | 303 | /* Check that the recipient exists. */ |
304 | if (cl_ptr_vector_get_size(&p_disp->reg_vec) <= msg_id) { | |
305 | cl_spinlock_release(&p_disp->lock); | |
306 | return (CL_NOT_FOUND); | |
307 | } | |
308 | ||
304 | 309 | p_dest_reg = cl_ptr_vector_get(&p_disp->reg_vec, msg_id); |
305 | 310 | if (!p_dest_reg) { |
306 | 311 | cl_spinlock_release(&p_disp->lock); |
5 | 5 | # API_REV - advance on any added API |
6 | 6 | # RUNNING_REV - advance any change to the vendor files |
7 | 7 | # AGE - number of backward versions the API still supports |
8 | LIBVERSION=3:8:0 | |
8 | LIBVERSION=3:9:0 |
0 | 0 | #! /bin/sh |
1 | 1 | # Guess values for system-dependent variables and create Makefiles. |
2 | # Generated by GNU Autoconf 2.69 for opensm 3.3.18. | |
2 | # Generated by GNU Autoconf 2.69 for opensm 3.3.19. | |
3 | 3 | # |
4 | 4 | # Report bugs to <linux-rdma@vger.kernel.org>. |
5 | 5 | # |
728 | 728 | # Identity of this package. |
729 | 729 | PACKAGE_NAME='opensm' |
730 | 730 | PACKAGE_TARNAME='opensm' |
731 | PACKAGE_VERSION='3.3.18' | |
732 | PACKAGE_STRING='opensm 3.3.18' | |
731 | PACKAGE_VERSION='3.3.19' | |
732 | PACKAGE_STRING='opensm 3.3.19' | |
733 | 733 | PACKAGE_BUGREPORT='linux-rdma@vger.kernel.org' |
734 | 734 | PACKAGE_URL='' |
735 | 735 | |
1497 | 1497 | # Omit some internal or obsolete options to make the list less imposing. |
1498 | 1498 | # This message is too long to be a string in the A/UX 3.1 sh. |
1499 | 1499 | cat <<_ACEOF |
1500 | \`configure' configures opensm 3.3.18 to adapt to many kinds of systems. | |
1500 | \`configure' configures opensm 3.3.19 to adapt to many kinds of systems. | |
1501 | 1501 | |
1502 | 1502 | Usage: $0 [OPTION]... [VAR=VALUE]... |
1503 | 1503 | |
1567 | 1567 | |
1568 | 1568 | if test -n "$ac_init_help"; then |
1569 | 1569 | case $ac_init_help in |
1570 | short | recursive ) echo "Configuration of opensm 3.3.18:";; | |
1570 | short | recursive ) echo "Configuration of opensm 3.3.19:";; | |
1571 | 1571 | esac |
1572 | 1572 | cat <<\_ACEOF |
1573 | 1573 | |
1714 | 1714 | test -n "$ac_init_help" && exit $ac_status |
1715 | 1715 | if $ac_init_version; then |
1716 | 1716 | cat <<\_ACEOF |
1717 | opensm configure 3.3.18 | |
1717 | opensm configure 3.3.19 | |
1718 | 1718 | generated by GNU Autoconf 2.69 |
1719 | 1719 | |
1720 | 1720 | Copyright (C) 2012 Free Software Foundation, Inc. |
2137 | 2137 | This file contains any messages produced by compilers while |
2138 | 2138 | running configure, to aid debugging if configure makes a mistake. |
2139 | 2139 | |
2140 | It was created by opensm $as_me 3.3.18, which was | |
2140 | It was created by opensm $as_me 3.3.19, which was | |
2141 | 2141 | generated by GNU Autoconf 2.69. Invocation command line was |
2142 | 2142 | |
2143 | 2143 | $ $0 $@ |
2956 | 2956 | |
2957 | 2957 | # Define the identity of the package. |
2958 | 2958 | PACKAGE='opensm' |
2959 | VERSION='3.3.18' | |
2959 | VERSION='3.3.19' | |
2960 | 2960 | |
2961 | 2961 | |
2962 | 2962 | cat >>confdefs.h <<_ACEOF |
2997 | 2997 | |
2998 | 2998 | |
2999 | 2999 | |
3000 | RELEASE=${RELEASE:-unknown} | |
3000 | RELEASE=${RELEASE:-${VERSION}} | |
3001 | 3001 | |
3002 | 3002 | TARBALL=${TARBALL:-${PACKAGE}-${VERSION}.tar.gz} |
3003 | 3003 | |
11411 | 11411 | |
11412 | 11412 | $as_echo "#define OSM_DEBUG 1" >>confdefs.h |
11413 | 11413 | |
11414 | ||
11415 | $as_echo "#define _DEBUG_ 1" >>confdefs.h | |
11416 | ||
11414 | 11417 | fi |
11415 | 11418 | if test x$debug = xtrue; then |
11416 | 11419 | DEBUG_TRUE= |
12685 | 12688 | # report actual input values of CONFIG_FILES etc. instead of their |
12686 | 12689 | # values after options handling. |
12687 | 12690 | ac_log=" |
12688 | This file was extended by opensm $as_me 3.3.18, which was | |
12691 | This file was extended by opensm $as_me 3.3.19, which was | |
12689 | 12692 | generated by GNU Autoconf 2.69. Invocation command line was |
12690 | 12693 | |
12691 | 12694 | CONFIG_FILES = $CONFIG_FILES |
12751 | 12754 | cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 |
12752 | 12755 | ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" |
12753 | 12756 | ac_cs_version="\\ |
12754 | opensm config.status 3.3.18 | |
12757 | opensm config.status 3.3.19 | |
12755 | 12758 | configured by $0, generated by GNU Autoconf 2.69, |
12756 | 12759 | with options \\"\$ac_cs_config\\" |
12757 | 12760 |
0 | 0 | dnl Process this file with autoconf to produce a configure script. |
1 | 1 | |
2 | 2 | AC_PREREQ(2.57) |
3 | AC_INIT(opensm, 3.3.18, linux-rdma@vger.kernel.org) | |
3 | AC_INIT(opensm, 3.3.19, linux-rdma@vger.kernel.org) | |
4 | 4 | AC_CONFIG_SRCDIR([opensm/osm_opensm.c]) |
5 | 5 | AC_CONFIG_AUX_DIR(config) |
6 | 6 | AC_CONFIG_MACRO_DIR(config) |
7 | 7 | AC_CONFIG_HEADERS(include/config.h include/opensm/osm_config.h) |
8 | 8 | AM_INIT_AUTOMAKE |
9 | 9 | |
10 | AC_SUBST(RELEASE, ${RELEASE:-unknown}) | |
10 | AC_SUBST(RELEASE, ${RELEASE:-${VERSION}}) | |
11 | 11 | AC_SUBST(TARBALL, ${TARBALL:-${PACKAGE}-${VERSION}.tar.gz}) |
12 | 12 | |
13 | 13 | default_rdma_service=openibd |
101 | 101 | esac],debug=false) |
102 | 102 | if test x$debug = xtrue ; then |
103 | 103 | AC_DEFINE(OSM_DEBUG, 1, [ define 1 if OpenSM build is in a debug mode ]) |
104 | AC_DEFINE(_DEBUG_, 1, [ define 1 if OpenSM build is in a debug mode ]) | |
104 | 105 | fi |
105 | 106 | AM_CONDITIONAL(DEBUG, test x$debug = xtrue) |
106 | 107 |
2 | 2 | |
3 | 3 | Version: OpenSM 3.3.x |
4 | 4 | Repo: git://git.openfabrics.org/~halr/opensm.git |
5 | Date: July 2014 | |
5 | Date: December 2014 | |
6 | 6 | |
7 | 7 | 1 Overview |
8 | 8 | ---------- |
9 | 9 | This document describes the contents of the OpenSM 3.3 release. |
10 | 10 | OpenSM is an InfiniBand compliant Subnet Manager and Administration, |
11 | 11 | and runs on top of OpenIB. The OpenSM version for this release |
12 | is opensm-3.3.18. | |
12 | is opensm-3.3.19. | |
13 | 13 | |
14 | 14 | This document includes the following sections: |
15 | 15 | 1 This Overview section (describing new features and software |
86 | 86 | * Extended speed support |
87 | 87 | This provides support for FDR and EDR speeds. |
88 | 88 | |
89 | * Congestion control support | |
89 | * Congestion control support (experimental) | |
90 | 90 | |
91 | 91 | * Many code improvements, optimizations and cleanups. |
92 | 92 | |
511 | 511 | |
512 | 512 | 4.1 Major Bug Fixes |
513 | 513 | |
514 | 5077198 osm_perfmgr.c: Reset physp_discovered before discovery | |
515 | 8d51ae5 osm_state_mgr.c: Avoid continuing discovery when SM port is | |
516 | unresponsive | |
517 | f017063 Better way to handle polling other MASTER SM | |
518 | 25e5ee5 complib/cl_dispatcher.c: Check registrations vector size when | |
519 | searching for handlers | |
520 | 6b0fb4d osm_lid_mgr.c: Send client reregistration in case of SM LID change | |
521 | 5d231f8 osm_pkey_mgr.c: Use calloc instead of malloc in | |
522 | pkey_mgr_process_physical_port | |
523 | 985859e Fix turning on first_time_master_sweep flag | |
524 | 4629e80 osm_mcast_mgr.c: Invalidate cache due to multicast routing errors | |
525 | b6a1dd4 osm_state_mgr.c: Avoid ucast cache invalidation due to errors during | |
526 | initialization | |
514 | 527 | db69cd8 osm_perfmgr.c: Fix perfmgr sweep_state race |
515 | 528 | b42f11f osm_vendor_ibumad.c: Better match table eviction strategy |
516 | 529 | cc0d61b libvendor/osm_vendor_ibumad.c: Check the next CA if an error is |
701 | 714 | |
702 | 715 | 4.2 Other Bug Fixes |
703 | 716 | |
717 | 28fd4ee osm_[subnet congestion_control].c: Cosmetic commentary change | |
718 | 391c244 osm_congestion_control.c: Added Mellanox copyright | |
719 | 7e08621 osm_congestion_control.c: In cc_rcv_mad, add attribute ID and modifier | |
720 | to log message | |
721 | 62075d6 osm_perfmgr.c: Fix endian of MAD status in pc_recv_process | |
722 | cd94c9c osm_congestion_control.c: Fix endian of MAD status in cc_rcv_mad | |
723 | cb5df8b osm_congestion_control.c: Fix endian of node and port GUIDs in some | |
724 | log messages | |
725 | 68887fb osm_congestion_control.c: Cosmetic changes | |
726 | 1331a46 osm_subnet.[h c]: Fix possibility for open file descriptor issue | |
727 | ce15bb7 osm_perfmgr.c: Output remote port on perfmgr error counter log | |
728 | messages | |
729 | 030ac82 osm_sa.c: Improve ERR 4C05 log message | |
730 | fbb63d6 osm_subnet.c: Update MEPI supported devices white list | |
731 | 0774229 osm_subnet.c: Cosmetic formatting change | |
732 | 5871ef7 osm_sa.c: Check return value from chmod in opensm_dump_to_file | |
733 | 61cd0cf osm_switch.c: Fix potential memory leak due to misuse of realloc | |
734 | c78adde osm_req.c: Initialize dest_port_guid in req_determine_mkey | |
735 | dd5e5df osm_mcast_mgr.c: Add MLID to error 0A06 log message | |
736 | 63900bc osm_vendor_ibumad.h: Use UMAD_MAX_DEVICES for OSM_UMAD_MAX_CAS | |
737 | a5c0200 iba/ib_types.h: Add support for new MAD SM:PortInfoExtended and for | |
738 | modifying PM:PortExtendedSpeedsCounters | |
739 | 3f99535 osm_port_info_rcv.c: In osm_pi_rcv_process, move assert before first | |
740 | log message | |
741 | a0b9444 Change osm_subn_t.log_max_size type to uint32_t | |
742 | b5abaa2 osmeventplugin.c: Add include of osm_config.h as first OpenSM include | |
743 | ecce4e3 osm_console.c: Handle LinkSpeed[Ext]Active 0 for portstatus command | |
744 | f622810 osm_console.c: Fix unknown speed/width port reporting for portstatus | |
745 | command | |
746 | ffdd042 osm_console_io.c: In is_authorized, STRING_UNKNOWN is define | |
747 | a6ba888 Add missing keyword in partition definition in man page and | |
748 | partition.txt doc | |
749 | 7444e5e Fix the difference in osm_opensm struct size between OpenSM and | |
750 | plugin(s) | |
751 | caf764f osm_subnet.h: Fixed commentary typo | |
752 | 117bc82 osm_prtn.c: Change message verbosity for log message in | |
753 | osm_prtn_add_port | |
754 | 3b172ab osm_config.h.in: Fixed the difference in osm_opensm_t struct size | |
755 | between opensm and plugins | |
756 | d13d4bd osm_console.c: Track and report unknown/speed width ports | |
757 | d63e7f6 osm_sa_path_record.c: Cosmetic formatting changes | |
758 | 48d159b libvendor/osm_vendor_ibumad.c: Remove GID index 0 check in | |
759 | umad_receiver | |
760 | d7f1d02 libvendor/osm_vendor_ibumad.c: memset osm_mad_addr_t before setting | |
761 | fields | |
762 | 96f89d6 osm_console.c: Included unknown speed/width ports in "possible issues" | |
763 | 44df235 osm_dump.c: In dump_topology_node, handle link_width_active of 4 for | |
764 | 8X | |
765 | a1e58e0 osm_link_mgr.c: Fix bug in mlnx extended port info setting | |
766 | fcb6967 osm_subnet.c: Improve sweep_on_trap documentation in generated conf | |
767 | file | |
768 | 47a6b00 osm_sa_multipath_record.c: Better logging for 4514, 4515, and 4505 | |
769 | error messages | |
770 | 115529b osm_sa_path_record.c: Better logging for 1F02 error message | |
771 | fe079df osm_sa_path_record.c: Better logging for 1F05 and 1F03 error messages | |
772 | 43c378f osm_ucast_mgr.c: A couple of cosmetic log message changes in | |
773 | ucast_mgr_route | |
774 | 9a5e514 osmtest/osmtest.c: Cosmetic formatting change | |
775 | 90db6c3 osm_state_mgr.c: Cosmetic formatting changes | |
776 | e7139af osmtest/osmtest.c: Fix osmtest_get_sm_gid when running osmtest on node | |
777 | other than SM node | |
778 | 83ea812 doc/performance-manager-HOWTO.txt: Update perfmgr config options | |
779 | documentation | |
780 | d4d5af3 libvendor/osm_vendor_ibumad_sa.c: Fixed endian in debug log message | |
781 | c1080b9 osmtest/main.c: Cosmetic change to output for consistency | |
704 | 782 | 179fbac Add support for additional Mellanox OUI |
705 | 783 | be3e4f1 osm_subnet.c: Remove duplicate strcmp check in |
706 | 784 | osm_subn_rescan_conf_files method |
37 | 37 | Partition Definition: |
38 | 38 | [PartitionName][=PKey][,ipoib_bc_flags][,defmember=full|limited|both] |
39 | 39 | |
40 | PartitionName - string, will be used with logging. When omitted | |
41 | empty string will be used. | |
42 | PKey - P_Key value for this partition. Only low 15 bits will | |
43 | be used. When omitted will be autogenerated. | |
44 | ipoib_bc_flags - used to indicate/specify IPoIB capability of this partition. | |
40 | PartitionName - string, will be used with logging. When | |
41 | omitted, empty string will be used. | |
42 | PKey - P_Key value for this partition. Only low 15 | |
43 | bits will be used. When omitted will be | |
44 | autogenerated. | |
45 | ipoib_bc_flags - used to indicate/specify IPoIB capability of | |
46 | this partition. | |
45 | 47 | |
46 | defmember=full|limited|both - specifies default membership for port guid | |
47 | list. Default is limited. | |
48 | defmember=full|limited|both - specifies default membership for | |
49 | port guid list. Default is limited. | |
48 | 50 | |
49 | 51 | ipoib_bc_flags: |
50 | 52 | ipoib_flag|[mgroup_flag]* |
51 | 53 | |
52 | ipoib_flag - indicates that this partition may be used for IPoIB, as | |
53 | a result the IPoIB broadcast group will be created with | |
54 | the flags given, if any. | |
54 | ipoib_flag: | |
55 | ipoib - indicates that this partition may be used for | |
56 | IPoIB, as a result the IPoIB broadcast group will | |
57 | be created with the mgroup_flag flags given, | |
58 | if any. | |
55 | 59 | |
56 | 60 | Partition Properties: |
57 | 61 | [<Port list>|<MCast Group>]* | <Port list> |
62 | 66 | Port Specifier: |
63 | 67 | <PortGUID>[=[full|limited|both]] |
64 | 68 | |
65 | PortGUID - GUID of partition member EndPort. Hexadecimal | |
66 | numbers should start from 0x, decimal numbers | |
67 | are accepted too. | |
68 | full or - indicates full and/or limited membership for this port. When | |
69 | limited or omitted (or unrecognized) limited membership is assumed. | |
70 | both Both indicates both full and limited membership for this port. | |
69 | PortGUID - GUID of partition member EndPort. | |
70 | Hexadecimal numbers should start from | |
71 | 0x, decimal numbers are accepted too. | |
72 | full or - indicates full and/or limited membership for | |
73 | limited or this port. When omitted (or unrecognized) | |
74 | both limited membership is assumed. Both | |
75 | indicates both full and limited membership | |
76 | for this port. | |
71 | 77 | |
72 | 78 | MCast Group: |
73 | 79 | mgid=gid[,mgroup_flag]*<newline> |
74 | 80 | |
75 | - gid specified is verified to be a Multicast address | |
76 | IP groups are verified to match the rate and mtu of the | |
77 | broadcast group. The P_Key bits of the mgid for IP | |
78 | groups are verified to either match the P_Key specified | |
79 | in by "Partition Definition" or if they are 0x0000 the | |
80 | P_Key will be copied into those bits. | |
81 | - gid specified is verified to be a Multicast | |
82 | address. IP groups are verified to match | |
83 | the rate and mtu of the broadcast group. | |
84 | The P_Key bits of the mgid for IP groups are | |
85 | verified to either match the P_Key specified | |
86 | in by "Partition Definition" or if they are | |
87 | 0x0000 the P_Key will be copied into those | |
88 | bits. | |
81 | 89 | |
82 | 90 | mgroup_flag: |
83 | 91 | rate=<val> - specifies rate for this MC group |
87 | 95 | sl=<val> - specifies SL for this MC group |
88 | 96 | (default is 0) |
89 | 97 | scope=<val> - specifies scope for this MC group |
90 | (default is 2 (link local)). Multiple scope settings | |
91 | are permitted for a partition. | |
92 | NOTE: This overwrites the scope nibble of the specified | |
93 | mgid. Furthermore specifying multiple scope | |
94 | settings will result in multiple MC groups | |
95 | being created. | |
98 | (default is 2 (link local)). Multiple scope | |
99 | settings are permitted for a partition. | |
100 | NOTE: This overwrites the scope nibble of the | |
101 | specified mgid. Furthermore specifying | |
102 | multiple scope settings will result in | |
103 | multiple MC groups being created. | |
96 | 104 | Q_Key=<val> - specifies the Q_Key for this MC group |
97 | (default: 0x0b1b for IP groups, 0 for other groups) | |
98 | WARNING: changing this for the broadcast group may | |
99 | break IPoIB on client nodes!!! | |
105 | (default: 0x0b1b for IP groups, 0 for other | |
106 | groups) | |
107 | WARNING: changing this for the broadcast | |
108 | group may break IPoIB on client | |
109 | nodes!!! | |
100 | 110 | TClass=<val> - specifies tclass for this MC group |
101 | 111 | (default is 0) |
102 | 112 | FlowLabel=<val> - specifies FlowLabel for this MC group |
103 | 113 | (default is 0) |
104 | ||
105 | newline: '\n' | |
106 | ||
107 | 114 | |
108 | 115 | Note that values for rate, mtu, and scope, for both partitions and multicast |
109 | 116 | groups, should be specified as defined in the IBTA specification (for example, |
3 | 3 | Introduction |
4 | 4 | ============ |
5 | 5 | |
6 | OpenSM now includes a performance manager which collects Port counters from | |
6 | OpenSM now includes a performance manager which collects port counters from | |
7 | 7 | the subnet and stores them internally in OpenSM. |
8 | 8 | |
9 | 9 | Some of the features of the performance manager are: |
10 | 10 | |
11 | 1) Collect port data and error counters per v1.2 spec and store in | |
11 | 1) Collect port data and error counters per v1.2.1 spec and store in | |
12 | 12 | 64 bit internal counts. |
13 | 2) Automatic reset of counters when they reach approximatly 3/4 full. | |
14 | (While not guarenteeing that counts will not be missed this does | |
13 | 2) Automatic reset of counters when they reach approximately 3/4 full. | |
14 | (While not guaranteeing that counts will not be missed, this does | |
15 | 15 | keep counts incrementing as best as possible given the current |
16 | hardware limitations.) | |
16 | spec limitations.) | |
17 | 17 | 3) Basic warnings in the OpenSM log on "critical" errors like symbol |
18 | 18 | errors. |
19 | 19 | 4) Automatically detects "outside" resets of counters and adjusts to |
44 | 44 | Step 1: Compile in support for the Performance Manager |
45 | 45 | ------------------------------------------------------ |
46 | 46 | |
47 | At this time it is really best to enable the console socket option as well. | |
47 | At this time, it is really best to enable the console socket option as well. | |
48 | 48 | OpenSM can be run in an "interactive" mode. But with the console socket |
49 | 49 | option turned on one can also make a connection to a running OpenSM. By |
50 | default only "loopback" is enabled with the console with socket being a | |
50 | default, only "loopback" is enabled with the console with socket being a | |
51 | 51 | compile time option. Regardless, please be aware of your network security |
52 | 52 | configuration for as the commands presented in the console can affect the |
53 | 53 | operation of your subnet. |
60 | 60 | the opensm.conf config file. (Default location is |
61 | 61 | /usr/local/etc/opensm/opensm.conf) |
62 | 62 | |
63 | # Turn it all on. | |
63 | # Turn it all on | |
64 | 64 | perfmgr TRUE |
65 | ||
66 | # redirection enable | |
67 | perfmgr_redir TRUE | |
65 | 68 | |
66 | 69 | # sweep time in seconds |
67 | 70 | perfmgr_sweep_time_s 180 |
68 | 71 | |
72 | # Max outstanding queries | |
73 | perfmgr_max_outstanding_queries 500 | |
74 | ||
75 | # Ignore CAs on sweep | |
76 | perfmgr_ignore_cas FALSE | |
77 | ||
78 | # Remove missing nodes from DB | |
79 | perfmgr_rm_nodes TRUE | |
80 | ||
81 | # Log error counters to opensm.log | |
82 | perfmgr_log_errors TRUE | |
83 | ||
84 | # Query PerfMgt Get(ClassPortInfo) for extended capabilities | |
85 | # Extended capabilities include 64 bit extended counters | |
86 | # and transmit wait support | |
87 | perfmgr_query_cpi TRUE | |
88 | ||
89 | # Log xmit_wait errors | |
90 | perfmgr_xmit_wait_log FALSE | |
91 | ||
92 | # If logging xmit_wait's; set threshold | |
93 | perfmgr_xmit_wait_threshold 65535 | |
94 | ||
69 | 95 | # Dump file to dump the events to |
70 | 96 | event_db_dump_file /var/log/opensm_port_counters.log |
71 | 97 | |
72 | Also enable the console socket and configure the port for it to listen to if | |
98 | Also, enable the console socket and configure the port for it to listen to if | |
73 | 99 | desired. |
74 | 100 | |
75 | # console [off|local|loopback] | |
101 | # console [off|local|loopback|socket] | |
76 | 102 | console socket |
77 | 103 | |
78 | 104 | # Telnet port for console (default 10000) |
81 | 107 | "local" is only useful if you run OpenSM in the foreground. |
82 | 108 | |
83 | 109 | |
84 | Step 3: retrieve data which has been collected | |
110 | Step 3: Retrieve data which has been collected | |
85 | 111 | ---------------------------------------------- |
86 | 112 | |
87 | 113 | Step 3a: Using console dump function |
145 | 145 | `char[]'. */ |
146 | 146 | #undef YYTEXT_POINTER |
147 | 147 | |
148 | /* define 1 if OpenSM build is in a debug mode */ | |
149 | #undef _DEBUG_ | |
150 | ||
148 | 151 | /* mark config.h inclusion */ |
149 | 152 | #undef _OSM_CONFIG_H_ |
150 | 153 |
3527 | 3527 | #define IB_PM_EXT_WIDTH_NOIETF_SUP (CL_HTON16(((uint16_t)1)<<10)) |
3528 | 3528 | #define IB_PM_SAMPLES_ONLY_SUP (CL_HTON16(((uint16_t)1)<<11)) |
3529 | 3529 | #define IB_PM_PC_XMIT_WAIT_SUP (CL_HTON16(((uint16_t)1)<<12)) |
3530 | #define IS_PM_INH_LMTD_PKEY_MC_CONSTR_ERR (CL_HTON16(((uint16_t)1)<<13)) | |
3531 | #define IS_PM_RSFEC_COUNTERS_SUP (CL_HTON16(((uint16_t)1)<<14)) | |
3532 | #define IB_PM_IS_QP1_DROP_SUP (CL_HTON16(((uint16_t)1)<<15)) | |
3530 | 3533 | |
3531 | 3534 | /****f* IBA Base: Types/ib_class_set_resp_time_val |
3532 | 3535 | * NAME |
4659 | 4662 | #define IB_PORT_CAP_HAS_MCAST_FDB_TOP (CL_HTON32(0x40000000)) |
4660 | 4663 | #define IB_PORT_CAP_HAS_HIER_INFO (CL_HTON32(0x80000000)) |
4661 | 4664 | |
4665 | #define IB_PORT_CAP2_IS_SET_NODE_DESC_SUPPORTED (CL_HTON16(0x0001)) | |
4666 | #define IB_PORT_CAP2_IS_PORT_INFO_EXT_SUPPORTED (CL_HTON16(0x0002)) | |
4667 | ||
4668 | /****s* IBA Base: Types/ib_port_info_ext_t | |
4669 | * NAME | |
4670 | * ib_port_info_ext_t | |
4671 | * | |
4672 | * DESCRIPTION | |
4673 | * IBA defined PortInfoExtended. (14.2.5.19) | |
4674 | * | |
4675 | * SYNOPSIS | |
4676 | */ | |
4677 | #include <complib/cl_packon.h> | |
4678 | typedef struct _ib_port_info_ext { | |
4679 | ib_net32_t cap_mask; | |
4680 | ib_net16_t fec_mode_active; | |
4681 | ib_net16_t fdr_fec_mode_sup; | |
4682 | ib_net16_t fdr_fec_mode_enable; | |
4683 | ib_net16_t edr_fec_mode_sup; | |
4684 | ib_net16_t edr_fec_mode_enable; | |
4685 | uint8_t reserved[50]; | |
4686 | } PACK_SUFFIX ib_port_info_ext_t; | |
4687 | #include <complib/cl_packoff.h> | |
4688 | /************/ | |
4689 | ||
4690 | #define IB_PORT_EXT_NO_FEC_MODE_ACTIVE 0 | |
4691 | #define IB_PORT_EXT_FIRE_CODE_FEC_MODE_ACTIVE (CL_HTON16(0x0001)) | |
4692 | #define IB_PORT_EXT_RS_FEC_MODE_ACTIVE (CL_HTON16(0x0002)) | |
4693 | #define IB_PORT_EXT_LOW_LATENCY_RS_FEC_MODE_ACTIVE (CL_HTON16(0x0003)) | |
4694 | ||
4695 | #define IB_PORT_EXT_CAP_IS_FEC_MODE_SUPPORTED (CL_HTON32(0x00000001)) | |
4662 | 4696 | /****f* IBA Base: Types/ib_port_info_get_port_state |
4663 | 4697 | * NAME |
4664 | 4698 | * ib_port_info_get_port_state |
5091 | 5125 | #define IB_LINK_WIDTH_ACTIVE_4X 2 |
5092 | 5126 | #define IB_LINK_WIDTH_ACTIVE_8X 4 |
5093 | 5127 | #define IB_LINK_WIDTH_ACTIVE_12X 8 |
5128 | #define IB_LINK_SPEED_ACTIVE_EXTENDED 0 | |
5094 | 5129 | #define IB_LINK_SPEED_ACTIVE_2_5 1 |
5095 | 5130 | #define IB_LINK_SPEED_ACTIVE_5 2 |
5096 | 5131 | #define IB_LINK_SPEED_ACTIVE_10 4 |
6353 | 6388 | ib_port_info_t port_info; |
6354 | 6389 | uint8_t pad[4]; |
6355 | 6390 | } PACK_SUFFIX ib_portinfo_record_t; |
6391 | #include <complib/cl_packoff.h> | |
6392 | ||
6393 | #include <complib/cl_packon.h> | |
6394 | typedef struct _ib_portinfoext_record { | |
6395 | ib_net16_t lid; | |
6396 | uint8_t port_num; | |
6397 | uint8_t options; | |
6398 | ib_port_info_ext_t port_info_ext; | |
6399 | } PACK_SUFFIX ib_portinfoext_record_t; | |
6356 | 6400 | #include <complib/cl_packoff.h> |
6357 | 6401 | |
6358 | 6402 | #include <complib/cl_packon.h> |
12 | 12 | |
13 | 13 | /* define 1 if OpenSM build is in a debug mode */ |
14 | 14 | /* #undef OSM_DEBUG */ |
15 | /* #undef _DEBUG_ */ | |
15 | 16 | |
16 | 17 | /* Define as 1 if you want Dual Sided RMPP Support */ |
17 | 18 | #define DUAL_SIDED_RMPP 1 |
61 | 62 | /* Define as 1 if you want Vendor RMPP Support */ |
62 | 63 | #define VENDOR_RMPP_SUPPORT 1 |
63 | 64 | |
65 | /* Define to 1 if you have the `pthread' library (-lpthread). */ | |
66 | #define HAVE_LIBPTHREAD 1 | |
67 | ||
64 | 68 | #endif /* _OSM_CONFIG_H_ */ |
11 | 11 | |
12 | 12 | /* define 1 if OpenSM build is in a debug mode */ |
13 | 13 | #undef OSM_DEBUG |
14 | #undef _DEBUG_ | |
14 | 15 | |
15 | 16 | /* Define as 1 if you want Dual Sided RMPP Support */ |
16 | 17 | #undef DUAL_SIDED_RMPP |
60 | 61 | /* Define as 1 if you want Vendor RMPP Support */ |
61 | 62 | #undef VENDOR_RMPP_SUPPORT |
62 | 63 | |
64 | /* Define to 1 if you have the `pthread' library (-lpthread). */ | |
65 | #undef HAVE_LIBPTHREAD | |
66 | ||
63 | 67 | #endif /* _OSM_CONFIG_H_ */ |
104 | 104 | /* ClassPortInfo fields */ |
105 | 105 | boolean_t cpi_valid; |
106 | 106 | ib_net16_t cap_mask; |
107 | /* Remote end connected to */ | |
108 | boolean_t remote_valid; | |
109 | uint64_t remote_guid; | |
110 | char *remote_name; | |
111 | uint8_t remote_port; | |
107 | 112 | } monitored_port_t; |
108 | 113 | |
109 | 114 | /* Node to store information about nodes being monitored */ |
286 | 286 | uint8_t log_flags; |
287 | 287 | char *dump_files_dir; |
288 | 288 | char *log_file; |
289 | unsigned long log_max_size; | |
289 | uint32_t log_max_size; | |
290 | 290 | char *partition_config_file; |
291 | 291 | boolean_t no_partition_enforcement; |
292 | 292 | char *part_enforce; |
676 | 676 | * configuration setting. |
677 | 677 | * |
678 | 678 | * cc_sw_cong_setting_credit_starvation_threshold |
679 | * Congestion Control Switch Congestion Setting Credit Staraction Threshold | |
679 | * Congestion Control Switch Congestion Setting Credit Starvation Threshold | |
680 | 680 | * configuration setting. |
681 | 681 | * |
682 | 682 | * cc_sw_cong_setting_credit_starvation_return_delay |
763 | 763 | boolean_t force_heavy_sweep; |
764 | 764 | boolean_t force_reroute; |
765 | 765 | boolean_t in_sweep_hop_0; |
766 | boolean_t force_first_time_master_sweep; | |
766 | 767 | boolean_t first_time_master_sweep; |
767 | 768 | boolean_t coming_out_of_standby; |
768 | 769 | boolean_t sweeping_enabled; |
870 | 871 | * This is relevant for the case of SM on switch, since in the |
871 | 872 | * switch info we need to signal somehow not to continue |
872 | 873 | * the sweeping. |
874 | * | |
875 | * force_first_time_master_sweep | |
876 | * This flag is used to avoid race condition when Master SM being | |
877 | * in the middle of very long configuration stage of the heavy sweep, | |
878 | * receives HANDOVER from another MASTER SM. When the current heavy sweep | |
879 | * is finished, new heavy sweep will be started immediately. | |
880 | * At the beginning of the sweep, opensm will set first_time_master_sweep, | |
881 | * force_heavy_sweep and coming_out_of_standby flags in order to allow full | |
882 | * reconfiguration of the fabric. This is required as another MASTER SM could | |
883 | * change configuration of the fabric before sending HANDOVER to MASTER SM. | |
873 | 884 | * |
874 | 885 | * first_time_master_sweep |
875 | 886 | * This flag is used for the PortInfo setting. On the first |
1556 | 1567 | * |
1557 | 1568 | * SYNOPSIS |
1558 | 1569 | */ |
1559 | int osm_subn_output_conf(FILE *out, IN osm_subn_opt_t * p_opt); | |
1570 | void osm_subn_output_conf(FILE *out, IN osm_subn_opt_t * p_opt); | |
1560 | 1571 | /* |
1561 | 1572 | * PARAMETERS |
1562 | 1573 | * |
1567 | 1578 | * [in] Pointer to the subnet options structure. |
1568 | 1579 | * |
1569 | 1580 | * RETURN VALUES |
1570 | * 0 on success, negative value otherwise | |
1581 | * This method does not return a value | |
1571 | 1582 | *********/ |
1572 | 1583 | |
1573 | 1584 | /****f* OpenSM: Subnet/osm_subn_write_conf_file |
44 | 44 | * |
45 | 45 | * SYNOPSIS |
46 | 46 | */ |
47 | #define OSM_VERSION "OpenSM 3.3.18" | |
47 | #define OSM_VERSION "OpenSM 3.3.19" | |
48 | 48 | /********/ |
49 | 49 | |
50 | 50 | #endif /* _OSM_VERSION_H_ */ |
63 | 63 | * |
64 | 64 | *********/ |
65 | 65 | #define OSM_DEFAULT_RETRY_COUNT 3 |
66 | #define OSM_UMAD_MAX_CAS 32 | |
66 | #define OSM_UMAD_MAX_CAS UMAD_MAX_DEVICES | |
67 | 67 | #define OSM_UMAD_MAX_PORTS_PER_CA 2 |
68 | 68 | #define OSM_UMAD_MAX_AGENTS 32 |
69 | 69 |
5 | 5 | # API_REV - advance on any added API |
6 | 6 | # RUNNING_REV - advance any change to the vendor files |
7 | 7 | # AGE - number of backward versions the API still supports |
8 | LIBVERSION=4:0:0 | |
8 | LIBVERSION=4:1:0 |
276 | 276 | { |
277 | 277 | ib_mad_addr_t *ib_mad_addr = umad_get_mad_addr(umad); |
278 | 278 | |
279 | memset(osm_mad_addr, 0, sizeof(osm_mad_addr_t)); | |
279 | 280 | osm_mad_addr->dest_lid = ib_mad_addr->lid; |
280 | 281 | osm_mad_addr->path_bits = ib_mad_addr->path_bits; |
281 | osm_mad_addr->static_rate = 0; | |
282 | 282 | |
283 | 283 | if (is_smi) { |
284 | 284 | osm_mad_addr->addr_type.smi.source_lid = osm_mad_addr->dest_lid; |
299 | 299 | ib_mad_addr->flow_label); |
300 | 300 | memcpy(&osm_mad_addr->addr_type.gsi.grh_info.dest_gid, |
301 | 301 | &ib_mad_addr->gid, 16); |
302 | } else { | |
303 | osm_mad_addr->addr_type.gsi.global_route = 0; | |
304 | memset(&osm_mad_addr->addr_type.gsi.grh_info, 0, | |
305 | sizeof osm_mad_addr->addr_type.gsi.grh_info); | |
306 | 302 | } |
307 | 303 | } |
308 | 304 | |
330 | 326 | osm_mad_addr_t osm_addr; |
331 | 327 | osm_madw_t *p_madw, *p_req_madw; |
332 | 328 | ib_mad_t *p_mad, *p_req_mad; |
333 | ib_mad_addr_t *p_mad_addr; | |
334 | 329 | void *umad = 0; |
335 | 330 | int mad_agent, length; |
336 | 331 | |
383 | 378 | } |
384 | 379 | |
385 | 380 | p_mad = (ib_mad_t *) umad_get_mad(umad); |
386 | p_mad_addr = umad_get_mad_addr(umad); | |
387 | /* Only support GID index 0 currently */ | |
388 | if (p_mad_addr->grh_present && p_mad_addr->gid_index) { | |
389 | OSM_LOG(p_ur->p_log, OSM_LOG_ERROR, "ERR 5409: " | |
390 | "GRH received on GID index %d for mgmt class 0x%x\n", | |
391 | p_mad_addr->gid_index, p_mad->mgmt_class); | |
392 | continue; | |
393 | } | |
394 | 381 | |
395 | 382 | ib_mad_addr_conv(umad, &osm_addr, |
396 | 383 | p_mad->mgmt_class == IB_MCLASS_SUBN_LID || |
418 | 418 | */ |
419 | 419 | if (p_query_req->with_grh) { |
420 | 420 | OSM_LOG(p_log, OSM_LOG_DEBUG, "sending sa query with GRH " |
421 | "GID : 0x%016" PRIx64 " 0x%016" PRIx64 "\n", | |
422 | p_query_req->gid.unicast.prefix, | |
423 | p_query_req->gid.unicast.interface_id); | |
421 | "GID 0x%016" PRIx64 " 0x%016" PRIx64 "\n", | |
422 | cl_ntoh64(p_query_req->gid.unicast.prefix), | |
423 | cl_ntoh64(p_query_req->gid.unicast.interface_id)); | |
424 | 424 | p_madw->mad_addr.addr_type.gsi.global_route = 1; |
425 | 425 | memset(&p_madw->mad_addr.addr_type.gsi.grh_info, 0, |
426 | 426 | sizeof(p_madw->mad_addr.addr_type.gsi.grh_info)); |
0 | .TH OPENSM 8 "July 4, 2014" "OpenIB" "OpenIB Management" | |
0 | .TH OPENSM 8 "Sept 15, 2014" "OpenIB" "OpenIB Management" | |
1 | 1 | |
2 | 2 | .SH NAME |
3 | 3 | opensm \- InfiniBand subnet manager and administration (SM/SA) |
573 | 573 | Partition Definition: |
574 | 574 | [PartitionName][=PKey][,ipoib_bc_flags][,defmember=full|limited] |
575 | 575 | |
576 | PartitionName - string, will be used with logging. When omitted | |
577 | empty string will be used. | |
578 | PKey - P_Key value for this partition. Only low 15 bits will | |
579 | be used. When omitted will be autogenerated. | |
580 | ipoib_bc_flags - used to indicate/specify IPoIB capability of this partition. | |
581 | ||
582 | defmember=full|limited|both - specifies default membership for port guid | |
583 | list. Default is limited. | |
576 | PartitionName - string, will be used with logging. When | |
577 | omitted, empty string will be used. | |
578 | PKey - P_Key value for this partition. Only low 15 | |
579 | bits will be used. When omitted will be | |
580 | autogenerated. | |
581 | ipoib_bc_flags - used to indicate/specify IPoIB capability of | |
582 | this partition. | |
583 | ||
584 | defmember=full|limited|both - specifies default membership for | |
585 | port guid list. Default is limited. | |
584 | 586 | |
585 | 587 | ipoib_bc_flags: |
586 | 588 | ipoib_flag|[mgroup_flag]* |
587 | 589 | |
588 | ipoib_flag - indicates that this partition may be used for IPoIB, as | |
589 | a result the IPoIB broadcast group will be created with | |
590 | the flags given, if any. | |
590 | ipoib_flag: | |
591 | ipoib - indicates that this partition may be used for | |
592 | IPoIB, as a result the IPoIB broadcast group will | |
593 | be created with the mgroup_flag flags given, | |
594 | if any. | |
591 | 595 | |
592 | 596 | Partition Properties: |
593 | 597 | [<Port list>|<MCast Group>]* | <Port list> |
598 | 602 | Port Specifier: |
599 | 603 | <PortGUID>[=[full|limited|both]] |
600 | 604 | |
601 | PortGUID - GUID of partition member EndPort. Hexadecimal | |
602 | numbers should start from 0x, decimal numbers | |
603 | are accepted too. | |
604 | ||
605 | full, limited, - indicates full and/or limited membership for this | |
606 | both port. When omitted (or unrecognized) limited | |
607 | membership is assumed. Both indicates both full | |
608 | and limited membership for this port. | |
605 | PortGUID - GUID of partition member EndPort. | |
606 | Hexadecimal numbers should start from | |
607 | 0x, decimal numbers are accepted too. | |
608 | full, limited, - indicates full and/or limited membership for | |
609 | both this port. When omitted (or unrecognized) | |
610 | limited membership is assumed. Both | |
611 | indicates both full and limited membership | |
612 | for this port. | |
609 | 613 | |
610 | 614 | MCast Group: |
611 | 615 | mgid=gid[,mgroup_flag]*<newline> |
612 | 616 | |
613 | - gid specified is verified to be a Multicast address | |
614 | IP groups are verified to match the rate and mtu of the | |
615 | broadcast group. The P_Key bits of the mgid for IP | |
616 | groups are verified to either match the P_Key specified | |
617 | in by "Partition Definition" or if they are 0x0000 the | |
618 | P_Key will be copied into those bits. | |
617 | - gid specified is verified to be a Multicast | |
618 | address. IP groups are verified to match | |
619 | the rate and mtu of the broadcast group. | |
620 | The P_Key bits of the mgid for IP groups are | |
621 | verified to either match the P_Key specified | |
622 | in by "Partition Definition" or if they are | |
623 | 0x0000 the P_Key will be copied into those | |
624 | bits. | |
619 | 625 | |
620 | 626 | mgroup_flag: |
621 | 627 | rate=<val> - specifies rate for this MC group |
625 | 631 | sl=<val> - specifies SL for this MC group |
626 | 632 | (default is 0) |
627 | 633 | scope=<val> - specifies scope for this MC group |
628 | (default is 2 (link local)). Multiple scope settings | |
629 | are permitted for a partition. | |
630 | NOTE: This overwrites the scope nibble of the specified | |
631 | mgid. Furthermore specifying multiple scope | |
632 | settings will result in multiple MC groups | |
633 | being created. | |
634 | Q_Key=<val> - specifies the Q_Key for this MC group | |
635 | (default: 0x0b1b for IP groups, 0 for other groups) | |
634 | (default is 2 (link local)). Multiple scope | |
635 | settings are permitted for a partition. | |
636 | NOTE: This overwrites the scope nibble of the | |
637 | specified mgid. Furthermore specifying | |
638 | multiple scope settings will result in | |
639 | multiple MC groups being created. | |
640 | Q_Key=<val> - specifies the Q_Key for this MC group | |
641 | (default: 0x0b1b for IP groups, 0 for other | |
642 | groups) | |
643 | WARNING: changing this for the broadcast | |
644 | group may break IPoIB on client | |
645 | nodes!! | |
636 | 646 | TClass=<val> - specifies tclass for this MC group |
637 | 647 | (default is 0) |
638 | 648 | FlowLabel=<val> - specifies FlowLabel for this MC group |
639 | 649 | (default is 0) |
640 | ||
641 | newline: '\n' | |
642 | ||
643 | 650 | |
644 | 651 | Note that values for rate, mtu, and scope, for both partitions and multicast |
645 | 652 | groups, should be specified as defined in the IBTA specification (for example, |
0 | .TH OPENSM 8 "July 4, 2014" "OpenIB" "OpenIB Management" | |
0 | .TH OPENSM 8 "Sept 15, 2014" "OpenIB" "OpenIB Management" | |
1 | 1 | |
2 | 2 | .SH NAME |
3 | 3 | opensm \- InfiniBand subnet manager and administration (SM/SA) |
573 | 573 | Partition Definition: |
574 | 574 | [PartitionName][=PKey][,ipoib_bc_flags][,defmember=full|limited] |
575 | 575 | |
576 | PartitionName - string, will be used with logging. When omitted | |
577 | empty string will be used. | |
578 | PKey - P_Key value for this partition. Only low 15 bits will | |
579 | be used. When omitted will be autogenerated. | |
580 | ipoib_bc_flags - used to indicate/specify IPoIB capability of this partition. | |
581 | ||
582 | defmember=full|limited|both - specifies default membership for port guid | |
583 | list. Default is limited. | |
576 | PartitionName - string, will be used with logging. When | |
577 | omitted, empty string will be used. | |
578 | PKey - P_Key value for this partition. Only low 15 | |
579 | bits will be used. When omitted will be | |
580 | autogenerated. | |
581 | ipoib_bc_flags - used to indicate/specify IPoIB capability of | |
582 | this partition. | |
583 | ||
584 | defmember=full|limited|both - specifies default membership for | |
585 | port guid list. Default is limited. | |
584 | 586 | |
585 | 587 | ipoib_bc_flags: |
586 | 588 | ipoib_flag|[mgroup_flag]* |
587 | 589 | |
588 | ipoib_flag - indicates that this partition may be used for IPoIB, as | |
589 | a result the IPoIB broadcast group will be created with | |
590 | the flags given, if any. | |
590 | ipoib_flag: | |
591 | ipoib - indicates that this partition may be used for | |
592 | IPoIB, as a result the IPoIB broadcast group will | |
593 | be created with the mgroup_flag flags given, | |
594 | if any. | |
591 | 595 | |
592 | 596 | Partition Properties: |
593 | 597 | [<Port list>|<MCast Group>]* | <Port list> |
598 | 602 | Port Specifier: |
599 | 603 | <PortGUID>[=[full|limited|both]] |
600 | 604 | |
601 | PortGUID - GUID of partition member EndPort. Hexadecimal | |
602 | numbers should start from 0x, decimal numbers | |
603 | are accepted too. | |
604 | ||
605 | full, limited, - indicates full and/or limited membership for this | |
606 | both port. When omitted (or unrecognized) limited | |
607 | membership is assumed. Both indicates both full | |
608 | and limited membership for this port. | |
605 | PortGUID - GUID of partition member EndPort. | |
606 | Hexadecimal numbers should start from | |
607 | 0x, decimal numbers are accepted too. | |
608 | full, limited, - indicates full and/or limited membership for | |
609 | both this port. When omitted (or unrecognized) | |
610 | limited membership is assumed. Both | |
611 | indicates both full and limited membership | |
612 | for this port. | |
609 | 613 | |
610 | 614 | MCast Group: |
611 | 615 | mgid=gid[,mgroup_flag]*<newline> |
612 | 616 | |
613 | - gid specified is verified to be a Multicast address | |
614 | IP groups are verified to match the rate and mtu of the | |
615 | broadcast group. The P_Key bits of the mgid for IP | |
616 | groups are verified to either match the P_Key specified | |
617 | in by "Partition Definition" or if they are 0x0000 the | |
618 | P_Key will be copied into those bits. | |
617 | - gid specified is verified to be a Multicast | |
618 | address. IP groups are verified to match | |
619 | the rate and mtu of the broadcast group. | |
620 | The P_Key bits of the mgid for IP groups are | |
621 | verified to either match the P_Key specified | |
622 | in by "Partition Definition" or if they are | |
623 | 0x0000 the P_Key will be copied into those | |
624 | bits. | |
619 | 625 | |
620 | 626 | mgroup_flag: |
621 | 627 | rate=<val> - specifies rate for this MC group |
625 | 631 | sl=<val> - specifies SL for this MC group |
626 | 632 | (default is 0) |
627 | 633 | scope=<val> - specifies scope for this MC group |
628 | (default is 2 (link local)). Multiple scope settings | |
629 | are permitted for a partition. | |
630 | NOTE: This overwrites the scope nibble of the specified | |
631 | mgid. Furthermore specifying multiple scope | |
632 | settings will result in multiple MC groups | |
633 | being created. | |
634 | Q_Key=<val> - specifies the Q_Key for this MC group | |
635 | (default: 0x0b1b for IP groups, 0 for other groups) | |
634 | (default is 2 (link local)). Multiple scope | |
635 | settings are permitted for a partition. | |
636 | NOTE: This overwrites the scope nibble of the | |
637 | specified mgid. Furthermore specifying | |
638 | multiple scope settings will result in | |
639 | multiple MC groups being created. | |
640 | Q_Key=<val> - specifies the Q_Key for this MC group | |
641 | (default: 0x0b1b for IP groups, 0 for other | |
642 | groups) | |
643 | WARNING: changing this for the broadcast | |
644 | group may break IPoIB on client | |
645 | nodes!! | |
636 | 646 | TClass=<val> - specifies tclass for this MC group |
637 | 647 | (default is 0) |
638 | 648 | FlowLabel=<val> - specifies FlowLabel for this MC group |
639 | 649 | (default is 0) |
640 | ||
641 | newline: '\n' | |
642 | ||
643 | 650 | |
644 | 651 | Note that values for rate, mtu, and scope, for both partitions and multicast |
645 | 652 | groups, should be specified as defined in the IBTA specification (for example, |
5 | 5 | # API_REV - advance on any added API |
6 | 6 | # RUNNING_REV - advance any change to the vendor files |
7 | 7 | # AGE - number of backward versions the API still supports |
8 | LIBVERSION=7:1:2 | |
8 | LIBVERSION=7:2:2 |
907 | 907 | |
908 | 908 | case 'L': |
909 | 909 | opt.log_max_size = strtoul(optarg, NULL, 0); |
910 | printf(" Log file max size is %lu MBytes\n", | |
910 | printf(" Log file max size is %u MBytes\n", | |
911 | 911 | opt.log_max_size); |
912 | 912 | break; |
913 | 913 |
1 | 1 | * Copyright (c) 2006-2009 Voltaire, Inc. All rights reserved. |
2 | 2 | * Copyright (c) 2009 HNR Consulting. All rights reserved. |
3 | 3 | * Copyright (c) 2012 Lawrence Livermore National Lab. All rights reserved. |
4 | * Copyright (c) 2014 Mellanox Technologies LTD. All rights reserved. | |
4 | 5 | * |
5 | 6 | * This software is available to you under a choice of one of two |
6 | 7 | * licenses. You may choose to be licensed under the terms of the GNU |
172 | 173 | |
173 | 174 | /* Congestion Control Table */ |
174 | 175 | |
175 | /* if no entries, we will always send atleast 1 mad to set ccti_limit = 0 */ | |
176 | /* if no entries, we will always send at least 1 mad to set ccti_limit = 0 */ | |
176 | 177 | if (!p_opt->cc_cct.entries_len) |
177 | 178 | p_cc->cc_tbl_mads = 1; |
178 | 179 | else { |
439 | 440 | cl_event_signal(&p_cc->sig_mads_on_wire_continue); |
440 | 441 | } |
441 | 442 | |
442 | ||
443 | 443 | static void cc_rcv_mad(void *context, void *data) |
444 | 444 | { |
445 | 445 | osm_congestion_control_t *p_cc = context; |
448 | 448 | ib_cc_mad_t *p_cc_mad; |
449 | 449 | osm_madw_context_t *p_mad_context = &p_madw->context; |
450 | 450 | ib_mad_t *p_mad = osm_madw_get_mad_ptr(p_madw); |
451 | uint64_t node_guid = p_mad_context->cc_context.node_guid; | |
452 | uint64_t port_guid = p_mad_context->cc_context.port_guid; | |
451 | ib_net64_t node_guid = p_mad_context->cc_context.node_guid; | |
452 | ib_net64_t port_guid = p_mad_context->cc_context.port_guid; | |
453 | 453 | uint8_t port = p_mad_context->cc_context.port; |
454 | 454 | osm_port_t *p_port; |
455 | 455 | |
456 | 456 | OSM_LOG_ENTER(p_cc->log); |
457 | 457 | |
458 | 458 | OSM_LOG(p_cc->log, OSM_LOG_VERBOSE, |
459 | "Processing received MAD status 0x%x context 0x%" | |
460 | PRIx64 "port %u\n", p_mad->status, node_guid, port); | |
459 | "Processing received MAD status 0x%x for " | |
460 | "attr ID %u mod 0x%x node 0x%" PRIx64 " port %u\n", | |
461 | cl_ntoh16(p_mad->status), cl_ntoh16(p_mad->attr_id), | |
462 | cl_ntoh32(p_mad_context->cc_context.attr_mod), | |
463 | cl_ntoh64(node_guid), port); | |
461 | 464 | |
462 | 465 | p_cc_mad = osm_madw_get_cc_mad_ptr(p_madw); |
463 | 466 | |
466 | 469 | p_port = osm_get_port_by_guid(p_cc->subn, port_guid); |
467 | 470 | if (!p_port) { |
468 | 471 | OSM_LOG(p_cc->log, OSM_LOG_ERROR, "ERR C109: " |
469 | "Port guid not in table 0x%" PRIx64 "\n", | |
470 | port_guid); | |
472 | "Port GUID 0x%" PRIx64 " not in table\n", | |
473 | cl_ntoh64(port_guid)); | |
471 | 474 | cl_plock_release(&p_osm->lock); |
472 | 475 | goto Exit; |
473 | 476 | } |
506 | 509 | } |
507 | 510 | else |
508 | 511 | OSM_LOG(p_cc->log, OSM_LOG_ERROR, "ERR C10A: " |
509 | "Unexpected MAD attribute received: %u\n", | |
510 | p_cc_mad->header.attr_id); | |
512 | "Unexpected MAD attribute ID %u received\n", | |
513 | cl_ntoh16(p_cc_mad->header.attr_id)); | |
511 | 514 | |
512 | 515 | cl_plock_release(&p_osm->lock); |
513 | 516 | |
539 | 542 | } else |
540 | 543 | OSM_LOG(p_cc->log, OSM_LOG_ERROR, "ERR C104: " |
541 | 544 | "send failed to node 0x%" PRIx64 "port %u\n", |
542 | mad_context.cc_context.node_guid, | |
545 | cl_ntoh64(mad_context.cc_context.node_guid), | |
543 | 546 | mad_context.cc_context.port); |
544 | 547 | } |
545 | 548 | |
673 | 676 | p_port = osm_get_port_by_guid(p_cc->subn, port_guid); |
674 | 677 | if (!p_port) { |
675 | 678 | OSM_LOG(p_cc->log, OSM_LOG_ERROR, "ERR C10B: " |
676 | "Port guid not in table 0x%" PRIx64 "\n", | |
677 | port_guid); | |
679 | "Port GUID 0x%" PRIx64 " not in table\n", | |
680 | cl_ntoh64(port_guid)); | |
678 | 681 | cl_plock_release(&p_osm->lock); |
679 | 682 | goto Exit; |
680 | 683 | } |
693 | 696 | ib_get_err_str(p_madw->status), |
694 | 697 | p_madw->p_mad->attr_id, |
695 | 698 | cl_ntoh16(p_madw->mad_addr.dest_lid), |
696 | node_guid, | |
699 | cl_ntoh64(node_guid), | |
697 | 700 | port, |
698 | 701 | cl_ntoh64(p_madw->p_mad->trans_id)); |
699 | 702 |
717 | 717 | uint64_t ports_8X; |
718 | 718 | uint64_t ports_12X; |
719 | 719 | uint64_t ports_unknown_width; |
720 | port_report_t *unknown_width_ports; | |
720 | 721 | uint64_t ports_unenabled_width; |
721 | 722 | port_report_t *unenabled_width_ports; |
722 | 723 | uint64_t ports_reduced_width; |
728 | 729 | uint64_t ports_fdr; |
729 | 730 | uint64_t ports_edr; |
730 | 731 | uint64_t ports_unknown_speed; |
732 | port_report_t *unknown_speed_ports; | |
731 | 733 | uint64_t ports_unenabled_speed; |
732 | 734 | port_report_t *unenabled_speed_ports; |
733 | 735 | uint64_t ports_reduced_speed; |
852 | 854 | } |
853 | 855 | } |
854 | 856 | break; |
857 | case IB_LINK_SPEED_ACTIVE_EXTENDED: | |
858 | break; | |
855 | 859 | default: |
860 | __tag_port_report(&(fs->unknown_speed_ports), | |
861 | cl_ntoh64(node->node_info.node_guid), | |
862 | port, node->print_desc); | |
856 | 863 | fs->ports_unknown_speed++; |
857 | 864 | break; |
858 | 865 | } |
880 | 887 | case IB_LINK_SPEED_EXT_ACTIVE_25: |
881 | 888 | fs->ports_edr++; |
882 | 889 | break; |
890 | case IB_LINK_SPEED_EXT_ACTIVE_NONE: | |
891 | break; | |
883 | 892 | default: |
893 | __tag_port_report(&(fs->unknown_speed_ports), | |
894 | cl_ntoh64(node->node_info.node_guid), | |
895 | port, node->print_desc); | |
884 | 896 | fs->ports_unknown_speed++; |
885 | 897 | break; |
886 | 898 | } |
899 | 911 | fs->ports_12X++; |
900 | 912 | break; |
901 | 913 | default: |
914 | __tag_port_report(&(fs->unknown_width_ports), | |
915 | cl_ntoh64(node->node_info.node_guid), | |
916 | port, node->print_desc); | |
902 | 917 | fs->ports_unknown_width++; |
903 | 918 | break; |
904 | 919 | } |
974 | 989 | fprintf(out, " %" PRIu64 " at 25.78125 Gbps\n", fs.ports_edr); |
975 | 990 | |
976 | 991 | if (fs.ports_disabled + fs.ports_reduced_speed + fs.ports_reduced_width |
977 | + fs.ports_unenabled_width + fs.ports_unenabled_speed > 0) { | |
992 | + fs.ports_unenabled_width + fs.ports_unenabled_speed | |
993 | + fs.ports_unknown_width + fs.ports_unknown_speed > 0) { | |
978 | 994 | fprintf(out, "\nPossible issues:\n"); |
979 | 995 | } |
980 | 996 | if (fs.ports_disabled) { |
991 | 1007 | fs.ports_reduced_speed); |
992 | 1008 | __print_port_report(out, fs.reduced_speed_ports); |
993 | 1009 | } |
1010 | if (fs.ports_unknown_speed) { | |
1011 | fprintf(out, " %" PRIu64 " with unknown speed\n", | |
1012 | fs.ports_unknown_speed); | |
1013 | __print_port_report(out, fs.unknown_speed_ports); | |
1014 | } | |
994 | 1015 | if (fs.ports_unenabled_width) { |
995 | 1016 | fprintf(out, " %" PRIu64 " with unenabled width\n", |
996 | 1017 | fs.ports_unenabled_width); |
1000 | 1021 | fprintf(out, " %" PRIu64 " with reduced width\n", |
1001 | 1022 | fs.ports_reduced_width); |
1002 | 1023 | __print_port_report(out, fs.reduced_width_ports); |
1024 | } | |
1025 | if (fs.ports_unknown_width) { | |
1026 | fprintf(out, " %" PRIu64 " with unknown width\n", | |
1027 | fs.ports_unknown_width); | |
1028 | __print_port_report(out, fs.unknown_width_ports); | |
1003 | 1029 | } |
1004 | 1030 | fprintf(out, "\n"); |
1005 | 1031 | } |
166 | 166 | /* allowed to use the console? */ |
167 | 167 | p_oct->authorized = !is_remote(p_oct->client_type) || |
168 | 168 | hosts_ctl((char *)OSM_DAEMON_NAME, p_oct->client_hn, p_oct->client_ip, |
169 | (char *)"STRING_UNKNOWN"); | |
169 | (char *)STRING_UNKNOWN); | |
170 | 170 | return p_oct->authorized; |
171 | 171 | } |
172 | 172 | #endif |
256 | 256 | OSM_LOG(sm->p_log, OSM_LOG_VERBOSE, |
257 | 257 | "Cleaned SM for port guid 0x%016" PRIx64 "\n", |
258 | 258 | cl_ntoh64(port_guid)); |
259 | /* clean up the polling_sm_guid */ | |
260 | if (sm->polling_sm_guid == p_sm->smi.guid) | |
261 | sm->polling_sm_guid = 0; | |
262 | 259 | free(p_sm); |
263 | 260 | } |
264 | 261 |
472 | 472 | fprintf(file, "PHY=%s LOG=%s SPD=%s\n", |
473 | 473 | p_physp->port_info.link_width_active == 1 ? "1x" : |
474 | 474 | p_physp->port_info.link_width_active == 2 ? "4x" : |
475 | p_physp->port_info.link_width_active == 4 ? "8x" : | |
475 | 476 | p_physp->port_info.link_width_active == 8 ? "12x" : |
476 | 477 | "??", |
477 | 478 | port_state == IB_LINK_ACTIVE ? "ACT" : |
805 | 805 | uint8_t op_vls; |
806 | 806 | uint8_t port_num; |
807 | 807 | boolean_t send_set = FALSE; |
808 | boolean_t send_client_rereg = FALSE; | |
808 | 809 | boolean_t update_mkey = FALSE; |
809 | 810 | int ret = 0; |
810 | 811 | |
891 | 892 | p_mgr->dirty = TRUE; |
892 | 893 | } |
893 | 894 | |
894 | /* we are updating the ports with our local sm_base_lid */ | |
895 | /* | |
896 | We are updating the ports with our local sm_base_lid | |
897 | if for some reason currently received SM LID is different from our SM LID, | |
898 | need to send client reregister to this port | |
899 | */ | |
895 | 900 | p_pi->master_sm_base_lid = p_mgr->p_subn->sm_base_lid; |
896 | 901 | if (memcmp(&p_pi->master_sm_base_lid, &p_old_pi->master_sm_base_lid, |
897 | sizeof(p_pi->master_sm_base_lid))) | |
902 | sizeof(p_pi->master_sm_base_lid))) { | |
903 | send_client_rereg = TRUE; | |
898 | 904 | send_set = TRUE; |
905 | } | |
899 | 906 | |
900 | 907 | p_pi->m_key_lease_period = p_mgr->p_subn->opt.m_key_lease_period; |
901 | 908 | if (memcmp(&p_pi->m_key_lease_period, &p_old_pi->m_key_lease_period, |
1028 | 1035 | context.pi_context.active_transition = FALSE; |
1029 | 1036 | |
1030 | 1037 | /* |
1031 | We need to set the cli_rereg bit when we are in first_time_master_sweep | |
1032 | for ports supporting the ClientReregistration Vol1 (v1.2) p811 14.4.11 | |
1033 | Also, if this port was just now discovered, then we should also set | |
1034 | the cli_rereg bit. We know that the port was just discovered if its | |
1035 | is_new field is set. | |
1036 | */ | |
1037 | if ((p_mgr->p_subn->first_time_master_sweep == TRUE || p_port->is_new) | |
1038 | For ports supporting the ClientReregistration Vol1 (v1.2) p811 14.4.11: | |
1039 | need to set the cli_rereg bit when current SM LID at the Host | |
1040 | is different from our SM LID, | |
1041 | also if we are in first_time_master_sweep, | |
1042 | also if this port was just now discovered, then we should also set | |
1043 | the cli_rereg bit (we know that the port was just discovered | |
1044 | if its is_new field is set). | |
1045 | */ | |
1046 | if ((send_client_rereg || | |
1047 | p_mgr->p_subn->first_time_master_sweep == TRUE || p_port->is_new) | |
1038 | 1048 | && !p_mgr->p_subn->opt.no_clients_rereg |
1039 | 1049 | && (p_old_pi->capability_mask & IB_PORT_CAP_HAS_CLIENT_REREG)) { |
1040 | 1050 | OSM_LOG(p_mgr->p_log, OSM_LOG_DEBUG, |
466 | 466 | send_set = TRUE; |
467 | 467 | |
468 | 468 | if (!send_set) |
469 | goto Exit; | |
469 | goto SEND_EPI; | |
470 | 470 | |
471 | 471 | attr_mod = cl_hton32(port_num); |
472 | 472 | if (issue_ext) |
486 | 486 | cl_ntoh64(p_physp->port_guid), |
487 | 487 | cl_ntoh64(p_pi->m_key)); |
488 | 488 | |
489 | SEND_EPI: | |
489 | 490 | if (send_set2) { |
490 | 491 | status = osm_req_set(sm, osm_physp_get_dr_path_ptr(p_physp), |
491 | 492 | payload2, sizeof(payload2), |
461 | 461 | OSM_LOG_EXIT(sm->p_log); |
462 | 462 | } |
463 | 463 | |
464 | static void mcast_mgr_purge_list(osm_sm_t * sm, cl_qlist_t * list) | |
464 | static void mcast_mgr_purge_list(osm_sm_t * sm, uint16_t mlid, cl_qlist_t * list) | |
465 | 465 | { |
466 | 466 | if (OSM_LOG_IS_ACTIVE_V2(sm->p_log, OSM_LOG_ERROR)) { |
467 | 467 | osm_mcast_work_obj_t *wobj; |
470 | 470 | i = cl_qlist_next(i)) { |
471 | 471 | wobj = cl_item_obj(i, wobj, list_item); |
472 | 472 | OSM_LOG(sm->p_log, OSM_LOG_ERROR, "ERR 0A06: " |
473 | "Unable to route for port 0x%" PRIx64 "\n", | |
474 | cl_ntoh64(osm_port_get_guid(wobj->p_port))); | |
473 | "Unable to route MLID 0x%X for port 0x%" PRIx64 "\n", | |
474 | mlid, cl_ntoh64(osm_port_get_guid(wobj->p_port))); | |
475 | 475 | } |
476 | 476 | } |
477 | 477 | osm_mcast_drop_port_list(list); |
522 | 522 | OSM_LOG(sm->p_log, OSM_LOG_ERROR, "ERR 0A21: " |
523 | 523 | "Maximal hops number is reached for MLID 0x%x." |
524 | 524 | " Break processing\n", mlid_ho); |
525 | mcast_mgr_purge_list(sm, p_list); | |
525 | mcast_mgr_purge_list(sm, mlid_ho, p_list); | |
526 | 526 | goto Exit; |
527 | 527 | } |
528 | 528 | |
542 | 542 | /* |
543 | 543 | Deallocate all the work objects on this branch of the tree. |
544 | 544 | */ |
545 | mcast_mgr_purge_list(sm, p_list); | |
545 | mcast_mgr_purge_list(sm, mlid_ho, p_list); | |
546 | 546 | goto Exit; |
547 | 547 | } |
548 | 548 | |
558 | 558 | /* |
559 | 559 | Deallocate all the work objects on this branch of the tree. |
560 | 560 | */ |
561 | mcast_mgr_purge_list(sm, p_list); | |
561 | mcast_mgr_purge_list(sm, mlid_ho, p_list); | |
562 | 562 | goto Exit; |
563 | 563 | } |
564 | 564 | |
575 | 575 | if (list_array == NULL) { |
576 | 576 | OSM_LOG(sm->p_log, OSM_LOG_ERROR, "ERR 0A16: " |
577 | 577 | "Unable to allocate list array\n"); |
578 | mcast_mgr_purge_list(sm, p_list); | |
578 | mcast_mgr_purge_list(sm, mlid_ho, p_list); | |
579 | 579 | osm_mtree_destroy(p_mtn); |
580 | 580 | p_mtn = NULL; |
581 | 581 | goto Exit; |
632 | 632 | OSM_LOG(sm->p_log, OSM_LOG_DEBUG, |
633 | 633 | "Routing %zu destinations via switch port %u\n", |
634 | 634 | count, i); |
635 | ||
636 | if (i == 0) { | |
637 | /* This means we are adding the switch to the MC group. | |
638 | We do not need to continue looking at the remote | |
639 | port, just needed to add the port to the table */ | |
640 | CL_ASSERT(count == 1); | |
641 | ||
642 | osm_mcast_tbl_set(p_tbl, mlid_ho, i); | |
643 | ||
644 | p_wobj = (osm_mcast_work_obj_t *) | |
645 | cl_qlist_remove_head(p_port_list); | |
646 | mcast_work_obj_delete(p_wobj); | |
647 | continue; | |
648 | } | |
649 | ||
650 | p_node = p_sw->p_node; | |
651 | p_remote_node = osm_node_get_remote_node(p_node, i, NULL); | |
652 | if (!p_remote_node) { | |
653 | /* | |
654 | * If we reached here, it means the minhop table has | |
655 | * invalid entries that leads to disconnected ports. | |
656 | * | |
657 | * A possible reason for the code to reach here is | |
658 | * that ucast cache is enabled, and a leaf switch that | |
659 | * is used as a non-leaf switch in a multicast has been | |
660 | * removed from the fabric. | |
661 | * | |
662 | * When it happens, we should invalidate the cache | |
663 | * and force rerouting of the fabric. | |
664 | */ | |
665 | ||
666 | OSM_LOG(sm->p_log, OSM_LOG_ERROR, | |
667 | "ERR 0A1E: Tried to route MLID 0x%X through " | |
668 | "disconnected switch 0x%" PRIx64 " port %d\n", | |
669 | mlid_ho, cl_ntoh64(node_guid), i); | |
670 | ||
671 | /* Free memory */ | |
672 | mcast_mgr_purge_list(sm, mlid_ho, p_port_list); | |
673 | ||
674 | /* Invalidate ucast cache */ | |
675 | if (sm->ucast_mgr.p_subn->opt.use_ucast_cache && | |
676 | sm->ucast_mgr.cache_valid) { | |
677 | OSM_LOG(sm->p_log, OSM_LOG_INFO, | |
678 | "Unicast Cache will be invalidated due " | |
679 | "to multicast routing errors\n"); | |
680 | osm_ucast_cache_invalidate(&sm->ucast_mgr); | |
681 | sm->p_subn->force_heavy_sweep = TRUE; | |
682 | } | |
683 | ||
684 | continue; | |
685 | } | |
635 | 686 | |
636 | 687 | /* |
637 | 688 | This port routes frames for this mcast group. Therefore, |
639 | 690 | table for this switch. |
640 | 691 | */ |
641 | 692 | osm_mcast_tbl_set(p_tbl, mlid_ho, i); |
642 | if (i == 0) { | |
643 | /* This means we are adding the switch to the MC group. | |
644 | We do not need to continue looking at the remote | |
645 | port, just needed to add the port to the table */ | |
646 | CL_ASSERT(count == 1); | |
647 | ||
648 | p_wobj = (osm_mcast_work_obj_t *) | |
649 | cl_qlist_remove_head(p_port_list); | |
650 | mcast_work_obj_delete(p_wobj); | |
651 | continue; | |
652 | } | |
653 | ||
654 | p_node = p_sw->p_node; | |
655 | p_remote_node = osm_node_get_remote_node(p_node, i, NULL); | |
656 | if (!p_remote_node) | |
657 | continue; | |
658 | 693 | |
659 | 694 | if (osm_node_get_type(p_remote_node) == IB_NODE_TYPE_SWITCH) { |
660 | 695 | /* |
143 | 143 | { |
144 | 144 | while (pm->remove_list) { |
145 | 145 | monitored_node_t *next = pm->remove_list->next; |
146 | int port; | |
146 | 147 | |
147 | 148 | cl_qmap_remove_item(&pm->monitored_map, |
148 | 149 | (cl_map_item_t *) (pm->remove_list)); |
154 | 155 | |
155 | 156 | if (pm->remove_list->name) |
156 | 157 | free(pm->remove_list->name); |
158 | ||
159 | for (port = pm->remove_list->esp0 ? 0 : 1; | |
160 | port < pm->remove_list->num_ports; | |
161 | port++) { | |
162 | if (pm->remove_list->port[port].remote_name) | |
163 | free(pm->remove_list->port[port].remote_name); | |
164 | } | |
165 | ||
157 | 166 | free(pm->remove_list); |
158 | 167 | pm->remove_list = next; |
159 | 168 | } |
553 | 562 | ib_switch_info_is_enhanced_port0(&node->sw-> |
554 | 563 | switch_info)); |
555 | 564 | for (port = mon_node->esp0 ? 0 : 1; port < num_ports; port++) { |
556 | mon_node->port[port].orig_lid = 0; | |
557 | mon_node->port[port].valid = FALSE; | |
558 | if (osm_physp_is_valid(&node->physp_table[port])) { | |
559 | mon_node->port[port].orig_lid = get_base_lid(node, port); | |
560 | mon_node->port[port].valid = TRUE; | |
565 | monitored_port_t *mon_port = &mon_node->port[port]; | |
566 | osm_physp_t *p_physp = &node->physp_table[port]; | |
567 | osm_physp_t *p_remote_physp = p_physp->p_remote_physp; | |
568 | ||
569 | mon_port->orig_lid = 0; | |
570 | mon_port->valid = FALSE; | |
571 | if (osm_physp_is_valid(p_physp)) { | |
572 | mon_port->orig_lid = get_base_lid(node, port); | |
573 | mon_port->valid = TRUE; | |
574 | } | |
575 | mon_port->remote_valid = FALSE; | |
576 | mon_port->remote_name = NULL; | |
577 | if (p_remote_physp && osm_physp_is_valid(p_remote_physp)) { | |
578 | osm_node_t *p_remote_node = p_remote_physp->p_node; | |
579 | mon_port->remote_valid = TRUE; | |
580 | mon_port->remote_guid = p_remote_node->node_info.node_guid; | |
581 | mon_port->remote_name = strdup(p_remote_node->print_desc); | |
582 | mon_port->remote_port = p_remote_physp->port_num; | |
561 | 583 | } |
562 | 584 | } |
563 | 585 | |
962 | 984 | { |
963 | 985 | osm_node_t *p_node = (osm_node_t *) p_map_item; |
964 | 986 | p_node->discovery_count = 0; |
987 | ||
988 | memset(p_node->physp_discovered, 0, | |
989 | sizeof(uint8_t) * p_node->physp_tbl_size); | |
965 | 990 | } |
966 | 991 | |
967 | 992 | static void reset_port_count(cl_map_item_t * p_map_item, void *cxt) |
1428 | 1453 | } |
1429 | 1454 | |
1430 | 1455 | #define LOG_ERR_CNT(errname, errnum, counter_name) \ |
1431 | if (reading->counter_name > prev_read.counter_name) \ | |
1432 | OSM_LOG(pm->log, OSM_LOG_ERROR, "ERR %s: " \ | |
1433 | "%s : %" PRIu64 " : node " \ | |
1434 | "\"%s\" (NodeGUID: 0x%" PRIx64 ") : port %u\n", \ | |
1435 | errnum, errname, \ | |
1436 | reading->counter_name - prev_read.counter_name, \ | |
1437 | mon_node->name, mon_node->guid, port); | |
1456 | if (reading->counter_name > prev_read.counter_name) { \ | |
1457 | if (mon_node->port[port].remote_valid == TRUE) \ | |
1458 | OSM_LOG(pm->log, OSM_LOG_ERROR, "ERR %s: " \ | |
1459 | "%s : %" PRIu64 " : node " \ | |
1460 | "\"%s\" (NodeGUID: 0x%" PRIx64 ") : port %u " \ | |
1461 | "connected to \"%s\" (NodeGUID: 0x%" PRIx64 ") : port %u\n", \ | |
1462 | errnum, errname, \ | |
1463 | reading->counter_name - prev_read.counter_name, \ | |
1464 | mon_node->name, mon_node->guid, port, \ | |
1465 | mon_node->port[port].remote_name, \ | |
1466 | mon_node->port[port].remote_guid, \ | |
1467 | mon_node->port[port].remote_port); \ | |
1468 | else \ | |
1469 | OSM_LOG(pm->log, OSM_LOG_ERROR, "ERR %s: " \ | |
1470 | "%s : %" PRIu64 " : node " \ | |
1471 | "\"%s\" (NodeGUID: 0x%" PRIx64 ") : port %u\n", \ | |
1472 | errnum, errname, \ | |
1473 | reading->counter_name - prev_read.counter_name, \ | |
1474 | mon_node->name, mon_node->guid, port); \ | |
1475 | } | |
1438 | 1476 | |
1439 | 1477 | LOG_ERR_CNT("SymbolErrorCounter", "5431", symbol_err_cnt); |
1440 | 1478 | LOG_ERR_CNT("LinkErrorRecoveryCounter", "5432", link_err_recover); |
1741 | 1779 | |
1742 | 1780 | OSM_LOG(pm->log, OSM_LOG_VERBOSE, |
1743 | 1781 | "Processing received MAD status 0x%x context 0x%" |
1744 | PRIx64 " port %u\n", p_mad->status, node_guid, port); | |
1782 | PRIx64 " port %u\n", cl_ntoh16(p_mad->status), node_guid, port); | |
1745 | 1783 | |
1746 | 1784 | CL_ASSERT(p_mad->attr_id == IB_MAD_ATTR_PORT_CNTRS || |
1747 | 1785 | p_mad->attr_id == IB_MAD_ATTR_PORT_CNTRS_EXT || |
95 | 95 | osm_pending_pkey_t *p_pending; |
96 | 96 | |
97 | 97 | p_pkey_tbl = &p_physp->pkeys; |
98 | p_pending = (osm_pending_pkey_t *) malloc(sizeof(osm_pending_pkey_t)); | |
98 | p_pending = (osm_pending_pkey_t *) calloc(1, sizeof(osm_pending_pkey_t)); | |
99 | 99 | if (!p_pending) { |
100 | 100 | OSM_LOG(p_log, OSM_LOG_ERROR, "ERR 0502: " |
101 | 101 | "Failed to allocate new pending pkey entry for node " |
650 | 650 | ib_net64_t port_guid, node_guid; |
651 | 651 | uint8_t port_num; |
652 | 652 | |
653 | CL_ASSERT(sm); | |
654 | ||
653 | 655 | OSM_LOG_ENTER(sm->p_log); |
654 | 656 | |
655 | CL_ASSERT(sm); | |
656 | 657 | CL_ASSERT(p_madw); |
657 | 658 | |
658 | 659 | p_smp = osm_madw_get_smp_ptr(p_madw); |
148 | 148 | |
149 | 149 | if (p_subn->opt.allow_both_pkeys) { |
150 | 150 | if (cl_map_remove(p_tbl, guid)) |
151 | OSM_LOG(p_log, OSM_LOG_ERROR, "port 0x%" PRIx64 | |
151 | OSM_LOG(p_log, OSM_LOG_VERBOSE, "port 0x%" PRIx64 | |
152 | 152 | " already in partition \'%s\' (0x%04x) full %d." |
153 | 153 | " Will overwrite\n", |
154 | 154 | cl_ntoh64(guid), p->name, cl_ntoh16(p->pkey), |
68 | 68 | osm_node_t *p_node; |
69 | 69 | osm_port_t *p_sm_port; |
70 | 70 | osm_physp_t *p_physp; |
71 | ib_net64_t dest_port_guid, m_key; | |
71 | ib_net64_t dest_port_guid = 0, m_key; | |
72 | 72 | uint8_t hop; |
73 | 73 | |
74 | 74 | OSM_LOG_ENTER(sm->p_log); |
400 | 400 | */ |
401 | 401 | if (sa_mad->method == IB_MAD_METHOD_GET && num_rec > 1) { |
402 | 402 | OSM_LOG(sa->p_log, OSM_LOG_ERROR, "ERR 4C05: " |
403 | "Got %u records for SubnAdmGet(%s) comp_mask 0x%016" PRIx64 "\n", | |
403 | "Got %u records for SubnAdmGet(%s) comp_mask 0x%016" PRIx64 | |
404 | "from requester LID %u\n", | |
404 | 405 | num_rec, ib_get_sa_attr_str(sa_mad->attr_id), |
405 | cl_ntoh64(sa_mad->comp_mask)); | |
406 | cl_ntoh64(sa_mad->comp_mask), | |
407 | cl_ntoh16(madw->mad_addr.dest_lid)); | |
406 | 408 | osm_sa_send_error(sa, madw, IB_SA_MAD_STATUS_TOO_MANY_RECORDS); |
407 | 409 | goto Exit; |
408 | 410 | } |
523 | 525 | return -1; |
524 | 526 | } |
525 | 527 | |
526 | chmod(path_tmp, S_IRUSR | S_IWUSR); | |
528 | if (chmod(path_tmp, S_IRUSR | S_IWUSR)) { | |
529 | OSM_LOG(&p_osm->log, OSM_LOG_ERROR, "ERR 4C0C: " | |
530 | "cannot change access permissions of file " | |
531 | "\'%s\' : %s\n", | |
532 | path_tmp, strerror(errno)); | |
533 | fclose(file); | |
534 | return -1; | |
535 | } | |
527 | 536 | |
528 | 537 | dump_func(p_osm, file); |
529 | 538 |
138 | 138 | p_mpr, |
139 | 139 | IN const osm_alias_guid_t * p_src_alias_guid, |
140 | 140 | IN const osm_alias_guid_t * p_dest_alias_guid, |
141 | IN const uint16_t src_lid_ho, | |
141 | 142 | IN const uint16_t dest_lid_ho, |
142 | 143 | IN const ib_net64_t comp_mask, |
143 | 144 | OUT osm_path_parms_t * p_parms) |
215 | 216 | p_physp = osm_switch_get_route_by_lid(p_node->sw, dest_lid); |
216 | 217 | if (p_physp == 0) { |
217 | 218 | OSM_LOG(sa->p_log, OSM_LOG_ERROR, "ERR 4514: " |
218 | "Can't find routing to LID %u on switch %s " | |
219 | "(GUID 0x%016"PRIx64")\n", dest_lid_ho, | |
220 | p_node->print_desc, | |
219 | "Can't find routing from LID %u to LID %u on " | |
220 | "switch %s (GUID 0x%016" PRIx64 ")\n", | |
221 | src_lid_ho, dest_lid_ho, p_node->print_desc, | |
221 | 222 | cl_ntoh64(osm_node_get_node_guid(p_node))); |
222 | 223 | status = IB_NOT_FOUND; |
223 | 224 | goto Exit; |
260 | 261 | |
261 | 262 | if (p_dest_physp == 0) { |
262 | 263 | OSM_LOG(sa->p_log, OSM_LOG_ERROR, "ERR 4515: " |
263 | "Can't find routing to LID %u on switch %s " | |
264 | "(GUID 0x%016"PRIx64")\n", dest_lid_ho, | |
265 | p_node->print_desc, | |
264 | "Can't find routing from LID %u to LID %u on " | |
265 | "switch %s (GUID 0x%016" PRIx64 ")\n", | |
266 | src_lid_ho, dest_lid_ho, p_node->print_desc, | |
266 | 267 | cl_ntoh64(osm_node_get_node_guid(p_node))); |
267 | 268 | status = IB_NOT_FOUND; |
268 | 269 | goto Exit; |
283 | 284 | if (p_physp == 0) { |
284 | 285 | OSM_LOG(sa->p_log, OSM_LOG_ERROR, "ERR 4505: " |
285 | 286 | "Can't find remote phys port of %s (GUID " |
286 | "0x%016"PRIx64") port %d " | |
287 | "while routing to LID %u", | |
287 | "0x%016" PRIx64 ") port %d " | |
288 | "while routing from LID %u to LID %u", | |
288 | 289 | p_node->print_desc, |
289 | 290 | cl_ntoh64(osm_node_get_node_guid(p_node)), |
290 | tmp_pnum, | |
291 | dest_lid_ho); | |
291 | tmp_pnum, src_lid_ho, dest_lid_ho); | |
292 | 292 | status = IB_ERROR; |
293 | 293 | goto Exit; |
294 | 294 | } |
902 | 902 | memset(p_pr_item, 0, SA_MPR_RESP_SIZE); |
903 | 903 | |
904 | 904 | status = mpr_rcv_get_path_parms(sa, p_mpr, p_src_alias_guid, |
905 | p_dest_alias_guid, dest_lid_ho, | |
905 | p_dest_alias_guid, | |
906 | src_lid_ho, dest_lid_ho, | |
906 | 907 | comp_mask, &path_parms); |
907 | 908 | |
908 | 909 | if (status != IB_SUCCESS) { |
913 | 914 | |
914 | 915 | /* now try the reversible path */ |
915 | 916 | rev_path_status = mpr_rcv_get_path_parms(sa, p_mpr, p_dest_alias_guid, |
916 | p_src_alias_guid, src_lid_ho, | |
917 | p_src_alias_guid, | |
918 | dest_lid_ho, src_lid_ho, | |
917 | 919 | comp_mask, &rev_path_parms); |
918 | 920 | path_parms.reversible = (rev_path_status == IB_SUCCESS); |
919 | 921 |
227 | 227 | p_physp = osm_switch_get_route_by_lid(p_node->sw, dest_lid); |
228 | 228 | if (p_physp == 0) { |
229 | 229 | OSM_LOG(sa->p_log, OSM_LOG_ERROR, "ERR 1F02: " |
230 | "Cannot find routing to LID %u on switch " | |
231 | "%s (GUID: 0x%016" PRIx64 ")\n", dest_lid_ho, | |
232 | p_node->print_desc, | |
230 | "Cannot find routing from LID %u to LID %u on " | |
231 | "switch %s (GUID: 0x%016" PRIx64 ")\n", | |
232 | src_lid_ho, dest_lid_ho, p_node->print_desc, | |
233 | 233 | cl_ntoh64(osm_node_get_node_guid(p_node))); |
234 | 234 | status = IB_NOT_FOUND; |
235 | 235 | goto Exit; |
271 | 271 | |
272 | 272 | if (p_dest_physp == 0) { |
273 | 273 | OSM_LOG(sa->p_log, OSM_LOG_ERROR, "ERR 1F03: " |
274 | "Cannot find routing to LID %u on switch " | |
275 | "%s (GUID: 0x%016" PRIx64 ")\n", dest_lid_ho, | |
276 | p_node->print_desc, | |
274 | "Can't find routing from LID %u to LID %u on " | |
275 | "switch %s (GUID: 0x%016" PRIx64 ")\n", | |
276 | src_lid_ho, dest_lid_ho, p_node->print_desc, | |
277 | 277 | cl_ntoh64(osm_node_get_node_guid(p_node))); |
278 | 278 | status = IB_NOT_FOUND; |
279 | 279 | goto Exit; |
295 | 295 | OSM_LOG(sa->p_log, OSM_LOG_ERROR, "ERR 1F05: " |
296 | 296 | "Can't find remote phys port of %s (GUID: " |
297 | 297 | "0x%016"PRIx64") port %d " |
298 | "while routing to LID %u\n", | |
298 | "while routing from LID %u to LID %u\n", | |
299 | 299 | p_node->print_desc, |
300 | 300 | cl_ntoh64(osm_node_get_node_guid(p_node)), |
301 | tmp_pnum, | |
302 | dest_lid_ho); | |
301 | tmp_pnum, src_lid_ho, dest_lid_ho); | |
303 | 302 | status = IB_ERROR; |
304 | 303 | goto Exit; |
305 | 304 | } |
1268 | 1267 | } |
1269 | 1268 | |
1270 | 1269 | ib_net16_t osm_pr_get_end_points(IN osm_sa_t * sa, |
1271 | IN const ib_sa_mad_t *sa_mad, | |
1272 | OUT const osm_alias_guid_t ** pp_src_alias_guid, | |
1273 | OUT const osm_alias_guid_t ** pp_dest_alias_guid, | |
1274 | OUT const osm_port_t ** pp_src_port, | |
1275 | OUT const osm_port_t ** pp_dest_port, | |
1276 | OUT const ib_gid_t ** pp_sgid, | |
1277 | OUT const ib_gid_t ** pp_dgid) | |
1270 | IN const ib_sa_mad_t *sa_mad, | |
1271 | OUT const osm_alias_guid_t ** pp_src_alias_guid, | |
1272 | OUT const osm_alias_guid_t ** pp_dest_alias_guid, | |
1273 | OUT const osm_port_t ** pp_src_port, | |
1274 | OUT const osm_port_t ** pp_dest_port, | |
1275 | OUT const ib_gid_t ** pp_sgid, | |
1276 | OUT const ib_gid_t ** pp_dgid) | |
1278 | 1277 | { |
1279 | 1278 | const ib_path_rec_t *p_pr = ib_sa_mad_get_payload_ptr(sa_mad); |
1280 | 1279 | ib_net64_t comp_mask = sa_mad->comp_mask; |
370 | 370 | * Update the state to MASTER, and start sweeping |
371 | 371 | * OPTIONAL: send ACKNOWLEDGE |
372 | 372 | */ |
373 | /* Turn on the first_time_master_sweep flag */ | |
373 | /* Turn on the force_first_time_master_sweep flag */ | |
374 | /* We want full reconfiguration to occur on the first */ | |
375 | /* master sweep of this SM */ | |
374 | 376 | CL_PLOCK_EXCL_ACQUIRE(sm->p_lock); |
375 | sm->p_subn->first_time_master_sweep = TRUE; | |
376 | /* | |
377 | * Turn on the force_heavy_sweep - we want a | |
378 | * heavy sweep to occur on the first sweep of this SM. | |
379 | */ | |
380 | sm->p_subn->force_heavy_sweep = TRUE; | |
381 | ||
382 | 377 | /* |
383 | 378 | * Make sure to set the subnet master_sm_base_lid |
384 | 379 | * to the sm_base_lid value |
386 | 381 | sm->p_subn->master_sm_base_lid = |
387 | 382 | sm->p_subn->sm_base_lid; |
388 | 383 | |
389 | sm->p_subn->coming_out_of_standby = TRUE; | |
390 | ||
384 | sm->p_subn->force_first_time_master_sweep = TRUE; | |
391 | 385 | CL_PLOCK_RELEASE(sm->p_lock); |
392 | 386 | |
393 | 387 | sm->p_subn->sm_state = IB_SMINFO_STATE_MASTER; |
456 | 450 | osm_get_sm_mgr_signal_str(signal)); |
457 | 451 | CL_PLOCK_EXCL_ACQUIRE(sm->p_lock); |
458 | 452 | sm->polling_sm_guid = 0; |
459 | sm->p_subn->first_time_master_sweep = TRUE; | |
460 | sm->p_subn->coming_out_of_standby = TRUE; | |
461 | sm->p_subn->force_heavy_sweep = TRUE; | |
453 | sm->p_subn->force_first_time_master_sweep = TRUE; | |
462 | 454 | CL_PLOCK_RELEASE(sm->p_lock); |
463 | 455 | osm_sm_signal(sm, OSM_SIGNAL_SWEEP); |
464 | 456 | break; |
372 | 372 | state = IB_LINK_ACTIVE; /* base SP0 */ |
373 | 373 | else |
374 | 374 | state = osm_physp_get_port_state(p_physp); |
375 | ||
376 | if (!p_port->discovery_count) { | |
377 | OSM_LOG(sm->p_log, OSM_LOG_ERROR, | |
378 | "ERR 330A: Failed to discover SM port\n"); | |
379 | state = IB_LINK_DOWN; | |
380 | } | |
381 | ||
375 | 382 | CL_PLOCK_RELEASE(sm->p_lock); |
376 | 383 | |
377 | 384 | Exit: |
1161 | 1168 | osm_remote_sm_t *p_remote_sm; |
1162 | 1169 | unsigned config_parsed = 0; |
1163 | 1170 | |
1171 | if (sm->p_subn->force_first_time_master_sweep) { | |
1172 | sm->p_subn->force_heavy_sweep = TRUE; | |
1173 | sm->p_subn->coming_out_of_standby = TRUE; | |
1174 | sm->p_subn->first_time_master_sweep = TRUE; | |
1175 | sm->p_subn->force_first_time_master_sweep = FALSE; | |
1176 | } | |
1177 | ||
1164 | 1178 | /* after subnet initialization error, run heavy sweep */ |
1165 | 1179 | if (sm->p_subn->subnet_initialization_error) |
1166 | 1180 | sm->p_subn->force_heavy_sweep = TRUE; |
1227 | 1241 | } |
1228 | 1242 | |
1229 | 1243 | /* |
1230 | * Unicast cache should be invalidated if there were errors | |
1231 | * during initialization or if subnet re-route is requested. | |
1244 | * Unicast cache should be invalidated when subnet re-route is | |
1245 | * requested, and when OpenSM comes out of standby state. | |
1232 | 1246 | */ |
1233 | 1247 | if (sm->p_subn->opt.use_ucast_cache && |
1234 | (sm->p_subn->subnet_initialization_error || | |
1235 | sm->p_subn->force_reroute || sm->p_subn->coming_out_of_standby)) | |
1248 | (sm->p_subn->force_reroute || sm->p_subn->coming_out_of_standby)) | |
1236 | 1249 | osm_ucast_cache_invalidate(&sm->ucast_mgr); |
1237 | 1250 | |
1238 | 1251 | /* |
1313 | 1326 | if (state_mgr_is_sm_port_down(sm) == TRUE) { |
1314 | 1327 | if (sm->p_subn->last_sm_port_state) { |
1315 | 1328 | sm->p_subn->last_sm_port_state = 0; |
1316 | osm_log_v2(sm->p_log, OSM_LOG_SYS, FILE_ID, "SM port is down\n"); | |
1329 | osm_log_v2(sm->p_log, OSM_LOG_SYS, FILE_ID, | |
1330 | "SM port is down\n"); | |
1317 | 1331 | OSM_LOG_MSG_BOX(sm->p_log, OSM_LOG_VERBOSE, |
1318 | 1332 | "SM PORT DOWN"); |
1319 | 1333 | } |
1330 | 1344 | } else { |
1331 | 1345 | if (!sm->p_subn->last_sm_port_state) { |
1332 | 1346 | sm->p_subn->last_sm_port_state = 1; |
1333 | osm_log_v2(sm->p_log, OSM_LOG_SYS, FILE_ID, "SM port is up\n"); | |
1347 | osm_log_v2(sm->p_log, OSM_LOG_SYS, FILE_ID, | |
1348 | "SM port is up\n"); | |
1334 | 1349 | OSM_LOG_MSG_BOX(sm->p_log, OSM_LOG_VERBOSE, |
1335 | 1350 | "SM PORT UP"); |
1336 | 1351 | } |
1395 | 1410 | * need to wait for that SM to relinquish control |
1396 | 1411 | * of its portion of the subnet. C14-60.2.1. |
1397 | 1412 | * Also - need to start polling on that SM. */ |
1413 | CL_PLOCK_EXCL_ACQUIRE(sm->p_lock); | |
1398 | 1414 | sm->polling_sm_guid = p_remote_sm->smi.guid; |
1415 | CL_PLOCK_RELEASE(sm->p_lock); | |
1399 | 1416 | osm_sm_state_mgr_process(sm, |
1400 | 1417 | OSM_SM_SIGNAL_WAIT_FOR_HANDOVER); |
1418 | return; | |
1419 | } else if (sm->polling_sm_guid) { | |
1420 | /* Stop polling SM if it's not found */ | |
1421 | osm_sm_state_mgr_process(sm, | |
1422 | OSM_SM_SIGNAL_POLLING_TIMEOUT); | |
1401 | 1423 | return; |
1402 | 1424 | } |
1403 | 1425 | } |
1455 | 1477 | */ |
1456 | 1478 | |
1457 | 1479 | if (!sm->ucast_mgr.cache_valid || |
1458 | osm_ucast_cache_process(&sm->ucast_mgr)) | |
1459 | if (osm_ucast_mgr_process(&sm->ucast_mgr)) | |
1480 | osm_ucast_cache_process(&sm->ucast_mgr)) { | |
1481 | if (osm_ucast_mgr_process(&sm->ucast_mgr)) { | |
1482 | osm_ucast_cache_invalidate(&sm->ucast_mgr); | |
1460 | 1483 | return; |
1484 | } | |
1485 | } | |
1461 | 1486 | |
1462 | 1487 | osm_qos_setup(sm->p_subn->p_osm); |
1463 | 1488 |
254 | 254 | { |
255 | 255 | uint32_t log_max_size = *((uint32_t *) p_val); |
256 | 256 | |
257 | p_subn->p_osm->log.max_size = log_max_size << 20; /* convert from MB to bytes */ | |
257 | p_subn->p_osm->log.max_size = (unsigned long)log_max_size << 20; /* convert from MB to bytes */ | |
258 | 258 | } |
259 | 259 | |
260 | 260 | static void opts_setup_sminfo_polling_timeout(osm_subn_t *p_subn, void *p_val) |
471 | 471 | void (*pfn)(osm_subn_t *, void *)) |
472 | 472 | { |
473 | 473 | char **p_val1 = p_v1, **p_val2 = p_v2; |
474 | const char *current_str = *p_val1 ? *p_val1 : null_str ; | |
474 | const char *current_str = *p_val1 ? *p_val1 : null_str; | |
475 | 475 | |
476 | 476 | if (p_val_str && strcmp(p_val_str, current_str)) { |
477 | 477 | char *new; |
1473 | 1473 | uint16_t devid_ho; |
1474 | 1474 | |
1475 | 1475 | devid_ho = cl_ntoh16(devid); |
1476 | if (devid_ho == 0xc738) | |
1476 | if ((devid_ho >= 0xc738 && devid_ho <= 0xc73b) || devid_ho == 0xcb20) | |
1477 | 1477 | return 1; |
1478 | if (devid_ho >= 0x1003 && devid_ho <= 0x1011) | |
1478 | if (devid_ho >= 0x1003 && devid_ho <= 0x1013) | |
1479 | 1479 | return 1; |
1480 | 1480 | return 0; |
1481 | 1481 | } |
2273 | 2273 | return 0; |
2274 | 2274 | } |
2275 | 2275 | |
2276 | int osm_subn_output_conf(FILE *out, IN osm_subn_opt_t * p_opts) | |
2276 | void osm_subn_output_conf(FILE *out, IN osm_subn_opt_t * p_opts) | |
2277 | 2277 | { |
2278 | 2278 | int cacongoutputcount = 0; |
2279 | 2279 | int i; |
2425 | 2425 | "reassign_lids %s\n\n" |
2426 | 2426 | "# If TRUE forces every sweep to be a heavy sweep\n" |
2427 | 2427 | "force_heavy_sweep %s\n\n" |
2428 | "# If TRUE every trap will cause a heavy sweep.\n" | |
2428 | "# If TRUE every trap 128 and 144 will cause a heavy sweep.\n" | |
2429 | 2429 | "# NOTE: successive identical traps (>10) are suppressed\n" |
2430 | 2430 | "sweep_on_trap %s\n\n", |
2431 | 2431 | p_opts->sweep_interval, |
2698 | 2698 | "# Log file to be used\n" |
2699 | 2699 | "log_file %s\n\n" |
2700 | 2700 | "# Limit the size of the log file in MB. If overrun, log is restarted\n" |
2701 | "log_max_size %lu\n\n" | |
2701 | "log_max_size %u\n\n" | |
2702 | 2702 | "# If TRUE will accumulate the log over multiple OpenSM sessions\n" |
2703 | 2703 | "accum_log_file %s\n\n" |
2704 | 2704 | "# Per module logging configuration file\n" |
2898 | 2898 | } |
2899 | 2899 | } |
2900 | 2900 | |
2901 | /* If by chance all the CA Cong Settings are default, output atleast 1 chunk | |
2901 | /* If by chance all the CA Cong Settings are default, output at least 1 chunk | |
2902 | 2902 | * for illustration */ |
2903 | 2903 | if (!cacongoutputcount) |
2904 | 2904 | fprintf(out, |
2948 | 2948 | |
2949 | 2949 | /* optional string attributes ... */ |
2950 | 2950 | |
2951 | return 0; | |
2952 | 2951 | } |
2953 | 2952 | |
2954 | 2953 | int osm_subn_write_conf_file(char *file_name, IN osm_subn_opt_t * p_opts) |
2962 | 2961 | return -1; |
2963 | 2962 | } |
2964 | 2963 | |
2965 | if (osm_subn_output_conf(opts_file, p_opts) < 0) | |
2966 | return -1; | |
2964 | osm_subn_output_conf(opts_file, p_opts); | |
2967 | 2965 | |
2968 | 2966 | fclose(opts_file); |
2969 | 2967 |
618 | 618 | int osm_switch_prepare_path_rebuild(IN osm_switch_t * p_sw, IN uint16_t max_lids) |
619 | 619 | { |
620 | 620 | uint8_t **hops; |
621 | uint8_t *new_lft; | |
621 | 622 | unsigned i; |
622 | 623 | |
623 | 624 | if (alloc_lft(p_sw, max_lids)) |
628 | 629 | |
629 | 630 | osm_switch_clear_hops(p_sw); |
630 | 631 | |
631 | if (!(p_sw->new_lft = realloc(p_sw->new_lft, p_sw->lft_size))) | |
632 | if (!(new_lft = realloc(p_sw->new_lft, p_sw->lft_size))) | |
632 | 633 | return -1; |
634 | ||
635 | p_sw->new_lft = new_lft; | |
633 | 636 | |
634 | 637 | memset(p_sw->new_lft, OSM_NO_PATH, p_sw->lft_size); |
635 | 638 |
1069 | 1069 | |
1070 | 1070 | if (ret < 0) { |
1071 | 1071 | OSM_LOG(&osm->log, OSM_LOG_ERROR, |
1072 | "%s: cannot build lid matrices.\n", r->name); | |
1072 | "%s: cannot build lid matrices\n", r->name); | |
1073 | 1073 | return ret; |
1074 | 1074 | } |
1075 | 1075 | |
1079 | 1079 | |
1080 | 1080 | if (ret < 0) { |
1081 | 1081 | OSM_LOG(&osm->log, OSM_LOG_ERROR, |
1082 | "%s: cannot build fwd tables.\n", r->name); | |
1082 | "%s: cannot build fwd tables\n", r->name); | |
1083 | 1083 | return ret; |
1084 | 1084 | } |
1085 | 1085 |
0 | %define RELEASE 1 | |
0 | %define RELEASE 3.3.19 | |
1 | 1 | %define rel %{?CUSTOM_RELEASE}%{!?CUSTOM_RELEASE:%RELEASE} |
2 | 2 | %if %{?_with_console_socket:1}%{!?_with_console_socket:0} |
3 | 3 | %define _enable_console_socket --enable-console-socket |
26 | 26 | |
27 | 27 | Summary: InfiniBand subnet manager and administration |
28 | 28 | Name: opensm |
29 | Version: 3.3.18 | |
29 | Version: 3.3.19 | |
30 | 30 | Release: %rel%{?dist} |
31 | 31 | License: GPLv2 or BSD |
32 | 32 | Group: System Environment/Daemons |
33 | 33 | URL: http://openfabrics.org/ |
34 | Source: http://www.openfabrics.org/downloads/management/opensm-3.3.18.tar.gz | |
34 | Source: http://www.openfabrics.org/downloads/management/opensm-3.3.19.tar.gz | |
35 | 35 | BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) |
36 | 36 | BuildRequires: libibumad-devel, libtool |
37 | 37 | Requires: %{name}-libs = %{version}-%{release}, logrotate |
43 | 43 | #include <time.h> |
44 | 44 | #include <dlfcn.h> |
45 | 45 | #include <stdint.h> |
46 | #include <opensm/osm_config.h> | |
46 | 47 | #include <complib/cl_qmap.h> |
47 | 48 | #include <complib/cl_passivelock.h> |
48 | 49 | #include <opensm/osm_version.h> |
450 | 450 | |
451 | 451 | case 'l': |
452 | 452 | opt.log_file = optarg; |
453 | printf("\tLog File:%s\n", opt.log_file); | |
453 | printf("\tLog File: %s\n", opt.log_file); | |
454 | 454 | break; |
455 | 455 | |
456 | 456 | case 'v': |
244 | 244 | "IB_SA_MAD_STATUS_INSUF_COMPS"; |
245 | 245 | static const char generic_or_str[] = " | "; |
246 | 246 | |
247 | static ib_api_status_t osmtest_create_db(IN osmtest_t * const p_osmt); | |
248 | ||
247 | 249 | const char *ib_get_mad_status_str(IN const ib_mad_t * const p_mad) |
248 | 250 | { |
249 | 251 | static char line[512]; |
5368 | 5370 | cl_hton64(p_osmt->local_port_gid.unicast.prefix); |
5369 | 5371 | |
5370 | 5372 | if (local_port->lid != local_port->sm_lid) { |
5373 | status = osmtest_create_db(p_osmt); | |
5374 | if (status != IB_SUCCESS) { | |
5375 | OSM_LOG(&p_osmt->log, OSM_LOG_ERROR, | |
5376 | "ERR 0155: Database creation failed (%s)\n", | |
5377 | ib_get_err_str(status)); | |
5378 | goto Exit; | |
5379 | } | |
5380 | ||
5371 | 5381 | p_tbl = &p_osmt->exp_subn.node_lid_tbl; |
5372 | p_node = (node_t *) cl_qmap_get(p_tbl, local_port->sm_lid); | |
5382 | p_node = (node_t *) cl_qmap_get(p_tbl, | |
5383 | cl_hton16(local_port->sm_lid)); | |
5373 | 5384 | if (p_node == (node_t *) cl_qmap_end(p_tbl)) { |
5374 | 5385 | OSM_LOG(&p_osmt->log, OSM_LOG_ERROR, |
5375 | 5386 | "ERR 0154: SM LID 0x%X doesn't exist\n", |