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
60BEGIN_C_DECLS
61
62struct 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*/
92void 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*/
118void 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*/
154void 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*/
191void 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*/
221int 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
240END_C_DECLS
241#endif				/* _OSM_UCAST_CACHE_H_ */
242