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