1 /*
2  * Copyright (c) 2008 Voltaire, Inc. All rights reserved.
3  * Copyright (c) 2008 Mellanox Technologies LTD. All rights reserved.
4  *
5  * This software is available to you under a choice of one of two
6  * licenses.  You may choose to be licensed under the terms of the GNU
7  * General Public License (GPL) Version 2, available from the file
8  * COPYING in the main directory of this source tree, or the
9  * OpenIB.org BSD license below:
10  *
11  *     Redistribution and use in source and binary forms, with or
12  *     without modification, are permitted provided that the following
13  *     conditions are met:
14  *
15  *      - Redistributions of source code must retain the above
16  *        copyright notice, this list of conditions and the following
17  *        disclaimer.
18  *
19  *      - Redistributions in binary form must reproduce the above
20  *        copyright notice, this list of conditions and the following
21  *        disclaimer in the documentation and/or other materials
22  *        provided with the distribution.
23  *
24  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
27  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
28  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
29  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
30  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
31  * SOFTWARE.
32  *
33  */
34 
35 /*
36  * Abstract:
37  * 	Header file that describes Unicast Cache functions.
38  *
39  * Environment:
40  * 	Linux User Mode
41  *
42  * $Revision: 1.4 $
43  */
44 
45 #ifndef _OSM_UCAST_CACHE_H_
46 #define _OSM_UCAST_CACHE_H_
47 
48 #include <iba/ib_types.h>
49 #include <complib/cl_qmap.h>
50 #include <opensm/osm_switch.h>
51 
52 #ifdef __cplusplus
53 #  define BEGIN_C_DECLS extern "C" {
54 #  define END_C_DECLS   }
55 #else				/* !__cplusplus */
56 #  define BEGIN_C_DECLS
57 #  define END_C_DECLS
58 #endif				/* __cplusplus */
59 
60 BEGIN_C_DECLS
61 
62 struct osm_ucast_mgr;
63 
64 /****h* OpenSM/Unicast Manager/Unicast Cache
65 * NAME
66 *	Unicast Cache
67 *
68 * DESCRIPTION
69 *	The Unicast Cache object encapsulates the information
70 *	needed to cache and write unicast routing of the subnet.
71 *
72 *	The Unicast Cache object is NOT thread safe.
73 *
74 *	This object should be treated as opaque and should be
75 *	manipulated only through the provided functions.
76 *
77 * AUTHOR
78 *	Yevgeny Kliteynik, Mellanox
79 *
80 *********/
81 
82 /****f* OpenSM: Unicast Cache/osm_ucast_cache_invalidate
83 * NAME
84 *	osm_ucast_cache_invalidate
85 *
86 * DESCRIPTION
87 *	The osm_ucast_cache_invalidate function purges the
88 *	unicast cache and marks the cache as invalid.
89 *
90 * SYNOPSIS
91 */
92 void osm_ucast_cache_invalidate(struct osm_ucast_mgr *p_mgr);
93 /*
94 * PARAMETERS
95 *	p_mgr
96 *		[in] Pointer to the ucast mgr object.
97 *
98 * RETURN VALUE
99 *	This function does not return any value.
100 *
101 * NOTES
102 *
103 * SEE ALSO
104 *	Unicast Manager object
105 *********/
106 
107 /****f* OpenSM: Unicast Cache/osm_ucast_cache_check_new_link
108 * NAME
109 *	osm_ucast_cache_check_new_link
110 *
111 * DESCRIPTION
112 *	The osm_ucast_cache_check_new_link checks whether
113 *	the newly discovered link still allows us to use
114 *	cached unicast routing.
115 *
116 * SYNOPSIS
117 */
118 void osm_ucast_cache_check_new_link(struct osm_ucast_mgr *p_mgr,
119 				    osm_node_t * p_node_1, uint8_t port_num_1,
120 				    osm_node_t * p_node_2, uint8_t port_num_2);
121 /*
122 * PARAMETERS
123 *	p_mgr
124 *		[in] Pointer to the unicast manager object.
125 *
126 *	physp1
127 *		[in] Pointer to the first physical port of the link.
128 *
129 *	physp2
130 *		[in] Pointer to the second physical port of the link.
131 *
132 * RETURN VALUE
133 *	This function does not return any value.
134 *
135 * NOTES
136 *	The function checks whether the link was previously
137 *	cached/dropped or is this a completely new link.
138 *	If it decides that the new link makes cached routing
139 *	invalid, the cache is purged and marked as invalid.
140 *
141 * SEE ALSO
142 *	Unicast Cache object
143 *********/
144 
145 /****f* OpenSM: Unicast Cache/osm_ucast_cache_add_link
146 * NAME
147 *	osm_ucast_cache_add_link
148 *
149 * DESCRIPTION
150 *	The osm_ucast_cache_add_link adds link to the cache.
151 *
152 * SYNOPSIS
153 */
154 void osm_ucast_cache_add_link(struct osm_ucast_mgr *p_mgr,
155 			      osm_physp_t * physp1, osm_physp_t * physp2);
156 /*
157 * PARAMETERS
158 *	p_mgr
159 *		[in] Pointer to the unicast manager object.
160 *
161 *	physp1
162 *		[in] Pointer to the first physical port of the link.
163 *
164 *	physp2
165 *		[in] Pointer to the second physical port of the link.
166 *
167 * RETURN VALUE
168 *	This function does not return any value.
169 *
170 * NOTES
171 *	Since the cache operates with ports and not links,
172 *	the function adds two port entries (both sides of the
173 *	link) to the cache.
174 *	If it decides that the dropped link makes cached routing
175 *	invalid, the cache is purged and marked as invalid.
176 *
177 * SEE ALSO
178 *	Unicast Manager object
179 *********/
180 
181 /****f* OpenSM: Unicast Cache/osm_ucast_cache_add_node
182 * NAME
183 *	osm_ucast_cache_add_node
184 *
185 * DESCRIPTION
186 *	The osm_ucast_cache_add_node adds node and all
187 *	its links to the cache.
188 *
189 * SYNOPSIS
190 */
191 void osm_ucast_cache_add_node(struct osm_ucast_mgr *p_mgr, osm_node_t * p_node);
192 /*
193 * PARAMETERS
194 *	p_mgr
195 *		[in] Pointer to the unicast manager object.
196 *
197 *	p_node
198 *		[in] Pointer to the node object that should be cached.
199 *
200 * RETURN VALUE
201 *	This function does not return any value.
202 *
203 * NOTES
204 *	If the function decides that the dropped node makes cached
205 *	routing invalid, the cache is purged and marked as invalid.
206 *
207 * SEE ALSO
208 *	Unicast Manager object
209 *********/
210 
211 /****f* OpenSM: Unicast Cache/osm_ucast_cache_process
212 * NAME
213 *	osm_ucast_cache_process
214 *
215 * DESCRIPTION
216 *	The osm_ucast_cache_process function writes the
217 *	cached unicast routing on the subnet switches.
218 *
219 * SYNOPSIS
220 */
221 int osm_ucast_cache_process(struct osm_ucast_mgr *p_mgr);
222 /*
223 * PARAMETERS
224 *	p_mgr
225 *		[in] Pointer to the unicast manager object.
226 *
227 * RETURN VALUE
228 *	This function returns zero on sucess and non-zero
229 *	value otherwise.
230 *
231 * NOTES
232 *	Iterates through all the subnet switches and writes
233 *	the LFTs that were calculated during the last routing
234 *       engine execution to the switches.
235 *
236 * SEE ALSO
237 *	Unicast Manager object
238 *********/
239 
240 END_C_DECLS
241 #endif				/* _OSM_UCAST_CACHE_H_ */
242