1d6b92ffaSHans Petter Selasky /* 2d6b92ffaSHans Petter Selasky * Copyright (c) 2004-2009 Voltaire, Inc. All rights reserved. 3d6b92ffaSHans Petter Selasky * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved. 4d6b92ffaSHans Petter Selasky * Copyright (c) 1996-2003 Intel Corporation. All rights reserved. 5d6b92ffaSHans Petter Selasky * 6d6b92ffaSHans Petter Selasky * This software is available to you under a choice of one of two 7d6b92ffaSHans Petter Selasky * licenses. You may choose to be licensed under the terms of the GNU 8d6b92ffaSHans Petter Selasky * General Public License (GPL) Version 2, available from the file 9d6b92ffaSHans Petter Selasky * COPYING in the main directory of this source tree, or the 10d6b92ffaSHans Petter Selasky * OpenIB.org BSD license below: 11d6b92ffaSHans Petter Selasky * 12d6b92ffaSHans Petter Selasky * Redistribution and use in source and binary forms, with or 13d6b92ffaSHans Petter Selasky * without modification, are permitted provided that the following 14d6b92ffaSHans Petter Selasky * conditions are met: 15d6b92ffaSHans Petter Selasky * 16d6b92ffaSHans Petter Selasky * - Redistributions of source code must retain the above 17d6b92ffaSHans Petter Selasky * copyright notice, this list of conditions and the following 18d6b92ffaSHans Petter Selasky * disclaimer. 19d6b92ffaSHans Petter Selasky * 20d6b92ffaSHans Petter Selasky * - Redistributions in binary form must reproduce the above 21d6b92ffaSHans Petter Selasky * copyright notice, this list of conditions and the following 22d6b92ffaSHans Petter Selasky * disclaimer in the documentation and/or other materials 23d6b92ffaSHans Petter Selasky * provided with the distribution. 24d6b92ffaSHans Petter Selasky * 25d6b92ffaSHans Petter Selasky * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 26d6b92ffaSHans Petter Selasky * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 27d6b92ffaSHans Petter Selasky * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 28d6b92ffaSHans Petter Selasky * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 29d6b92ffaSHans Petter Selasky * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 30d6b92ffaSHans Petter Selasky * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 31d6b92ffaSHans Petter Selasky * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 32d6b92ffaSHans Petter Selasky * SOFTWARE. 33d6b92ffaSHans Petter Selasky * 34d6b92ffaSHans Petter Selasky */ 35d6b92ffaSHans Petter Selasky 36d6b92ffaSHans Petter Selasky /* 37d6b92ffaSHans Petter Selasky * Abstract: 38d6b92ffaSHans Petter Selasky * Declaration of osm_sa_t. 39d6b92ffaSHans Petter Selasky * This object represents an IBA subnet. 40d6b92ffaSHans Petter Selasky * This object is part of the OpenSM family of objects. 41d6b92ffaSHans Petter Selasky */ 42d6b92ffaSHans Petter Selasky 43d6b92ffaSHans Petter Selasky #ifndef _OSM_SA_H_ 44d6b92ffaSHans Petter Selasky #define _OSM_SA_H_ 45d6b92ffaSHans Petter Selasky 46d6b92ffaSHans Petter Selasky #include <iba/ib_types.h> 47d6b92ffaSHans Petter Selasky #include <complib/cl_passivelock.h> 48d6b92ffaSHans Petter Selasky #include <complib/cl_event.h> 49d6b92ffaSHans Petter Selasky #include <complib/cl_thread.h> 50d6b92ffaSHans Petter Selasky #include <complib/cl_timer.h> 51d6b92ffaSHans Petter Selasky #include <complib/cl_dispatcher.h> 52d6b92ffaSHans Petter Selasky #include <opensm/osm_stats.h> 53d6b92ffaSHans Petter Selasky #include <opensm/osm_subnet.h> 54d6b92ffaSHans Petter Selasky #include <vendor/osm_vendor_api.h> 55d6b92ffaSHans Petter Selasky #include <opensm/osm_mad_pool.h> 56d6b92ffaSHans Petter Selasky #include <opensm/osm_log.h> 57d6b92ffaSHans Petter Selasky #include <opensm/osm_sa_mad_ctrl.h> 58d6b92ffaSHans Petter Selasky #include <opensm/osm_sm.h> 59d6b92ffaSHans Petter Selasky #include <opensm/osm_multicast.h> 60d6b92ffaSHans Petter Selasky 61d6b92ffaSHans Petter Selasky #ifdef __cplusplus 62d6b92ffaSHans Petter Selasky # define BEGIN_C_DECLS extern "C" { 63d6b92ffaSHans Petter Selasky # define END_C_DECLS } 64d6b92ffaSHans Petter Selasky #else /* !__cplusplus */ 65d6b92ffaSHans Petter Selasky # define BEGIN_C_DECLS 66d6b92ffaSHans Petter Selasky # define END_C_DECLS 67d6b92ffaSHans Petter Selasky #endif /* __cplusplus */ 68d6b92ffaSHans Petter Selasky 69d6b92ffaSHans Petter Selasky BEGIN_C_DECLS 70d6b92ffaSHans Petter Selasky /****h* OpenSM/SA 71d6b92ffaSHans Petter Selasky * NAME 72d6b92ffaSHans Petter Selasky * SA 73d6b92ffaSHans Petter Selasky * 74d6b92ffaSHans Petter Selasky * DESCRIPTION 75d6b92ffaSHans Petter Selasky * The SA object encapsulates the information needed by the 76d6b92ffaSHans Petter Selasky * OpenSM to instantiate subnet administration. The OpenSM 77d6b92ffaSHans Petter Selasky * allocates one SA object per subnet manager. 78d6b92ffaSHans Petter Selasky * 79d6b92ffaSHans Petter Selasky * The SA object is thread safe. 80d6b92ffaSHans Petter Selasky * 81d6b92ffaSHans Petter Selasky * This object should be treated as opaque and should 82d6b92ffaSHans Petter Selasky * be manipulated only through the provided functions. 83d6b92ffaSHans Petter Selasky * 84d6b92ffaSHans Petter Selasky * AUTHOR 85d6b92ffaSHans Petter Selasky * Ranjit Pandit, Intel 86d6b92ffaSHans Petter Selasky * Anil Keshavamurthy, Intel 87d6b92ffaSHans Petter Selasky * 88d6b92ffaSHans Petter Selasky *********/ 89d6b92ffaSHans Petter Selasky 90d6b92ffaSHans Petter Selasky /****d* OpenSM: SA/osm_sa_state_t 91d6b92ffaSHans Petter Selasky * NAME 92d6b92ffaSHans Petter Selasky * osm_sa_state_t 93d6b92ffaSHans Petter Selasky * 94d6b92ffaSHans Petter Selasky * DESCRIPTION 95d6b92ffaSHans Petter Selasky * Enumerates the possible states of SA object. 96d6b92ffaSHans Petter Selasky * 97d6b92ffaSHans Petter Selasky * SYNOPSIS 98d6b92ffaSHans Petter Selasky */ 99d6b92ffaSHans Petter Selasky typedef enum _osm_sa_state { 100d6b92ffaSHans Petter Selasky OSM_SA_STATE_INIT = 0, 101d6b92ffaSHans Petter Selasky OSM_SA_STATE_READY 102d6b92ffaSHans Petter Selasky } osm_sa_state_t; 103d6b92ffaSHans Petter Selasky /***********/ 104d6b92ffaSHans Petter Selasky 105d6b92ffaSHans Petter Selasky /****d* OpenSM: SA/osm_mpr_rec_t 106d6b92ffaSHans Petter Selasky * NAME 107d6b92ffaSHans Petter Selasky * osm_mpr_rec_t 108d6b92ffaSHans Petter Selasky * 109d6b92ffaSHans Petter Selasky * DESCRIPTION 110d6b92ffaSHans Petter Selasky * SA MultiPathRecord response. 111d6b92ffaSHans Petter Selasky * 112d6b92ffaSHans Petter Selasky * SYNOPSIS 113d6b92ffaSHans Petter Selasky */ 114d6b92ffaSHans Petter Selasky typedef struct osm_mpr_rec { 115d6b92ffaSHans Petter Selasky ib_path_rec_t path_rec; 116d6b92ffaSHans Petter Selasky const osm_port_t *p_src_port; 117d6b92ffaSHans Petter Selasky const osm_port_t *p_dest_port; 118d6b92ffaSHans Petter Selasky int hops; 119d6b92ffaSHans Petter Selasky } osm_mpr_rec_t; 120d6b92ffaSHans Petter Selasky /***********/ 121d6b92ffaSHans Petter Selasky 122d6b92ffaSHans Petter Selasky /****d* OpenSM: SA/osm_sa_item_t 123d6b92ffaSHans Petter Selasky * NAME 124d6b92ffaSHans Petter Selasky * osm_sa_item_t 125d6b92ffaSHans Petter Selasky * 126d6b92ffaSHans Petter Selasky * DESCRIPTION 127d6b92ffaSHans Petter Selasky * SA response item. 128d6b92ffaSHans Petter Selasky * 129d6b92ffaSHans Petter Selasky * SYNOPSIS 130d6b92ffaSHans Petter Selasky */ 131d6b92ffaSHans Petter Selasky typedef struct osm_sa_item { 132d6b92ffaSHans Petter Selasky cl_list_item_t list_item; 133d6b92ffaSHans Petter Selasky union { 134d6b92ffaSHans Petter Selasky char data[0]; 135d6b92ffaSHans Petter Selasky ib_guidinfo_record_t guid_rec; 136d6b92ffaSHans Petter Selasky ib_inform_info_t inform; 137d6b92ffaSHans Petter Selasky ib_inform_info_record_t inform_rec; 138d6b92ffaSHans Petter Selasky ib_lft_record_t lft_rec; 139d6b92ffaSHans Petter Selasky ib_link_record_t link_rec; 140d6b92ffaSHans Petter Selasky ib_member_rec_t mc_rec; 141d6b92ffaSHans Petter Selasky ib_mft_record_t mft_rec; 142d6b92ffaSHans Petter Selasky osm_mpr_rec_t mpr_rec; 143d6b92ffaSHans Petter Selasky ib_node_record_t node_rec; 144d6b92ffaSHans Petter Selasky ib_path_rec_t path_rec; 145d6b92ffaSHans Petter Selasky ib_pkey_table_record_t pkey_rec; 146d6b92ffaSHans Petter Selasky ib_portinfo_record_t port_rec; 147d6b92ffaSHans Petter Selasky ib_service_record_t service_rec; 148d6b92ffaSHans Petter Selasky ib_slvl_table_record_t slvl_rec; 149d6b92ffaSHans Petter Selasky ib_sminfo_record_t sminfo_rec; 150d6b92ffaSHans Petter Selasky ib_switch_info_record_t swinfo_rec; 151d6b92ffaSHans Petter Selasky ib_vl_arb_table_record_t vlarb_rec; 152d6b92ffaSHans Petter Selasky } resp; 153d6b92ffaSHans Petter Selasky } osm_sa_item_t; 154d6b92ffaSHans Petter Selasky /* 155d6b92ffaSHans Petter Selasky * NOTES 156d6b92ffaSHans Petter Selasky * Actual structure allocated is based on SA attribute 157d6b92ffaSHans Petter Selasky * type. As such, it is variable sized. The allocation 158d6b92ffaSHans Petter Selasky * occurs in the SA attribute handling code. 159d6b92ffaSHans Petter Selasky * Note also that the size is specified external 160d6b92ffaSHans Petter Selasky * to this structure (It's passed as a parameter to 161d6b92ffaSHans Petter Selasky * osm_sa_respond). The SA_ITEM_RESP_SIZE macro 162d6b92ffaSHans Petter Selasky * facilitates determining the size required. 163d6b92ffaSHans Petter Selasky * 164d6b92ffaSHans Petter Selasky ***********/ 165d6b92ffaSHans Petter Selasky 166d6b92ffaSHans Petter Selasky #define SA_ITEM_RESP_SIZE(_m) offsetof(osm_sa_item_t, resp._m) + \ 167d6b92ffaSHans Petter Selasky sizeof(((osm_sa_item_t *)NULL)->resp._m) 168d6b92ffaSHans Petter Selasky 169d6b92ffaSHans Petter Selasky /****s* OpenSM: SM/osm_sa_t 170d6b92ffaSHans Petter Selasky * NAME 171d6b92ffaSHans Petter Selasky * osm_sa_t 172d6b92ffaSHans Petter Selasky * 173d6b92ffaSHans Petter Selasky * DESCRIPTION 174d6b92ffaSHans Petter Selasky * Subnet Administration structure. 175d6b92ffaSHans Petter Selasky * 176d6b92ffaSHans Petter Selasky * This object should be treated as opaque and should 177d6b92ffaSHans Petter Selasky * be manipulated only through the provided functions. 178d6b92ffaSHans Petter Selasky * 179d6b92ffaSHans Petter Selasky * SYNOPSIS 180d6b92ffaSHans Petter Selasky */ 181d6b92ffaSHans Petter Selasky typedef struct osm_sa { 182d6b92ffaSHans Petter Selasky osm_sa_state_t state; 183d6b92ffaSHans Petter Selasky osm_sm_t *sm; 184d6b92ffaSHans Petter Selasky osm_subn_t *p_subn; 185d6b92ffaSHans Petter Selasky osm_vendor_t *p_vendor; 186d6b92ffaSHans Petter Selasky osm_log_t *p_log; 187d6b92ffaSHans Petter Selasky osm_mad_pool_t *p_mad_pool; 188d6b92ffaSHans Petter Selasky cl_dispatcher_t *p_disp; 189d6b92ffaSHans Petter Selasky cl_dispatcher_t *p_set_disp; 190d6b92ffaSHans Petter Selasky cl_plock_t *p_lock; 191d6b92ffaSHans Petter Selasky atomic32_t sa_trans_id; 192d6b92ffaSHans Petter Selasky osm_sa_mad_ctrl_t mad_ctrl; 193d6b92ffaSHans Petter Selasky cl_timer_t sr_timer; 194d6b92ffaSHans Petter Selasky boolean_t dirty; 195d6b92ffaSHans Petter Selasky cl_disp_reg_handle_t cpi_disp_h; 196d6b92ffaSHans Petter Selasky cl_disp_reg_handle_t nr_disp_h; 197d6b92ffaSHans Petter Selasky cl_disp_reg_handle_t pir_disp_h; 198d6b92ffaSHans Petter Selasky cl_disp_reg_handle_t gir_disp_h; 199d6b92ffaSHans Petter Selasky cl_disp_reg_handle_t lr_disp_h; 200d6b92ffaSHans Petter Selasky cl_disp_reg_handle_t pr_disp_h; 201d6b92ffaSHans Petter Selasky cl_disp_reg_handle_t smir_disp_h; 202d6b92ffaSHans Petter Selasky cl_disp_reg_handle_t mcmr_disp_h; 203d6b92ffaSHans Petter Selasky cl_disp_reg_handle_t sr_disp_h; 204d6b92ffaSHans Petter Selasky #if defined (VENDOR_RMPP_SUPPORT) && defined (DUAL_SIDED_RMPP) 205d6b92ffaSHans Petter Selasky cl_disp_reg_handle_t mpr_disp_h; 206d6b92ffaSHans Petter Selasky #endif 207d6b92ffaSHans Petter Selasky cl_disp_reg_handle_t infr_disp_h; 208d6b92ffaSHans Petter Selasky cl_disp_reg_handle_t infir_disp_h; 209d6b92ffaSHans Petter Selasky cl_disp_reg_handle_t vlarb_disp_h; 210d6b92ffaSHans Petter Selasky cl_disp_reg_handle_t slvl_disp_h; 211d6b92ffaSHans Petter Selasky cl_disp_reg_handle_t pkey_disp_h; 212d6b92ffaSHans Petter Selasky cl_disp_reg_handle_t lft_disp_h; 213d6b92ffaSHans Petter Selasky cl_disp_reg_handle_t sir_disp_h; 214d6b92ffaSHans Petter Selasky cl_disp_reg_handle_t mft_disp_h; 215d6b92ffaSHans Petter Selasky cl_disp_reg_handle_t infr_set_disp_h; 216d6b92ffaSHans Petter Selasky cl_disp_reg_handle_t gir_set_disp_h; 217d6b92ffaSHans Petter Selasky cl_disp_reg_handle_t mcmr_set_disp_h; 218d6b92ffaSHans Petter Selasky cl_disp_reg_handle_t sr_set_disp_h; 219d6b92ffaSHans Petter Selasky } osm_sa_t; 220d6b92ffaSHans Petter Selasky /* 221d6b92ffaSHans Petter Selasky * FIELDS 222d6b92ffaSHans Petter Selasky * state 223d6b92ffaSHans Petter Selasky * State of this SA object 224d6b92ffaSHans Petter Selasky * 225d6b92ffaSHans Petter Selasky * sm 226d6b92ffaSHans Petter Selasky * Pointer to the Subnet Manager object. 227d6b92ffaSHans Petter Selasky * 228d6b92ffaSHans Petter Selasky * p_subn 229d6b92ffaSHans Petter Selasky * Pointer to the Subnet object for this subnet. 230d6b92ffaSHans Petter Selasky * 231d6b92ffaSHans Petter Selasky * p_vendor 232d6b92ffaSHans Petter Selasky * Pointer to the vendor specific interfaces object. 233d6b92ffaSHans Petter Selasky * 234d6b92ffaSHans Petter Selasky * p_log 235d6b92ffaSHans Petter Selasky * Pointer to the log object. 236d6b92ffaSHans Petter Selasky * 237d6b92ffaSHans Petter Selasky * p_mad_pool 238d6b92ffaSHans Petter Selasky * Pointer to the MAD pool. 239d6b92ffaSHans Petter Selasky * 240d6b92ffaSHans Petter Selasky * p_disp 241d6b92ffaSHans Petter Selasky * Pointer to dispatcher 242d6b92ffaSHans Petter Selasky * 243d6b92ffaSHans Petter Selasky * p_set_disp 244d6b92ffaSHans Petter Selasky * Pointer to dispatcher for Set requests. 245d6b92ffaSHans Petter Selasky * 246d6b92ffaSHans Petter Selasky * p_lock 247d6b92ffaSHans Petter Selasky * Pointer to Lock for serialization 248d6b92ffaSHans Petter Selasky * 249d6b92ffaSHans Petter Selasky * sa_trans_id 250d6b92ffaSHans Petter Selasky * Transaction ID 251d6b92ffaSHans Petter Selasky * 252d6b92ffaSHans Petter Selasky * mad_ctrl 253d6b92ffaSHans Petter Selasky * Mad Controller 254d6b92ffaSHans Petter Selasky * 255d6b92ffaSHans Petter Selasky * dirty 256d6b92ffaSHans Petter Selasky * A flag that denotes that SA DB is dirty and needs 257d6b92ffaSHans Petter Selasky * to be written to the dump file (if dumping is enabled) 258d6b92ffaSHans Petter Selasky * 259d6b92ffaSHans Petter Selasky * SEE ALSO 260d6b92ffaSHans Petter Selasky * SM object 261d6b92ffaSHans Petter Selasky *********/ 262d6b92ffaSHans Petter Selasky 263d6b92ffaSHans Petter Selasky /****f* OpenSM: SA/osm_sa_construct 264d6b92ffaSHans Petter Selasky * NAME 265d6b92ffaSHans Petter Selasky * osm_sa_construct 266d6b92ffaSHans Petter Selasky * 267d6b92ffaSHans Petter Selasky * DESCRIPTION 268d6b92ffaSHans Petter Selasky * This function constructs an SA object. 269d6b92ffaSHans Petter Selasky * 270d6b92ffaSHans Petter Selasky * SYNOPSIS 271d6b92ffaSHans Petter Selasky */ 272d6b92ffaSHans Petter Selasky void osm_sa_construct(IN osm_sa_t * p_sa); 273d6b92ffaSHans Petter Selasky /* 274d6b92ffaSHans Petter Selasky * PARAMETERS 275d6b92ffaSHans Petter Selasky * p_sa 276d6b92ffaSHans Petter Selasky * [in] Pointer to a SA object to construct. 277d6b92ffaSHans Petter Selasky * 278d6b92ffaSHans Petter Selasky * RETURN VALUE 279d6b92ffaSHans Petter Selasky * This function does not return a value. 280d6b92ffaSHans Petter Selasky * 281d6b92ffaSHans Petter Selasky * NOTES 282d6b92ffaSHans Petter Selasky * Allows calling osm_sa_destroy. 283d6b92ffaSHans Petter Selasky * 284d6b92ffaSHans Petter Selasky * Calling osm_sa_construct is a prerequisite to calling any other 285d6b92ffaSHans Petter Selasky * method except osm_sa_init. 286d6b92ffaSHans Petter Selasky * 287d6b92ffaSHans Petter Selasky * SEE ALSO 288d6b92ffaSHans Petter Selasky * SA object, osm_sa_init, osm_sa_destroy 289d6b92ffaSHans Petter Selasky *********/ 290d6b92ffaSHans Petter Selasky 291d6b92ffaSHans Petter Selasky /****f* OpenSM: SA/osm_sa_shutdown 292d6b92ffaSHans Petter Selasky * NAME 293d6b92ffaSHans Petter Selasky * osm_sa_shutdown 294d6b92ffaSHans Petter Selasky * 295d6b92ffaSHans Petter Selasky * DESCRIPTION 296d6b92ffaSHans Petter Selasky * The osm_sa_shutdown function shutdowns an SA, unregistering from all 297d6b92ffaSHans Petter Selasky * dispatcher messages and unbinding the QP1 mad service 298d6b92ffaSHans Petter Selasky * 299d6b92ffaSHans Petter Selasky * SYNOPSIS 300d6b92ffaSHans Petter Selasky */ 301d6b92ffaSHans Petter Selasky void osm_sa_shutdown(IN osm_sa_t * p_sa); 302d6b92ffaSHans Petter Selasky /* 303d6b92ffaSHans Petter Selasky * PARAMETERS 304d6b92ffaSHans Petter Selasky * p_sa 305d6b92ffaSHans Petter Selasky * [in] Pointer to a SA object to shutdown. 306d6b92ffaSHans Petter Selasky * 307d6b92ffaSHans Petter Selasky * RETURN VALUE 308d6b92ffaSHans Petter Selasky * This function does not return a value. 309d6b92ffaSHans Petter Selasky * 310d6b92ffaSHans Petter Selasky * SEE ALSO 311d6b92ffaSHans Petter Selasky * SA object, osm_sa_construct, osm_sa_init 312d6b92ffaSHans Petter Selasky *********/ 313d6b92ffaSHans Petter Selasky 314d6b92ffaSHans Petter Selasky /****f* OpenSM: SA/osm_sa_destroy 315d6b92ffaSHans Petter Selasky * NAME 316d6b92ffaSHans Petter Selasky * osm_sa_destroy 317d6b92ffaSHans Petter Selasky * 318d6b92ffaSHans Petter Selasky * DESCRIPTION 319d6b92ffaSHans Petter Selasky * The osm_sa_destroy function destroys an SA, releasing 320d6b92ffaSHans Petter Selasky * all resources. 321d6b92ffaSHans Petter Selasky * 322d6b92ffaSHans Petter Selasky * SYNOPSIS 323d6b92ffaSHans Petter Selasky */ 324d6b92ffaSHans Petter Selasky void osm_sa_destroy(IN osm_sa_t * p_sa); 325d6b92ffaSHans Petter Selasky /* 326d6b92ffaSHans Petter Selasky * PARAMETERS 327d6b92ffaSHans Petter Selasky * p_sa 328d6b92ffaSHans Petter Selasky * [in] Pointer to a SA object to destroy. 329d6b92ffaSHans Petter Selasky * 330d6b92ffaSHans Petter Selasky * RETURN VALUE 331d6b92ffaSHans Petter Selasky * This function does not return a value. 332d6b92ffaSHans Petter Selasky * 333d6b92ffaSHans Petter Selasky * NOTES 334d6b92ffaSHans Petter Selasky * Performs any necessary cleanup of the specified SA object. 335d6b92ffaSHans Petter Selasky * Further operations should not be attempted on the destroyed object. 336d6b92ffaSHans Petter Selasky * This function should only be called after a call to osm_sa_construct or 337d6b92ffaSHans Petter Selasky * osm_sa_init. 338d6b92ffaSHans Petter Selasky * 339d6b92ffaSHans Petter Selasky * SEE ALSO 340d6b92ffaSHans Petter Selasky * SA object, osm_sa_construct, osm_sa_init 341d6b92ffaSHans Petter Selasky *********/ 342d6b92ffaSHans Petter Selasky 343d6b92ffaSHans Petter Selasky /****f* OpenSM: SA/osm_sa_init 344d6b92ffaSHans Petter Selasky * NAME 345d6b92ffaSHans Petter Selasky * osm_sa_init 346d6b92ffaSHans Petter Selasky * 347d6b92ffaSHans Petter Selasky * DESCRIPTION 348d6b92ffaSHans Petter Selasky * The osm_sa_init function initializes a SA object for use. 349d6b92ffaSHans Petter Selasky * 350d6b92ffaSHans Petter Selasky * SYNOPSIS 351d6b92ffaSHans Petter Selasky */ 352d6b92ffaSHans Petter Selasky ib_api_status_t osm_sa_init(IN osm_sm_t * p_sm, IN osm_sa_t * p_sa, 353d6b92ffaSHans Petter Selasky IN osm_subn_t * p_subn, IN osm_vendor_t * p_vendor, 354d6b92ffaSHans Petter Selasky IN osm_mad_pool_t * p_mad_pool, 355d6b92ffaSHans Petter Selasky IN osm_log_t * p_log, IN osm_stats_t * p_stats, 356d6b92ffaSHans Petter Selasky IN cl_dispatcher_t * p_disp, 357d6b92ffaSHans Petter Selasky IN cl_dispatcher_t * p_set_disp, 358d6b92ffaSHans Petter Selasky IN cl_plock_t * p_lock); 359d6b92ffaSHans Petter Selasky /* 360d6b92ffaSHans Petter Selasky * PARAMETERS 361d6b92ffaSHans Petter Selasky * p_sa 362d6b92ffaSHans Petter Selasky * [in] Pointer to an osm_sa_t object to initialize. 363d6b92ffaSHans Petter Selasky * 364d6b92ffaSHans Petter Selasky * p_subn 365d6b92ffaSHans Petter Selasky * [in] Pointer to the Subnet object for this subnet. 366d6b92ffaSHans Petter Selasky * 367d6b92ffaSHans Petter Selasky * p_vendor 368d6b92ffaSHans Petter Selasky * [in] Pointer to the vendor specific interfaces object. 369d6b92ffaSHans Petter Selasky * 370d6b92ffaSHans Petter Selasky * p_mad_pool 371d6b92ffaSHans Petter Selasky * [in] Pointer to the MAD pool. 372d6b92ffaSHans Petter Selasky * 373d6b92ffaSHans Petter Selasky * p_log 374d6b92ffaSHans Petter Selasky * [in] Pointer to the log object. 375d6b92ffaSHans Petter Selasky * 376d6b92ffaSHans Petter Selasky * p_stats 377d6b92ffaSHans Petter Selasky * [in] Pointer to the statistics object. 378d6b92ffaSHans Petter Selasky * 379d6b92ffaSHans Petter Selasky * p_disp 380d6b92ffaSHans Petter Selasky * [in] Pointer to the OpenSM central Dispatcher. 381d6b92ffaSHans Petter Selasky * 382d6b92ffaSHans Petter Selasky * p_set_disp 383d6b92ffaSHans Petter Selasky * [in] Pointer to the OpenSM Dispatcher for Set requests. 384d6b92ffaSHans Petter Selasky * 385d6b92ffaSHans Petter Selasky * p_lock 386d6b92ffaSHans Petter Selasky * [in] Pointer to the OpenSM serializing lock. 387d6b92ffaSHans Petter Selasky * 388d6b92ffaSHans Petter Selasky * RETURN VALUES 389d6b92ffaSHans Petter Selasky * CL_SUCCESS if the SA object was initialized successfully. 390d6b92ffaSHans Petter Selasky * 391d6b92ffaSHans Petter Selasky * NOTES 392d6b92ffaSHans Petter Selasky * Allows calling other SA methods. 393d6b92ffaSHans Petter Selasky * 394d6b92ffaSHans Petter Selasky * SEE ALSO 395d6b92ffaSHans Petter Selasky * SA object, osm_sa_construct, osm_sa_destroy 396d6b92ffaSHans Petter Selasky *********/ 397d6b92ffaSHans Petter Selasky 398d6b92ffaSHans Petter Selasky /****f* OpenSM: SA/osm_sa_bind 399d6b92ffaSHans Petter Selasky * NAME 400d6b92ffaSHans Petter Selasky * osm_sa_bind 401d6b92ffaSHans Petter Selasky * 402d6b92ffaSHans Petter Selasky * DESCRIPTION 403d6b92ffaSHans Petter Selasky * Binds the SA object to a port guid. 404d6b92ffaSHans Petter Selasky * 405d6b92ffaSHans Petter Selasky * SYNOPSIS 406d6b92ffaSHans Petter Selasky */ 407d6b92ffaSHans Petter Selasky ib_api_status_t osm_sa_bind(IN osm_sa_t * p_sa, IN ib_net64_t port_guid); 408d6b92ffaSHans Petter Selasky /* 409d6b92ffaSHans Petter Selasky * PARAMETERS 410d6b92ffaSHans Petter Selasky * p_sa 411d6b92ffaSHans Petter Selasky * [in] Pointer to an osm_sa_t object to bind. 412d6b92ffaSHans Petter Selasky * 413d6b92ffaSHans Petter Selasky * port_guid 414d6b92ffaSHans Petter Selasky * [in] Local port GUID with which to bind. 415d6b92ffaSHans Petter Selasky * 416d6b92ffaSHans Petter Selasky * 417d6b92ffaSHans Petter Selasky * RETURN VALUES 418d6b92ffaSHans Petter Selasky * None 419d6b92ffaSHans Petter Selasky * 420d6b92ffaSHans Petter Selasky * NOTES 421d6b92ffaSHans Petter Selasky * A given SA object can only be bound to one port at a time. 422d6b92ffaSHans Petter Selasky * 423d6b92ffaSHans Petter Selasky * SEE ALSO 424d6b92ffaSHans Petter Selasky *********/ 425d6b92ffaSHans Petter Selasky 426d6b92ffaSHans Petter Selasky /****f* OpenSM: SA/osm_sa_send 427d6b92ffaSHans Petter Selasky * NAME 428d6b92ffaSHans Petter Selasky * osm_sa_send 429d6b92ffaSHans Petter Selasky * 430d6b92ffaSHans Petter Selasky * DESCRIPTION 431d6b92ffaSHans Petter Selasky * Sends SA MAD via osm_vendor_send and maintains the QP1 sent statistic 432d6b92ffaSHans Petter Selasky * 433d6b92ffaSHans Petter Selasky * SYNOPSIS 434d6b92ffaSHans Petter Selasky */ 435d6b92ffaSHans Petter Selasky ib_api_status_t osm_sa_send(osm_sa_t *sa, IN osm_madw_t * p_madw, 436d6b92ffaSHans Petter Selasky IN boolean_t resp_expected); 437d6b92ffaSHans Petter Selasky 438d6b92ffaSHans Petter Selasky /****f* IBA Base: Types/osm_sa_send_error 439d6b92ffaSHans Petter Selasky * NAME 440d6b92ffaSHans Petter Selasky * osm_sa_send_error 441d6b92ffaSHans Petter Selasky * 442d6b92ffaSHans Petter Selasky * DESCRIPTION 443d6b92ffaSHans Petter Selasky * Sends a generic SA response with the specified error status. 444d6b92ffaSHans Petter Selasky * The payload is simply replicated from the request MAD. 445d6b92ffaSHans Petter Selasky * 446d6b92ffaSHans Petter Selasky * SYNOPSIS 447d6b92ffaSHans Petter Selasky */ 448d6b92ffaSHans Petter Selasky void osm_sa_send_error(IN osm_sa_t * sa, IN const osm_madw_t * p_madw, 449d6b92ffaSHans Petter Selasky IN ib_net16_t sa_status); 450d6b92ffaSHans Petter Selasky /* 451d6b92ffaSHans Petter Selasky * PARAMETERS 452d6b92ffaSHans Petter Selasky * sa 453d6b92ffaSHans Petter Selasky * [in] Pointer to an osm_sa_t object. 454d6b92ffaSHans Petter Selasky * 455d6b92ffaSHans Petter Selasky * p_madw 456d6b92ffaSHans Petter Selasky * [in] Original MAD to which the response must be sent. 457d6b92ffaSHans Petter Selasky * 458d6b92ffaSHans Petter Selasky * sa_status 459d6b92ffaSHans Petter Selasky * [in] Status to send in the response. 460d6b92ffaSHans Petter Selasky * 461d6b92ffaSHans Petter Selasky * RETURN VALUES 462d6b92ffaSHans Petter Selasky * None. 463d6b92ffaSHans Petter Selasky * 464d6b92ffaSHans Petter Selasky * SEE ALSO 465d6b92ffaSHans Petter Selasky * SA object 466d6b92ffaSHans Petter Selasky *********/ 467d6b92ffaSHans Petter Selasky 468d6b92ffaSHans Petter Selasky /****f* OpenSM: SA/osm_sa_respond 469d6b92ffaSHans Petter Selasky * NAME 470d6b92ffaSHans Petter Selasky * osm_sa_respond 471d6b92ffaSHans Petter Selasky * 472d6b92ffaSHans Petter Selasky * DESCRIPTION 473d6b92ffaSHans Petter Selasky * Sends SA MAD response 474d6b92ffaSHans Petter Selasky */ 475d6b92ffaSHans Petter Selasky void osm_sa_respond(osm_sa_t *sa, osm_madw_t *madw, size_t attr_size, 476d6b92ffaSHans Petter Selasky cl_qlist_t *list); 477d6b92ffaSHans Petter Selasky /* 478d6b92ffaSHans Petter Selasky * PARAMETERS 479d6b92ffaSHans Petter Selasky * sa 480d6b92ffaSHans Petter Selasky * [in] Pointer to an osm_sa_t object. 481d6b92ffaSHans Petter Selasky * 482d6b92ffaSHans Petter Selasky * p_madw 483d6b92ffaSHans Petter Selasky * [in] Original MAD to which the response must be sent. 484d6b92ffaSHans Petter Selasky * 485d6b92ffaSHans Petter Selasky * attr_size 486d6b92ffaSHans Petter Selasky * [in] Size of this SA attribute. 487d6b92ffaSHans Petter Selasky * 488d6b92ffaSHans Petter Selasky * list 489d6b92ffaSHans Petter Selasky * [in] List of attribute to respond - it will be freed after 490d6b92ffaSHans Petter Selasky * sending. 491d6b92ffaSHans Petter Selasky * 492d6b92ffaSHans Petter Selasky * RETURN VALUES 493d6b92ffaSHans Petter Selasky * None. 494d6b92ffaSHans Petter Selasky * 495d6b92ffaSHans Petter Selasky * SEE ALSO 496d6b92ffaSHans Petter Selasky * SA object 497d6b92ffaSHans Petter Selasky *********/ 498d6b92ffaSHans Petter Selasky 499d6b92ffaSHans Petter Selasky struct osm_opensm; 500d6b92ffaSHans Petter Selasky /****f* OpenSM: SA/osm_sa_db_file_dump 501d6b92ffaSHans Petter Selasky * NAME 502d6b92ffaSHans Petter Selasky * osm_sa_db_file_dump 503d6b92ffaSHans Petter Selasky * 504d6b92ffaSHans Petter Selasky * DESCRIPTION 505d6b92ffaSHans Petter Selasky * Dumps the SA DB to the dump file. 506d6b92ffaSHans Petter Selasky * 507d6b92ffaSHans Petter Selasky * SYNOPSIS 508d6b92ffaSHans Petter Selasky */ 509d6b92ffaSHans Petter Selasky int osm_sa_db_file_dump(struct osm_opensm *p_osm); 510d6b92ffaSHans Petter Selasky /* 511d6b92ffaSHans Petter Selasky * PARAMETERS 512d6b92ffaSHans Petter Selasky * p_osm 513d6b92ffaSHans Petter Selasky * [in] Pointer to an osm_opensm_t object. 514d6b92ffaSHans Petter Selasky * 515d6b92ffaSHans Petter Selasky * RETURN VALUES 516d6b92ffaSHans Petter Selasky * 0 if the SA DB was actually dumped 517d6b92ffaSHans Petter Selasky * >0 if there was no need to dump the SA DB 518d6b92ffaSHans Petter Selasky * <0 if some error occurred. 519d6b92ffaSHans Petter Selasky * 520d6b92ffaSHans Petter Selasky *********/ 521d6b92ffaSHans Petter Selasky 522d6b92ffaSHans Petter Selasky /****f* OpenSM: SA/osm_sa_db_file_load 523d6b92ffaSHans Petter Selasky * NAME 524d6b92ffaSHans Petter Selasky * osm_sa_db_file_load 525d6b92ffaSHans Petter Selasky * 526d6b92ffaSHans Petter Selasky * DESCRIPTION 527d6b92ffaSHans Petter Selasky * Loads SA DB from the file. 528d6b92ffaSHans Petter Selasky * 529d6b92ffaSHans Petter Selasky * SYNOPSIS 530d6b92ffaSHans Petter Selasky */ 531d6b92ffaSHans Petter Selasky int osm_sa_db_file_load(struct osm_opensm *p_osm); 532d6b92ffaSHans Petter Selasky /* 533d6b92ffaSHans Petter Selasky * PARAMETERS 534d6b92ffaSHans Petter Selasky * p_osm 535d6b92ffaSHans Petter Selasky * [in] Pointer to an osm_opensm_t object. 536d6b92ffaSHans Petter Selasky * 537d6b92ffaSHans Petter Selasky * RETURN VALUES 538d6b92ffaSHans Petter Selasky * 0 on success, other value on failure. 539d6b92ffaSHans Petter Selasky * 540d6b92ffaSHans Petter Selasky *********/ 541d6b92ffaSHans Petter Selasky 542d6b92ffaSHans Petter Selasky /****f* OpenSM: MC Member Record Receiver/osm_mcmr_rcv_find_or_create_new_mgrp 543d6b92ffaSHans Petter Selasky * NAME 544d6b92ffaSHans Petter Selasky * osm_mcmr_rcv_find_or_create_new_mgrp 545d6b92ffaSHans Petter Selasky * 546d6b92ffaSHans Petter Selasky * DESCRIPTION 547d6b92ffaSHans Petter Selasky * Create new Multicast group 548d6b92ffaSHans Petter Selasky * 549d6b92ffaSHans Petter Selasky * SYNOPSIS 550d6b92ffaSHans Petter Selasky */ 551d6b92ffaSHans Petter Selasky 552d6b92ffaSHans Petter Selasky osm_mgrp_t *osm_mcmr_rcv_find_or_create_new_mgrp(IN osm_sa_t * sa, 553d6b92ffaSHans Petter Selasky IN ib_net64_t comp_mask, 554d6b92ffaSHans Petter Selasky IN ib_member_rec_t * 555d6b92ffaSHans Petter Selasky p_recvd_mcmember_rec); 556d6b92ffaSHans Petter Selasky /* 557d6b92ffaSHans Petter Selasky * PARAMETERS 558d6b92ffaSHans Petter Selasky * p_sa 559d6b92ffaSHans Petter Selasky * [in] Pointer to an osm_sa_t object. 560d6b92ffaSHans Petter Selasky * comp_mask 561d6b92ffaSHans Petter Selasky * [in] SA query component mask 562d6b92ffaSHans Petter Selasky * p_recvd_mcmember_rec 563d6b92ffaSHans Petter Selasky * [in] Received Multicast member record 564d6b92ffaSHans Petter Selasky * 565d6b92ffaSHans Petter Selasky * RETURN VALUES 566d6b92ffaSHans Petter Selasky * The pointer to MC group object found or created, NULL in case of errors 567d6b92ffaSHans Petter Selasky * 568d6b92ffaSHans Petter Selasky *********/ 569d6b92ffaSHans Petter Selasky 570d6b92ffaSHans Petter Selasky /** 571d6b92ffaSHans Petter Selasky * The following expose functionality of osm_sa_path_record.c for internal use 572d6b92ffaSHans Petter Selasky * by sub managers 573d6b92ffaSHans Petter Selasky */ 574d6b92ffaSHans Petter Selasky typedef struct osm_path_parms { 575d6b92ffaSHans Petter Selasky ib_net16_t pkey; 576d6b92ffaSHans Petter Selasky uint8_t mtu; 577d6b92ffaSHans Petter Selasky uint8_t rate; 578d6b92ffaSHans Petter Selasky uint8_t sl; 579d6b92ffaSHans Petter Selasky uint8_t pkt_life; 580d6b92ffaSHans Petter Selasky boolean_t reversible; 581d6b92ffaSHans Petter Selasky int hops; 582d6b92ffaSHans Petter Selasky } osm_path_parms_t; 583d6b92ffaSHans Petter Selasky 584d6b92ffaSHans Petter Selasky ib_api_status_t osm_get_path_params(IN osm_sa_t * sa, 585d6b92ffaSHans Petter Selasky IN const osm_port_t * p_src_port, 586d6b92ffaSHans Petter Selasky IN const uint16_t slid_ho, 587d6b92ffaSHans Petter Selasky IN const osm_port_t * p_dest_port, 588d6b92ffaSHans Petter Selasky IN const uint16_t dlid_ho, 589d6b92ffaSHans Petter Selasky OUT osm_path_parms_t * p_parms); 590d6b92ffaSHans Petter Selasky 591d6b92ffaSHans Petter Selasky ib_net16_t osm_pr_get_end_points(IN osm_sa_t * sa, 592d6b92ffaSHans Petter Selasky IN const ib_sa_mad_t *sa_mad, 593d6b92ffaSHans Petter Selasky OUT const osm_alias_guid_t ** pp_src_alias_guid, 594d6b92ffaSHans Petter Selasky OUT const osm_alias_guid_t ** pp_dest_alias_guid, 595d6b92ffaSHans Petter Selasky OUT const osm_port_t ** pp_src_port, 596d6b92ffaSHans Petter Selasky OUT const osm_port_t ** pp_dest_port, 597d6b92ffaSHans Petter Selasky OUT const ib_gid_t ** pp_sgid, 598d6b92ffaSHans Petter Selasky OUT const ib_gid_t ** pp_dgid); 599d6b92ffaSHans Petter Selasky 600d6b92ffaSHans Petter Selasky void osm_pr_process_pair(IN osm_sa_t * sa, IN const ib_sa_mad_t * sa_mad, 601d6b92ffaSHans Petter Selasky IN const osm_port_t * requester_port, 602d6b92ffaSHans Petter Selasky IN const osm_alias_guid_t * p_src_alias_guid, 603d6b92ffaSHans Petter Selasky IN const osm_alias_guid_t * p_dest_alias_guid, 604d6b92ffaSHans Petter Selasky IN const ib_gid_t * p_sgid, 605d6b92ffaSHans Petter Selasky IN const ib_gid_t * p_dgid, 606d6b92ffaSHans Petter Selasky IN cl_qlist_t * p_list); 607d6b92ffaSHans Petter Selasky 608d6b92ffaSHans Petter Selasky void osm_pr_process_half(IN osm_sa_t * sa, IN const ib_sa_mad_t * sa_mad, 609d6b92ffaSHans Petter Selasky IN const osm_port_t * requester_port, 610d6b92ffaSHans Petter Selasky IN const osm_alias_guid_t * p_src_alias_guid, 611d6b92ffaSHans Petter Selasky IN const osm_alias_guid_t * p_dest_alias_guid, 612d6b92ffaSHans Petter Selasky IN const ib_gid_t * p_sgid, 613d6b92ffaSHans Petter Selasky IN const ib_gid_t * p_dgid, 614d6b92ffaSHans Petter Selasky IN cl_qlist_t * p_list); 615d6b92ffaSHans Petter Selasky 616d6b92ffaSHans Petter Selasky END_C_DECLS 617d6b92ffaSHans Petter Selasky #endif /* _OSM_SA_H_ */ 618