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