1/* 2 * Copyright (c) 2004-2009 Voltaire, Inc. All rights reserved. 3 * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved. 4 * Copyright (c) 1996-2003 Intel Corporation. All rights reserved. 5 * 6 * This software is available to you under a choice of one of two 7 * licenses. You may choose to be licensed under the terms of the GNU 8 * General Public License (GPL) Version 2, available from the file 9 * COPYING in the main directory of this source tree, or the 10 * OpenIB.org BSD license below: 11 * 12 * Redistribution and use in source and binary forms, with or 13 * without modification, are permitted provided that the following 14 * conditions are met: 15 * 16 * - Redistributions of source code must retain the above 17 * copyright notice, this list of conditions and the following 18 * disclaimer. 19 * 20 * - Redistributions in binary form must reproduce the above 21 * copyright notice, this list of conditions and the following 22 * disclaimer in the documentation and/or other materials 23 * provided with the distribution. 24 * 25 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 26 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 27 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 28 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 29 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 30 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 31 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 32 * SOFTWARE. 33 * 34 */ 35 36/****h* OpenSM/DB-Pack 37* NAME 38* Database Types 39* 40* DESCRIPTION 41* This module provides packing and unpacking of the database 42* storage into specific types. 43* 44* The following domains/conversions are supported: 45* guid2lid - key is a guid and data is a lid. 46* 47* AUTHOR 48* Eitan Zahavi, Mellanox Technologies LTD 49* 50*********/ 51 52#ifndef _OSM_DB_PACK_H_ 53#define _OSM_DB_PACK_H_ 54 55#include <opensm/osm_db.h> 56 57#ifdef __cplusplus 58# define BEGIN_C_DECLS extern "C" { 59# define END_C_DECLS } 60#else /* !__cplusplus */ 61# define BEGIN_C_DECLS 62# define END_C_DECLS 63#endif /* __cplusplus */ 64 65BEGIN_C_DECLS 66/****f* OpenSM: DB-Pack/osm_db_guid2lid_init 67* NAME 68* osm_db_guid2lid_init 69* 70* DESCRIPTION 71* Initialize a domain for the guid2lid table 72* 73* SYNOPSIS 74*/ 75static inline osm_db_domain_t *osm_db_guid2lid_init(IN osm_db_t * p_db) 76{ 77 return (osm_db_domain_init(p_db, "guid2lid")); 78} 79 80/* 81* PARAMETERS 82* p_db 83* [in] Pointer to the database object to construct 84* 85* RETURN VALUES 86* The pointer to the new allocated domain object or NULL. 87* 88* NOTE: DB domains are destroyed by the osm_db_destroy 89* 90* SEE ALSO 91* Database, osm_db_init, osm_db_destroy 92*********/ 93 94/****f* OpenSM: DB-Pack/osm_db_guid2lid_init 95* NAME 96* osm_db_guid2lid_init 97* 98* DESCRIPTION 99* Initialize a domain for the guid2lid table 100* 101* SYNOPSIS 102*/ 103typedef struct osm_db_guid_elem { 104 cl_list_item_t item; 105 uint64_t guid; 106} osm_db_guid_elem_t; 107/* 108* FIELDS 109* item 110* required for list manipulations 111* 112* guid 113* 114************/ 115 116/****f* OpenSM: DB-Pack/osm_db_guid2lid_guids 117* NAME 118* osm_db_guid2lid_guids 119* 120* DESCRIPTION 121* Provides back a list of guid elements. 122* 123* SYNOPSIS 124*/ 125int osm_db_guid2lid_guids(IN osm_db_domain_t * p_g2l, 126 OUT cl_qlist_t * p_guid_list); 127/* 128* PARAMETERS 129* p_g2l 130* [in] Pointer to the guid2lid domain 131* 132* p_guid_list 133* [out] A quick list of guid elements of type osm_db_guid_elem_t 134* 135* RETURN VALUES 136* 0 if successful 137* 138* NOTE: the output qlist should be initialized and each item freed 139* by the caller, then destroyed. 140* 141* SEE ALSO 142* osm_db_guid2lid_init, osm_db_guid2lid_guids, osm_db_guid2lid_get 143* osm_db_guid2lid_set, osm_db_guid2lid_delete 144*********/ 145 146/****f* OpenSM: DB-Pack/osm_db_guid2lid_get 147* NAME 148* osm_db_guid2lid_get 149* 150* DESCRIPTION 151* Get a lid range by given guid. 152* 153* SYNOPSIS 154*/ 155int osm_db_guid2lid_get(IN osm_db_domain_t * p_g2l, IN uint64_t guid, 156 OUT uint16_t * p_min_lid, OUT uint16_t * p_max_lid); 157/* 158* PARAMETERS 159* p_g2l 160* [in] Pointer to the guid2lid domain 161* 162* guid 163* [in] The guid to look for 164* 165* p_min_lid 166* [out] Pointer to the resulting min lid in host order. 167* 168* p_max_lid 169* [out] Pointer to the resulting max lid in host order. 170* 171* RETURN VALUES 172* 0 if successful. The lid will be set to 0 if not found. 173* 174* SEE ALSO 175* osm_db_guid2lid_init, osm_db_guid2lid_guids 176* osm_db_guid2lid_set, osm_db_guid2lid_delete 177*********/ 178 179/****f* OpenSM: DB-Pack/osm_db_guid2lid_set 180* NAME 181* osm_db_guid2lid_set 182* 183* DESCRIPTION 184* Set a lid range for the given guid. 185* 186* SYNOPSIS 187*/ 188int osm_db_guid2lid_set(IN osm_db_domain_t * p_g2l, IN uint64_t guid, 189 IN uint16_t min_lid, IN uint16_t max_lid); 190/* 191* PARAMETERS 192* p_g2l 193* [in] Pointer to the guid2lid domain 194* 195* guid 196* [in] The guid to look for 197* 198* min_lid 199* [in] The min lid value to set 200* 201* max_lid 202* [in] The max lid value to set 203* 204* RETURN VALUES 205* 0 if successful 206* 207* SEE ALSO 208* osm_db_guid2lid_init, osm_db_guid2lid_guids 209* osm_db_guid2lid_get, osm_db_guid2lid_delete 210*********/ 211 212/****f* OpenSM: DB-Pack/osm_db_guid2lid_delete 213* NAME 214* osm_db_guid2lid_delete 215* 216* DESCRIPTION 217* Delete the entry by the given guid 218* 219* SYNOPSIS 220*/ 221int osm_db_guid2lid_delete(IN osm_db_domain_t * p_g2l, IN uint64_t guid); 222/* 223* PARAMETERS 224* p_g2l 225* [in] Pointer to the guid2lid domain 226* 227* guid 228* [in] The guid to look for 229* 230* RETURN VALUES 231* 0 if successful otherwise 1 232* 233* SEE ALSO 234* osm_db_guid2lid_init, osm_db_guid2lid_guids 235* osm_db_guid2lid_get, osm_db_guid2lid_set 236*********/ 237 238/****f* OpenSM: DB-Pack/osm_db_guid2mkey_init 239* NAME 240* osm_db_guid2mkey_init 241* 242* DESCRIPTION 243* Initialize a domain for the guid2mkey table 244* 245* SYNOPSIS 246*/ 247static inline osm_db_domain_t *osm_db_guid2mkey_init(IN osm_db_t * p_db) 248{ 249 return osm_db_domain_init(p_db, "guid2mkey"); 250} 251 252/* 253* PARAMETERS 254* p_db 255* [in] Pointer to the database object to construct 256* 257* RETURN VALUES 258* The pointer to the new allocated domain object or NULL. 259* 260* NOTE: DB domains are destroyed by the osm_db_destroy 261* 262* SEE ALSO 263* Database, osm_db_init, osm_db_destroy 264*********/ 265 266/****f* OpenSM: DB-Pack/osm_db_guid2mkey_guids 267* NAME 268* osm_db_guid2mkey_guids 269* 270* DESCRIPTION 271* Provides back a list of guid elements. 272* 273* SYNOPSIS 274*/ 275int osm_db_guid2mkey_guids(IN osm_db_domain_t * p_g2m, 276 OUT cl_qlist_t * p_guid_list); 277/* 278* PARAMETERS 279* p_g2l 280* [in] Pointer to the guid2mkey domain 281* 282* p_guid_list 283* [out] A quick list of guid elements of type osm_db_guid_elem_t 284* 285* RETURN VALUES 286* 0 if successful 287* 288* NOTE: the output qlist should be initialized and each item freed 289* by the caller, then destroyed. 290* 291* SEE ALSO 292* osm_db_guid2mkey_init, osm_db_guid2mkey_guids, osm_db_guid2mkey_get 293* osm_db_guid2mkey_set, osm_db_guid2mkey_delete 294*********/ 295 296/****f* OpenSM: DB-Pack/osm_db_guid2mkey_get 297* NAME 298* osm_db_guid2mkey_get 299* 300* DESCRIPTION 301* Get the mkey for the given guid. 302* 303* SYNOPSIS 304*/ 305int osm_db_guid2mkey_get(IN osm_db_domain_t * p_g2m, IN uint64_t guid, 306 OUT uint64_t * p_mkey); 307/* 308* PARAMETERS 309* p_g2m 310* [in] Pointer to the guid2mkey domain 311* 312* guid 313* [in] The guid to look for 314* 315* p_mkey 316* [out] Pointer to the resulting mkey in host order. 317* 318* RETURN VALUES 319* 0 if successful. The lid will be set to 0 if not found. 320* 321* SEE ALSO 322* osm_db_guid2mkey_init, osm_db_guid2mkey_guids 323* osm_db_guid2mkey_set, osm_db_guid2mkey_delete 324*********/ 325 326/****f* OpenSM: DB-Pack/osm_db_guid2mkey_set 327* NAME 328* osm_db_guid2mkey_set 329* 330* DESCRIPTION 331* Set the mkey for the given guid. 332* 333* SYNOPSIS 334*/ 335int osm_db_guid2mkey_set(IN osm_db_domain_t * p_g2m, IN uint64_t guid, 336 IN uint64_t mkey); 337/* 338* PARAMETERS 339* p_g2m 340* [in] Pointer to the guid2mkey domain 341* 342* guid 343* [in] The guid to look for 344* 345* mkey 346* [in] The mkey value to set, in host order 347* 348* RETURN VALUES 349* 0 if successful 350* 351* SEE ALSO 352* osm_db_guid2mkey_init, osm_db_guid2mkey_guids 353* osm_db_guid2mkey_get, osm_db_guid2mkey_delete 354*********/ 355 356/****f* OpenSM: DB-Pack/osm_db_guid2mkey_delete 357* NAME 358* osm_db_guid2mkey_delete 359* 360* DESCRIPTION 361* Delete the entry by the given guid 362* 363* SYNOPSIS 364*/ 365int osm_db_guid2mkey_delete(IN osm_db_domain_t * p_g2m, IN uint64_t guid); 366/* 367* PARAMETERS 368* p_g2m 369* [in] Pointer to the guid2mkey domain 370* 371* guid 372* [in] The guid to look for 373* 374* RETURN VALUES 375* 0 if successful otherwise 1 376* 377* SEE ALSO 378* osm_db_guid2mkey_init, osm_db_guid2mkey_guids 379* osm_db_guid2mkey_get, osm_db_guid2mkey_set 380*********/ 381 382/****f* OpenSM: DB-Pack/osm_db_neighbor_init 383* NAME 384* osm_db_neighbor_init 385* 386* DESCRIPTION 387* Initialize a domain for the neighbors table 388* 389* SYNOPSIS 390*/ 391static inline osm_db_domain_t *osm_db_neighbor_init(IN osm_db_t * p_db) 392{ 393 return osm_db_domain_init(p_db, "neighbors"); 394} 395 396/* 397* PARAMETERS 398* p_db 399* [in] Pointer to the database object to construct 400* 401* RETURN VALUES 402* The pointer to the new allocated domain object or NULL. 403* 404* NOTE: DB domains are destroyed by the osm_db_destroy 405* 406* SEE ALSO 407* Database, osm_db_init, osm_db_destroy 408*********/ 409 410/****f* OpenSM: DB-Pack/osm_db_neighbor_elem 411* NAME 412* osm_db_neighbor_elem 413* 414* DESCRIPTION 415* Initialize a domain for the neighbor table 416* 417* SYNOPSIS 418*/ 419typedef struct osm_db_neighbor_elem { 420 cl_list_item_t item; 421 uint64_t guid; 422 uint8_t portnum; 423} osm_db_neighbor_elem_t; 424/* 425* FIELDS 426* item 427* required for list manipulations 428* 429* guid 430* portnum 431* 432************/ 433 434/****f* OpenSM: DB-Pack/osm_db_neighbor_guids 435* NAME 436* osm_db_neighbor_guids 437* 438* DESCRIPTION 439* Provides back a list of neighbor elements. 440* 441* SYNOPSIS 442*/ 443int osm_db_neighbor_guids(IN osm_db_domain_t * p_neighbor, 444 OUT cl_qlist_t * p_guid_list); 445/* 446* PARAMETERS 447* p_neighbor 448* [in] Pointer to the neighbor domain 449* 450* p_guid_list 451* [out] A quick list of neighbor elements of type osm_db_neighbor_elem_t 452* 453* RETURN VALUES 454* 0 if successful 455* 456* NOTE: the output qlist should be initialized and each item freed 457* by the caller, then destroyed. 458* 459* SEE ALSO 460* osm_db_neighbor_init, osm_db_neighbor_guids, osm_db_neighbor_get 461* osm_db_neighbor_set, osm_db_neighbor_delete 462*********/ 463 464/****f* OpenSM: DB-Pack/osm_db_neighbor_get 465* NAME 466* osm_db_neighbor_get 467* 468* DESCRIPTION 469* Get a neighbor's guid by given guid/port. 470* 471* SYNOPSIS 472*/ 473int osm_db_neighbor_get(IN osm_db_domain_t * p_neighbor, IN uint64_t guid1, 474 IN uint8_t port1, OUT uint64_t * p_guid2, 475 OUT uint8_t * p_port2); 476/* 477* PARAMETERS 478* p_neighbor 479* [in] Pointer to the neighbor domain 480* 481* guid1 482* [in] The guid to look for 483* 484* port1 485* [in] The port to look for 486* 487* p_guid2 488* [out] Pointer to the resulting guid of the neighboring port. 489* 490* p_port2 491* [out] Pointer to the resulting port of the neighboring port. 492* 493* RETURN VALUES 494* 0 if successful. The lid will be set to 0 if not found. 495* 496* SEE ALSO 497* osm_db_neighbor_init, osm_db_neighbor_guids 498* osm_db_neighbor_set, osm_db_neighbor_delete 499*********/ 500 501/****f* OpenSM: DB-Pack/osm_db_neighbor_set 502* NAME 503* osm_db_neighbor_set 504* 505* DESCRIPTION 506* Set up a relationship between two ports 507* 508* SYNOPSIS 509*/ 510int osm_db_neighbor_set(IN osm_db_domain_t * p_neighbor, IN uint64_t guid1, 511 IN uint8_t port1, IN uint64_t guid2, IN uint8_t port2); 512/* 513* PARAMETERS 514* p_neighbor 515* [in] Pointer to the neighbor domain 516* 517* guid1 518* [in] The first guid in the relationship 519* 520* port1 521* [in] The first port in the relationship 522* 523* guid2 524* [in] The second guid in the relationship 525* 526* port2 527* [in] The second port in the relationship 528* 529* RETURN VALUES 530* 0 if successful 531* 532* SEE ALSO 533* osm_db_neighbor_init, osm_db_neighbor_guids 534* osm_db_neighbor_get, osm_db_neighbor_delete 535*********/ 536 537/****f* OpenSM: DB-Pack/osm_db_neighbor_delete 538* NAME 539* osm_db_neighbor_delete 540* 541* DESCRIPTION 542* Delete the relationship between two ports 543* 544* SYNOPSIS 545*/ 546int osm_db_neighbor_delete(IN osm_db_domain_t * p_neighbor, 547 IN uint64_t guid, IN uint8_t port); 548/* 549* PARAMETERS 550* p_neighbor 551* [in] Pointer to the neighbor domain 552* 553* guid 554* [in] The guid to look for 555* 556* port 557* [in] The port to look for 558* 559* RETURN VALUES 560* 0 if successful otherwise 1 561* 562* SEE ALSO 563* osm_db_neighbor_init, osm_db_neighbor_guids 564* osm_db_neighbor_get, osm_db_neighbor_set 565*********/ 566 567END_C_DECLS 568#endif /* _OSM_DB_PACK_H_ */ 569