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 * 6d6b92ffaSHans Petter Selasky * This software is available to you under a choice of one of two 7d6b92ffaSHans Petter Selasky * licenses. You may choose to be licensed under the terms of the GNU 8d6b92ffaSHans Petter Selasky * General Public License (GPL) Version 2, available from the file 9d6b92ffaSHans Petter Selasky * COPYING in the main directory of this source tree, or the 10d6b92ffaSHans Petter Selasky * OpenIB.org BSD license below: 11d6b92ffaSHans Petter Selasky * 12d6b92ffaSHans Petter Selasky * Redistribution and use in source and binary forms, with or 13d6b92ffaSHans Petter Selasky * without modification, are permitted provided that the following 14d6b92ffaSHans Petter Selasky * conditions are met: 15d6b92ffaSHans Petter Selasky * 16d6b92ffaSHans Petter Selasky * - Redistributions of source code must retain the above 17d6b92ffaSHans Petter Selasky * copyright notice, this list of conditions and the following 18d6b92ffaSHans Petter Selasky * disclaimer. 19d6b92ffaSHans Petter Selasky * 20d6b92ffaSHans Petter Selasky * - Redistributions in binary form must reproduce the above 21d6b92ffaSHans Petter Selasky * copyright notice, this list of conditions and the following 22d6b92ffaSHans Petter Selasky * disclaimer in the documentation and/or other materials 23d6b92ffaSHans Petter Selasky * provided with the distribution. 24d6b92ffaSHans Petter Selasky * 25d6b92ffaSHans Petter Selasky * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 26d6b92ffaSHans Petter Selasky * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 27d6b92ffaSHans Petter Selasky * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 28d6b92ffaSHans Petter Selasky * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 29d6b92ffaSHans Petter Selasky * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 30d6b92ffaSHans Petter Selasky * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 31d6b92ffaSHans Petter Selasky * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 32d6b92ffaSHans Petter Selasky * SOFTWARE. 33d6b92ffaSHans Petter Selasky * 34d6b92ffaSHans Petter Selasky */ 35d6b92ffaSHans Petter Selasky 36d6b92ffaSHans Petter Selasky /* 37d6b92ffaSHans Petter Selasky * Abstract: 38d6b92ffaSHans Petter Selasky * Declaration of osm_lid_mgr_t. 39d6b92ffaSHans Petter Selasky * This object represents the LID Manager object. 40d6b92ffaSHans Petter Selasky * This object is part of the OpenSM family of objects. 41d6b92ffaSHans Petter Selasky */ 42d6b92ffaSHans Petter Selasky 43d6b92ffaSHans Petter Selasky #ifndef _OSM_LID_MGR_H_ 44d6b92ffaSHans Petter Selasky #define _OSM_LID_MGR_H_ 45d6b92ffaSHans Petter Selasky 46d6b92ffaSHans Petter Selasky #include <complib/cl_passivelock.h> 47d6b92ffaSHans Petter Selasky #include <opensm/osm_base.h> 48d6b92ffaSHans Petter Selasky #include <opensm/osm_madw.h> 49d6b92ffaSHans Petter Selasky #include <opensm/osm_subnet.h> 50d6b92ffaSHans Petter Selasky #include <opensm/osm_db.h> 51d6b92ffaSHans Petter Selasky #include <opensm/osm_log.h> 52d6b92ffaSHans Petter Selasky 53d6b92ffaSHans Petter Selasky #ifdef __cplusplus 54d6b92ffaSHans Petter Selasky # define BEGIN_C_DECLS extern "C" { 55d6b92ffaSHans Petter Selasky # define END_C_DECLS } 56d6b92ffaSHans Petter Selasky #else /* !__cplusplus */ 57d6b92ffaSHans Petter Selasky # define BEGIN_C_DECLS 58d6b92ffaSHans Petter Selasky # define END_C_DECLS 59d6b92ffaSHans Petter Selasky #endif /* __cplusplus */ 60d6b92ffaSHans Petter Selasky 61d6b92ffaSHans Petter Selasky BEGIN_C_DECLS 62d6b92ffaSHans Petter Selasky #define OSM_LID_MGR_LIST_SIZE_MIN 256 63d6b92ffaSHans Petter Selasky /****h* OpenSM/LID Manager 64d6b92ffaSHans Petter Selasky * NAME 65d6b92ffaSHans Petter Selasky * LID Manager 66d6b92ffaSHans Petter Selasky * 67d6b92ffaSHans Petter Selasky * DESCRIPTION 68d6b92ffaSHans Petter Selasky * The LID Manager object encapsulates the information 69d6b92ffaSHans Petter Selasky * needed to control LID assignments on the subnet. 70d6b92ffaSHans Petter Selasky * 71d6b92ffaSHans Petter Selasky * The LID Manager object is thread safe. 72d6b92ffaSHans Petter Selasky * 73d6b92ffaSHans Petter Selasky * This object should be treated as opaque and should be 74d6b92ffaSHans Petter Selasky * manipulated only through the provided functions. 75d6b92ffaSHans Petter Selasky * 76d6b92ffaSHans Petter Selasky * AUTHOR 77d6b92ffaSHans Petter Selasky * Steve King, Intel 78d6b92ffaSHans Petter Selasky * 79d6b92ffaSHans Petter Selasky *********/ 80d6b92ffaSHans Petter Selasky struct osm_sm; 81d6b92ffaSHans Petter Selasky /****s* OpenSM: LID Manager/osm_lid_mgr_t 82d6b92ffaSHans Petter Selasky * NAME 83d6b92ffaSHans Petter Selasky * osm_lid_mgr_t 84d6b92ffaSHans Petter Selasky * 85d6b92ffaSHans Petter Selasky * DESCRIPTION 86d6b92ffaSHans Petter Selasky * LID Manager structure. 87d6b92ffaSHans Petter Selasky * 88d6b92ffaSHans Petter Selasky * This object should be treated as opaque and should 89d6b92ffaSHans Petter Selasky * be manipulated only through the provided functions. 90d6b92ffaSHans Petter Selasky * 91d6b92ffaSHans Petter Selasky * SYNOPSIS 92d6b92ffaSHans Petter Selasky */ 93d6b92ffaSHans Petter Selasky typedef struct osm_lid_mgr { 94d6b92ffaSHans Petter Selasky struct osm_sm *sm; 95d6b92ffaSHans Petter Selasky osm_subn_t *p_subn; 96d6b92ffaSHans Petter Selasky osm_db_t *p_db; 97d6b92ffaSHans Petter Selasky osm_log_t *p_log; 98d6b92ffaSHans Petter Selasky cl_plock_t *p_lock; 99d6b92ffaSHans Petter Selasky osm_db_domain_t *p_g2l; 100d6b92ffaSHans Petter Selasky cl_qlist_t free_ranges; 101d6b92ffaSHans Petter Selasky boolean_t dirty; 102d6b92ffaSHans Petter Selasky uint8_t used_lids[IB_LID_UCAST_END_HO + 1]; 103d6b92ffaSHans Petter Selasky } osm_lid_mgr_t; 104d6b92ffaSHans Petter Selasky /* 105d6b92ffaSHans Petter Selasky * FIELDS 106d6b92ffaSHans Petter Selasky * sm 107d6b92ffaSHans Petter Selasky * Pointer to the SM object. 108d6b92ffaSHans Petter Selasky * 109d6b92ffaSHans Petter Selasky * p_subn 110d6b92ffaSHans Petter Selasky * Pointer to the Subnet object for this subnet. 111d6b92ffaSHans Petter Selasky * 112d6b92ffaSHans Petter Selasky * p_db 113d6b92ffaSHans Petter Selasky * Pointer to the database (persistency) object 114d6b92ffaSHans Petter Selasky * 115d6b92ffaSHans Petter Selasky * p_log 116d6b92ffaSHans Petter Selasky * Pointer to the log object. 117d6b92ffaSHans Petter Selasky * 118d6b92ffaSHans Petter Selasky * p_lock 119d6b92ffaSHans Petter Selasky * Pointer to the serializing lock. 120d6b92ffaSHans Petter Selasky * 121d6b92ffaSHans Petter Selasky * p_g2l 122d6b92ffaSHans Petter Selasky * Pointer to the database domain storing guid to lid mapping. 123d6b92ffaSHans Petter Selasky * 124d6b92ffaSHans Petter Selasky * free_ranges 125d6b92ffaSHans Petter Selasky * A list of available free lid ranges. The list is initialized 126d6b92ffaSHans Petter Selasky * by the code that initializes the lid assignment and is consumed 127d6b92ffaSHans Petter Selasky * by the procedure that finds a free range. It holds elements of 128d6b92ffaSHans Petter Selasky * type osm_lid_mgr_range_t 129d6b92ffaSHans Petter Selasky * 130d6b92ffaSHans Petter Selasky * dirty 131d6b92ffaSHans Petter Selasky * Indicates that lid table was updated 132d6b92ffaSHans Petter Selasky * 133d6b92ffaSHans Petter Selasky * used_lids 134d6b92ffaSHans Petter Selasky * An array of used lids. keeps track of 135d6b92ffaSHans Petter Selasky * existing and non existing mapping of guid->lid 136d6b92ffaSHans Petter Selasky * 137d6b92ffaSHans Petter Selasky * SEE ALSO 138d6b92ffaSHans Petter Selasky * LID Manager object 139d6b92ffaSHans Petter Selasky *********/ 140d6b92ffaSHans Petter Selasky 141d6b92ffaSHans Petter Selasky /****f* OpenSM: LID Manager/osm_lid_mgr_construct 142d6b92ffaSHans Petter Selasky * NAME 143d6b92ffaSHans Petter Selasky * osm_lid_mgr_construct 144d6b92ffaSHans Petter Selasky * 145d6b92ffaSHans Petter Selasky * DESCRIPTION 146d6b92ffaSHans Petter Selasky * This function constructs a LID Manager object. 147d6b92ffaSHans Petter Selasky * 148d6b92ffaSHans Petter Selasky * SYNOPSIS 149d6b92ffaSHans Petter Selasky */ 150d6b92ffaSHans Petter Selasky void osm_lid_mgr_construct(IN osm_lid_mgr_t * p_mgr); 151d6b92ffaSHans Petter Selasky /* 152d6b92ffaSHans Petter Selasky * PARAMETERS 153d6b92ffaSHans Petter Selasky * p_mgr 154d6b92ffaSHans Petter Selasky * [in] Pointer to a LID Manager object to construct. 155d6b92ffaSHans Petter Selasky * 156d6b92ffaSHans Petter Selasky * RETURN VALUE 157d6b92ffaSHans Petter Selasky * This function does not return a value. 158d6b92ffaSHans Petter Selasky * 159d6b92ffaSHans Petter Selasky * NOTES 160d6b92ffaSHans Petter Selasky * Allows osm_lid_mgr_destroy 161d6b92ffaSHans Petter Selasky * 162d6b92ffaSHans Petter Selasky * Calling osm_lid_mgr_construct is a prerequisite to calling any other 163d6b92ffaSHans Petter Selasky * method except osm_lid_mgr_init. 164d6b92ffaSHans Petter Selasky * 165d6b92ffaSHans Petter Selasky * SEE ALSO 166d6b92ffaSHans Petter Selasky * LID Manager object, osm_lid_mgr_init, 167d6b92ffaSHans Petter Selasky * osm_lid_mgr_destroy 168d6b92ffaSHans Petter Selasky *********/ 169d6b92ffaSHans Petter Selasky 170d6b92ffaSHans Petter Selasky /****f* OpenSM: LID Manager/osm_lid_mgr_destroy 171d6b92ffaSHans Petter Selasky * NAME 172d6b92ffaSHans Petter Selasky * osm_lid_mgr_destroy 173d6b92ffaSHans Petter Selasky * 174d6b92ffaSHans Petter Selasky * DESCRIPTION 175d6b92ffaSHans Petter Selasky * The osm_lid_mgr_destroy function destroys the object, releasing 176d6b92ffaSHans Petter Selasky * all resources. 177d6b92ffaSHans Petter Selasky * 178d6b92ffaSHans Petter Selasky * SYNOPSIS 179d6b92ffaSHans Petter Selasky */ 180d6b92ffaSHans Petter Selasky void osm_lid_mgr_destroy(IN osm_lid_mgr_t * p_mgr); 181d6b92ffaSHans Petter Selasky /* 182d6b92ffaSHans Petter Selasky * PARAMETERS 183d6b92ffaSHans Petter Selasky * p_mgr 184d6b92ffaSHans Petter Selasky * [in] Pointer to the object to destroy. 185d6b92ffaSHans Petter Selasky * 186d6b92ffaSHans Petter Selasky * RETURN VALUE 187d6b92ffaSHans Petter Selasky * This function does not return a value. 188d6b92ffaSHans Petter Selasky * 189d6b92ffaSHans Petter Selasky * NOTES 190d6b92ffaSHans Petter Selasky * Performs any necessary cleanup of the specified 191d6b92ffaSHans Petter Selasky * LID Manager object. 192d6b92ffaSHans Petter Selasky * Further operations should not be attempted on the destroyed object. 193d6b92ffaSHans Petter Selasky * This function should only be called after a call to 194d6b92ffaSHans Petter Selasky * osm_lid_mgr_construct or osm_lid_mgr_init. 195d6b92ffaSHans Petter Selasky * 196d6b92ffaSHans Petter Selasky * SEE ALSO 197d6b92ffaSHans Petter Selasky * LID Manager object, osm_lid_mgr_construct, 198d6b92ffaSHans Petter Selasky * osm_lid_mgr_init 199d6b92ffaSHans Petter Selasky *********/ 200d6b92ffaSHans Petter Selasky 201d6b92ffaSHans Petter Selasky /****f* OpenSM: LID Manager/osm_lid_mgr_init 202d6b92ffaSHans Petter Selasky * NAME 203d6b92ffaSHans Petter Selasky * osm_lid_mgr_init 204d6b92ffaSHans Petter Selasky * 205d6b92ffaSHans Petter Selasky * DESCRIPTION 206d6b92ffaSHans Petter Selasky * The osm_lid_mgr_init function initializes a 207d6b92ffaSHans Petter Selasky * LID Manager object for use. 208d6b92ffaSHans Petter Selasky * 209d6b92ffaSHans Petter Selasky * SYNOPSIS 210d6b92ffaSHans Petter Selasky */ 211d6b92ffaSHans Petter Selasky ib_api_status_t 212d6b92ffaSHans Petter Selasky osm_lid_mgr_init(IN osm_lid_mgr_t * p_mgr, IN struct osm_sm * sm); 213d6b92ffaSHans Petter Selasky /* 214d6b92ffaSHans Petter Selasky * PARAMETERS 215d6b92ffaSHans Petter Selasky * p_mgr 216d6b92ffaSHans Petter Selasky * [in] Pointer to an osm_lid_mgr_t object to initialize. 217d6b92ffaSHans Petter Selasky * 218d6b92ffaSHans Petter Selasky * sm 219d6b92ffaSHans Petter Selasky * [in] Pointer to the SM object for this subnet. 220d6b92ffaSHans Petter Selasky * 221d6b92ffaSHans Petter Selasky * RETURN VALUES 222d6b92ffaSHans Petter Selasky * CL_SUCCESS if the LID Manager object was initialized 223d6b92ffaSHans Petter Selasky * successfully. 224d6b92ffaSHans Petter Selasky * 225d6b92ffaSHans Petter Selasky * NOTES 226d6b92ffaSHans Petter Selasky * Allows calling other LID Manager methods. 227d6b92ffaSHans Petter Selasky * 228d6b92ffaSHans Petter Selasky * SEE ALSO 229d6b92ffaSHans Petter Selasky * LID Manager object, osm_lid_mgr_construct, 230d6b92ffaSHans Petter Selasky * osm_lid_mgr_destroy 231d6b92ffaSHans Petter Selasky *********/ 232d6b92ffaSHans Petter Selasky 233d6b92ffaSHans Petter Selasky /****f* OpenSM: LID Manager/osm_lid_mgr_process_sm 234d6b92ffaSHans Petter Selasky * NAME 235d6b92ffaSHans Petter Selasky * osm_lid_mgr_process_sm 236d6b92ffaSHans Petter Selasky * 237d6b92ffaSHans Petter Selasky * DESCRIPTION 238d6b92ffaSHans Petter Selasky * Configures the SM's port with its designated LID values. 239d6b92ffaSHans Petter Selasky * 240d6b92ffaSHans Petter Selasky * SYNOPSIS 241d6b92ffaSHans Petter Selasky */ 242d6b92ffaSHans Petter Selasky int osm_lid_mgr_process_sm(IN osm_lid_mgr_t * p_mgr); 243d6b92ffaSHans Petter Selasky /* 244d6b92ffaSHans Petter Selasky * PARAMETERS 245d6b92ffaSHans Petter Selasky * p_mgr 246d6b92ffaSHans Petter Selasky * [in] Pointer to an osm_lid_mgr_t object. 247d6b92ffaSHans Petter Selasky * 248d6b92ffaSHans Petter Selasky * RETURN VALUES 249d6b92ffaSHans Petter Selasky * Returns 0 on success and non-zero value otherwise. 250d6b92ffaSHans Petter Selasky * 251d6b92ffaSHans Petter Selasky * NOTES 252d6b92ffaSHans Petter Selasky * 253d6b92ffaSHans Petter Selasky * SEE ALSO 254d6b92ffaSHans Petter Selasky * LID Manager 255d6b92ffaSHans Petter Selasky *********/ 256d6b92ffaSHans Petter Selasky 257d6b92ffaSHans Petter Selasky /****f* OpenSM: LID Manager/osm_lid_mgr_process_subnet 258d6b92ffaSHans Petter Selasky * NAME 259d6b92ffaSHans Petter Selasky * osm_lid_mgr_process_subnet 260d6b92ffaSHans Petter Selasky * 261d6b92ffaSHans Petter Selasky * DESCRIPTION 262d6b92ffaSHans Petter Selasky * Configures subnet ports (except the SM port itself) with their 263d6b92ffaSHans Petter Selasky * designated LID values. 264d6b92ffaSHans Petter Selasky * 265d6b92ffaSHans Petter Selasky * SYNOPSIS 266d6b92ffaSHans Petter Selasky */ 267d6b92ffaSHans Petter Selasky int osm_lid_mgr_process_subnet(IN osm_lid_mgr_t * p_mgr); 268d6b92ffaSHans Petter Selasky /* 269d6b92ffaSHans Petter Selasky * PARAMETERS 270d6b92ffaSHans Petter Selasky * p_mgr 271d6b92ffaSHans Petter Selasky * [in] Pointer to an osm_lid_mgr_t object. 272d6b92ffaSHans Petter Selasky * 273d6b92ffaSHans Petter Selasky * RETURN VALUES 274d6b92ffaSHans Petter Selasky * Returns 0 on success and non-zero value otherwise. 275d6b92ffaSHans Petter Selasky * 276d6b92ffaSHans Petter Selasky * NOTES 277d6b92ffaSHans Petter Selasky * 278d6b92ffaSHans Petter Selasky * SEE ALSO 279d6b92ffaSHans Petter Selasky * LID Manager 280d6b92ffaSHans Petter Selasky *********/ 281d6b92ffaSHans Petter Selasky 282d6b92ffaSHans Petter Selasky END_C_DECLS 283d6b92ffaSHans Petter Selasky #endif /* _OSM_LID_MGR_H_ */ 284