1d6b92ffaSHans Petter Selasky /*
2d6b92ffaSHans Petter Selasky  * Copyright (c) 2004-2009 Voltaire, Inc. All rights reserved.
3d6b92ffaSHans Petter Selasky  * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
4d6b92ffaSHans Petter Selasky  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
5d6b92ffaSHans Petter Selasky  * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved.
6d6b92ffaSHans Petter Selasky  *
7d6b92ffaSHans Petter Selasky  * This software is available to you under a choice of one of two
8d6b92ffaSHans Petter Selasky  * licenses.  You may choose to be licensed under the terms of the GNU
9d6b92ffaSHans Petter Selasky  * General Public License (GPL) Version 2, available from the file
10d6b92ffaSHans Petter Selasky  * COPYING in the main directory of this source tree, or the
11d6b92ffaSHans Petter Selasky  * OpenIB.org BSD license below:
12d6b92ffaSHans Petter Selasky  *
13d6b92ffaSHans Petter Selasky  *     Redistribution and use in source and binary forms, with or
14d6b92ffaSHans Petter Selasky  *     without modification, are permitted provided that the following
15d6b92ffaSHans Petter Selasky  *     conditions are met:
16d6b92ffaSHans Petter Selasky  *
17d6b92ffaSHans Petter Selasky  *      - Redistributions of source code must retain the above
18d6b92ffaSHans Petter Selasky  *        copyright notice, this list of conditions and the following
19d6b92ffaSHans Petter Selasky  *        disclaimer.
20d6b92ffaSHans Petter Selasky  *
21d6b92ffaSHans Petter Selasky  *      - Redistributions in binary form must reproduce the above
22d6b92ffaSHans Petter Selasky  *        copyright notice, this list of conditions and the following
23d6b92ffaSHans Petter Selasky  *        disclaimer in the documentation and/or other materials
24d6b92ffaSHans Petter Selasky  *        provided with the distribution.
25d6b92ffaSHans Petter Selasky  *
26d6b92ffaSHans Petter Selasky  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
27d6b92ffaSHans Petter Selasky  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
28d6b92ffaSHans Petter Selasky  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
29d6b92ffaSHans Petter Selasky  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
30d6b92ffaSHans Petter Selasky  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
31d6b92ffaSHans Petter Selasky  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
32d6b92ffaSHans Petter Selasky  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
33d6b92ffaSHans Petter Selasky  * SOFTWARE.
34d6b92ffaSHans Petter Selasky  *
35d6b92ffaSHans Petter Selasky  */
36d6b92ffaSHans Petter Selasky 
37d6b92ffaSHans Petter Selasky /*
38d6b92ffaSHans Petter Selasky  * Abstract:
39d6b92ffaSHans Petter Selasky  * 	Declaration of osm_inform_rec_t.
40d6b92ffaSHans Petter Selasky  *	This object represents an IBA Inform Record.
41d6b92ffaSHans Petter Selasky  *	This object is part of the OpenSM family of objects.
42d6b92ffaSHans Petter Selasky  *
43d6b92ffaSHans Petter Selasky  * Author:
44d6b92ffaSHans Petter Selasky  *    Eitan Zahavi, Mellanox
45d6b92ffaSHans Petter Selasky  */
46d6b92ffaSHans Petter Selasky 
47d6b92ffaSHans Petter Selasky #ifndef _OSM_INFR_H_
48d6b92ffaSHans Petter Selasky #define _OSM_INFR_H_
49d6b92ffaSHans Petter Selasky 
50d6b92ffaSHans Petter Selasky #include <iba/ib_types.h>
51d6b92ffaSHans Petter Selasky #include <complib/cl_qmap.h>
52d6b92ffaSHans Petter Selasky #include <complib/cl_spinlock.h>
53d6b92ffaSHans Petter Selasky #include <opensm/osm_subnet.h>
54d6b92ffaSHans Petter Selasky #include <opensm/osm_madw.h>
55d6b92ffaSHans Petter Selasky #include <opensm/osm_log.h>
56d6b92ffaSHans Petter Selasky #include <opensm/osm_sa.h>
57d6b92ffaSHans Petter Selasky 
58d6b92ffaSHans Petter Selasky #ifdef __cplusplus
59d6b92ffaSHans Petter Selasky #  define BEGIN_C_DECLS extern "C" {
60d6b92ffaSHans Petter Selasky #  define END_C_DECLS   }
61d6b92ffaSHans Petter Selasky #else				/* !__cplusplus */
62d6b92ffaSHans Petter Selasky #  define BEGIN_C_DECLS
63d6b92ffaSHans Petter Selasky #  define END_C_DECLS
64d6b92ffaSHans Petter Selasky #endif				/* __cplusplus */
65d6b92ffaSHans Petter Selasky 
66d6b92ffaSHans Petter Selasky BEGIN_C_DECLS
67d6b92ffaSHans Petter Selasky /****h* OpenSM/Inform Record
68d6b92ffaSHans Petter Selasky * NAME
69d6b92ffaSHans Petter Selasky *	Inform Record
70d6b92ffaSHans Petter Selasky *
71d6b92ffaSHans Petter Selasky * DESCRIPTION
72d6b92ffaSHans Petter Selasky *	The Inform record encapsulates the information needed by the
73d6b92ffaSHans Petter Selasky *	SA to manage InformInfo registrations and sending Reports(Notice)
74d6b92ffaSHans Petter Selasky *	when SM receives Traps for registered LIDs.
75d6b92ffaSHans Petter Selasky *
76d6b92ffaSHans Petter Selasky *	The inform records is not thread safe, thus callers must provide
77d6b92ffaSHans Petter Selasky *	serialization.
78d6b92ffaSHans Petter Selasky *
79d6b92ffaSHans Petter Selasky *	This object should be treated as opaque and should be
80d6b92ffaSHans Petter Selasky *	manipulated only through the provided functions.
81d6b92ffaSHans Petter Selasky *
82d6b92ffaSHans Petter Selasky * AUTHOR
83d6b92ffaSHans Petter Selasky *    Eitan Zahavi, Mellanox
84d6b92ffaSHans Petter Selasky *
85d6b92ffaSHans Petter Selasky *********/
86d6b92ffaSHans Petter Selasky /****s* OpenSM: Inform Record/osm_infr_t
87d6b92ffaSHans Petter Selasky * NAME
88d6b92ffaSHans Petter Selasky *	osm_infr_t
89d6b92ffaSHans Petter Selasky *
90d6b92ffaSHans Petter Selasky * DESCRIPTION
91d6b92ffaSHans Petter Selasky *	Inform Record structure.
92d6b92ffaSHans Petter Selasky *
93d6b92ffaSHans Petter Selasky *	The osm_infr_t object should be treated as opaque and should
94d6b92ffaSHans Petter Selasky *	be manipulated only through the provided functions.
95d6b92ffaSHans Petter Selasky *
96d6b92ffaSHans Petter Selasky * SYNOPSIS
97d6b92ffaSHans Petter Selasky */
98d6b92ffaSHans Petter Selasky typedef struct osm_infr {
99d6b92ffaSHans Petter Selasky 	cl_list_item_t list_item;
100d6b92ffaSHans Petter Selasky 	osm_bind_handle_t h_bind;
101d6b92ffaSHans Petter Selasky 	osm_sa_t *sa;
102d6b92ffaSHans Petter Selasky 	osm_mad_addr_t report_addr;
103d6b92ffaSHans Petter Selasky 	ib_inform_info_record_t inform_record;
104d6b92ffaSHans Petter Selasky } osm_infr_t;
105d6b92ffaSHans Petter Selasky /*
106d6b92ffaSHans Petter Selasky * FIELDS
107d6b92ffaSHans Petter Selasky *	list_item
108d6b92ffaSHans Petter Selasky *		List Item for qlist linkage.  Must be first element!!
109d6b92ffaSHans Petter Selasky *
110d6b92ffaSHans Petter Selasky *	h_bind
111d6b92ffaSHans Petter Selasky *		A handle of lower level mad srvc
112d6b92ffaSHans Petter Selasky *
113d6b92ffaSHans Petter Selasky *	sa
114d6b92ffaSHans Petter Selasky *		A pointer to osm_sa object
115d6b92ffaSHans Petter Selasky *
116d6b92ffaSHans Petter Selasky *	report_addr
117d6b92ffaSHans Petter Selasky *		Report address
118d6b92ffaSHans Petter Selasky *
119d6b92ffaSHans Petter Selasky *	inform_record
120d6b92ffaSHans Petter Selasky *		The Inform Info Record
121d6b92ffaSHans Petter Selasky *
122d6b92ffaSHans Petter Selasky * SEE ALSO
123d6b92ffaSHans Petter Selasky *********/
124d6b92ffaSHans Petter Selasky 
125d6b92ffaSHans Petter Selasky /****f* OpenSM: Inform Record/osm_infr_new
126d6b92ffaSHans Petter Selasky * NAME
127d6b92ffaSHans Petter Selasky *	osm_infr_new
128d6b92ffaSHans Petter Selasky *
129d6b92ffaSHans Petter Selasky * DESCRIPTION
130d6b92ffaSHans Petter Selasky *	Allocates and initializes a Inform Record for use.
131d6b92ffaSHans Petter Selasky *
132d6b92ffaSHans Petter Selasky * SYNOPSIS
133d6b92ffaSHans Petter Selasky */
134d6b92ffaSHans Petter Selasky osm_infr_t *osm_infr_new(IN const osm_infr_t * p_infr_rec);
135d6b92ffaSHans Petter Selasky /*
136d6b92ffaSHans Petter Selasky * PARAMETERS
137d6b92ffaSHans Petter Selasky *	p_inf_rec
138d6b92ffaSHans Petter Selasky *		[in] Pointer to IB Inform Record
139d6b92ffaSHans Petter Selasky *
140d6b92ffaSHans Petter Selasky * RETURN VALUES
141d6b92ffaSHans Petter Selasky *	pointer to osm_infr_t structure.
142d6b92ffaSHans Petter Selasky *
143d6b92ffaSHans Petter Selasky * NOTES
144d6b92ffaSHans Petter Selasky *	Allows calling other inform record methods.
145d6b92ffaSHans Petter Selasky *
146d6b92ffaSHans Petter Selasky * SEE ALSO
147d6b92ffaSHans Petter Selasky *	Inform Record, osm_infr_delete
148d6b92ffaSHans Petter Selasky *********/
149d6b92ffaSHans Petter Selasky 
150d6b92ffaSHans Petter Selasky /****f* OpenSM: Inform Record/osm_infr_delete
151d6b92ffaSHans Petter Selasky * NAME
152d6b92ffaSHans Petter Selasky *	osm_infr_delete
153d6b92ffaSHans Petter Selasky *
154d6b92ffaSHans Petter Selasky * DESCRIPTION
155d6b92ffaSHans Petter Selasky *	Destroys and deallocates the osm_infr_t structure.
156d6b92ffaSHans Petter Selasky *
157d6b92ffaSHans Petter Selasky * SYNOPSIS
158d6b92ffaSHans Petter Selasky */
159d6b92ffaSHans Petter Selasky void osm_infr_delete(IN osm_infr_t * p_infr);
160d6b92ffaSHans Petter Selasky /*
161d6b92ffaSHans Petter Selasky * PARAMETERS
162d6b92ffaSHans Petter Selasky *	p_infr
163d6b92ffaSHans Petter Selasky *		[in] Pointer to osm_infr_t structure
164d6b92ffaSHans Petter Selasky *
165d6b92ffaSHans Petter Selasky * SEE ALSO
166d6b92ffaSHans Petter Selasky *	Inform Record, osm_infr_new
167d6b92ffaSHans Petter Selasky *********/
168d6b92ffaSHans Petter Selasky 
169d6b92ffaSHans Petter Selasky /****f* OpenSM: Inform Record/osm_infr_get_by_rec
170d6b92ffaSHans Petter Selasky * NAME
171d6b92ffaSHans Petter Selasky *	osm_infr_get_by_rec
172d6b92ffaSHans Petter Selasky *
173d6b92ffaSHans Petter Selasky * DESCRIPTION
174d6b92ffaSHans Petter Selasky *	Find a matching osm_infr_t in the subnet DB by inform_info_record
175d6b92ffaSHans Petter Selasky *
176d6b92ffaSHans Petter Selasky * SYNOPSIS
177d6b92ffaSHans Petter Selasky */
178d6b92ffaSHans Petter Selasky osm_infr_t *osm_infr_get_by_rec(IN osm_subn_t const *p_subn,
179d6b92ffaSHans Petter Selasky 				IN osm_log_t * p_log,
180d6b92ffaSHans Petter Selasky 				IN osm_infr_t * p_infr_rec);
181d6b92ffaSHans Petter Selasky /*
182d6b92ffaSHans Petter Selasky * PARAMETERS
183d6b92ffaSHans Petter Selasky *	p_subn
184d6b92ffaSHans Petter Selasky *		[in] Pointer to the subnet object
185d6b92ffaSHans Petter Selasky *
186d6b92ffaSHans Petter Selasky *	p_log
187d6b92ffaSHans Petter Selasky *		[in] Pointer to the log object
188d6b92ffaSHans Petter Selasky *
189d6b92ffaSHans Petter Selasky *	p_inf_rec
190d6b92ffaSHans Petter Selasky *		[in] Pointer to an inform_info record
191d6b92ffaSHans Petter Selasky *
192d6b92ffaSHans Petter Selasky * RETURN
193d6b92ffaSHans Petter Selasky *	The matching osm_infr_t
194d6b92ffaSHans Petter Selasky * SEE ALSO
195d6b92ffaSHans Petter Selasky *	Inform Record, osm_infr_new, osm_infr_delete
196d6b92ffaSHans Petter Selasky *********/
197d6b92ffaSHans Petter Selasky 
198d6b92ffaSHans Petter Selasky void osm_infr_insert_to_db(IN osm_subn_t * p_subn, IN osm_log_t * p_log,
199d6b92ffaSHans Petter Selasky 			   IN osm_infr_t * p_infr);
200d6b92ffaSHans Petter Selasky 
201d6b92ffaSHans Petter Selasky void osm_infr_remove_from_db(IN osm_subn_t * p_subn, IN osm_log_t * p_log,
202d6b92ffaSHans Petter Selasky 			     IN osm_infr_t * p_infr);
203d6b92ffaSHans Petter Selasky 
204d6b92ffaSHans Petter Selasky /****f* OpenSM: Inform Record/osm_infr_remove_subscriptions
205d6b92ffaSHans Petter Selasky * NAME
206d6b92ffaSHans Petter Selasky *	osm_infr_remove_subscriptions
207d6b92ffaSHans Petter Selasky *
208d6b92ffaSHans Petter Selasky * DESCRIPTION
209d6b92ffaSHans Petter Selasky *	Remove all event subscriptions of a port
210d6b92ffaSHans Petter Selasky *
211d6b92ffaSHans Petter Selasky * SYNOPSIS
212d6b92ffaSHans Petter Selasky */
213d6b92ffaSHans Petter Selasky ib_api_status_t
214d6b92ffaSHans Petter Selasky osm_infr_remove_subscriptions(IN osm_subn_t * p_subn, IN osm_log_t * p_log,
215d6b92ffaSHans Petter Selasky 			      IN ib_net64_t port_guid);
216d6b92ffaSHans Petter Selasky /*
217d6b92ffaSHans Petter Selasky * PARAMETERS
218d6b92ffaSHans Petter Selasky *	p_subn
219d6b92ffaSHans Petter Selasky *		[in] Pointer to the subnet object
220d6b92ffaSHans Petter Selasky *
221d6b92ffaSHans Petter Selasky *	p_log
222d6b92ffaSHans Petter Selasky *		[in] Pointer to the log object
223d6b92ffaSHans Petter Selasky *
224d6b92ffaSHans Petter Selasky *	port_guid
225d6b92ffaSHans Petter Selasky *		[in] PortGUID of the subscriber that should be removed
226d6b92ffaSHans Petter Selasky *
227d6b92ffaSHans Petter Selasky * RETURN
228d6b92ffaSHans Petter Selasky *	CL_SUCCESS if port_guid had any subscriptions being removed
229d6b92ffaSHans Petter Selasky *	CL_NOT_FOUND if port_guid did not have any active subscriptions
230d6b92ffaSHans Petter Selasky * SEE ALSO
231d6b92ffaSHans Petter Selasky *********/
232d6b92ffaSHans Petter Selasky 
233d6b92ffaSHans Petter Selasky /****f* OpenSM: Inform Record/osm_report_notice
234d6b92ffaSHans Petter Selasky * NAME
235d6b92ffaSHans Petter Selasky *	osm_report_notice
236d6b92ffaSHans Petter Selasky *
237d6b92ffaSHans Petter Selasky * DESCRIPTION
238d6b92ffaSHans Petter Selasky * Once a Trap was received by the osm_trap_rcv, or a Trap sourced in
239d6b92ffaSHans Petter Selasky * the SM was sent (Traps 64-67) this routine is called with a copy of
240d6b92ffaSHans Petter Selasky * the notice data.
241d6b92ffaSHans Petter Selasky * Given a notice attribute - compare and see if it matches the InformInfo
242d6b92ffaSHans Petter Selasky * Element and if it does - call the Report(Notice) for the
243d6b92ffaSHans Petter Selasky * target QP registered by the address stored in the InformInfo element
244d6b92ffaSHans Petter Selasky *
245d6b92ffaSHans Petter Selasky * SYNOPSIS
246d6b92ffaSHans Petter Selasky */
247d6b92ffaSHans Petter Selasky ib_api_status_t osm_report_notice(IN osm_log_t * p_log, IN osm_subn_t * p_subn,
248d6b92ffaSHans Petter Selasky 				  IN ib_mad_notice_attr_t * p_ntc);
249d6b92ffaSHans Petter Selasky /*
250d6b92ffaSHans Petter Selasky * PARAMETERS
251d6b92ffaSHans Petter Selasky *	p_rcv
252d6b92ffaSHans Petter Selasky *		[in] Pointer to the trap receiver
253d6b92ffaSHans Petter Selasky *
254d6b92ffaSHans Petter Selasky *	p_ntc
255d6b92ffaSHans Petter Selasky *		[in] Pointer to a copy of the incoming trap notice attribute.
256d6b92ffaSHans Petter Selasky *
257d6b92ffaSHans Petter Selasky * RETURN
258d6b92ffaSHans Petter Selasky *	IB_SUCCESS on good completion
259d6b92ffaSHans Petter Selasky *
260d6b92ffaSHans Petter Selasky * SEE ALSO
261d6b92ffaSHans Petter Selasky *	Inform Record, osm_trap_rcv
262d6b92ffaSHans Petter Selasky *********/
263d6b92ffaSHans Petter Selasky 
264d6b92ffaSHans Petter Selasky END_C_DECLS
265d6b92ffaSHans Petter Selasky #endif				/* _OSM_INFR_H_ */
266