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