1 /*
2  * Copyright (c) 2004-2009 Voltaire, Inc. All rights reserved.
3  * Copyright (c) 2002-2011 Mellanox Technologies LTD. All rights reserved.
4  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
5  * Copyright (c) 2009 HNR Consulting. All rights reserved.
6  *
7  * This software is available to you under a choice of one of two
8  * licenses.  You may choose to be licensed under the terms of the GNU
9  * General Public License (GPL) Version 2, available from the file
10  * COPYING in the main directory of this source tree, or the
11  * OpenIB.org BSD license below:
12  *
13  *     Redistribution and use in source and binary forms, with or
14  *     without modification, are permitted provided that the following
15  *     conditions are met:
16  *
17  *      - Redistributions of source code must retain the above
18  *        copyright notice, this list of conditions and the following
19  *        disclaimer.
20  *
21  *      - Redistributions in binary form must reproduce the above
22  *        copyright notice, this list of conditions and the following
23  *        disclaimer in the documentation and/or other materials
24  *        provided with the distribution.
25  *
26  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
27  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
28  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
29  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
30  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
31  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
32  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
33  * SOFTWARE.
34  *
35  */
36 
37 #ifndef _OSM_HELPER_H_
38 #define _OSM_HELPER_H_
39 
40 #include <iba/ib_types.h>
41 #include <complib/cl_dispatcher.h>
42 #include <opensm/osm_base.h>
43 #include <opensm/osm_log.h>
44 #include <opensm/osm_msgdef.h>
45 #include <opensm/osm_path.h>
46 
47 #ifdef __cplusplus
48 #  define BEGIN_C_DECLS extern "C" {
49 #  define END_C_DECLS   }
50 #else				/* !__cplusplus */
51 #  define BEGIN_C_DECLS
52 #  define END_C_DECLS
53 #endif				/* __cplusplus */
54 
55 BEGIN_C_DECLS
56 /*
57  * Abstract:
58  * 	Declaration of helpful functions.
59  */
60 /****f* OpenSM: Helper/ib_get_sa_method_str
61  * NAME
62  *	ib_get_sa_method_str
63  *
64  * DESCRIPTION
65  *	Returns a string for the specified SA Method value.
66  *
67  * SYNOPSIS
68  */
69 const char *ib_get_sa_method_str(IN uint8_t method);
70 /*
71  * PARAMETERS
72  *	method
73  *		[in] Network order METHOD ID value.
74  *
75  * RETURN VALUES
76  *	Pointer to the method string.
77  *
78  * NOTES
79  *
80  * SEE ALSO
81  *********/
82 
83 /****f* OpenSM: Helper/ib_get_sm_method_str
84 * NAME
85 *	ib_get_sm_method_str
86 *
87 * DESCRIPTION
88 *	Returns a string for the specified SM Method value.
89 *
90 * SYNOPSIS
91 */
92 const char *ib_get_sm_method_str(IN uint8_t method);
93 /*
94 * PARAMETERS
95 *	method
96 *		[in] Network order METHOD ID value.
97 *
98 * RETURN VALUES
99 *	Pointer to the method string.
100 *
101 * NOTES
102 *
103 * SEE ALSO
104 *********/
105 
106 /****f* OpenSM: Helper/ib_get_sm_attr_str
107 * NAME
108 *	ib_get_sm_attr_str
109 *
110 * DESCRIPTION
111 *	Returns a string for the specified SM attribute value.
112 *
113 * SYNOPSIS
114 */
115 const char *ib_get_sm_attr_str(IN ib_net16_t attr);
116 /*
117 * PARAMETERS
118 *	attr
119 *		[in] Network order attribute ID value.
120 *
121 * RETURN VALUES
122 *	Pointer to the attribute string.
123 *
124 * NOTES
125 *
126 * SEE ALSO
127 *********/
128 
129 /****f* OpenSM: Helper/ib_get_sa_attr_str
130 * NAME
131 *	ib_get_sa_attr_str
132 *
133 * DESCRIPTION
134 *	Returns a string for the specified SA attribute value.
135 *
136 * SYNOPSIS
137 */
138 const char *ib_get_sa_attr_str(IN ib_net16_t attr);
139 /*
140 * PARAMETERS
141 *	attr
142 *		[in] Network order attribute ID value.
143 *
144 * RETURN VALUES
145 *	Pointer to the attribute string.
146 *
147 * NOTES
148 *
149 * SEE ALSO
150 *********/
151 
152 /****f* OpenSM: Helper/ib_get_trap_str
153 * NAME
154 *	ib_get_trap_str
155 *
156 * DESCRIPTION
157 *	Returns a name for the specified trap.
158 *
159 * SYNOPSIS
160 */
161 const char *ib_get_trap_str(uint16_t trap_num);
162 /*
163 * PARAMETERS
164 *	trap_num
165 *		[in] Network order trap number.
166 *
167 * RETURN VALUES
168 *	Name of the trap.
169 *
170 *********/
171 
172 extern const ib_gid_t ib_zero_gid;
173 
174 /****f* IBA Base: Types/ib_gid_is_notzero
175 * NAME
176 *	ib_gid_is_notzero
177 *
178 * DESCRIPTION
179 *	Returns a boolean indicating whether or not the GID is zero.
180 *
181 * SYNOPSIS
182 */
ib_gid_is_notzero(IN const ib_gid_t * p_gid)183 static inline boolean_t ib_gid_is_notzero(IN const ib_gid_t * p_gid)
184 {
185 	return memcmp(p_gid, &ib_zero_gid, sizeof(*p_gid));
186 }
187 
188 /*
189 * PARAMETERS
190 *	p_gid
191 *		[in] Pointer to the GID object.
192 *
193 * RETURN VALUES
194 *	Returns TRUE if GID is not zero.
195 *	FALSE otherwise.
196 *
197 * NOTES
198 *
199 * SEE ALSO
200 *	ib_gid_t
201 *********/
202 
203 /****f* OpenSM: Helper/osm_dump_port_info
204 * NAME
205 *	osm_dump_port_info
206 *
207 * DESCRIPTION
208 *	Dumps the PortInfo attribute to the log.
209 *
210 * SYNOPSIS
211 */
212 void osm_dump_port_info(IN osm_log_t * p_log, IN ib_net64_t node_guid,
213 			IN ib_net64_t port_guid, IN uint8_t port_num,
214 			IN const ib_port_info_t * p_pi,
215 			IN osm_log_level_t log_level);
216 
217 void osm_dump_port_info_v2(IN osm_log_t * p_log, IN ib_net64_t node_guid,
218 			   IN ib_net64_t port_guid, IN uint8_t port_num,
219 			   IN const ib_port_info_t * p_pi,
220 			   IN const int file_id,
221 			   IN osm_log_level_t log_level);
222 
223 /*
224 * PARAMETERS
225 *	p_log
226 *		[in] Pointer to the osm_log_t object
227 *
228 *	node_guid
229 *		[in] Node GUID that owns this port.
230 *
231 *	port_guid
232 *		[in] Port GUID for this port.
233 *
234 *	port_num
235 *		[in] Port number for this port.
236 *
237 *	p_pi
238 *		[in] Pointer to the PortInfo attribute
239 *
240 *	log_level
241 *		[in] Log verbosity level with which to dump the data.
242 *
243 * RETURN VALUES
244 *	None.
245 *
246 * NOTES
247 *
248 * SEE ALSO
249 *********/
250 
251 /****f* OpenSM: Helper/osm_dump_guid_info
252 * NAME
253 *	osm_dump_guid_info
254 *
255 * DESCRIPTION
256 *	Dumps the GUIDInfo attribute to the log.
257 *
258 * SYNOPSIS
259 */
260 void osm_dump_guid_info(IN osm_log_t * p_log, IN ib_net64_t node_guid,
261 			IN ib_net64_t port_guid, IN uint8_t block_num,
262 			IN const ib_guid_info_t * p_gi,
263 			IN osm_log_level_t log_level);
264 
265 void osm_dump_guid_info_v2(IN osm_log_t * p_log, IN ib_net64_t node_guid,
266 			   IN ib_net64_t port_guid, IN uint8_t block_num,
267 			   IN const ib_guid_info_t * p_gi,
268 			   IN const int file_id,
269 			   IN osm_log_level_t log_level);
270 /*
271 * PARAMETERS
272 *	p_log
273 *		[in] Pointer to the osm_log_t object.
274 *
275 *	node_guid
276 *		[in] Node GUID that owns this port.
277 *
278 *	port_guid
279 *		[in] Port GUID for this port.
280 *
281 *	block_num
282 *		[in] Block number.
283 *
284 *	p_gi
285 *		[in] Pointer to the GUIDInfo attribute.
286 *
287 *	log_level
288 *		[in] Log verbosity level with which to dump the data.
289 *
290 * RETURN VALUES
291 *	None.
292 *
293 * NOTES
294 *
295 * SEE ALSO
296 *********/
297 
298 void osm_dump_mlnx_ext_port_info(IN osm_log_t * p_log, IN ib_net64_t node_guid,
299 				 IN ib_net64_t port_guid, IN uint8_t port_num,
300 				 IN const ib_mlnx_ext_port_info_t * p_pi,
301 				 IN osm_log_level_t log_level);
302 
303 void osm_dump_mlnx_ext_port_info_v2(IN osm_log_t * p_log, IN ib_net64_t node_guid,
304 				    IN ib_net64_t port_guid, IN uint8_t port_num,
305 				    IN const ib_mlnx_ext_port_info_t * p_pi,
306 				    IN const int file_id,
307 				    IN osm_log_level_t log_level);
308 
309 void osm_dump_path_record(IN osm_log_t * p_log, IN const ib_path_rec_t * p_pr,
310 			  IN osm_log_level_t log_level);
311 
312 void osm_dump_path_record_v2(IN osm_log_t * p_log, IN const ib_path_rec_t * p_pr,
313 			     IN const int file_id, IN osm_log_level_t log_level);
314 
315 void osm_dump_multipath_record(IN osm_log_t * p_log,
316 			       IN const ib_multipath_rec_t * p_mpr,
317 			       IN osm_log_level_t log_level);
318 
319 void osm_dump_multipath_record_v2(IN osm_log_t * p_log,
320 				  IN const ib_multipath_rec_t * p_mpr,
321 				  IN const int file_id, IN osm_log_level_t log_level);
322 
323 void osm_dump_node_record(IN osm_log_t * p_log,
324 			  IN const ib_node_record_t * p_nr,
325 			  IN osm_log_level_t log_level);
326 
327 void osm_dump_node_record_v2(IN osm_log_t * p_log,
328 			     IN const ib_node_record_t * p_nr,
329 			     IN const int file_id, IN osm_log_level_t log_level);
330 
331 void osm_dump_mc_record(IN osm_log_t * p_log, IN const ib_member_rec_t * p_mcmr,
332 			IN osm_log_level_t log_level);
333 
334 void osm_dump_mc_record_v2(IN osm_log_t * p_log, IN const ib_member_rec_t * p_mcmr,
335 			   IN const int file_id, IN osm_log_level_t log_level);
336 
337 void osm_dump_link_record(IN osm_log_t * p_log,
338 			  IN const ib_link_record_t * p_lr,
339 			  IN osm_log_level_t log_level);
340 
341 void osm_dump_link_record_v2(IN osm_log_t * p_log,
342 			     IN const ib_link_record_t * p_lr,
343 			     IN const int file_id, IN osm_log_level_t log_level);
344 
345 void osm_dump_service_record(IN osm_log_t * p_log,
346 			     IN const ib_service_record_t * p_sr,
347 			     IN osm_log_level_t log_level);
348 
349 void osm_dump_service_record_v2(IN osm_log_t * p_log,
350 				IN const ib_service_record_t * p_sr,
351 				IN const int file_id, IN osm_log_level_t log_level);
352 
353 void osm_dump_portinfo_record(IN osm_log_t * p_log,
354 			      IN const ib_portinfo_record_t * p_pir,
355 			      IN osm_log_level_t log_level);
356 
357 void osm_dump_portinfo_record_v2(IN osm_log_t * p_log,
358 				 IN const ib_portinfo_record_t * p_pir,
359 				 IN const int file_id, IN osm_log_level_t log_level);
360 
361 void osm_dump_guidinfo_record(IN osm_log_t * p_log,
362 			      IN const ib_guidinfo_record_t * p_gir,
363 			      IN osm_log_level_t log_level);
364 
365 void osm_dump_guidinfo_record_v2(IN osm_log_t * p_log,
366 				 IN const ib_guidinfo_record_t * p_gir,
367 				 IN const int file_id, IN osm_log_level_t log_level);
368 
369 void osm_dump_inform_info(IN osm_log_t * p_log,
370 			  IN const ib_inform_info_t * p_ii,
371 			  IN osm_log_level_t log_level);
372 
373 void osm_dump_inform_info_v2(IN osm_log_t * p_log,
374 			     IN const ib_inform_info_t * p_ii,
375 			     IN const int file_id, IN osm_log_level_t log_level);
376 
377 void osm_dump_inform_info_record(IN osm_log_t * p_log,
378 				 IN const ib_inform_info_record_t * p_iir,
379 				 IN osm_log_level_t log_level);
380 
381 void osm_dump_inform_info_record_v2(IN osm_log_t * p_log,
382 				    IN const ib_inform_info_record_t * p_iir,
383 				    IN const int file_id, IN osm_log_level_t log_level);
384 
385 void osm_dump_switch_info_record(IN osm_log_t * p_log,
386 				 IN const ib_switch_info_record_t * p_sir,
387 				 IN osm_log_level_t log_level);
388 
389 void osm_dump_switch_info_record_v2(IN osm_log_t * p_log,
390 				    IN const ib_switch_info_record_t * p_sir,
391 				    IN const int file_id, IN osm_log_level_t log_level);
392 
393 void osm_dump_sm_info_record(IN osm_log_t * p_log,
394 			     IN const ib_sminfo_record_t * p_smir,
395 			     IN osm_log_level_t log_level);
396 
397 void osm_dump_sm_info_record_v2(IN osm_log_t * p_log,
398 				IN const ib_sminfo_record_t * p_smir,
399 				IN const int file_id, IN osm_log_level_t log_level);
400 
401 void osm_dump_pkey_block(IN osm_log_t * p_log, IN uint64_t port_guid,
402 			 IN uint16_t block_num, IN uint8_t port_num,
403 			 IN const ib_pkey_table_t * p_pkey_tbl,
404 			 IN osm_log_level_t log_level);
405 
406 void osm_dump_pkey_block_v2(IN osm_log_t * p_log, IN uint64_t port_guid,
407 			    IN uint16_t block_num, IN uint8_t port_num,
408 			    IN const ib_pkey_table_t * p_pkey_tbl,
409 			    IN const int file_id,
410 			    IN osm_log_level_t log_level);
411 
412 void osm_dump_slvl_map_table(IN osm_log_t * p_log, IN uint64_t port_guid,
413 			     IN uint8_t in_port_num, IN uint8_t out_port_num,
414 			     IN const ib_slvl_table_t * p_slvl_tbl,
415 			     IN osm_log_level_t log_level);
416 
417 void osm_dump_slvl_map_table_v2(IN osm_log_t * p_log, IN uint64_t port_guid,
418 				IN uint8_t in_port_num, IN uint8_t out_port_num,
419 				IN const ib_slvl_table_t * p_slvl_tbl,
420 				IN const int file_id,
421 				IN osm_log_level_t log_level);
422 
423 
424 void osm_dump_vl_arb_table(IN osm_log_t * p_log, IN uint64_t port_guid,
425 			   IN uint8_t block_num, IN uint8_t port_num,
426 			   IN const ib_vl_arb_table_t * p_vla_tbl,
427 			   IN osm_log_level_t log_level);
428 
429 void osm_dump_vl_arb_table_v2(IN osm_log_t * p_log, IN uint64_t port_guid,
430 			      IN uint8_t block_num, IN uint8_t port_num,
431 			      IN const ib_vl_arb_table_t * p_vla_tbl,
432 			      IN const int file_id,
433 			      IN osm_log_level_t log_level);
434 
435 /****f* OpenSM: Helper/osm_dump_port_info
436 * NAME
437 *	osm_dump_port_info
438 *
439 * DESCRIPTION
440 *	Dumps the PortInfo attribute to the log.
441 *
442 * SYNOPSIS
443 */
444 void osm_dump_node_info(IN osm_log_t * p_log,
445 			IN const ib_node_info_t * p_ni,
446 			IN osm_log_level_t log_level);
447 
448 void osm_dump_node_info_v2(IN osm_log_t * p_log,
449 			   IN const ib_node_info_t * p_ni,
450 			   IN const int file_id,
451 			   IN osm_log_level_t log_level);
452 /*
453 * PARAMETERS
454 *	p_log
455 *		[in] Pointer to the osm_log_t object
456 *
457 *	p_ni
458 *		[in] Pointer to the NodeInfo attribute
459 *
460 *	log_level
461 *		[in] Log verbosity level with which to dump the data.
462 *
463 * RETURN VALUES
464 *	None.
465 *
466 * NOTES
467 *
468 * SEE ALSO
469 *********/
470 
471 /****f* OpenSM: Helper/osm_dump_sm_info
472 * NAME
473 *	osm_dump_sm_info
474 *
475 * DESCRIPTION
476 *	Dumps the SMInfo attribute to the log.
477 *
478 * SYNOPSIS
479 */
480 void osm_dump_sm_info(IN osm_log_t * p_log, IN const ib_sm_info_t * p_smi,
481 		      IN osm_log_level_t log_level);
482 
483 void osm_dump_sm_info_v2(IN osm_log_t * p_log, IN const ib_sm_info_t * p_smi,
484 			 IN const int file_id, IN osm_log_level_t log_level);
485 
486 /*
487 * PARAMETERS
488 *	p_log
489 *		[in] Pointer to the osm_log_t object
490 *
491 *	p_smi
492 *		[in] Pointer to the SMInfo attribute
493 *
494 *	log_level
495 *		[in] Log verbosity level with which to dump the data.
496 *
497 * RETURN VALUES
498 *	None.
499 *
500 * NOTES
501 *
502 * SEE ALSO
503 *********/
504 
505 /****f* OpenSM: Helper/osm_dump_switch_info
506 * NAME
507 *	osm_dump_switch_info
508 *
509 * DESCRIPTION
510 *	Dumps the SwitchInfo attribute to the log.
511 *
512 * SYNOPSIS
513 */
514 void osm_dump_switch_info(IN osm_log_t * p_log,
515 			  IN const ib_switch_info_t * p_si,
516 			  IN osm_log_level_t log_level);
517 
518 void osm_dump_switch_info_v2(IN osm_log_t * p_log,
519 			     IN const ib_switch_info_t * p_si,
520 			     IN const int file_id,
521 			     IN osm_log_level_t log_level);
522 /*
523 * PARAMETERS
524 *	p_log
525 *		[in] Pointer to the osm_log_t object
526 *
527 *	p_si
528 *		[in] Pointer to the SwitchInfo attribute
529 *
530 *	log_level
531 *		[in] Log verbosity level with which to dump the data.
532 *
533 * RETURN VALUES
534 *	None.
535 *
536 * NOTES
537 *
538 * SEE ALSO
539 *********/
540 
541 /****f* OpenSM: Helper/osm_dump_notice
542 * NAME
543 *	osm_dump_notice
544 *
545 * DESCRIPTION
546 *	Dumps the Notice attribute to the log.
547 *
548 * SYNOPSIS
549 */
550 void osm_dump_notice(IN osm_log_t * p_log,
551 		     IN const ib_mad_notice_attr_t * p_ntci,
552 		     IN osm_log_level_t log_level);
553 
554 void osm_dump_notice_v2(IN osm_log_t * p_log,
555 			IN const ib_mad_notice_attr_t * p_ntci,
556 			IN const int file_id,
557 			IN osm_log_level_t log_level);
558 /*
559 * PARAMETERS
560 *	p_log
561 *		[in] Pointer to the osm_log_t object
562 *
563 *	p_ntci
564 *		[in] Pointer to the Notice attribute
565 *
566 *	log_level
567 *		[in] Log verbosity level with which to dump the data.
568 *
569 * RETURN VALUES
570 *	None.
571 *
572 * NOTES
573 *
574 * SEE ALSO
575 *********/
576 
577 /****f* IBA Base: Types/osm_get_disp_msg_str
578 * NAME
579 *	osm_get_disp_msg_str
580 *
581 * DESCRIPTION
582 *	Returns a string for the specified Dispatcher message.
583 *
584 * SYNOPSIS
585 */
586 const char *osm_get_disp_msg_str(IN cl_disp_msgid_t msg);
587 /*
588 * PARAMETERS
589 *	msg
590 *		[in] Dispatcher message ID value.
591 *
592 * RETURN VALUES
593 *	Pointer to the message description string.
594 *
595 * NOTES
596 *
597 * SEE ALSO
598 *********/
599 
600 void osm_dump_dr_path(IN osm_log_t * p_log, IN const osm_dr_path_t * p_path,
601 		      IN osm_log_level_t level);
602 
603 void osm_dump_dr_path_v2(IN osm_log_t * p_log, IN const osm_dr_path_t * p_path,
604 			 IN const int file_id, IN osm_log_level_t level);
605 
606 
607 void osm_dump_smp_dr_path(IN osm_log_t * p_log, IN const ib_smp_t * p_smp,
608 			  IN osm_log_level_t level);
609 
610 void osm_dump_smp_dr_path_v2(IN osm_log_t * p_log, IN const ib_smp_t * p_smp,
611 			     IN const int file_id, IN osm_log_level_t level);
612 
613 void osm_dump_dr_smp(IN osm_log_t * p_log, IN const ib_smp_t * p_smp,
614 		     IN osm_log_level_t level);
615 
616 void osm_dump_dr_smp_v2(IN osm_log_t * p_log, IN const ib_smp_t * p_smp,
617 			IN const int file_id, IN osm_log_level_t level);
618 
619 void osm_dump_sa_mad(IN osm_log_t * p_log, IN const ib_sa_mad_t * p_smp,
620 		     IN osm_log_level_t level);
621 
622 void osm_dump_sa_mad_v2(IN osm_log_t * p_log, IN const ib_sa_mad_t * p_smp,
623 			IN const int file_id, IN osm_log_level_t level);
624 
625 void osm_dump_dr_path_as_buf(IN size_t max_len, IN const osm_dr_path_t * p_path,
626 			     OUT char* buf);
627 
628 
629 /****f* IBA Base: Types/osm_get_sm_signal_str
630 * NAME
631 *	osm_get_sm_signal_str
632 *
633 * DESCRIPTION
634 *	Returns a string for the specified SM state.
635 *
636 * SYNOPSIS
637 */
638 const char *osm_get_sm_signal_str(IN osm_signal_t signal);
639 /*
640 * PARAMETERS
641 *	state
642 *		[in] Signal value
643 *
644 * RETURN VALUES
645 *	Pointer to the signal description string.
646 *
647 * NOTES
648 *
649 * SEE ALSO
650 *********/
651 
652 const char *osm_get_port_state_str_fixed_width(IN uint8_t port_state);
653 
654 const char *osm_get_node_type_str_fixed_width(IN uint8_t node_type);
655 
656 const char *osm_get_manufacturer_str(IN uint64_t guid_ho);
657 
658 const char *osm_get_mtu_str(IN uint8_t mtu);
659 
660 const char *osm_get_lwa_str(IN uint8_t lwa);
661 
662 const char *osm_get_lsa_str(IN uint8_t lsa, IN uint8_t lsea, IN uint8_t state,
663 			    IN uint8_t fdr10);
664 
665 /****f* IBA Base: Types/osm_get_sm_mgr_signal_str
666 * NAME
667 *	osm_get_sm_mgr_signal_str
668 *
669 * DESCRIPTION
670 *	Returns a string for the specified SM manager signal.
671 *
672 * SYNOPSIS
673 */
674 const char *osm_get_sm_mgr_signal_str(IN osm_sm_signal_t signal);
675 /*
676 * PARAMETERS
677 *	signal
678 *		[in] SM manager signal
679 *
680 * RETURN VALUES
681 *	Pointer to the signal description string.
682 *
683 * NOTES
684 *
685 * SEE ALSO
686 *********/
687 
688 /****f* IBA Base: Types/osm_get_sm_mgr_state_str
689 * NAME
690 *	osm_get_sm_mgr_state_str
691 *
692 * DESCRIPTION
693 *	Returns a string for the specified SM manager state.
694 *
695 * SYNOPSIS
696 */
697 const char *osm_get_sm_mgr_state_str(IN uint16_t state);
698 /*
699 * PARAMETERS
700 *	state
701 *		[in] SM manager state
702 *
703 * RETURN VALUES
704 *	Pointer to the state description string.
705 *
706 * NOTES
707 *
708 * SEE ALSO
709 *********/
710 
711 /****f* IBA Base: Types/ib_mtu_is_valid
712 * NAME
713 *	ib_mtu_is_valid
714 *
715 * DESCRIPTION
716 *	Validates encoded MTU
717 *
718 * SYNOPSIS
719 */
720 int ib_mtu_is_valid(IN const int mtu);
721 /*
722 * PARAMETERS
723 *	mtu
724 *		[in] Encoded path mtu.
725 *
726 * RETURN VALUES
727 *	Returns an int indicating mtu is valid (1)
728 *	or invalid (0).
729 *
730 * NOTES
731 *
732 * SEE ALSO
733 *********/
734 
735 /****f* IBA Base: Types/ib_rate_is_valid
736 * NAME
737 *	ib_rate_is_valid
738 *
739 * DESCRIPTION
740 *	Validates encoded rate
741 *
742 * SYNOPSIS
743 */
744 int ib_rate_is_valid(IN const int rate);
745 /*
746 * PARAMETERS
747 *	rate
748 *		[in] Encoded path rate.
749 *
750 * RETURN VALUES
751 *	Returns an int indicating rate is valid (1)
752 *	or invalid (0).
753 *
754 * NOTES
755 *
756 * SEE ALSO
757 *********/
758 
759 /****f* IBA Base: Types/ib_path_compare_rates
760 * NAME
761 *	ib_path_compare_rates
762 *
763 * DESCRIPTION
764 *	Compares the encoded values for two path rates and
765 *	return value is based on the ordered comparison of
766 *	the path rates (or path rate equivalents).
767 *
768 * SYNOPSIS
769 */
770 int ib_path_compare_rates(IN const int rate1, IN const int rate2);
771 
772 /*
773 * PARAMETERS
774 *	rate1
775 *		[in] Encoded path rate 1.
776 *
777 *	rate2
778 *		[in] Encoded path rate 2.
779 *
780 * RETURN VALUES
781 *	Returns an int indicating less than (-1), equal to (0), or
782 *	greater than (1) rate1 as compared with rate2.
783 *
784 * NOTES
785 *
786 * SEE ALSO
787 *********/
788 
789 /****f* IBA Base: Types/ib_path_rate_get_prev
790 * NAME
791 *	ib_path_rate_get_prev
792 *
793 * DESCRIPTION
794 *	Obtains encoded rate for the rate previous to the one requested.
795 *
796 * SYNOPSIS
797 */
798 int ib_path_rate_get_prev(IN const int rate);
799 
800 /*
801 * PARAMETERS
802 *	rate
803 *		[in] Encoded path rate.
804 *
805 * RETURN VALUES
806 *	Returns an int indicating encoded rate or
807 *	0 if none can be found.
808 *
809 * NOTES
810 *
811 * SEE ALSO
812 *********/
813 
814 /****f* IBA Base: Types/ib_path_rate_get_next
815 * NAME
816 *	ib_path_rate_get_next
817 *
818 * DESCRIPTION
819 *	Obtains encoded rate for the rate subsequent to the one requested.
820 *
821 * SYNOPSIS
822 */
823 int ib_path_rate_get_next(IN const int rate);
824 
825 /*
826 * PARAMETERS
827 *	rate
828 *		[in] Encoded path rate.
829 *
830 * RETURN VALUES
831 *	Returns an int indicating encoded rate or
832 *	0 if none can be found.
833 *
834 * NOTES
835 *
836 * SEE ALSO
837 *********/
838 
839 /****f* OpenSM: Helper/sprint_uint8_arr
840 * NAME
841 *	sprint_uint8_arr
842 *
843 * DESCRIPTION
844 *	Create the comma-separated string of numbers
845 *	from input array of uint8 numbers
846 *	(e.g. "1,2,3,4")
847 *
848 * SYNOPSIS
849 */
850 int sprint_uint8_arr(IN char *buf, IN size_t size,
851 		     IN const uint8_t * arr, IN size_t len);
852 
853 /*
854 * PARAMETERS
855 *	buf
856 *		[in] Pointer to the output buffer
857 *
858 *	size
859 *		[in] Size of the output buffer
860 *
861 *	arr
862 *		[in] Pointer to the input array of uint8
863 *
864 *	len
865 *		[in] Size of the input array
866 *
867 * RETURN VALUES
868 *	Return the number of characters printed to the buffer
869 *
870 * NOTES
871 *
872 * SEE ALSO
873 *********/
874 
875 
876 END_C_DECLS
877 #endif				/* _OSM_HELPER_H_ */
878