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 65 BEGIN_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 */ 75 static 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 */ 103 typedef 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 */ 125 int 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 */ 155 int 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 */ 188 int 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 */ 221 int 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 */ 247 static 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 */ 275 int 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 */ 305 int 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 */ 335 int 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 */ 365 int 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 */ 391 static 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 */ 419 typedef 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 */ 443 int 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 */ 473 int 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 */ 510 int 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 */ 546 int 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 567 END_C_DECLS 568 #endif /* _OSM_DB_PACK_H_ */ 569