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 * 6 * This software is available to you under a choice of one of two 7 * licenses. You may choose to be licensed under the terms of the GNU 8 * General Public License (GPL) Version 2, available from the file 9 * COPYING in the main directory of this source tree, or the 10 * OpenIB.org BSD license below: 11 * 12 * Redistribution and use in source and binary forms, with or 13 * without modification, are permitted provided that the following 14 * conditions are met: 15 * 16 * - Redistributions of source code must retain the above 17 * copyright notice, this list of conditions and the following 18 * disclaimer. 19 * 20 * - Redistributions in binary form must reproduce the above 21 * copyright notice, this list of conditions and the following 22 * disclaimer in the documentation and/or other materials 23 * provided with the distribution. 24 * 25 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 26 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 27 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 28 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 29 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 30 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 31 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 32 * SOFTWARE. 33 * 34 */ 35 36 /* 37 * Abstract: 38 * Declaration of osm_sm_t. 39 * This object represents an IBA subnet. 40 * This object is part of the OpenSM family of objects. 41 */ 42 43 #ifndef _OSM_SM_H_ 44 #define _OSM_SM_H_ 45 46 #include <iba/ib_types.h> 47 #include <complib/cl_passivelock.h> 48 #include <complib/cl_event.h> 49 #include <complib/cl_thread.h> 50 #include <complib/cl_dispatcher.h> 51 #include <complib/cl_event_wheel.h> 52 #include <vendor/osm_vendor_api.h> 53 #include <opensm/osm_stats.h> 54 #include <opensm/osm_subnet.h> 55 #include <opensm/osm_vl15intf.h> 56 #include <opensm/osm_mad_pool.h> 57 #include <opensm/osm_log.h> 58 #include <opensm/osm_sm_mad_ctrl.h> 59 #include <opensm/osm_lid_mgr.h> 60 #include <opensm/osm_ucast_mgr.h> 61 #include <opensm/osm_port.h> 62 #include <opensm/osm_db.h> 63 #include <opensm/osm_remote_sm.h> 64 #include <opensm/osm_multicast.h> 65 66 #ifdef __cplusplus 67 # define BEGIN_C_DECLS extern "C" { 68 # define END_C_DECLS } 69 #else /* !__cplusplus */ 70 # define BEGIN_C_DECLS 71 # define END_C_DECLS 72 #endif /* __cplusplus */ 73 74 BEGIN_C_DECLS 75 /****h* OpenSM/SM 76 * NAME 77 * SM 78 * 79 * DESCRIPTION 80 * The SM object encapsulates the information needed by the 81 * OpenSM to instantiate a subnet manager. The OpenSM allocates 82 * one SM object per subnet manager. 83 * 84 * The SM object is thread safe. 85 * 86 * This object should be treated as opaque and should 87 * be manipulated only through the provided functions. 88 * 89 * AUTHOR 90 * Steve King, Intel 91 * 92 *********/ 93 /****s* OpenSM: SM/osm_sm_t 94 * NAME 95 * osm_sm_t 96 * 97 * DESCRIPTION 98 * Subnet Manager structure. 99 * 100 * This object should be treated as opaque and should 101 * be manipulated only through the provided functions. 102 * 103 * SYNOPSIS 104 */ 105 typedef struct osm_sm { 106 osm_thread_state_t thread_state; 107 unsigned signal_mask; 108 cl_spinlock_t signal_lock; 109 cl_spinlock_t state_lock; 110 cl_event_t signal_event; 111 cl_event_t subnet_up_event; 112 cl_timer_t sweep_timer; 113 cl_timer_t polling_timer; 114 cl_event_wheel_t trap_aging_tracker; 115 cl_thread_t sweeper; 116 unsigned master_sm_found; 117 uint32_t retry_number; 118 ib_net64_t master_sm_guid; 119 ib_net64_t polling_sm_guid; 120 osm_subn_t *p_subn; 121 osm_db_t *p_db; 122 osm_vendor_t *p_vendor; 123 osm_log_t *p_log; 124 osm_mad_pool_t *p_mad_pool; 125 osm_vl15_t *p_vl15; 126 cl_dispatcher_t *p_disp; 127 cl_plock_t *p_lock; 128 atomic32_t sm_trans_id; 129 uint16_t mlids_init_max; 130 unsigned mlids_req_max; 131 uint8_t *mlids_req; 132 osm_sm_mad_ctrl_t mad_ctrl; 133 osm_lid_mgr_t lid_mgr; 134 osm_ucast_mgr_t ucast_mgr; 135 cl_disp_reg_handle_t sweep_fail_disp_h; 136 cl_disp_reg_handle_t ni_disp_h; 137 cl_disp_reg_handle_t pi_disp_h; 138 cl_disp_reg_handle_t gi_disp_h; 139 cl_disp_reg_handle_t nd_disp_h; 140 cl_disp_reg_handle_t si_disp_h; 141 cl_disp_reg_handle_t lft_disp_h; 142 cl_disp_reg_handle_t mft_disp_h; 143 cl_disp_reg_handle_t sm_info_disp_h; 144 cl_disp_reg_handle_t trap_disp_h; 145 cl_disp_reg_handle_t slvl_disp_h; 146 cl_disp_reg_handle_t vla_disp_h; 147 cl_disp_reg_handle_t pkey_disp_h; 148 cl_disp_reg_handle_t mlnx_epi_disp_h; 149 } osm_sm_t; 150 /* 151 * FIELDS 152 * p_subn 153 * Pointer to the Subnet object for this subnet. 154 * 155 * p_db 156 * Pointer to the database (persistency) object 157 * 158 * p_vendor 159 * Pointer to the vendor specific interfaces object. 160 * 161 * p_log 162 * Pointer to the log object. 163 * 164 * p_mad_pool 165 * Pointer to the MAD pool. 166 * 167 * p_vl15 168 * Pointer to the VL15 interface. 169 * 170 * mad_ctrl 171 * MAD Controller. 172 * 173 * p_disp 174 * Pointer to the Dispatcher. 175 * 176 * p_lock 177 * Pointer to the serializing lock. 178 * 179 * SEE ALSO 180 * SM object 181 *********/ 182 183 /****f* OpenSM: SM/osm_sm_construct 184 * NAME 185 * osm_sm_construct 186 * 187 * DESCRIPTION 188 * This function constructs an SM object. 189 * 190 * SYNOPSIS 191 */ 192 void osm_sm_construct(IN osm_sm_t * p_sm); 193 /* 194 * PARAMETERS 195 * p_sm 196 * [in] Pointer to a SM object to construct. 197 * 198 * RETURN VALUE 199 * This function does not return a value. 200 * 201 * NOTES 202 * Allows calling osm_sm_init, osm_sm_destroy 203 * 204 * Calling osm_sm_construct is a prerequisite to calling any other 205 * method except osm_sm_init. 206 * 207 * SEE ALSO 208 * SM object, osm_sm_init, osm_sm_destroy 209 *********/ 210 211 /****f* OpenSM: SM/osm_sm_shutdown 212 * NAME 213 * osm_sm_shutdown 214 * 215 * DESCRIPTION 216 * The osm_sm_shutdown function shutdowns an SM, stopping the sweeper 217 * and unregistering all messages from the dispatcher 218 * 219 * SYNOPSIS 220 */ 221 void osm_sm_shutdown(IN osm_sm_t * p_sm); 222 /* 223 * PARAMETERS 224 * p_sm 225 * [in] Pointer to a SM object to shutdown. 226 * 227 * RETURN VALUE 228 * This function does not return a value. 229 * 230 * SEE ALSO 231 * SM object, osm_sm_construct, osm_sm_init 232 *********/ 233 234 /****f* OpenSM: SM/osm_sm_destroy 235 * NAME 236 * osm_sm_destroy 237 * 238 * DESCRIPTION 239 * The osm_sm_destroy function destroys an SM, releasing 240 * all resources. 241 * 242 * SYNOPSIS 243 */ 244 void osm_sm_destroy(IN osm_sm_t * p_sm); 245 /* 246 * PARAMETERS 247 * p_sm 248 * [in] Pointer to a SM object to destroy. 249 * 250 * RETURN VALUE 251 * This function does not return a value. 252 * 253 * NOTES 254 * Performs any necessary cleanup of the specified SM object. 255 * Further operations should not be attempted on the destroyed object. 256 * This function should only be called after a call to osm_sm_construct or 257 * osm_sm_init. 258 * 259 * SEE ALSO 260 * SM object, osm_sm_construct, osm_sm_init 261 *********/ 262 263 /****f* OpenSM: SM/osm_sm_init 264 * NAME 265 * osm_sm_init 266 * 267 * DESCRIPTION 268 * The osm_sm_init function initializes a SM object for use. 269 * 270 * SYNOPSIS 271 */ 272 ib_api_status_t osm_sm_init(IN osm_sm_t * p_sm, IN osm_subn_t * p_subn, 273 IN osm_db_t * p_db, IN osm_vendor_t * p_vendor, 274 IN osm_mad_pool_t * p_mad_pool, 275 IN osm_vl15_t * p_vl15, IN osm_log_t * p_log, 276 IN osm_stats_t * p_stats, 277 IN cl_dispatcher_t * p_disp, IN cl_plock_t * p_lock); 278 /* 279 * PARAMETERS 280 * p_sm 281 * [in] Pointer to an osm_sm_t object to initialize. 282 * 283 * p_subn 284 * [in] Pointer to the Subnet object for this subnet. 285 * 286 * p_vendor 287 * [in] Pointer to the vendor specific interfaces object. 288 * 289 * p_mad_pool 290 * [in] Pointer to the MAD pool. 291 * 292 * p_vl15 293 * [in] Pointer to the VL15 interface. 294 * 295 * p_log 296 * [in] Pointer to the log object. 297 * 298 * p_stats 299 * [in] Pointer to the statistics object. 300 * 301 * p_disp 302 * [in] Pointer to the OpenSM central Dispatcher. 303 * 304 * p_lock 305 * [in] Pointer to the OpenSM serializing lock. 306 * 307 * RETURN VALUES 308 * IB_SUCCESS if the SM object was initialized successfully. 309 * 310 * NOTES 311 * Allows calling other SM methods. 312 * 313 * SEE ALSO 314 * SM object, osm_sm_construct, osm_sm_destroy 315 *********/ 316 317 /****f* OpenSM: SM/osm_sm_signal 318 * NAME 319 * osm_sm_signal 320 * 321 * DESCRIPTION 322 * Signal event to SM 323 * 324 * SYNOPSIS 325 */ 326 void osm_sm_signal(IN osm_sm_t * p_sm, osm_signal_t signal); 327 /* 328 * PARAMETERS 329 * p_sm 330 * [in] Pointer to an osm_sm_t object. 331 * 332 * signal 333 * [in] sm signal number. 334 * 335 * NOTES 336 * 337 * SEE ALSO 338 * SM object 339 *********/ 340 341 /****f* OpenSM: SM/osm_sm_sweep 342 * NAME 343 * osm_sm_sweep 344 * 345 * DESCRIPTION 346 * Initiates a subnet sweep. 347 * 348 * SYNOPSIS 349 */ 350 void osm_sm_sweep(IN osm_sm_t * p_sm); 351 /* 352 * PARAMETERS 353 * p_sm 354 * [in] Pointer to an osm_sm_t object. 355 * 356 * RETURN VALUES 357 * IB_SUCCESS if the sweep completed successfully. 358 * 359 * NOTES 360 * 361 * SEE ALSO 362 * SM object 363 *********/ 364 365 /****f* OpenSM: SM/osm_sm_bind 366 * NAME 367 * osm_sm_bind 368 * 369 * DESCRIPTION 370 * Binds the sm object to a port guid. 371 * 372 * SYNOPSIS 373 */ 374 ib_api_status_t osm_sm_bind(IN osm_sm_t * p_sm, IN ib_net64_t port_guid); 375 /* 376 * PARAMETERS 377 * p_sm 378 * [in] Pointer to an osm_sm_t object to bind. 379 * 380 * port_guid 381 * [in] Local port GUID with which to bind. 382 * 383 * 384 * RETURN VALUES 385 * None 386 * 387 * NOTES 388 * A given SM object can only be bound to one port at a time. 389 * 390 * SEE ALSO 391 *********/ 392 393 /****f* OpenSM: SM/osm_req_get 394 * NAME 395 * osm_req_get 396 * 397 * DESCRIPTION 398 * Starts the process to transmit a directed route request for 399 * the attribute. 400 * 401 * SYNOPSIS 402 */ 403 ib_api_status_t osm_req_get(IN osm_sm_t * sm, IN const osm_dr_path_t * p_path, 404 IN ib_net16_t attr_id, IN ib_net32_t attr_mod, 405 IN boolean_t find_mkey, ib_net64_t m_key, 406 IN cl_disp_msgid_t err_msg, 407 IN const osm_madw_context_t * p_context); 408 /* 409 * PARAMETERS 410 * sm 411 * [in] Pointer to an osm_sm_t object. 412 * 413 * p_path 414 * [in] Pointer to the directed route path to the node 415 * from which to retrieve the attribute. 416 * 417 * attr_id 418 * [in] Attribute ID to request. 419 * 420 * attr_mod 421 * [in] Attribute modifier for this request. 422 * 423 * find_mkey 424 * [in] Flag to indicate whether the M_Key should be looked up for 425 * this MAD. 426 * m_key 427 * [in] M_Key value to be send with this MAD. Applied, only when 428 * find_mkey is FALSE. 429 * 430 * err_msg 431 * [in] Message id with which to post this MAD if an error occurs. 432 * 433 * p_context 434 * [in] Mad wrapper context structure to be copied into the wrapper 435 * context, and thus visible to the recipient of the response. 436 * 437 * RETURN VALUES 438 * IB_SUCCESS if the request was successful. 439 * 440 * NOTES 441 * This function asynchronously requests the specified attribute. 442 * The response from the node will be routed through the Dispatcher 443 * to the appropriate receive controller object. 444 *********/ 445 446 /****f* OpenSM: SM/osm_send_req_mad 447 * NAME 448 * osm_send_req_mad 449 * 450 * DESCRIPTION 451 * Starts the process to transmit a preallocated/predefined directed route 452 * Set() request. 453 * 454 * SYNOPSIS 455 */ 456 void osm_send_req_mad(IN osm_sm_t * sm, IN osm_madw_t *p_madw); 457 /* 458 * PARAMETERS 459 * sm 460 * [in] Pointer to an osm_sm_t object. 461 * p_madw 462 * [in] Pointer to a preallocated MAD buffer 463 * 464 *********/ 465 466 /***f* OpenSM: SM/osm_prepare_req_set 467 * NAME 468 * osm_prepare_req_set 469 * 470 * DESCRIPTION 471 * Preallocate and fill a directed route Set() MAD w/o sending it. 472 * 473 * SYNOPSIS 474 */ 475 osm_madw_t *osm_prepare_req_set(IN osm_sm_t * sm, IN const osm_dr_path_t * p_path, 476 IN const uint8_t * p_payload, 477 IN size_t payload_size, IN ib_net16_t attr_id, 478 IN ib_net32_t attr_mod, IN boolean_t find_mkey, 479 IN ib_net64_t m_key, IN cl_disp_msgid_t err_msg, 480 IN const osm_madw_context_t * p_context); 481 /* 482 * PARAMETERS 483 * sm 484 * [in] Pointer to an osm_sm_t object. 485 * 486 * p_path 487 * [in] Pointer to the directed route path of the recipient. 488 * 489 * p_payload 490 * [in] Pointer to the SMP payload to send. 491 * 492 * payload_size 493 * [in] The size of the payload to be copied to the SMP data field. 494 * 495 * attr_id 496 * [in] Attribute ID to request. 497 * 498 * attr_mod 499 * [in] Attribute modifier for this request. 500 * 501 * find_mkey 502 * [in] Flag to indicate whether the M_Key should be looked up for 503 * this MAD. 504 * m_key 505 * [in] M_Key value to be send with this MAD. Applied, only when 506 * find_mkey is FALSE. 507 * 508 * err_msg 509 * [in] Message id with which to post this MAD if an error occurs. 510 * 511 * p_context 512 * [in] Mad wrapper context structure to be copied into the wrapper 513 * context, and thus visible to the recipient of the response. 514 * 515 * RETURN VALUES 516 * Pointer the MAD buffer in case of success and NULL in case of failure. 517 * 518 *********/ 519 520 /****f* OpenSM: SM/osm_req_set 521 * NAME 522 * osm_req_set 523 * 524 * DESCRIPTION 525 * Starts the process to transmit a directed route Set() request. 526 * 527 * SYNOPSIS 528 */ 529 ib_api_status_t osm_req_set(IN osm_sm_t * sm, IN const osm_dr_path_t * p_path, 530 IN const uint8_t * p_payload, 531 IN size_t payload_size, IN ib_net16_t attr_id, 532 IN ib_net32_t attr_mod, IN boolean_t find_mkey, 533 IN ib_net64_t m_key, IN cl_disp_msgid_t err_msg, 534 IN const osm_madw_context_t * p_context); 535 /* 536 * PARAMETERS 537 * sm 538 * [in] Pointer to an osm_sm_t object. 539 * 540 * p_path 541 * [in] Pointer to the directed route path of the recipient. 542 * 543 * p_payload 544 * [in] Pointer to the SMP payload to send. 545 * 546 * payload_size 547 * [in] The size of the payload to be copied to the SMP data field. 548 * 549 * attr_id 550 * [in] Attribute ID to request. 551 * 552 * attr_mod 553 * [in] Attribute modifier for this request. 554 * 555 * find_mkey 556 * [in] Flag to indicate whether the M_Key should be looked up for 557 * this MAD. 558 * 559 * m_key 560 * [in] M_Key value to be send with this MAD. Applied, only when 561 * find_mkey is FALSE. 562 * 563 * err_msg 564 * [in] Message id with which to post this MAD if an error occurs. 565 * 566 * p_context 567 * [in] Mad wrapper context structure to be copied into the wrapper 568 * context, and thus visible to the recipient of the response. 569 * 570 * RETURN VALUES 571 * IB_SUCCESS if the request was successful. 572 * 573 * NOTES 574 * This function asynchronously requests the specified attribute. 575 * The response from the node will be routed through the Dispatcher 576 * to the appropriate receive controller object. 577 *********/ 578 /****f* OpenSM: SM/osm_resp_send 579 * NAME 580 * osm_resp_send 581 * 582 * DESCRIPTION 583 * Starts the process to transmit a directed route response. 584 * 585 * SYNOPSIS 586 */ 587 ib_api_status_t osm_resp_send(IN osm_sm_t * sm, 588 IN const osm_madw_t * p_req_madw, 589 IN ib_net16_t status, 590 IN const uint8_t * p_payload); 591 /* 592 * PARAMETERS 593 * p_resp 594 * [in] Pointer to an osm_resp_t object. 595 * 596 * p_madw 597 * [in] Pointer to the MAD Wrapper object for the requesting MAD 598 * to which this response is generated. 599 * 600 * status 601 * [in] Status for this response. 602 * 603 * p_payload 604 * [in] Pointer to the payload of the response MAD. 605 * 606 * RETURN VALUES 607 * IB_SUCCESS if the response was successful. 608 * 609 *********/ 610 611 /****f* OpenSM: SM/osm_sm_reroute_mlid 612 * NAME 613 * osm_sm_reroute_mlid 614 * 615 * DESCRIPTION 616 * Requests (schedules) MLID rerouting 617 * 618 * SYNOPSIS 619 */ 620 void osm_sm_reroute_mlid(osm_sm_t * sm, ib_net16_t mlid); 621 622 /* 623 * PARAMETERS 624 * sm 625 * [in] Pointer to an osm_sm_t object. 626 * 627 * mlid 628 * [in] MLID value 629 * 630 * RETURN VALUES 631 * None 632 * 633 * NOTES 634 * 635 * SEE ALSO 636 *********/ 637 638 /****f* OpenSM: OpenSM/osm_sm_wait_for_subnet_up 639 * NAME 640 * osm_sm_wait_for_subnet_up 641 * 642 * DESCRIPTION 643 * Blocks the calling thread until the subnet is up. 644 * 645 * SYNOPSIS 646 */ 647 static inline cl_status_t osm_sm_wait_for_subnet_up(IN osm_sm_t * p_sm, 648 IN uint32_t wait_us, 649 IN boolean_t interruptible) 650 { 651 return cl_event_wait_on(&p_sm->subnet_up_event, wait_us, interruptible); 652 } 653 654 /* 655 * PARAMETERS 656 * p_sm 657 * [in] Pointer to an osm_sm_t object. 658 * 659 * wait_us 660 * [in] Number of microseconds to wait. 661 * 662 * interruptible 663 * [in] Indicates whether the wait operation can be interrupted 664 * by external signals. 665 * 666 * RETURN VALUES 667 * CL_SUCCESS if the wait operation succeeded in response to the event 668 * being set. 669 * 670 * CL_TIMEOUT if the specified time period elapses. 671 * 672 * CL_NOT_DONE if the wait was interrupted by an external signal. 673 * 674 * CL_ERROR if the wait operation failed. 675 * 676 * NOTES 677 * 678 * SEE ALSO 679 *********/ 680 681 /****f* OpenSM: State Manager/osm_sm_is_greater_than 682 * NAME 683 * osm_sm_is_greater_than 684 * 685 * DESCRIPTION 686 * Compares two SM's (14.4.1.2) 687 * 688 * SYNOPSIS 689 */ 690 static inline boolean_t osm_sm_is_greater_than(IN uint8_t l_priority, 691 IN ib_net64_t l_guid, 692 IN uint8_t r_priority, 693 IN ib_net64_t r_guid) 694 { 695 return (l_priority > r_priority 696 || (l_priority == r_priority 697 && cl_ntoh64(l_guid) < cl_ntoh64(r_guid))); 698 } 699 700 /* 701 * PARAMETERS 702 * l_priority 703 * [in] Priority of the SM on the "left" 704 * 705 * l_guid 706 * [in] GUID of the SM on the "left" 707 * 708 * r_priority 709 * [in] Priority of the SM on the "right" 710 * 711 * r_guid 712 * [in] GUID of the SM on the "right" 713 * 714 * RETURN VALUES 715 * Return TRUE if an sm with l_priority and l_guid is higher than an sm 716 * with r_priority and r_guid, return FALSE otherwise. 717 * 718 * NOTES 719 * 720 * SEE ALSO 721 * State Manager 722 *********/ 723 724 /****f* OpenSM: SM State Manager/osm_sm_state_mgr_process 725 * NAME 726 * osm_sm_state_mgr_process 727 * 728 * DESCRIPTION 729 * Processes and maintains the states of the SM. 730 * 731 * SYNOPSIS 732 */ 733 ib_api_status_t osm_sm_state_mgr_process(IN osm_sm_t *sm, 734 IN osm_sm_signal_t signal); 735 /* 736 * PARAMETERS 737 * sm 738 * [in] Pointer to an osm_sm_t object. 739 * 740 * signal 741 * [in] Signal to the state SM engine. 742 * 743 * RETURN VALUES 744 * None. 745 * 746 * NOTES 747 * 748 * SEE ALSO 749 * State Manager 750 *********/ 751 752 /****f* OpenSM: SM State Manager/osm_sm_state_mgr_signal_master_is_alive 753 * NAME 754 * osm_sm_state_mgr_signal_master_is_alive 755 * 756 * DESCRIPTION 757 * Signals that the remote Master SM is alive. 758 * Need to clear the retry_number variable. 759 * 760 * SYNOPSIS 761 */ 762 void osm_sm_state_mgr_signal_master_is_alive(IN osm_sm_t *sm); 763 /* 764 * PARAMETERS 765 * sm 766 * [in] Pointer to an osm_sm_t object. 767 * 768 * RETURN VALUES 769 * None. 770 * 771 * NOTES 772 * 773 * SEE ALSO 774 * State Manager 775 *********/ 776 777 /****f* OpenSM: SM State Manager/osm_sm_state_mgr_check_legality 778 * NAME 779 * osm_sm_state_mgr_check_legality 780 * 781 * DESCRIPTION 782 * Checks the legality of the signal received, according to the 783 * current state of the SM state machine. 784 * 785 * SYNOPSIS 786 */ 787 ib_api_status_t osm_sm_state_mgr_check_legality(IN osm_sm_t *sm, 788 IN osm_sm_signal_t signal); 789 /* 790 * PARAMETERS 791 * sm 792 * [in] Pointer to an osm_sm_t object. 793 * 794 * signal 795 * [in] Signal to the state SM engine. 796 * 797 * RETURN VALUES 798 * None. 799 * 800 * NOTES 801 * 802 * SEE ALSO 803 * State Manager 804 *********/ 805 806 void osm_report_sm_state(osm_sm_t *sm); 807 808 /****f* OpenSM: SM State Manager/osm_send_trap144 809 * NAME 810 * osm_send_trap144 811 * 812 * DESCRIPTION 813 * Send trap 144 to the master SM. 814 * 815 * SYNOPSIS 816 */ 817 int osm_send_trap144(osm_sm_t *sm, ib_net16_t local); 818 /* 819 * PARAMETERS 820 * sm 821 * [in] Pointer to an osm_sm_t object. 822 * 823 * local 824 * [in] OtherLocalChanges mask in network byte order. 825 * 826 * RETURN VALUES 827 * 0 on success, non-zero value otherwise. 828 * 829 *********/ 830 831 void osm_set_sm_priority(osm_sm_t *sm, uint8_t priority); 832 833 END_C_DECLS 834 #endif /* _OSM_SM_H_ */ 835