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 55BEGIN_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 */ 69const 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*/ 92const 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*/ 115const 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*/ 138const 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*/ 161const 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 172extern 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*/ 183static 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*/ 212void 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 217void 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*/ 260void 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 265void 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 298void 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 303void 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 309void 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 312void 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 315void 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 319void 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 323void 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 327void 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 331void 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 334void 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 337void 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 341void 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 345void 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 349void 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 353void 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 357void 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 361void 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 365void 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 369void 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 373void 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 377void 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 381void 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 385void 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 389void 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 393void 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 397void 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 401void 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 406void 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 412void 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 417void 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 424void 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 429void 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*/ 444void 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 448void 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*/ 480void 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 483void 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*/ 514void 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 518void 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*/ 550void 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 554void 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*/ 586const 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 600void 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 603void 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 607void 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 610void 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 613void 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 616void 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 619void 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 622void 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 625void 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*/ 638const 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 652const char *osm_get_port_state_str_fixed_width(IN uint8_t port_state); 653 654const char *osm_get_node_type_str_fixed_width(IN uint8_t node_type); 655 656const char *osm_get_manufacturer_str(IN uint64_t guid_ho); 657 658const char *osm_get_mtu_str(IN uint8_t mtu); 659 660const char *osm_get_lwa_str(IN uint8_t lwa); 661 662const 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*/ 674const 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*/ 697const 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*/ 720int 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*/ 744int 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*/ 770int 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*/ 798int 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*/ 823int 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*/ 850int 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 876END_C_DECLS 877#endif /* _OSM_HELPER_H_ */ 878