|
Packit |
13e616 |
/*
|
|
Packit |
13e616 |
* Copyright (c) 2004-2009 Voltaire, Inc. All rights reserved.
|
|
Packit |
13e616 |
* Copyright (c) 2002-2006 Mellanox Technologies LTD. All rights reserved.
|
|
Packit |
13e616 |
* Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
|
|
Packit |
13e616 |
* Copyright (c) 2009-2011 ZIH, TU Dresden, Federal Republic of Germany. All rights reserved.
|
|
Packit |
13e616 |
* Copyright (C) 2012-2017 Tokyo Institute of Technology. All rights reserved.
|
|
Packit |
13e616 |
* Copyright (c) 2019 Fabriscale Technologies AS. All rights reserved.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* This software is available to you under a choice of one of two
|
|
Packit |
13e616 |
* licenses. You may choose to be licensed under the terms of the GNU
|
|
Packit |
13e616 |
* General Public License (GPL) Version 2, available from the file
|
|
Packit |
13e616 |
* COPYING in the main directory of this source tree, or the
|
|
Packit |
13e616 |
* OpenIB.org BSD license below:
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* Redistribution and use in source and binary forms, with or
|
|
Packit |
13e616 |
* without modification, are permitted provided that the following
|
|
Packit |
13e616 |
* conditions are met:
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* - Redistributions of source code must retain the above
|
|
Packit |
13e616 |
* copyright notice, this list of conditions and the following
|
|
Packit |
13e616 |
* disclaimer.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* - Redistributions in binary form must reproduce the above
|
|
Packit |
13e616 |
* copyright notice, this list of conditions and the following
|
|
Packit |
13e616 |
* disclaimer in the documentation and/or other materials
|
|
Packit |
13e616 |
* provided with the distribution.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
Packit |
13e616 |
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
Packit |
13e616 |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
Packit |
13e616 |
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
|
Packit |
13e616 |
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
|
Packit |
13e616 |
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
Packit |
13e616 |
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
Packit |
13e616 |
* SOFTWARE.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
*/
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
/*
|
|
Packit |
13e616 |
* Abstract:
|
|
Packit |
13e616 |
* Declaration of osm_opensm_t.
|
|
Packit |
13e616 |
* This object represents the OpenSM super object.
|
|
Packit |
13e616 |
* This object is part of the OpenSM family of objects.
|
|
Packit |
13e616 |
*/
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
#ifndef _OSM_OPENSM_H_
|
|
Packit |
13e616 |
#define _OSM_OPENSM_H_
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
#include <stdio.h>
|
|
Packit |
13e616 |
#include <complib/cl_qlist.h>
|
|
Packit |
13e616 |
#include <complib/cl_dispatcher.h>
|
|
Packit |
13e616 |
#include <complib/cl_passivelock.h>
|
|
Packit |
13e616 |
#include <complib/cl_atomic.h>
|
|
Packit |
13e616 |
#include <complib/cl_nodenamemap.h>
|
|
Packit |
13e616 |
#include <opensm/osm_console_io.h>
|
|
Packit |
13e616 |
#include <opensm/osm_stats.h>
|
|
Packit |
13e616 |
#include <opensm/osm_log.h>
|
|
Packit |
13e616 |
#include <opensm/osm_sm.h>
|
|
Packit |
13e616 |
#include <opensm/osm_sa.h>
|
|
Packit |
13e616 |
#include <opensm/osm_perfmgr.h>
|
|
Packit |
13e616 |
#include <opensm/osm_event_plugin.h>
|
|
Packit |
13e616 |
#include <opensm/osm_db.h>
|
|
Packit |
13e616 |
#include <opensm/osm_subnet.h>
|
|
Packit |
13e616 |
#include <opensm/osm_mad_pool.h>
|
|
Packit |
13e616 |
#include <opensm/osm_vl15intf.h>
|
|
Packit |
13e616 |
#include <opensm/osm_congestion_control.h>
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
#ifdef __cplusplus
|
|
Packit |
13e616 |
# define BEGIN_C_DECLS extern "C" {
|
|
Packit |
13e616 |
# define END_C_DECLS }
|
|
Packit |
13e616 |
#else /* !__cplusplus */
|
|
Packit |
13e616 |
# define BEGIN_C_DECLS
|
|
Packit |
13e616 |
# define END_C_DECLS
|
|
Packit |
13e616 |
#endif /* __cplusplus */
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
BEGIN_C_DECLS
|
|
Packit |
13e616 |
/****h* OpenSM/OpenSM
|
|
Packit |
13e616 |
* NAME
|
|
Packit |
13e616 |
* OpenSM
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* DESCRIPTION
|
|
Packit |
13e616 |
* The OpenSM object encapsulates the information needed by the
|
|
Packit |
13e616 |
* OpenSM to govern itself. The OpenSM is one OpenSM object.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* The OpenSM object is thread safe.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* This object should be treated as opaque and should
|
|
Packit |
13e616 |
* be manipulated only through the provided functions.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* AUTHOR
|
|
Packit |
13e616 |
* Steve King, Intel
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
*********/
|
|
Packit |
13e616 |
/****d* OpenSM: OpenSM/osm_routing_engine_type_t
|
|
Packit |
13e616 |
* NAME
|
|
Packit |
13e616 |
* osm_routing_engine_type_t
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* DESCRIPTION
|
|
Packit |
13e616 |
* Enumerates the possible routing engines that
|
|
Packit |
13e616 |
* could be used to route a subnet.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* SYNOPSIS
|
|
Packit |
13e616 |
*/
|
|
Packit |
13e616 |
typedef enum _osm_routing_engine_type {
|
|
Packit |
13e616 |
OSM_ROUTING_ENGINE_TYPE_NONE = 0,
|
|
Packit |
13e616 |
OSM_ROUTING_ENGINE_TYPE_MINHOP,
|
|
Packit |
13e616 |
OSM_ROUTING_ENGINE_TYPE_UPDN,
|
|
Packit |
13e616 |
OSM_ROUTING_ENGINE_TYPE_DNUP,
|
|
Packit |
13e616 |
OSM_ROUTING_ENGINE_TYPE_FILE,
|
|
Packit |
13e616 |
OSM_ROUTING_ENGINE_TYPE_FTREE,
|
|
Packit |
13e616 |
OSM_ROUTING_ENGINE_TYPE_LASH,
|
|
Packit |
13e616 |
OSM_ROUTING_ENGINE_TYPE_DOR,
|
|
Packit |
13e616 |
OSM_ROUTING_ENGINE_TYPE_TORUS_2QOS,
|
|
Packit |
13e616 |
OSM_ROUTING_ENGINE_TYPE_NUE,
|
|
Packit |
13e616 |
OSM_ROUTING_ENGINE_TYPE_SSSP,
|
|
Packit |
13e616 |
OSM_ROUTING_ENGINE_TYPE_DFSSSP,
|
|
Packit |
13e616 |
OSM_ROUTING_ENGINE_TYPE_UNKNOWN,
|
|
Packit |
13e616 |
OSM_ROUTING_ENGINE_TYPE_EXTERNAL
|
|
Packit |
13e616 |
} osm_routing_engine_type_t;
|
|
Packit |
13e616 |
/***********/
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
/****s* OpenSM: OpenSM/osm_routing_engine
|
|
Packit |
13e616 |
* NAME
|
|
Packit |
13e616 |
* struct osm_routing_engine
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* DESCRIPTION
|
|
Packit |
13e616 |
* OpenSM routing engine module definition.
|
|
Packit |
13e616 |
* NOTES
|
|
Packit |
13e616 |
* routing engine structure - multicast callbacks may be
|
|
Packit |
13e616 |
* added later.
|
|
Packit |
13e616 |
*/
|
|
Packit |
13e616 |
typedef struct osm_routing_engine {
|
|
Packit |
13e616 |
osm_routing_engine_type_t type;
|
|
Packit |
13e616 |
const char *name;
|
|
Packit |
13e616 |
void *context;
|
|
Packit |
13e616 |
int (*build_lid_matrices) (void *context);
|
|
Packit |
13e616 |
int (*ucast_build_fwd_tables) (void *context);
|
|
Packit |
13e616 |
void (*ucast_dump_tables) (void *context);
|
|
Packit |
13e616 |
void (*update_sl2vl)(void *context, IN osm_physp_t *port,
|
|
Packit |
13e616 |
IN uint8_t in_port_num, IN uint8_t out_port_num,
|
|
Packit |
13e616 |
IN OUT ib_slvl_table_t *t);
|
|
Packit |
13e616 |
void (*update_vlarb)(void *context, IN osm_physp_t *port,
|
|
Packit |
13e616 |
IN uint8_t port_num,
|
|
Packit |
13e616 |
IN OUT ib_vl_arb_table_t *block,
|
|
Packit |
13e616 |
unsigned block_length, unsigned block_num);
|
|
Packit |
13e616 |
uint8_t (*path_sl)(void *context, IN uint8_t path_sl_hint,
|
|
Packit |
13e616 |
IN const ib_net16_t slid, IN const ib_net16_t dlid);
|
|
Packit |
13e616 |
ib_api_status_t (*mcast_build_stree)(void *context,
|
|
Packit |
13e616 |
IN OUT osm_mgrp_box_t *mgb);
|
|
Packit |
13e616 |
void (*destroy) (void *context);
|
|
Packit |
13e616 |
struct osm_routing_engine *next;
|
|
Packit |
13e616 |
} osm_routing_engine_t;
|
|
Packit |
13e616 |
/*
|
|
Packit |
13e616 |
* FIELDS
|
|
Packit |
13e616 |
* name
|
|
Packit |
13e616 |
* The routing engine name (will be used in logs).
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* context
|
|
Packit |
13e616 |
* The routing engine context. Will be passed as parameter
|
|
Packit |
13e616 |
* to the callback functions.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* build_lid_matrices
|
|
Packit |
13e616 |
* The callback for lid matrices generation.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* ucast_build_fwd_tables
|
|
Packit |
13e616 |
* The callback for unicast forwarding table generation.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* ucast_dump_tables
|
|
Packit |
13e616 |
* The callback for dumping unicast routing tables.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* update_sl2vl(void *context, IN osm_physp_t *port,
|
|
Packit |
13e616 |
* IN uint8_t in_port_num, IN uint8_t out_port_num,
|
|
Packit |
13e616 |
* OUT ib_slvl_table_t *t)
|
|
Packit |
13e616 |
* The callback to allow routing engine input for SL2VL maps.
|
|
Packit |
13e616 |
* *port is the physical port for which the SL2VL map is to be
|
|
Packit |
13e616 |
* updated. For switches, in_port_num/out_port_num identify
|
|
Packit |
13e616 |
* which part of the SL2VL map to update. For router/HCA ports,
|
|
Packit |
13e616 |
* in_port_num/out_port_num should be ignored.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* update_vlarb(void *context, IN osm_physp_t *port,
|
|
Packit |
13e616 |
* IN uint8_t port_num,
|
|
Packit |
13e616 |
* IN OUT ib_vl_arb_table_t *block,
|
|
Packit |
13e616 |
* unsigned block_length, unsigned block_num)
|
|
Packit |
13e616 |
* The callback to allow routing engine input for VLArbitration.
|
|
Packit |
13e616 |
* *port is the physical port for which the VLArb table is to be
|
|
Packit |
13e616 |
* updated.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* path_sl
|
|
Packit |
13e616 |
* The callback for computing path SL.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* mcast_build_stree
|
|
Packit |
13e616 |
* The callback for building the spanning tree for multicast
|
|
Packit |
13e616 |
* forwarding, called per MLID.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* destroy
|
|
Packit |
13e616 |
* The destroy method, may be used for routing engine
|
|
Packit |
13e616 |
* internals cleanup.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* next
|
|
Packit |
13e616 |
* Pointer to next routing engine in the list.
|
|
Packit |
13e616 |
*/
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
/****s* OpenSM: OpenSM/external_routing_engine_module_t
|
|
Packit |
13e616 |
* NAME
|
|
Packit |
13e616 |
* external_routing_engine_module_t
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* DESCRIPTION
|
|
Packit |
13e616 |
* External routing engine module structure.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* This structure is used to register a new external routing engine
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* SYNOPSIS
|
|
Packit |
13e616 |
*/
|
|
Packit |
13e616 |
typedef struct external_routing_engine_module {
|
|
Packit |
13e616 |
const char *name;
|
|
Packit |
13e616 |
int (*setup)(struct osm_routing_engine *re, struct osm_opensm *osm);
|
|
Packit |
13e616 |
void *context;
|
|
Packit |
13e616 |
} external_routing_engine_module_t;
|
|
Packit |
13e616 |
/*
|
|
Packit |
13e616 |
* FIELDS
|
|
Packit |
13e616 |
* name
|
|
Packit |
13e616 |
* Name of the external routing engine
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* setup
|
|
Packit |
13e616 |
* function to setup the external routing engine's callbacks
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* context
|
|
Packit |
13e616 |
* User defined context
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* SEE ALSO
|
|
Packit |
13e616 |
* osm_register_external_routing_engine
|
|
Packit |
13e616 |
*********/
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
/****s* OpenSM: OpenSM/osm_opensm_t
|
|
Packit |
13e616 |
* NAME
|
|
Packit |
13e616 |
* osm_opensm_t
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* DESCRIPTION
|
|
Packit |
13e616 |
* OpenSM structure.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* This object should be treated as opaque and should
|
|
Packit |
13e616 |
* be manipulated only through the provided functions.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* SYNOPSIS
|
|
Packit |
13e616 |
*/
|
|
Packit |
13e616 |
typedef struct osm_opensm {
|
|
Packit |
13e616 |
const char *osm_version;
|
|
Packit |
13e616 |
osm_subn_t subn;
|
|
Packit |
13e616 |
osm_sm_t sm;
|
|
Packit |
13e616 |
osm_sa_t sa;
|
|
Packit |
13e616 |
#ifdef ENABLE_OSM_PERF_MGR
|
|
Packit |
13e616 |
osm_perfmgr_t perfmgr;
|
|
Packit |
13e616 |
#endif /* ENABLE_OSM_PERF_MGR */
|
|
Packit |
13e616 |
osm_congestion_control_t cc;
|
|
Packit |
13e616 |
cl_qlist_t plugin_list;
|
|
Packit |
13e616 |
osm_db_t db;
|
|
Packit |
13e616 |
boolean_t mad_pool_constructed;
|
|
Packit |
13e616 |
osm_mad_pool_t mad_pool;
|
|
Packit |
13e616 |
osm_vendor_t *p_vendor;
|
|
Packit |
13e616 |
boolean_t vl15_constructed;
|
|
Packit |
13e616 |
osm_vl15_t vl15;
|
|
Packit |
13e616 |
osm_log_t log;
|
|
Packit |
13e616 |
cl_dispatcher_t disp;
|
|
Packit |
13e616 |
cl_dispatcher_t sa_set_disp;
|
|
Packit |
13e616 |
boolean_t sa_set_disp_initialized;
|
|
Packit |
13e616 |
cl_plock_t lock;
|
|
Packit |
13e616 |
struct osm_routing_engine *routing_engine_list;
|
|
Packit |
13e616 |
struct osm_routing_engine *routing_engine_used;
|
|
Packit |
13e616 |
struct osm_routing_engine *default_routing_engine;
|
|
Packit |
13e616 |
boolean_t no_fallback_routing_engine;
|
|
Packit |
13e616 |
osm_stats_t stats;
|
|
Packit |
13e616 |
osm_console_t console;
|
|
Packit |
13e616 |
nn_map_t *node_name_map;
|
|
Packit |
13e616 |
} osm_opensm_t;
|
|
Packit |
13e616 |
/*
|
|
Packit |
13e616 |
* FIELDS
|
|
Packit |
13e616 |
* osm_version
|
|
Packit |
13e616 |
* OpenSM version (as generated in osm_version.h)
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* subn
|
|
Packit |
13e616 |
* Subnet object for this subnet.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* sm
|
|
Packit |
13e616 |
* The Subnet Manager (SM) object for this subnet.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* sa
|
|
Packit |
13e616 |
* The Subnet Administration (SA) object for this subnet.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* db
|
|
Packit |
13e616 |
* Persistant storage of some data required between sessions.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* mad_pool
|
|
Packit |
13e616 |
* Pool of Management Datagram (MAD) objects.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* p_vendor
|
|
Packit |
13e616 |
* Pointer to the Vendor specific adapter for various
|
|
Packit |
13e616 |
* transport interfaces, such as UMADT, AL, etc. The
|
|
Packit |
13e616 |
* particular interface is set at compile time.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* vl15
|
|
Packit |
13e616 |
* The VL15 interface.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* log
|
|
Packit |
13e616 |
* Log facility used by all OpenSM components.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* disp
|
|
Packit |
13e616 |
* Central dispatcher containing the OpenSM worker threads.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* sa_set_disp
|
|
Packit |
13e616 |
* Dispatcher for SA Set and Delete requests.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* sa_set_disp_initialized.
|
|
Packit |
13e616 |
* Indicator that sa_set_disp dispatcher was initialized.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* lock
|
|
Packit |
13e616 |
* Shared lock guarding most OpenSM structures.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* routing_engine_list
|
|
Packit |
13e616 |
* List of routing engines that should be tried for use.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* routing_engine_used
|
|
Packit |
13e616 |
* Indicates which routing engine was used to route a subnet.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* no_fallback_routing_engine
|
|
Packit |
13e616 |
* Indicates if default routing engine should not be used.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* stats
|
|
Packit |
13e616 |
* Open SM statistics block
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* SEE ALSO
|
|
Packit |
13e616 |
*********/
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
/****f* OpenSM: OpenSM/osm_opensm_construct
|
|
Packit |
13e616 |
* NAME
|
|
Packit |
13e616 |
* osm_opensm_construct
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* DESCRIPTION
|
|
Packit |
13e616 |
* This function constructs an OpenSM object.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* SYNOPSIS
|
|
Packit |
13e616 |
*/
|
|
Packit |
13e616 |
void osm_opensm_construct(IN osm_opensm_t * p_osm);
|
|
Packit |
13e616 |
/*
|
|
Packit |
13e616 |
* PARAMETERS
|
|
Packit |
13e616 |
* p_osm
|
|
Packit |
13e616 |
* [in] Pointer to a OpenSM object to construct.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* RETURN VALUE
|
|
Packit |
13e616 |
* This function does not return a value.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* NOTES
|
|
Packit |
13e616 |
* Allows calling osm_opensm_init, osm_opensm_destroy
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* Calling osm_opensm_construct is a prerequisite to calling any other
|
|
Packit |
13e616 |
* method except osm_opensm_init.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* SEE ALSO
|
|
Packit |
13e616 |
* SM object, osm_opensm_init, osm_opensm_destroy
|
|
Packit |
13e616 |
*********/
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
/****f* OpenSM: OpenSM/osm_opensm_construct_finish
|
|
Packit |
13e616 |
* NAME
|
|
Packit |
13e616 |
* osm_opensm_construct_finish
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* DESCRIPTION
|
|
Packit |
13e616 |
* The osm_opensm_construct_finish function completes
|
|
Packit |
13e616 |
* the second phase of constucting an OpenSM object.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* SYNOPSIS
|
|
Packit |
13e616 |
*/
|
|
Packit |
13e616 |
void osm_opensm_construct_finish(IN osm_opensm_t * p_osm);
|
|
Packit |
13e616 |
/*
|
|
Packit |
13e616 |
* PARAMETERS
|
|
Packit |
13e616 |
* p_osm
|
|
Packit |
13e616 |
* [in] Pointer to a OpenSM object to construct.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* RETURN VALUE
|
|
Packit |
13e616 |
* This function does not return a value.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* NOTES
|
|
Packit |
13e616 |
* Calling osm_opensm_construct/osm_construct_finish is a prerequisite
|
|
Packit |
13e616 |
* to calling any other method except osm_opensm_init/osm_opensm_init_finish.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* SEE ALSO
|
|
Packit |
13e616 |
* SM object, osm_opensm_init, osm_opensm_construct_finish,
|
|
Packit |
13e616 |
* osm_opensm_destroy, osm_opensm_destroy_finish
|
|
Packit |
13e616 |
*********/
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
/****f* OpenSM: OpenSM/osm_opensm_destroy
|
|
Packit |
13e616 |
* NAME
|
|
Packit |
13e616 |
* osm_opensm_destroy
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* DESCRIPTION
|
|
Packit |
13e616 |
* The osm_opensm_destroy function destroys an SM, releasing
|
|
Packit |
13e616 |
* all resources.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* SYNOPSIS
|
|
Packit |
13e616 |
*/
|
|
Packit |
13e616 |
void osm_opensm_destroy(IN osm_opensm_t * p_osm);
|
|
Packit |
13e616 |
/*
|
|
Packit |
13e616 |
* PARAMETERS
|
|
Packit |
13e616 |
* p_osm
|
|
Packit |
13e616 |
* [in] Pointer to a OpenSM object to destroy.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* RETURN VALUE
|
|
Packit |
13e616 |
* This function does not return a value.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* NOTES
|
|
Packit |
13e616 |
* Performs any necessary cleanup of the specified OpenSM object.
|
|
Packit |
13e616 |
* Further operations should not be attempted on the destroyed object.
|
|
Packit |
13e616 |
* This function should only be called after a call to osm_opensm_construct or
|
|
Packit |
13e616 |
* osm_opensm_init.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* SEE ALSO
|
|
Packit |
13e616 |
* SM object, osm_opensm_construct, osm_opensm_init
|
|
Packit |
13e616 |
*********/
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
/****f* OpenSM: OpenSM/osm_opensm_destroy_finish
|
|
Packit |
13e616 |
* NAME
|
|
Packit |
13e616 |
* osm_opensm_destroy_finish
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* DESCRIPTION
|
|
Packit |
13e616 |
* The osm_opensm_destroy_finish function handles the second phase
|
|
Packit |
13e616 |
* of destroying an SM, releasing all resources.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* SYNOPSIS
|
|
Packit |
13e616 |
*/
|
|
Packit |
13e616 |
void osm_opensm_destroy_finish(IN osm_opensm_t * p_osm);
|
|
Packit |
13e616 |
/*
|
|
Packit |
13e616 |
* PARAMETERS
|
|
Packit |
13e616 |
* p_osm
|
|
Packit |
13e616 |
* [in] Pointer to a OpenSM object to destroy.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* RETURN VALUE
|
|
Packit |
13e616 |
* This function does not return a value.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* NOTES
|
|
Packit |
13e616 |
* Performs second phase of any necessary cleanup of the specified OpenSM object.
|
|
Packit |
13e616 |
* Further operations should not be attempted on the destroyed object.
|
|
Packit |
13e616 |
* This function should only be called after a call to
|
|
Packit |
13e616 |
* osm_opensm_construct_finish or osm_opensm_init_finish.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* SEE ALSO
|
|
Packit |
13e616 |
* SM object, osm_opensm_construct, osm_opensm_construct_finish,
|
|
Packit |
13e616 |
* osm_opensm_init, osm_opensm_init_finish
|
|
Packit |
13e616 |
*********/
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
/****f* OpenSM: OpenSM/osm_opensm_init
|
|
Packit |
13e616 |
* NAME
|
|
Packit |
13e616 |
* osm_opensm_init
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* DESCRIPTION
|
|
Packit |
13e616 |
* The osm_opensm_init function initializes a OpenSM object for use.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* SYNOPSIS
|
|
Packit |
13e616 |
*/
|
|
Packit |
13e616 |
ib_api_status_t osm_opensm_init(IN osm_opensm_t * p_osm,
|
|
Packit |
13e616 |
IN const osm_subn_opt_t * p_opt);
|
|
Packit |
13e616 |
/*
|
|
Packit |
13e616 |
* PARAMETERS
|
|
Packit |
13e616 |
* p_osm
|
|
Packit |
13e616 |
* [in] Pointer to an osm_opensm_t object to initialize.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* p_opt
|
|
Packit |
13e616 |
* [in] Pointer to the subnet options structure.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* RETURN VALUES
|
|
Packit |
13e616 |
* IB_SUCCESS if the OpenSM object was initialized successfully.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* NOTES
|
|
Packit |
13e616 |
* Allows calling other OpenSM methods.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* SEE ALSO
|
|
Packit |
13e616 |
* SM object, osm_opensm_construct, osm_opensm_destroy
|
|
Packit |
13e616 |
*********/
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
/****f* OpenSM: OpenSM/osm_opensm_init_finish
|
|
Packit |
13e616 |
* NAME
|
|
Packit |
13e616 |
* osm_opensm_init_finish
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* DESCRIPTION
|
|
Packit |
13e616 |
* The osm_opensm_init_finish function performs the second phase
|
|
Packit |
13e616 |
* of initialization of an OpenSM object.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* SYNOPSIS
|
|
Packit |
13e616 |
*/
|
|
Packit |
13e616 |
ib_api_status_t osm_opensm_init_finish(IN osm_opensm_t * p_osm,
|
|
Packit |
13e616 |
IN const osm_subn_opt_t * p_opt);
|
|
Packit |
13e616 |
/*
|
|
Packit |
13e616 |
* PARAMETERS
|
|
Packit |
13e616 |
* p_osm
|
|
Packit |
13e616 |
* [in] Pointer to an osm_opensm_t object to initialize.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* p_opt
|
|
Packit |
13e616 |
* [in] Pointer to the subnet options structure.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* RETURN VALUES
|
|
Packit |
13e616 |
* IB_SUCCESS if the OpenSM object was initialized successfully.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* NOTES
|
|
Packit |
13e616 |
* Allows calling other OpenSM methods.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* SEE ALSO
|
|
Packit |
13e616 |
* SM object, osm_opensm_construct, osm_opensm_construct_finish,
|
|
Packit |
13e616 |
* osm_opensm_destroy, osm_opensm_destroy_finish
|
|
Packit |
13e616 |
*********/
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
/****f* OpenSM: OpenSM/osm_opensm_sweep
|
|
Packit |
13e616 |
* NAME
|
|
Packit |
13e616 |
* osm_opensm_sweep
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* DESCRIPTION
|
|
Packit |
13e616 |
* Initiates a subnet sweep.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* SYNOPSIS
|
|
Packit |
13e616 |
*/
|
|
Packit |
13e616 |
static inline void osm_opensm_sweep(IN osm_opensm_t * p_osm)
|
|
Packit |
13e616 |
{
|
|
Packit |
13e616 |
osm_sm_sweep(&p_osm->sm);
|
|
Packit |
13e616 |
}
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
/*
|
|
Packit |
13e616 |
* PARAMETERS
|
|
Packit |
13e616 |
* p_osm
|
|
Packit |
13e616 |
* [in] Pointer to an osm_opensm_t object on which to
|
|
Packit |
13e616 |
* initiate a sweep.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* RETURN VALUES
|
|
Packit |
13e616 |
* None
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* NOTES
|
|
Packit |
13e616 |
* If the OpenSM object is not bound to a port, this function
|
|
Packit |
13e616 |
* does nothing.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* SEE ALSO
|
|
Packit |
13e616 |
*********/
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
/****f* OpenSM: OpenSM/osm_opensm_set_log_flags
|
|
Packit |
13e616 |
* NAME
|
|
Packit |
13e616 |
* osm_opensm_set_log_flags
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* DESCRIPTION
|
|
Packit |
13e616 |
* Sets the log level.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* SYNOPSIS
|
|
Packit |
13e616 |
*/
|
|
Packit |
13e616 |
static inline void osm_opensm_set_log_flags(IN osm_opensm_t * p_osm,
|
|
Packit |
13e616 |
IN osm_log_level_t log_flags)
|
|
Packit |
13e616 |
{
|
|
Packit |
13e616 |
osm_log_set_level(&p_osm->log, log_flags);
|
|
Packit |
13e616 |
}
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
/*
|
|
Packit |
13e616 |
* PARAMETERS
|
|
Packit |
13e616 |
* p_osm
|
|
Packit |
13e616 |
* [in] Pointer to an osm_opensm_t object.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* log_flags
|
|
Packit |
13e616 |
* [in] Log level flags to set.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* RETURN VALUES
|
|
Packit |
13e616 |
* None
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* NOTES
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* SEE ALSO
|
|
Packit |
13e616 |
*********/
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
/****f* OpenSM: OpenSM/osm_opensm_bind
|
|
Packit |
13e616 |
* NAME
|
|
Packit |
13e616 |
* osm_opensm_bind
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* DESCRIPTION
|
|
Packit |
13e616 |
* Binds the opensm object to a port guid.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* SYNOPSIS
|
|
Packit |
13e616 |
*/
|
|
Packit |
13e616 |
ib_api_status_t osm_opensm_bind(IN osm_opensm_t * p_osm, IN ib_net64_t guid);
|
|
Packit |
13e616 |
/*
|
|
Packit |
13e616 |
* PARAMETERS
|
|
Packit |
13e616 |
* p_osm
|
|
Packit |
13e616 |
* [in] Pointer to an osm_opensm_t object to bind.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* guid
|
|
Packit |
13e616 |
* [in] Local port GUID with which to bind.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* RETURN VALUES
|
|
Packit |
13e616 |
* None
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* NOTES
|
|
Packit |
13e616 |
* A given opensm object can only be bound to one port at a time.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* SEE ALSO
|
|
Packit |
13e616 |
*********/
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
/****f* OpenSM: OpenSM/osm_opensm_wait_for_subnet_up
|
|
Packit |
13e616 |
* NAME
|
|
Packit |
13e616 |
* osm_opensm_wait_for_subnet_up
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* DESCRIPTION
|
|
Packit |
13e616 |
* Blocks the calling thread until the subnet is up.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* SYNOPSIS
|
|
Packit |
13e616 |
*/
|
|
Packit |
13e616 |
static inline cl_status_t
|
|
Packit |
13e616 |
osm_opensm_wait_for_subnet_up(IN osm_opensm_t * p_osm, IN uint32_t wait_us,
|
|
Packit |
13e616 |
IN boolean_t interruptible)
|
|
Packit |
13e616 |
{
|
|
Packit |
13e616 |
return osm_sm_wait_for_subnet_up(&p_osm->sm, wait_us, interruptible);
|
|
Packit |
13e616 |
}
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
/*
|
|
Packit |
13e616 |
* PARAMETERS
|
|
Packit |
13e616 |
* p_osm
|
|
Packit |
13e616 |
* [in] Pointer to an osm_opensm_t object.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* wait_us
|
|
Packit |
13e616 |
* [in] Number of microseconds to wait.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* interruptible
|
|
Packit |
13e616 |
* [in] Indicates whether the wait operation can be interrupted
|
|
Packit |
13e616 |
* by external signals.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* RETURN VALUES
|
|
Packit |
13e616 |
* CL_SUCCESS if the wait operation succeeded in response to the event
|
|
Packit |
13e616 |
* being set.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* CL_TIMEOUT if the specified time period elapses.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* CL_NOT_DONE if the wait was interrupted by an external signal.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* CL_ERROR if the wait operation failed.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* NOTES
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* SEE ALSO
|
|
Packit |
13e616 |
*********/
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
/****f* OpenSM: OpenSM/osm_register_external_routing_engine
|
|
Packit |
13e616 |
* NAME
|
|
Packit |
13e616 |
* osm_register_external_routing_engine
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* DESCRIPTION
|
|
Packit |
13e616 |
* Register a new external routing engine.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* SYNOPSIS
|
|
Packit |
13e616 |
*/
|
|
Packit |
13e616 |
cl_status_t osm_register_external_routing_engine(
|
|
Packit |
13e616 |
IN osm_opensm_t *osm,
|
|
Packit |
13e616 |
IN const external_routing_engine_module_t *module,
|
|
Packit |
13e616 |
IN void *context);
|
|
Packit |
13e616 |
/*
|
|
Packit |
13e616 |
* PARAMETERS
|
|
Packit |
13e616 |
* type
|
|
Packit |
13e616 |
* [in] Pointer to a osm_opensm_t object
|
|
Packit |
13e616 |
* [in] Pointer to a external_routing_engine_module_t object to be registered.
|
|
Packit |
13e616 |
* [in] Pointer to a user context that will be set in osm_routing_engine_t
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* RETURN VALUES
|
|
Packit |
13e616 |
* CL_SUCCESS if the routing engine was registered successfully.
|
|
Packit |
13e616 |
* CL_DUPLICATE if a routing engine with the same name
|
|
Packit |
13e616 |
* or type was already registered.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* NOTES
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* SEE ALSO
|
|
Packit |
13e616 |
* external_routing_engine_module_t
|
|
Packit |
13e616 |
*********/
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
/****f* OpenSM: OpenSM/osm_routing_engine_type_str
|
|
Packit |
13e616 |
* NAME
|
|
Packit |
13e616 |
* osm_routing_engine_type_str
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* DESCRIPTION
|
|
Packit |
13e616 |
* Returns a string for the specified routing engine type.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* SYNOPSIS
|
|
Packit |
13e616 |
*/
|
|
Packit |
13e616 |
const char *osm_routing_engine_type_str(IN osm_routing_engine_type_t type);
|
|
Packit |
13e616 |
/*
|
|
Packit |
13e616 |
* PARAMETERS
|
|
Packit |
13e616 |
* type
|
|
Packit |
13e616 |
* [in] routing engine type.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* RETURN VALUES
|
|
Packit |
13e616 |
* Pointer to routing engine name.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* NOTES
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* SEE ALSO
|
|
Packit |
13e616 |
*********/
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
/****f* OpenSM: OpenSM/osm_routing_engine_type
|
|
Packit |
13e616 |
* NAME
|
|
Packit |
13e616 |
* osm_routing_engine_type
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* DESCRIPTION
|
|
Packit |
13e616 |
* Returns a routing engine type specified routing engine name string.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* SYNOPSIS
|
|
Packit |
13e616 |
*/
|
|
Packit |
13e616 |
osm_routing_engine_type_t osm_routing_engine_type(IN const char *str);
|
|
Packit |
13e616 |
/*
|
|
Packit |
13e616 |
* PARAMETERS
|
|
Packit |
13e616 |
* str
|
|
Packit |
13e616 |
* [in] routing engine name string.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* RETURN VALUES
|
|
Packit |
13e616 |
* Routing engine type.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* NOTES
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* SEE ALSO
|
|
Packit |
13e616 |
*********/
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
void osm_opensm_report_event(osm_opensm_t *osm, osm_epi_event_id_t event_id,
|
|
Packit |
13e616 |
void *event_data);
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
/* dump helpers */
|
|
Packit |
13e616 |
void osm_dump_mcast_routes(osm_opensm_t * osm);
|
|
Packit |
13e616 |
void osm_dump_all(osm_opensm_t * osm);
|
|
Packit |
13e616 |
void osm_dump_qmap_to_file(osm_opensm_t * p_osm, const char *file_name,
|
|
Packit |
13e616 |
cl_qmap_t * map,
|
|
Packit |
13e616 |
void (*func) (cl_map_item_t *, FILE *, void *),
|
|
Packit |
13e616 |
void *cxt);
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
/****v* OpenSM/osm_exit_flag
|
|
Packit |
13e616 |
*/
|
|
Packit |
13e616 |
extern volatile unsigned int osm_exit_flag;
|
|
Packit |
13e616 |
/*
|
|
Packit |
13e616 |
* DESCRIPTION
|
|
Packit |
13e616 |
* Set to one to cause all threads to leave
|
|
Packit |
13e616 |
*********/
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
END_C_DECLS
|
|
Packit |
13e616 |
#endif /* _OSM_OPENSM_H_ */
|