1 /* 2 * Copyright (c) 2004-2009 Voltaire, Inc. All rights reserved. 3 * Copyright (c) 2002-2015 Mellanox Technologies LTD. All rights reserved. 4 * Copyright (c) 1996-2003 Intel Corporation. All rights reserved. 5 * Copyright (c) 2008 Xsigo Systems Inc. All rights reserved. 6 * Copyright (c) 2009 System Fabric Works, Inc. All rights reserved. 7 * Copyright (c) 2009 HNR Consulting. All rights reserved. 8 * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved. 9 * Copyright (c) 2009-2015 ZIH, TU Dresden, Federal Republic of Germany. All rights reserved. 10 * 11 * This software is available to you under a choice of one of two 12 * licenses. You may choose to be licensed under the terms of the GNU 13 * General Public License (GPL) Version 2, available from the file 14 * COPYING in the main directory of this source tree, or the 15 * OpenIB.org BSD license below: 16 * 17 * Redistribution and use in source and binary forms, with or 18 * without modification, are permitted provided that the following 19 * conditions are met: 20 * 21 * - Redistributions of source code must retain the above 22 * copyright notice, this list of conditions and the following 23 * disclaimer. 24 * 25 * - Redistributions in binary form must reproduce the above 26 * copyright notice, this list of conditions and the following 27 * disclaimer in the documentation and/or other materials 28 * provided with the distribution. 29 * 30 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 31 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 32 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 33 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 34 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 35 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 36 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 37 * SOFTWARE. 38 * 39 */ 40 41 /* 42 * Abstract: 43 * Declaration of osm_subn_t. 44 * This object represents an IBA subnet. 45 * This object is part of the OpenSM family of objects. 46 */ 47 48 #ifndef _OSM_SUBNET_H_ 49 #define _OSM_SUBNET_H_ 50 51 #include <iba/ib_types.h> 52 #include <complib/cl_qmap.h> 53 #include <complib/cl_fleximap.h> 54 #include <complib/cl_map.h> 55 #include <complib/cl_ptr_vector.h> 56 #include <complib/cl_list.h> 57 #include <opensm/osm_base.h> 58 #include <opensm/osm_prefix_route.h> 59 #include <opensm/osm_db.h> 60 #include <stdio.h> 61 62 #ifdef __cplusplus 63 # define BEGIN_C_DECLS extern "C" { 64 # define END_C_DECLS } 65 #else /* !__cplusplus */ 66 # define BEGIN_C_DECLS 67 # define END_C_DECLS 68 #endif /* __cplusplus */ 69 70 BEGIN_C_DECLS 71 #define OSM_SUBNET_VECTOR_MIN_SIZE 0 72 #define OSM_SUBNET_VECTOR_GROW_SIZE 1 73 #define OSM_SUBNET_VECTOR_CAPACITY 256 74 75 #define OSM_PARTITION_ENFORCE_BOTH "both" 76 #define OSM_PARTITION_ENFORCE_IN "in" 77 #define OSM_PARTITION_ENFORCE_OUT "out" 78 #define OSM_PARTITION_ENFORCE_OFF "off" 79 80 typedef enum _osm_partition_enforce_type_enum { 81 OSM_PARTITION_ENFORCE_TYPE_BOTH, 82 OSM_PARTITION_ENFORCE_TYPE_IN, 83 OSM_PARTITION_ENFORCE_TYPE_OUT, 84 OSM_PARTITION_ENFORCE_TYPE_OFF 85 } osm_partition_enforce_type_enum; 86 87 /* XXX: not actual max, max we're currently going to support */ 88 #define OSM_CCT_ENTRY_MAX 128 89 #define OSM_CCT_ENTRY_MAD_BLOCKS (OSM_CCT_ENTRY_MAX/64) 90 91 struct osm_opensm; 92 struct osm_qos_policy; 93 94 /****h* OpenSM/Subnet 95 * NAME 96 * Subnet 97 * 98 * DESCRIPTION 99 * The Subnet object encapsulates the information needed by the 100 * OpenSM to manage a subnet. The OpenSM allocates one Subnet object 101 * per IBA subnet. 102 * 103 * The Subnet object is not thread safe, thus callers must provide 104 * serialization. 105 * 106 * This object is essentially a container for the various components 107 * of a subnet. Callers may directly access the member variables. 108 * 109 * AUTHOR 110 * Steve King, Intel 111 * 112 *********/ 113 114 /****s* OpenSM: Subnet/osm_qos_options_t 115 * NAME 116 * osm_qos_options_t 117 * 118 * DESCRIPTION 119 * Subnet QoS options structure. This structure contains the various 120 * QoS specific configuration parameters for the subnet. 121 * 122 * SYNOPSIS 123 */ 124 typedef struct osm_qos_options { 125 unsigned max_vls; 126 int high_limit; 127 char *vlarb_high; 128 char *vlarb_low; 129 char *sl2vl; 130 } osm_qos_options_t; 131 /* 132 * FIELDS 133 * 134 * max_vls 135 * The number of maximum VLs on the Subnet (0 == use default) 136 * 137 * high_limit 138 * The limit of High Priority component of VL Arbitration 139 * table (IBA 7.6.9) (-1 == use default) 140 * 141 * vlarb_high 142 * High priority VL Arbitration table template. (NULL == use default) 143 * 144 * vlarb_low 145 * Low priority VL Arbitration table template. (NULL == use default) 146 * 147 * sl2vl 148 * SL2VL Mapping table (IBA 7.6.6) template. (NULL == use default) 149 * 150 *********/ 151 152 /****s* OpenSM: Subnet/osm_cct_entry_t 153 * NAME 154 * osm_cct_entry_t 155 * 156 * DESCRIPTION 157 * Subnet Congestion Control Table entry. See A10.2.2.1.1 for format details. 158 * 159 * SYNOPSIS 160 */ 161 typedef struct osm_cct_entry { 162 uint8_t shift; //Alex: shift 2 bits 163 uint16_t multiplier; //Alex multiplier 14 bits 164 } osm_cct_entry_t; 165 /* 166 * FIELDS 167 * 168 * shift 169 * shift field in CCT entry. See A10.2.2.1.1. 170 * 171 * multiplier 172 * multiplier field in CCT entry. See A10.2.2.1.1. 173 * 174 *********/ 175 176 /****s* OpenSM: Subnet/osm_cacongestion_entry_t 177 * NAME 178 * osm_cacongestion_entry_t 179 * 180 * DESCRIPTION 181 * Subnet CA Congestion entry. See A10.4.3.8.4 for format details. 182 * 183 * SYNOPSIS 184 */ 185 typedef struct osm_cacongestion_entry { 186 ib_net16_t ccti_timer; //Alex: ccti_timer and ccti_increase should be replaced 187 uint8_t ccti_increase; 188 uint8_t trigger_threshold; 189 uint8_t ccti_min; 190 } osm_cacongestion_entry_t; 191 /* 192 * FIELDS 193 * 194 * ccti_timer 195 * CCTI Timer 196 * 197 * ccti_increase 198 * CCTI Increase 199 * 200 * trigger_threshold 201 * CCTI trigger for log message 202 * 203 * ccti_min 204 * CCTI Minimum 205 * 206 *********/ 207 208 /****s* OpenSM: Subnet/osm_cct_t 209 * NAME 210 * osm_cct_t 211 * 212 * DESCRIPTION 213 * Subnet CongestionControlTable. See A10.4.3.9 for format details. 214 * 215 * SYNOPSIS 216 */ 217 typedef struct osm_cct { 218 osm_cct_entry_t entries[OSM_CCT_ENTRY_MAX]; 219 unsigned int entries_len; 220 char *input_str; 221 } osm_cct_t; 222 /* 223 * FIELDS 224 * 225 * entries 226 * Entries in CCT 227 * 228 * entries_len 229 * Length of entries 230 * 231 * input_str 232 * Original str input 233 * 234 *********/ 235 236 237 /****s* OpenSM: Subnet/osm_subn_opt_t 238 * NAME 239 * osm_subn_opt_t 240 * 241 * DESCRIPTION 242 * Subnet options structure. This structure contains the various 243 * site specific configuration parameters for the subnet. 244 * 245 * SYNOPSIS 246 */ 247 typedef struct osm_subn_opt { 248 const char *config_file; 249 ib_net64_t guid; 250 ib_net64_t m_key; 251 ib_net64_t sm_key; 252 ib_net64_t sa_key; 253 ib_net64_t subnet_prefix; 254 ib_net16_t m_key_lease_period; 255 uint8_t m_key_protect_bits; 256 boolean_t m_key_lookup; 257 uint32_t sweep_interval; 258 uint32_t max_wire_smps; 259 uint32_t max_wire_smps2; 260 uint32_t max_smps_timeout; 261 uint32_t transaction_timeout; 262 uint32_t transaction_retries; 263 uint8_t sm_priority; 264 uint8_t lmc; 265 boolean_t lmc_esp0; 266 uint8_t max_op_vls; 267 uint8_t force_link_speed; 268 uint8_t force_link_speed_ext; 269 uint8_t fdr10; 270 boolean_t reassign_lids; 271 boolean_t ignore_other_sm; 272 boolean_t single_thread; 273 boolean_t disable_multicast; 274 boolean_t force_log_flush; 275 uint8_t subnet_timeout; 276 uint8_t packet_life_time; 277 uint8_t vl_stall_count; 278 uint8_t leaf_vl_stall_count; 279 uint8_t head_of_queue_lifetime; 280 uint8_t leaf_head_of_queue_lifetime; 281 uint8_t local_phy_errors_threshold; 282 uint8_t overrun_errors_threshold; 283 boolean_t use_mfttop; 284 uint32_t sminfo_polling_timeout; 285 uint32_t polling_retry_number; 286 uint32_t max_msg_fifo_timeout; 287 boolean_t force_heavy_sweep; 288 uint8_t log_flags; 289 char *dump_files_dir; 290 char *log_file; 291 uint32_t log_max_size; 292 char *partition_config_file; 293 boolean_t no_partition_enforcement; 294 char *part_enforce; 295 osm_partition_enforce_type_enum part_enforce_enum; 296 boolean_t allow_both_pkeys; 297 uint8_t sm_assigned_guid; 298 boolean_t qos; 299 char *qos_policy_file; 300 boolean_t suppress_sl2vl_mad_status_errors; 301 boolean_t accum_log_file; 302 char *console; 303 uint16_t console_port; 304 char *port_prof_ignore_file; 305 char *hop_weights_file; 306 char *port_search_ordering_file; 307 boolean_t port_profile_switch_nodes; 308 boolean_t sweep_on_trap; 309 char *routing_engine_names; 310 boolean_t use_ucast_cache; 311 boolean_t connect_roots; 312 char *lid_matrix_dump_file; 313 char *lfts_file; 314 char *root_guid_file; 315 char *cn_guid_file; 316 char *io_guid_file; 317 boolean_t port_shifting; 318 uint32_t scatter_ports; 319 uint16_t max_reverse_hops; 320 char *ids_guid_file; 321 char *guid_routing_order_file; 322 boolean_t guid_routing_order_no_scatter; 323 char *sa_db_file; 324 boolean_t sa_db_dump; 325 char *torus_conf_file; 326 boolean_t do_mesh_analysis; 327 boolean_t exit_on_fatal; 328 boolean_t honor_guid2lid_file; 329 boolean_t daemon; 330 boolean_t sm_inactive; 331 boolean_t babbling_port_policy; 332 boolean_t drop_event_subscriptions; 333 boolean_t ipoib_mcgroup_creation_validation; 334 boolean_t mcgroup_join_validation; 335 boolean_t use_optimized_slvl; 336 boolean_t fsync_high_avail_files; 337 osm_qos_options_t qos_options; 338 osm_qos_options_t qos_ca_options; 339 osm_qos_options_t qos_sw0_options; 340 osm_qos_options_t qos_swe_options; 341 osm_qos_options_t qos_rtr_options; 342 boolean_t congestion_control; 343 ib_net64_t cc_key; 344 uint32_t cc_max_outstanding_mads; 345 ib_net32_t cc_sw_cong_setting_control_map; 346 uint8_t cc_sw_cong_setting_victim_mask[IB_CC_PORT_MASK_DATA_SIZE]; 347 uint8_t cc_sw_cong_setting_credit_mask[IB_CC_PORT_MASK_DATA_SIZE]; 348 uint8_t cc_sw_cong_setting_threshold; 349 uint8_t cc_sw_cong_setting_packet_size; 350 uint8_t cc_sw_cong_setting_credit_starvation_threshold; 351 osm_cct_entry_t cc_sw_cong_setting_credit_starvation_return_delay; 352 ib_net16_t cc_sw_cong_setting_marking_rate; 353 ib_net16_t cc_ca_cong_setting_port_control; 354 ib_net16_t cc_ca_cong_setting_control_map; 355 osm_cacongestion_entry_t cc_ca_cong_entries[IB_CA_CONG_ENTRY_DATA_SIZE]; 356 osm_cct_t cc_cct; 357 boolean_t enable_quirks; 358 boolean_t no_clients_rereg; 359 #ifdef ENABLE_OSM_PERF_MGR 360 boolean_t perfmgr; 361 boolean_t perfmgr_redir; 362 uint16_t perfmgr_sweep_time_s; 363 uint32_t perfmgr_max_outstanding_queries; 364 boolean_t perfmgr_ignore_cas; 365 char *event_db_dump_file; 366 int perfmgr_rm_nodes; 367 boolean_t perfmgr_log_errors; 368 boolean_t perfmgr_query_cpi; 369 boolean_t perfmgr_xmit_wait_log; 370 uint32_t perfmgr_xmit_wait_threshold; 371 #endif /* ENABLE_OSM_PERF_MGR */ 372 char *event_plugin_name; 373 char *event_plugin_options; 374 char *node_name_map_name; 375 char *prefix_routes_file; 376 char *log_prefix; 377 boolean_t consolidate_ipv6_snm_req; 378 struct osm_subn_opt *file_opts; /* used for update */ 379 uint8_t lash_start_vl; /* starting vl to use in lash */ 380 uint8_t sm_sl; /* which SL to use for SM/SA communication */ 381 char *per_module_logging_file; 382 boolean_t quasi_ftree_indexing; 383 } osm_subn_opt_t; 384 /* 385 * FIELDS 386 * 387 * config_file 388 * The name of the config file. 389 * 390 * guid 391 * The port guid that the SM is binding to. 392 * 393 * m_key 394 * M_Key value sent to all ports qualifying all Set(PortInfo). 395 * 396 * sm_key 397 * SM_Key value of the SM used for SM authentication. 398 * 399 * sa_key 400 * SM_Key value to qualify rcv SA queries as "trusted". 401 * 402 * subnet_prefix 403 * Subnet prefix used on this subnet. 404 * 405 * m_key_lease_period 406 * The lease period used for the M_Key on this subnet. 407 * 408 * sweep_interval 409 * The number of seconds between subnet sweeps. A value of 0 410 * disables sweeping. 411 * 412 * max_wire_smps 413 * The maximum number of SMPs sent in parallel. Default is 4. 414 * 415 * max_wire_smps2 416 * The maximum number of timeout SMPs allowed to be outstanding. 417 * Default is same as max_wire_smps which disables the timeout 418 * mechanism. 419 * 420 * max_smps_timeout 421 * The wait time in usec for timeout based SMPs. Default is 422 * timeout * retries. 423 * 424 * transaction_timeout 425 * The maximum time in milliseconds allowed for a transaction 426 * to complete. Default is 200. 427 * 428 * transaction_retries 429 * The number of retries for a transaction. Default is 3. 430 * 431 * sm_priority 432 * The priority of this SM as specified by the user. This 433 * value is made available in the SMInfo attribute. 434 * 435 * lmc 436 * The LMC value used on this subnet. 437 * 438 * lmc_esp0 439 * Whether LMC value used on subnet should be used for 440 * enhanced switch port 0 or not. If TRUE, it is used. 441 * Otherwise (the default), LMC is set to 0 for ESP0. 442 * 443 * max_op_vls 444 * Limit the maximal operational VLs. default is 1. 445 * 446 * reassign_lids 447 * If TRUE cause all lids to be re-assigend. 448 * Otherwise (the default), 449 * OpenSM always tries to preserve as LIDs as much as possible. 450 * 451 * ignore_other_sm_option 452 * This flag is TRUE if other SMs on the subnet should be ignored. 453 * 454 * disable_multicast 455 * This flag is TRUE if OpenSM should disable multicast support. 456 * 457 * max_msg_fifo_timeout 458 * The maximal time a message can stay in the incoming message 459 * queue. If there is more than one message in the queue and the 460 * last message stayed in the queue more than this value the SA 461 * request will be immediately returned with a BUSY status. 462 * 463 * subnet_timeout 464 * The subnet_timeout that will be set for all the ports in the 465 * design SubnSet(PortInfo.vl_stall_life)) 466 * 467 * vl_stall_count 468 * The number of sequential packets dropped that cause the port 469 * to enter the VLStalled state. 470 * 471 * leaf_vl_stall_count 472 * The number of sequential packets dropped that cause the port 473 * to enter the VLStalled state. This is for switch ports driving 474 * a CA or router port. 475 * 476 * head_of_queue_lifetime 477 * The maximal time a packet can live at the head of a VL queue 478 * on any port not driving a CA or router port. 479 * 480 * leaf_head_of_queue_lifetime 481 * The maximal time a packet can live at the head of a VL queue 482 * on switch ports driving a CA or router. 483 * 484 * local_phy_errors_threshold 485 * Threshold of local phy errors for sending Trap 129 486 * 487 * overrun_errors_threshold 488 * Threshold of credits overrun errors for sending Trap 129 489 * 490 * sminfo_polling_timeout 491 * Specifies the polling timeout (in milliseconds) - the timeout 492 * between one poll to another. 493 * 494 * packet_life_time 495 * The maximal time a packet can stay in a switch. 496 * The value is send to all switches as 497 * SubnSet(SwitchInfo.life_state) 498 * 499 * dump_files_dir 500 * The directory to be used for opensm-subnet.lst, opensm.fdbs, 501 * opensm.mcfdbs, and default log file (the latter for Windows, 502 * not Linux). 503 * 504 * log_file 505 * Name of the log file (or NULL) for stdout. 506 * 507 * log_max_size 508 * This option defines maximal log file size in MB. When 509 * specified the log file will be truncated upon reaching 510 * this limit. 511 * 512 * qos 513 * Boolean that specifies whether the OpenSM QoS functionality 514 * should be off or on. 515 * 516 * qos_policy_file 517 * Name of the QoS policy file. 518 * 519 * accum_log_file 520 * If TRUE (default) - the log file will be accumulated. 521 * If FALSE - the log file will be erased before starting 522 * current opensm run. 523 * 524 * port_prof_ignore_file 525 * Name of file with port guids to be ignored by port profiling. 526 * 527 * port_profile_switch_nodes 528 * If TRUE will count the number of switch nodes routed through 529 * the link. If FALSE - only CA/RT nodes are counted. 530 * 531 * sweep_on_trap 532 * Received traps will initiate a new sweep. 533 * 534 * routing_engine_names 535 * Name of routing engine(s) to use. 536 * 537 * connect_roots 538 * The option which will enforce root to root connectivity with 539 * up/down and fat-tree routing engines (even if this violates 540 * "pure" deadlock free up/down or fat-tree algorithm) 541 * 542 * use_ucast_cache 543 * When TRUE enables unicast routing cache. 544 * 545 * lid_matrix_dump_file 546 * Name of the lid matrix dump file from where switch 547 * lid matrices (min hops tables) will be loaded 548 * 549 * lfts_file 550 * Name of the unicast LFTs routing file from where switch 551 * forwarding tables will be loaded 552 * 553 * root_guid_file 554 * Name of the file that contains list of root guids that 555 * will be used by fat-tree or up/dn routing (provided by User) 556 * 557 * cn_guid_file 558 * Name of the file that contains list of compute node guids that 559 * will be used by fat-tree routing (provided by User) 560 * 561 * io_guid_file 562 * Name of the file that contains list of I/O node guids that 563 * will be used by fat-tree routing (provided by User) 564 * 565 * port_shifting 566 * This option will turn on port_shifting in routing. 567 * 568 * ids_guid_file 569 * Name of the file that contains list of ids which should be 570 * used by Up/Down algorithm instead of node GUIDs 571 * 572 * guid_routing_order_file 573 * Name of the file that contains list of guids for routing order 574 * that will be used by minhop and up/dn routing (provided by User). 575 * 576 * sa_db_file 577 * Name of the SA database file. 578 * 579 * sa_db_dump 580 * When TRUE causes OpenSM to dump SA DB at the end of every 581 * light sweep regardless the current verbosity level. 582 * 583 * torus_conf_file 584 * Name of the file with extra configuration info for torus-2QoS 585 * routing engine. 586 * 587 * exit_on_fatal 588 * If TRUE (default) - SM will exit on fatal subnet initialization 589 * issues. 590 * If FALSE - SM will not exit. 591 * Fatal initialization issues: 592 * a. SM recognizes 2 different nodes with the same guid, or 593 * 12x link with lane reversal badly configured. 594 * 595 * honor_guid2lid_file 596 * Always honor the guid2lid file if it exists and is valid. This 597 * means that the file will be honored when SM is coming out of 598 * STANDBY. By default this is FALSE. 599 * 600 * daemon 601 * OpenSM will run in daemon mode. 602 * 603 * sm_inactive 604 * OpenSM will start with SM in not active state. 605 * 606 * babbling_port_policy 607 * OpenSM will enforce its "babbling" port policy. 608 * 609 * drop_event_subscriptions 610 * OpenSM will drop event subscriptions if the port goes away. 611 * 612 * ipoib_mcgroup_creation_validation 613 * OpenSM will validate IPoIB non-broadcast group parameters 614 * against IPoIB broadcast group. 615 * 616 * mcgroup_join_validation 617 * OpenSM will validate multicast join parameters against 618 * multicast group parameters when MC group already exists. 619 * 620 * use_optimized_slvl 621 * Use optimized SLtoVLMappingTable programming if 622 * device indicates it supports this. 623 * 624 * fsync_high_avail_files 625 * Synchronize high availability in memory files 626 * with storage. 627 * 628 * perfmgr 629 * Enable or disable the performance manager 630 * 631 * perfmgr_redir 632 * Enable or disable the saving of redirection by PerfMgr 633 * 634 * perfmgr_sweep_time_s 635 * Define the period (in seconds) of PerfMgr sweeps 636 * 637 * event_db_dump_file 638 * File to dump the event database to 639 * 640 * event_plugin_name 641 * Specify the name(s) of the event plugin(s) 642 * 643 * event_plugin_options 644 * Options string that would be passed to the plugin(s) 645 * 646 * qos_options 647 * Default set of QoS options 648 * 649 * qos_ca_options 650 * QoS options for CA ports 651 * 652 * qos_sw0_options 653 * QoS options for switches' port 0 654 * 655 * qos_swe_options 656 * QoS options for switches' external ports 657 * 658 * qos_rtr_options 659 * QoS options for router ports 660 * 661 * congestion_control 662 * Boolean that specifies whether OpenSM congestion control configuration 663 * should be off or no. 664 * 665 * cc_key 666 * CCkey to use when configuring congestion control. 667 * 668 * cc_max_outstanding_mads 669 * Max number of outstanding CC mads that can be on the wire. 670 * 671 * cc_sw_cong_setting_control_map 672 * Congestion Control Switch Congestion Setting Control Map 673 * configuration setting. 674 * 675 * cc_sw_cong_setting_victim_mask 676 * Congestion Control Switch Congestion Setting Victim Mask 677 * configuration setting. 678 * 679 * cc_sw_cong_setting_credit_mask 680 * Congestion Control Switch Congestion Setting Credit Mask 681 * configuration setting. 682 * 683 * cc_sw_cong_setting_threshold 684 * Congestion Control Switch Congestion Setting Threshold 685 * configuration setting. 686 * 687 * cc_sw_cong_setting_packet_size 688 * Congestion Control Switch Congestion Setting Packet Size 689 * configuration setting. 690 * 691 * cc_sw_cong_setting_credit_starvation_threshold 692 * Congestion Control Switch Congestion Setting Credit Starvation Threshold 693 * configuration setting. 694 * 695 * cc_sw_cong_setting_credit_starvation_return_delay 696 * Congestion Control Switch Congestion Setting Credit Starvation Return Delay 697 * configuration setting. 698 * 699 * cc_sw_cong_setting_marking_rate 700 * Congestion Control Switch Congestion Setting Marking Rate 701 * configuration setting. 702 * 703 * cc_ca_cong_setting_port_control 704 * Congestion Control CA Congestion Setting Port Control 705 * 706 * cc_ca_cong_setting_control_map 707 * Congestion Control CA Congestion Setting Control Map 708 709 * cc_ca_cong_entries 710 * Congestion Control CA Congestion Setting Entries 711 * 712 * cc_cct 713 * Congestion Control Table array of entries 714 * 715 * enable_quirks 716 * Enable high risk new features and not fully qualified 717 * hardware specific work arounds 718 * 719 * no_clients_rereg 720 * When TRUE disables clients reregistration request 721 * 722 * scatter_ports 723 * When not zero, randomize best possible ports chosen 724 * for a route. The value is used as a random key seed. 725 * 726 * per_module_logging_file 727 * File name of per module logging configuration. 728 * 729 * SEE ALSO 730 * Subnet object 731 *********/ 732 733 /****s* OpenSM: Subnet/osm_subn_t 734 * NAME 735 * osm_subn_t 736 * 737 * DESCRIPTION 738 * Subnet structure. Callers may directly access member components, 739 * after grabbing a lock. 740 * 741 * TO DO 742 * This structure should probably be volatile. 743 * 744 * SYNOPSIS 745 */ 746 typedef struct osm_subn { 747 struct osm_opensm *p_osm; 748 cl_qmap_t sw_guid_tbl; 749 cl_qmap_t node_guid_tbl; 750 cl_qmap_t port_guid_tbl; 751 cl_qmap_t alias_port_guid_tbl; 752 cl_qmap_t assigned_guids_tbl; 753 cl_qmap_t rtr_guid_tbl; 754 cl_qlist_t prefix_routes_list; 755 cl_qmap_t prtn_pkey_tbl; 756 cl_qmap_t sm_guid_tbl; 757 cl_qlist_t sa_sr_list; 758 cl_qlist_t sa_infr_list; 759 cl_qlist_t alias_guid_list; 760 cl_ptr_vector_t port_lid_tbl; 761 ib_net16_t master_sm_base_lid; 762 ib_net16_t sm_base_lid; 763 ib_net64_t sm_port_guid; 764 uint8_t last_sm_port_state; 765 uint8_t sm_state; 766 osm_subn_opt_t opt; 767 struct osm_qos_policy *p_qos_policy; 768 uint16_t max_ucast_lid_ho; 769 uint16_t max_mcast_lid_ho; 770 uint8_t min_ca_mtu; 771 uint8_t min_ca_rate; 772 uint8_t min_data_vls; 773 uint8_t min_sw_data_vls; 774 boolean_t ignore_existing_lfts; 775 boolean_t subnet_initialization_error; 776 boolean_t force_heavy_sweep; 777 boolean_t force_reroute; 778 boolean_t in_sweep_hop_0; 779 boolean_t force_first_time_master_sweep; 780 boolean_t first_time_master_sweep; 781 boolean_t coming_out_of_standby; 782 boolean_t sweeping_enabled; 783 unsigned need_update; 784 cl_fmap_t mgrp_mgid_tbl; 785 osm_db_domain_t *p_g2m; 786 osm_db_domain_t *p_neighbor; 787 void *mboxes[IB_LID_MCAST_END_HO - IB_LID_MCAST_START_HO + 1]; 788 } osm_subn_t; 789 /* 790 * FIELDS 791 * sw_guid_tbl 792 * Container of pointers to all Switch objects in the subnet. 793 * Indexed by node GUID. 794 * 795 * node_guid_tbl 796 * Container of pointers to all Node objects in the subnet. 797 * Indexed by node GUID. 798 * 799 * port_guid_tbl 800 * Container of pointers to all Port objects in the subnet. 801 * Indexed by port GUID. 802 * 803 * rtr_guid_tbl 804 * Container of pointers to all Router objects in the subnet. 805 * Indexed by node GUID. 806 * 807 * prtn_pkey_tbl 808 * Container of pointers to all Partition objects in the subnet. 809 * Indexed by P_KEY. 810 * 811 * sm_guid_tbl 812 * Container of pointers to SM objects representing other SMs 813 * on the subnet. 814 * 815 * port_lid_tbl 816 * Container of pointers to all Port objects in the subnet. 817 * Indexed by port LID. 818 * 819 * master_sm_base_lid 820 * The base LID owned by the subnet's master SM. 821 * 822 * sm_base_lid 823 * The base LID of the local port where the SM is. 824 * 825 * sm_port_guid 826 * This SM's own port GUID. 827 * 828 * last_sm_port_state 829 * Last state of this SM's port. 830 * 0 is down and 1 is up. 831 * 832 * sm_state 833 * The high-level state of the SM. This value is made available 834 * in the SMInfo attribute. 835 * 836 * opt 837 * Subnet options structure contains site specific configuration. 838 * 839 * p_qos_policy 840 * Subnet QoS policy structure. 841 * 842 * max_ucast_lid_ho 843 * The minimal max unicast lid reported by all switches 844 * 845 * max_mcast_lid_ho 846 * The minimal max multicast lid reported by all switches 847 * 848 * min_ca_mtu 849 * The minimal MTU reported by all CAs ports on the subnet 850 * 851 * min_ca_rate 852 * The minimal rate reported by all CA ports on the subnet 853 * 854 * ignore_existing_lfts 855 * This flag is a dynamic flag to instruct the LFT assignment to 856 * ignore existing legal LFT settings. 857 * The value will be set according to : 858 * - Any change to the list of switches will set it to high 859 * - Coming out of STANDBY it will be cleared (other SM worked) 860 * - Set to FALSE upon end of all lft assignments. 861 * 862 * subnet_initalization_error 863 * Similar to the force_heavy_sweep flag. If TRUE - means that 864 * we had errors during initialization (due to SubnSet requests 865 * that failed). We want to declare the subnet as unhealthy, and 866 * force another heavy sweep. 867 * 868 * force_heavy_sweep 869 * If TRUE - we want to force a heavy sweep. This can be done 870 * either due to receiving of trap - meaning there is some change 871 * on the subnet, or we received a handover from a remote sm. 872 * In this case we want to sweep and reconfigure the entire 873 * subnet. This will cause another heavy sweep to occure when 874 * the current sweep is done. 875 * 876 * force_reroute 877 * If TRUE - we want to force switches in the fabric to be 878 * rerouted. 879 * 880 * in_sweep_hop_0 881 * When in_sweep_hop_0 flag is set to TRUE - this means we are 882 * in sweep_hop_0 - meaning we do not want to continue beyond 883 * the current node. 884 * This is relevant for the case of SM on switch, since in the 885 * switch info we need to signal somehow not to continue 886 * the sweeping. 887 * 888 * force_first_time_master_sweep 889 * This flag is used to avoid race condition when Master SM being 890 * in the middle of very long configuration stage of the heavy sweep, 891 * receives HANDOVER from another MASTER SM. When the current heavy sweep 892 * is finished, new heavy sweep will be started immediately. 893 * At the beginning of the sweep, opensm will set first_time_master_sweep, 894 * force_heavy_sweep and coming_out_of_standby flags in order to allow full 895 * reconfiguration of the fabric. This is required as another MASTER SM could 896 * change configuration of the fabric before sending HANDOVER to MASTER SM. 897 * 898 * first_time_master_sweep 899 * This flag is used for the PortInfo setting. On the first 900 * sweep as master (meaning after moving from Standby|Discovering 901 * state), the SM must send a PortInfoSet to all ports. After 902 * that - we want to minimize the number of PortInfoSet requests 903 * sent, and to send only requests that change the value from 904 * what is updated in the port (or send a first request if this 905 * is a new port). We will set this flag to TRUE when entering 906 * the master state, and set it back to FALSE at the end of the 907 * drop manager. This is done since at the end of the drop manager 908 * we have updated all the ports that are reachable, and from now 909 * on these are the only ports we have data of. We don't want 910 * to send extra set requests to these ports anymore. 911 * 912 * coming_out_of_standby 913 * TRUE on the first sweep after the SM was in standby. 914 * Used for nulling any cache of LID and Routing. 915 * The flag is set true if the SM state was standby and now 916 * changed to MASTER it is reset at the end of the sweep. 917 * 918 * sweeping_enabled 919 * FALSE - sweeping is administratively disabled, all 920 * sweeping is inhibited, TRUE - sweeping is done 921 * normally 922 * 923 * need_update 924 * This flag should be on during first non-master heavy 925 * (including pre-master discovery stage) 926 * 927 * mgrp_mgid_tbl 928 * Container of pointers to all Multicast group objects in 929 * the subnet. Indexed by MGID. 930 * 931 * mboxes 932 * Array of pointers to all Multicast MLID box objects in the 933 * subnet. Indexed by MLID offset from base MLID. 934 * 935 * SEE ALSO 936 * Subnet object 937 *********/ 938 939 /****s* OpenSM: Subnet/osm_assigned_guids_t 940 * NAME 941 * osm_assigned_guids_t 942 * 943 * DESCRIPTION 944 * SA assigned GUIDs structure. 945 * 946 * SYNOPSIS 947 */ 948 typedef struct osm_assigned_guids { 949 cl_map_item_t map_item; 950 ib_net64_t port_guid; 951 ib_net64_t assigned_guid[1]; 952 } osm_assigned_guids_t; 953 /* 954 * FIELDS 955 * map_item 956 * Linkage structure for cl_qmap. MUST BE FIRST MEMBER! 957 * 958 * port_guid 959 * Base port GUID. 960 * 961 * assigned_guids 962 * Table of persistent SA assigned GUIDs. 963 * 964 * SEE ALSO 965 * Subnet object 966 *********/ 967 968 /****f* OpenSM: Subnet/osm_subn_construct 969 * NAME 970 * osm_subn_construct 971 * 972 * DESCRIPTION 973 * This function constructs a Subnet object. 974 * 975 * SYNOPSIS 976 */ 977 void osm_subn_construct(IN osm_subn_t * p_subn); 978 /* 979 * PARAMETERS 980 * p_subn 981 * [in] Pointer to a Subnet object to construct. 982 * 983 * RETURN VALUE 984 * This function does not return a value. 985 * 986 * NOTES 987 * Allows calling osm_subn_init, and osm_subn_destroy. 988 * 989 * Calling osm_subn_construct is a prerequisite to calling any other 990 * method except osm_subn_init. 991 * 992 * SEE ALSO 993 * Subnet object, osm_subn_init, osm_subn_destroy 994 *********/ 995 996 /****f* OpenSM: Subnet/osm_subn_destroy 997 * NAME 998 * osm_subn_destroy 999 * 1000 * DESCRIPTION 1001 * The osm_subn_destroy function destroys a subnet, releasing 1002 * all resources. 1003 * 1004 * SYNOPSIS 1005 */ 1006 void osm_subn_destroy(IN osm_subn_t * p_subn); 1007 /* 1008 * PARAMETERS 1009 * p_subn 1010 * [in] Pointer to a Subnet object to destroy. 1011 * 1012 * RETURN VALUE 1013 * This function does not return a value. 1014 * 1015 * NOTES 1016 * Performs any necessary cleanup of the specified Subnet object. 1017 * Further operations should not be attempted on the destroyed object. 1018 * This function should only be called after a call to osm_subn_construct 1019 * or osm_subn_init. 1020 * 1021 * SEE ALSO 1022 * Subnet object, osm_subn_construct, osm_subn_init 1023 *********/ 1024 1025 /****f* OpenSM: Subnet/osm_subn_init 1026 * NAME 1027 * osm_subn_init 1028 * 1029 * DESCRIPTION 1030 * The osm_subn_init function initializes a Subnet object for use. 1031 * 1032 * SYNOPSIS 1033 */ 1034 ib_api_status_t osm_subn_init(IN osm_subn_t * p_subn, 1035 IN struct osm_opensm *p_osm, 1036 IN const osm_subn_opt_t * p_opt); 1037 /* 1038 * PARAMETERS 1039 * p_subn 1040 * [in] Pointer to an osm_subn_t object to initialize. 1041 * 1042 * p_opt 1043 * [in] Pointer to the subnet options structure. 1044 * 1045 * RETURN VALUES 1046 * IB_SUCCESS if the Subnet object was initialized successfully. 1047 * 1048 * NOTES 1049 * Allows calling other Subnet methods. 1050 * 1051 * SEE ALSO 1052 * Subnet object, osm_subn_construct, osm_subn_destroy 1053 *********/ 1054 1055 /* 1056 Forward references. 1057 */ 1058 struct osm_mad_addr; 1059 struct osm_log; 1060 struct osm_switch; 1061 struct osm_physp; 1062 struct osm_port; 1063 struct osm_mgrp; 1064 1065 /****f* OpenSM: Helper/osm_get_gid_by_mad_addr 1066 * NAME 1067 * osm_get_gid_by_mad_addr 1068 * 1069 * DESCRIPTION 1070 * Looks for the requester gid in the mad address. 1071 * 1072 * Note: This code is not thread safe. Need to grab the lock before 1073 * calling it. 1074 * 1075 * SYNOPSIS 1076 */ 1077 ib_api_status_t osm_get_gid_by_mad_addr(IN struct osm_log *p_log, 1078 IN const osm_subn_t * p_subn, 1079 IN struct osm_mad_addr *p_mad_addr, 1080 OUT ib_gid_t * p_gid); 1081 /* 1082 * PARAMETERS 1083 * p_log 1084 * [in] Pointer to a log object. 1085 * 1086 * p_subn 1087 * [in] Pointer to subnet object. 1088 * 1089 * p_mad_addr 1090 * [in] Pointer to mad address object. 1091 * 1092 * p_gid 1093 * [out] Pointer to the GID structure to fill in. 1094 * 1095 * RETURN VALUES 1096 * IB_SUCCESS if able to find the GID by address given. 1097 * 1098 * NOTES 1099 * 1100 * SEE ALSO 1101 *********/ 1102 1103 /****f* OpenSM: Helper/osm_get_physp_by_mad_addr 1104 * NAME 1105 * osm_get_physp_by_mad_addr 1106 * 1107 * DESCRIPTION 1108 * Looks for the requester physical port in the mad address. 1109 * 1110 * Note: This code is not thread safe. Need to grab the lock before 1111 * calling it. 1112 * 1113 * SYNOPSIS 1114 */ 1115 struct osm_physp *osm_get_physp_by_mad_addr(IN struct osm_log *p_log, 1116 IN const osm_subn_t * p_subn, 1117 IN struct osm_mad_addr 1118 *p_mad_addr); 1119 /* 1120 * PARAMETERS 1121 * p_log 1122 * [in] Pointer to a log object. 1123 * 1124 * p_subn 1125 * [in] Pointer to subnet object. 1126 * 1127 * p_mad_addr 1128 * [in] Pointer to mad address object. 1129 * 1130 * RETURN VALUES 1131 * Pointer to requester physical port object if found. Null otherwise. 1132 * 1133 * NOTES 1134 * 1135 * SEE ALSO 1136 *********/ 1137 1138 /****f* OpenSM: Helper/osm_get_port_by_mad_addr 1139 * NAME 1140 * osm_get_port_by_mad_addr 1141 * 1142 * DESCRIPTION 1143 * Looks for the requester port in the mad address. 1144 * 1145 * Note: This code is not thread safe. Need to grab the lock before 1146 * calling it. 1147 * 1148 * SYNOPSIS 1149 */ 1150 struct osm_port *osm_get_port_by_mad_addr(IN struct osm_log *p_log, 1151 IN const osm_subn_t * p_subn, 1152 IN struct osm_mad_addr *p_mad_addr); 1153 /* 1154 * PARAMETERS 1155 * p_log 1156 * [in] Pointer to a log object. 1157 * 1158 * p_subn 1159 * [in] Pointer to subnet object. 1160 * 1161 * p_mad_addr 1162 * [in] Pointer to mad address object. 1163 * 1164 * RETURN VALUES 1165 * Pointer to requester port object if found. Null otherwise. 1166 * 1167 * NOTES 1168 * 1169 * SEE ALSO 1170 *********/ 1171 1172 /****f* OpenSM: Subnet/osm_get_switch_by_guid 1173 * NAME 1174 * osm_get_switch_by_guid 1175 * 1176 * DESCRIPTION 1177 * Looks for the given switch guid in the subnet table of switches by guid. 1178 * NOTE: this code is not thread safe. Need to grab the lock before 1179 * calling it. 1180 * 1181 * SYNOPSIS 1182 */ 1183 struct osm_switch *osm_get_switch_by_guid(IN const osm_subn_t * p_subn, 1184 IN ib_net64_t guid); 1185 /* 1186 * PARAMETERS 1187 * p_subn 1188 * [in] Pointer to an osm_subn_t object 1189 * 1190 * guid 1191 * [in] The node guid in network byte order 1192 * 1193 * RETURN VALUES 1194 * The switch structure pointer if found. NULL otherwise. 1195 * 1196 * SEE ALSO 1197 * Subnet object, osm_subn_construct, osm_subn_destroy, 1198 * osm_switch_t 1199 *********/ 1200 1201 /****f* OpenSM: Subnet/osm_get_node_by_guid 1202 * NAME 1203 * osm_get_node_by_guid 1204 * 1205 * DESCRIPTION 1206 * This looks for the given node guid in the subnet table of nodes by guid. 1207 * NOTE: this code is not thread safe. Need to grab the lock before 1208 * calling it. 1209 * 1210 * SYNOPSIS 1211 */ 1212 struct osm_node *osm_get_node_by_guid(IN osm_subn_t const *p_subn, 1213 IN ib_net64_t guid); 1214 /* 1215 * PARAMETERS 1216 * p_subn 1217 * [in] Pointer to an osm_subn_t object 1218 * 1219 * guid 1220 * [in] The node guid in network byte order 1221 * 1222 * RETURN VALUES 1223 * The node structure pointer if found. NULL otherwise. 1224 * 1225 * SEE ALSO 1226 * Subnet object, osm_subn_construct, osm_subn_destroy, 1227 * osm_node_t 1228 *********/ 1229 1230 /****f* OpenSM: Subnet/osm_get_port_by_guid 1231 * NAME 1232 * osm_get_port_by_guid 1233 * 1234 * DESCRIPTION 1235 * This looks for the given port guid in the subnet table of ports by guid. 1236 * NOTE: this code is not thread safe. Need to grab the lock before 1237 * calling it. 1238 * 1239 * SYNOPSIS 1240 */ 1241 struct osm_port *osm_get_port_by_guid(IN osm_subn_t const *p_subn, 1242 IN ib_net64_t guid); 1243 /* 1244 * PARAMETERS 1245 * p_subn 1246 * [in] Pointer to an osm_subn_t object 1247 * 1248 * guid 1249 * [in] The port guid in network order 1250 * 1251 * RETURN VALUES 1252 * The port structure pointer if found. NULL otherwise. 1253 * 1254 * SEE ALSO 1255 * Subnet object, osm_subn_construct, osm_subn_destroy, 1256 * osm_port_t 1257 *********/ 1258 1259 /****f* OpenSM: Port/osm_get_port_by_lid_ho 1260 * NAME 1261 * osm_get_port_by_lid_ho 1262 * 1263 * DESCRIPTION 1264 * Returns a pointer of the port object for given lid value. 1265 * 1266 * SYNOPSIS 1267 */ 1268 struct osm_port *osm_get_port_by_lid_ho(const osm_subn_t * subn, uint16_t lid); 1269 /* 1270 * PARAMETERS 1271 * subn 1272 * [in] Pointer to the subnet data structure. 1273 * 1274 * lid 1275 * [in] LID requested in host byte order. 1276 * 1277 * RETURN VALUES 1278 * The port structure pointer if found. NULL otherwise. 1279 * 1280 * SEE ALSO 1281 * Subnet object, osm_port_t 1282 *********/ 1283 1284 /****f* OpenSM: Subnet/osm_get_alias_guid_by_guid 1285 * NAME 1286 * osm_get_alias_guid_by_guid 1287 * 1288 * DESCRIPTION 1289 * This looks for the given port guid in the subnet table of ports by 1290 * alias guid. 1291 * NOTE: this code is not thread safe. Need to grab the lock before 1292 * calling it. 1293 * 1294 * SYNOPSIS 1295 */ 1296 struct osm_alias_guid *osm_get_alias_guid_by_guid(IN osm_subn_t const *p_subn, 1297 IN ib_net64_t guid); 1298 /* 1299 * PARAMETERS 1300 * p_subn 1301 * [in] Pointer to an osm_subn_t object 1302 * 1303 * guid 1304 * [in] The alias port guid in network order 1305 * 1306 * RETURN VALUES 1307 * The alias guid structure pointer if found. NULL otherwise. 1308 * 1309 * SEE ALSO 1310 * Subnet object, osm_subn_construct, osm_subn_destroy, 1311 * osm_alias_guid_t 1312 *********/ 1313 1314 /****f* OpenSM: Subnet/osm_get_port_by_alias_guid 1315 * NAME 1316 * osm_get_port_by_alias_guid 1317 * 1318 * DESCRIPTION 1319 * This looks for the given port guid in the subnet table of ports by 1320 * alias guid. 1321 * NOTE: this code is not thread safe. Need to grab the lock before 1322 * calling it. 1323 * 1324 * SYNOPSIS 1325 */ 1326 struct osm_port *osm_get_port_by_alias_guid(IN osm_subn_t const *p_subn, 1327 IN ib_net64_t guid); 1328 /* 1329 * PARAMETERS 1330 * p_subn 1331 * [in] Pointer to an osm_subn_t object 1332 * 1333 * guid 1334 * [in] The alias port guid in network order 1335 * 1336 * RETURN VALUES 1337 * The port structure pointer if found. NULL otherwise. 1338 * 1339 * SEE ALSO 1340 * Subnet object, osm_subn_construct, osm_subn_destroy, 1341 * osm_port_t 1342 *********/ 1343 1344 /****f* OpenSM: Port/osm_assigned_guids_new 1345 * NAME 1346 * osm_assigned_guids_new 1347 * 1348 * DESCRIPTION 1349 * This function allocates and initializes an assigned guids object. 1350 * 1351 * SYNOPSIS 1352 */ 1353 osm_assigned_guids_t *osm_assigned_guids_new(IN const ib_net64_t port_guid, 1354 IN const uint32_t num_guids); 1355 /* 1356 * PARAMETERS 1357 * port_guid 1358 * [in] Base port GUID in network order 1359 * 1360 * RETURN VALUE 1361 * Pointer to the initialized assigned alias guid object. 1362 * 1363 * SEE ALSO 1364 * Subnet object, osm_assigned_guids_t, osm_assigned_guids_delete, 1365 * osm_get_assigned_guids_by_guid 1366 *********/ 1367 1368 /****f* OpenSM: Port/osm_assigned_guids_delete 1369 * NAME 1370 * osm_assigned_guids_delete 1371 * 1372 * DESCRIPTION 1373 * This function destroys and deallocates an assigned guids object. 1374 * 1375 * SYNOPSIS 1376 */ 1377 void osm_assigned_guids_delete(IN OUT osm_assigned_guids_t ** pp_assigned_guids); 1378 /* 1379 * PARAMETERS 1380 * pp_assigned_guids 1381 * [in][out] Pointer to a pointer to an assigned guids object to delete. 1382 * On return, this pointer is NULL. 1383 * 1384 * RETURN VALUE 1385 * This function does not return a value. 1386 * 1387 * NOTES 1388 * Performs any necessary cleanup of the specified assigned guids object. 1389 * 1390 * SEE ALSO 1391 * Subnet object, osm_assigned_guids_new, osm_get_assigned_guids_by_guid 1392 *********/ 1393 1394 /****f* OpenSM: Subnet/osm_get_assigned_guids_by_guid 1395 * NAME 1396 * osm_get_assigned_guids_by_guid 1397 * 1398 * DESCRIPTION 1399 * This looks for the given port guid and returns a pointer 1400 * to the guid table of SA assigned alias guids for that port. 1401 * 1402 * SYNOPSIS 1403 */ 1404 osm_assigned_guids_t *osm_get_assigned_guids_by_guid(IN osm_subn_t const *p_subn, 1405 IN ib_net64_t port_guid); 1406 /* 1407 * PARAMETERS 1408 * p_subn 1409 * [in] Pointer to an osm_subn_t object 1410 * 1411 * port_guid 1412 * [in] The base port guid in network order 1413 * 1414 * RETURN VALUES 1415 * The osm_assigned_guids structure pointer if found. NULL otherwise. 1416 * 1417 * SEE ALSO 1418 * Subnet object, osm_assigned_guids_new, osm_assigned_guids_delete, 1419 * osm_assigned_guids_t 1420 *********/ 1421 1422 /****f* OpenSM: Port/osm_get_port_by_lid 1423 * NAME 1424 * osm_get_port_by_lid 1425 * 1426 * DESCRIPTION 1427 * Returns a pointer of the port object for given lid value. 1428 * 1429 * SYNOPSIS 1430 */ 1431 static inline struct osm_port *osm_get_port_by_lid(IN osm_subn_t const * subn, 1432 IN ib_net16_t lid) 1433 { 1434 return osm_get_port_by_lid_ho(subn, cl_ntoh16(lid)); 1435 } 1436 /* 1437 * PARAMETERS 1438 * subn 1439 * [in] Pointer to the subnet data structure. 1440 * 1441 * lid 1442 * [in] LID requested in network byte order. 1443 * 1444 * RETURN VALUES 1445 * The port structure pointer if found. NULL otherwise. 1446 * 1447 * SEE ALSO 1448 * Subnet object, osm_port_t 1449 *********/ 1450 1451 /****f* OpenSM: Subnet/osm_get_mgrp_by_mgid 1452 * NAME 1453 * osm_get_mgrp_by_mgid 1454 * 1455 * DESCRIPTION 1456 * This looks for the given multicast group in the subnet table by mgid. 1457 * NOTE: this code is not thread safe. Need to grab the lock before 1458 * calling it. 1459 * 1460 * SYNOPSIS 1461 */ 1462 struct osm_mgrp *osm_get_mgrp_by_mgid(IN osm_subn_t * subn, IN ib_gid_t * mgid); 1463 /* 1464 * PARAMETERS 1465 * subn 1466 * [in] Pointer to an osm_subn_t object 1467 * 1468 * mgid 1469 * [in] The multicast group MGID value 1470 * 1471 * RETURN VALUES 1472 * The multicast group structure pointer if found. NULL otherwise. 1473 *********/ 1474 1475 /****f* OpenSM: Subnet/osm_get_mbox_by_mlid 1476 * NAME 1477 * osm_get_mbox_by_mlid 1478 * 1479 * DESCRIPTION 1480 * This looks for the given multicast group in the subnet table by mlid. 1481 * NOTE: this code is not thread safe. Need to grab the lock before 1482 * calling it. 1483 * 1484 * SYNOPSIS 1485 */ 1486 static inline struct osm_mgrp_box *osm_get_mbox_by_mlid(osm_subn_t const *p_subn, ib_net16_t mlid) 1487 { 1488 return (struct osm_mgrp_box *)p_subn->mboxes[cl_ntoh16(mlid) - IB_LID_MCAST_START_HO]; 1489 } 1490 /* 1491 * PARAMETERS 1492 * p_subn 1493 * [in] Pointer to an osm_subn_t object 1494 * 1495 * mlid 1496 * [in] The multicast group mlid in network order 1497 * 1498 * RETURN VALUES 1499 * The multicast group structure pointer if found. NULL otherwise. 1500 *********/ 1501 1502 int is_mlnx_ext_port_info_supported(ib_net32_t vendid, ib_net16_t devid); 1503 1504 /****f* OpenSM: Subnet/osm_subn_set_default_opt 1505 * NAME 1506 * osm_subn_set_default_opt 1507 * 1508 * DESCRIPTION 1509 * The osm_subn_set_default_opt function sets the default options. 1510 * 1511 * SYNOPSIS 1512 */ 1513 void osm_subn_set_default_opt(IN osm_subn_opt_t * p_opt); 1514 /* 1515 * PARAMETERS 1516 * 1517 * p_opt 1518 * [in] Pointer to the subnet options structure. 1519 * 1520 * RETURN VALUES 1521 * None 1522 * 1523 * NOTES 1524 * 1525 * SEE ALSO 1526 * Subnet object, osm_subn_construct, osm_subn_destroy 1527 *********/ 1528 1529 /****f* OpenSM: Subnet/osm_subn_parse_conf_file 1530 * NAME 1531 * osm_subn_parse_conf_file 1532 * 1533 * DESCRIPTION 1534 * The osm_subn_parse_conf_file function parses the configuration file 1535 * and sets the defaults accordingly. 1536 * 1537 * SYNOPSIS 1538 */ 1539 int osm_subn_parse_conf_file(const char *conf_file, osm_subn_opt_t * p_opt); 1540 /* 1541 * PARAMETERS 1542 * 1543 * p_opt 1544 * [in] Pointer to the subnet options structure. 1545 * 1546 * RETURN VALUES 1547 * 0 on success, positive value if file doesn't exist, 1548 * negative value otherwise 1549 *********/ 1550 1551 /****f* OpenSM: Subnet/osm_subn_rescan_conf_files 1552 * NAME 1553 * osm_subn_rescan_conf_files 1554 * 1555 * DESCRIPTION 1556 * The osm_subn_rescan_conf_files function parses the configuration 1557 * files and update selected subnet options 1558 * 1559 * SYNOPSIS 1560 */ 1561 int osm_subn_rescan_conf_files(IN osm_subn_t * p_subn); 1562 /* 1563 * PARAMETERS 1564 * 1565 * p_subn 1566 * [in] Pointer to the subnet structure. 1567 * 1568 * RETURN VALUES 1569 * 0 on success, positive value if file doesn't exist, 1570 * negative value otherwise 1571 * 1572 *********/ 1573 1574 /****f* OpenSM: Subnet/osm_subn_output_conf 1575 * NAME 1576 * osm_subn_output_conf 1577 * 1578 * DESCRIPTION 1579 * Output configuration info 1580 * 1581 * SYNOPSIS 1582 */ 1583 void osm_subn_output_conf(FILE *out, IN osm_subn_opt_t * p_opt); 1584 /* 1585 * PARAMETERS 1586 * 1587 * out 1588 * [in] File stream to output to. 1589 * 1590 * p_opt 1591 * [in] Pointer to the subnet options structure. 1592 * 1593 * RETURN VALUES 1594 * This method does not return a value 1595 *********/ 1596 1597 /****f* OpenSM: Subnet/osm_subn_write_conf_file 1598 * NAME 1599 * osm_subn_write_conf_file 1600 * 1601 * DESCRIPTION 1602 * Write the configuration file into the cache 1603 * 1604 * SYNOPSIS 1605 */ 1606 int osm_subn_write_conf_file(char *file_name, IN osm_subn_opt_t * p_opt); 1607 /* 1608 * PARAMETERS 1609 * 1610 * p_opt 1611 * [in] Pointer to the subnet options structure. 1612 * 1613 * RETURN VALUES 1614 * 0 on success, negative value otherwise 1615 * 1616 * NOTES 1617 * Assumes the conf file is part of the cache dir which defaults to 1618 * OSM_DEFAULT_CACHE_DIR or OSM_CACHE_DIR the name is opensm.opts 1619 *********/ 1620 int osm_subn_verify_config(osm_subn_opt_t * p_opt); 1621 1622 END_C_DECLS 1623 #endif /* _OSM_SUBNET_H_ */ 1624