Blame Esm/ib/include/fm_xml.h

Packit 857059
/* BEGIN_ICS_COPYRIGHT2 ****************************************
Packit 857059
Packit 857059
Copyright (c) 2015-2018, Intel Corporation
Packit 857059
Packit 857059
Redistribution and use in source and binary forms, with or without
Packit 857059
modification, are permitted provided that the following conditions are met:
Packit 857059
Packit 857059
    * Redistributions of source code must retain the above copyright notice,
Packit 857059
      this list of conditions and the following disclaimer.
Packit 857059
    * Redistributions in binary form must reproduce the above copyright
Packit 857059
      notice, this list of conditions and the following disclaimer in the
Packit 857059
      documentation and/or other materials provided with the distribution.
Packit 857059
    * Neither the name of Intel Corporation nor the names of its contributors
Packit 857059
      may be used to endorse or promote products derived from this software
Packit 857059
      without specific prior written permission.
Packit 857059
Packit 857059
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
Packit 857059
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Packit 857059
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
Packit 857059
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
Packit 857059
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Packit 857059
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
Packit 857059
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
Packit 857059
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
Packit 857059
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Packit 857059
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Packit 857059
Packit 857059
 * ** END_ICS_COPYRIGHT2   ****************************************/
Packit 857059
Packit 857059
//===========================================================================//
Packit 857059
//
Packit 857059
// FILE NAME
Packit 857059
//    fm_xml.h
Packit 857059
//
Packit 857059
// DESCRIPTION
Packit 857059
//    This file contains structures used for parsing the fm_config.xml
Packit 857059
//    file for configuring SM
Packit 857059
//
Packit 857059
//===========================================================================//
Packit 857059
Packit 857059
#ifndef	_FM_XML_H_
Packit 857059
#define	_FM_XML_H_
Packit 857059
Packit 857059
#include <stdio.h>
Packit 857059
#include <signal.h>
Packit 857059
#include <ixml.h>
Packit 857059
#include "cs_log.h"
Packit 857059
Packit 857059
Packit 857059
#ifdef __VXWORKS__
Packit 857059
#include "regexp.h"
Packit 857059
#else
Packit 857059
#include "regex.h"
Packit 857059
#endif
Packit 857059
Packit 857059
#ifndef __VXWORKS__
Packit 857059
#define MAX_SUBNET_SIZE						64000		// HSM has no realistic max
Packit 857059
#define DEFAULT_SUBNET_SIZE					2560		// XML default subnet size
Packit 857059
#else  // __VXWORKS__
Packit 857059
#define MAX_SUBNET_SIZE						288			// ESM has a max subnet size of 288
Packit 857059
#define DEFAULT_SUBNET_SIZE					100		    // XML default subnet size
Packit 857059
#endif // __VXWORKS__
Packit 857059
Packit 857059
// Key PM config parameter defaults and ranges
Packit 857059
#define PM_DEFAULT_TOTAL_IMAGES	10			// for Image[] and history[]
Packit 857059
#define PM_MIN_TOTAL_IMAGES	3				// for Image[] and history[]
Packit 857059
#ifdef __VXWORKS__
Packit 857059
// keep vxWorks limited to save memory and also because pm_compute_pool_size
Packit 857059
// is called before reading config file
Packit 857059
#define PM_MAX_TOTAL_IMAGES	10				// for Image[] and history[]
Packit 857059
#else
Packit 857059
#define PM_MAX_TOTAL_IMAGES	100000			// for Image[] and history[]
Packit 857059
#endif
Packit 857059
Packit 857059
#define PM_DEFAULT_FF_IMAGES 5				// for freezeFrame[]
Packit 857059
#define PM_MIN_FF_IMAGES 2					// for freezeFrame[]
Packit 857059
#ifdef __VXWORKS__
Packit 857059
#define PM_MAX_FF_IMAGES (PM_MAX_TOTAL_IMAGES-2)	// for freezeFrame[]
Packit 857059
#else
Packit 857059
// due to some linear searches, we limit number of FF.  2-3 per client is enough
Packit 857059
// and only a handful of clients are expected, 100 should be plenty
Packit 857059
#define PM_MAX_FF_IMAGES 100				// for freezeFrame[]
Packit 857059
#endif
Packit 857059
Packit 857059
#define PM_DEFAULT_PA_MAX_CLIENTS 3
Packit 857059
#define PM_MIN_MAX_CLIENTS	3
Packit 857059
#ifdef __VXWORKS__
Packit 857059
// keep vxWorks limited to save memory and also because pm_compute_pool_size
Packit 857059
// is called before reading config file
Packit 857059
#define PM_MAX_MAX_CLIENTS	4
Packit 857059
#else
Packit 857059
#define PM_MAX_MAX_CLIENTS	20
Packit 857059
#endif
Packit 857059
Packit 857059
#define PM_DEFAULT_FF_LEASE 60				// in seconds
Packit 857059
Packit 857059
#define PM_DEFAULT_MAX_ATTEMPTS			3
Packit 857059
#define PM_DEFAULT_RESP_TIMEOUT			250
Packit 857059
#define PM_DEFAULT_MIN_RESP_TIMEOUT		35
Packit 857059
#define PM_DEFAULT_SWEEP_ERRORS_LOG_THRESHOLD	10
Packit 857059
#define PM_DEFAULT_MAX_PARALLEL_NODES	10
Packit 857059
#define PM_DEFAULT_PMA_BATCH_SIZE		2
Packit 857059
Packit 857059
#define STL_PM_MAX_DG_PER_PMPG	5		//Maximum number of Monitors allowed in a PmPortGroup
Packit 857059
#define STL_PM_GROUPNAMELEN		64
Packit 857059
#define STL_PM_MAX_CUSTOM_PORT_GROUPS 8 // HFIs and SWs take the first 2 slots.
Packit 857059
Packit 857059
#define FE_LISTEN_PORT     	3245    // FAB_EXEC listen port
Packit 857059
#define FE_WIN_SIZE			1       // Default Window Size for Reliable
Packit 857059
#define FE_MAX_WIN_SIZE    	16      // Maximum window size
Packit 857059
#define FE_MIN_WIN_SIZE    	1       // Minimum window size
Packit 857059
Packit 857059
#define FE_MAX_TRAP_SUBS    20      // Maximum number of TrapSubs
Packit 857059
Packit 857059
// max number of times to fail to check on master
Packit 857059
#define SM_CHECK_MASTER_INTERVAL 5
Packit 857059
#define SM_CHECK_MASTER_MAX_COUNT 3
Packit 857059
Packit 857059
#define SM_TRAP_THRESHOLD_MIN 10
Packit 857059
#define SM_TRAP_THRESHOLD_MAX 100
Packit 857059
#define SM_TRAP_THRESHOLD_DEFAULT 0 // off
Packit 857059
Packit 857059
#define SM_TRAP_THRESHOLD_COUNT_DEFAULT 10
Packit 857059
#define SM_TRAP_THRESHOLD_COUNT_MIN     2
Packit 857059
#define SM_TRAP_THRESHOLD_COUNT_MAX     100
Packit 857059
Packit 857059
#define STL_CONFIGURABLE_SLS		16
Packit 857059
Packit 857059
Packit 857059
#define NONRESP_TIMEOUT  	600ull
Packit 857059
#define NONRESP_MAXRETRY 	3
Packit 857059
Packit 857059
Packit 857059
// Cable Info Policy
Packit 857059
#define CIP_NONE 0
Packit 857059
#define CIP_LINK 1
Packit 857059
#define CIP_PORT 2
Packit 857059
Packit 857059
// SwitchCascadeActivateEnable setting
Packit 857059
#define SCAE_DISABLED 0
Packit 857059
#define SCAE_SW_ONLY 1
Packit 857059
#define SCAE_ALL 2
Packit 857059
Packit 857059
// PortBounceLogLimit no limit setting
Packit 857059
#define PORT_BOUNCE_LOG_NO_LIMIT 0
Packit 857059
Packit 857059
// While logging of traps from a port is suppressed, summary trap information
Packit 857059
// will be logged for that port after accumulating a certain number of traps.
Packit 857059
// This number starts with SM_TRAP_LOG_SUMMARY_THRESHOLD_START.
Packit 857059
// Once that number is reached and sa_TrapNeedsLogging() is called, the count
Packit 857059
// of traps is reset to zero and the threshold  is increased by
Packit 857059
// SM_TRAP_LOG_SUMMARY_THRESHOLD_INCREMENT, with the maximum value of the
Packit 857059
// threshold being capped off by  SM_TRAP_LOG_SUMMARY_THRESHOLD_MAX
Packit 857059
Packit 857059
#define SM_TRAP_LOG_SUMMARY_THRESHOLD_START     5
Packit 857059
#define SM_TRAP_LOG_SUMMARY_THRESHOLD_INCREMENT 5
Packit 857059
/* Should not be greater than 250 - logSuppressTrapCount is an 8 bit field*/
Packit 857059
#define SM_TRAP_LOG_SUMMARY_THRESHOLD_MAX       250
Packit 857059
Packit 857059
// Below constants are for suppressing trap logging information to reduce
Packit 857059
// too much noise in the log
Packit 857059
Packit 857059
// If two traps are received from the same port with in
Packit 857059
// SM_TRAP_LOG_SUPPRESS_TRIGGER_INTERVAL, logging of trap information from
Packit 857059
// that port will be suppressed
Packit 857059
Packit 857059
#define SM_TRAP_LOG_SUPPRESS_TRIGGER_INTERVAL   30      /*in seconds*/
Packit 857059
Packit 857059
// Preemption Default Values
Packit 857059
#define SM_PREEMPT_SMALL_PACKET_MIN 32
Packit 857059
#define SM_PREEMPT_SMALL_PACKET_MAX 8192
Packit 857059
#define SM_PREEMPT_SMALL_PACKET_DEF 256
Packit 857059
#define SM_PREEMPT_SMALL_PACKET_INC 32
Packit 857059
Packit 857059
#define SM_PREEMPT_LARGE_PACKET_MIN 512
Packit 857059
#define SM_PREEMPT_LARGE_PACKET_MAX 8192
Packit 857059
#define SM_PREEMPT_LARGE_PACKET_DEF 4096
Packit 857059
#define SM_PREEMPT_LARGE_PACKET_INC 512
Packit 857059
Packit 857059
#define SM_PREEMPT_LIMIT_MIN 256    // Note 0 is a valid value, but effectively turns off preemption
Packit 857059
#define SM_PREEMPT_LIMIT_MAX 65024  // This is the max without being infinite
Packit 857059
#define SM_PREEMPT_LIMIT_INF 65280  // This is the magical infinite value. SM_PREEMPT_LIMIT_INF / SM_PREEMPT_LIMIT_INC = 0xff.
Packit 857059
#define SM_PREEMPT_LIMIT_DEF 4096
Packit 857059
#define SM_PREEMPT_LIMIT_INC 256
Packit 857059
Packit 857059
#define SM_PREEMPT_TAIL_MIN 80
Packit 857059
#define SM_PREEMPT_TAIL_DEF 80
Packit 857059
#define SM_PREEMPT_TAIL_INC 8
Packit 857059
Packit 857059
#define SM_PREEMPT_HEAD_MIN 80
Packit 857059
#define SM_PREEMPT_HEAD_DEF 80
Packit 857059
#define SM_PREEMPT_HEAD_INC 8
Packit 857059
#define SM_DEFAULT_MAX_LID  0xBFFF
Packit 857059
#define SM_MAX_LID_LIMIT    0xBFFF
Packit 857059
#define SM_MAX_9B_LID       0xBFFF
Packit 857059
Packit 857059
// Note: Multicast and Collective masks are currently
Packit 857059
// not configurable.
Packit 857059
#define SM_DEFAULT_MULTICAST_MASK 4
Packit 857059
#define SM_DEFAULT_COLLECTIVE_MASK 1
Packit 857059
Packit 857059
// Constants related to our multicast lid collescing scheme
Packit 857059
#define MAX_SUPPORTED_MCAST_GRP_CLASSES 32
Packit 857059
#define DEFAULT_SW_MLID_TABLE_CAP 1024
Packit 857059
Packit 857059
#define XML_PARSE_MEMORY_LIMIT				10000000	// limit to 10M per instance of FM
Packit 857059
Packit 857059
// this define will turn on a series of debug statements for XML parsing
Packit 857059
//#define XML_DEBUG
Packit 857059
Packit 857059
// this define will turn on memory debugging for XML and VF parsing
Packit 857059
//#define XML_MEMORY
Packit 857059
Packit 857059
// Max number on FM instances - ESM only requires one instance and will be
Packit 857059
// adjusted for in the parser
Packit 857059
#define MAX_INSTANCES 						8
Packit 857059
Packit 857059
// VF definitions - note that the number of devices is unlimited and has been
Packit 857059
// tested to 20,000
Packit 857059
#ifdef __VXWORKS__
Packit 857059
#define MAX_CONFIGURED_VFABRICS             64
Packit 857059
#define MAX_ENABLED_VFABRICS                32
Packit 857059
#else /* __VXWORKS__ */
Packit 857059
#define MAX_CONFIGURED_VFABRICS           1000
Packit 857059
#define MAX_ENABLED_VFABRICS              1000
Packit 857059
#endif /* __VXWORKS__ */
Packit 857059
Packit 857059
#define MAX_VFABRIC_APPS				64
Packit 857059
#define MAX_VFABRIC_GROUPS				1024
Packit 857059
#define MAX_VFABRIC_MEMBERS_PER_VF			1024
Packit 857059
#define MAX_VFABRIC_APPS_PER_VF				64
Packit 857059
#define MAX_VFABRIC_APP_SIDS				64
Packit 857059
#define MAX_VFABRIC_APP_MGIDS				64
Packit 857059
#define MAX_QOS_GROUPS					32
Packit 857059
#define MAX_INCLUDED_GROUPS				32
Packit 857059
#define MAX_INCLUDED_APPS				32
Packit 857059
#define MAX_DEFAULT_GROUPS				64
Packit 857059
#define MAX_VFABRIC_DG_MGIDS				32
Packit 857059
Packit 857059
// Length of VirtualFabric, Group, Application, Fm instance  Names
Packit 857059
#define MAX_VFABRIC_NAME					64
Packit 857059
Packit 857059
// Length of longest compound string in App - typically MGID
Packit 857059
#define MAX_VFABRIC_APP_ELEMENT				96
Packit 857059
Packit 857059
// same quantity as MAX_SUPPORTED_MCAST_GRP_CLASSES in sm_l.h
Packit 857059
#define MAX_SUPPORTED_MCAST_GRP_CLASSES_XML 32
Packit 857059
Packit 857059
// priority range
Packit 857059
#define MAX_PRIORITY						15
Packit 857059
Packit 857059
// VL15CreditRate range
Packit 857059
#define MAX_VL15_CREDIT_RATE				21
Packit 857059
Packit 857059
// Max ports per switch, used in config definitions
Packit 857059
#define MAX_SWITCH_PORTS					255
Packit 857059
Packit 857059
// out of memory error
Packit 857059
#define OUT_OF_MEMORY					"Memory limit has been exceeded parsing the XML configuration"
Packit 857059
#define OUT_OF_MEMORY_RETURN			"Memory limit has been exceeded parsing the XML configuration\n"
Packit 857059
#define PRINT_MEMORY_ERROR				IXmlParserPrintError(state, OUT_OF_MEMORY);
Packit 857059
Packit 857059
// undefined XML values - used to see if XML config provided value after parsing
Packit 857059
#define UNDEFINED_XML8					0xff
Packit 857059
#define UNDEFINED_XML16					0xffff
Packit 857059
#define UNDEFINED_XML32					0xffffffff
Packit 857059
#define UNDEFINED_XML64					0xffffffffffffffffull
Packit 857059
Packit 857059
// array sizes
Packit 857059
#define FILENAME_SIZE					256
Packit 857059
#define LOGFILE_SIZE					100
Packit 857059
#define STRING_SIZE						32
Packit 857059
Packit 857059
// config consistency check levels
Packit 857059
#define NO_CHECK_CCC_LEVEL				0
Packit 857059
#define CHECK_NO_ACTION_CCC_LEVEL		1
Packit 857059
#define CHECK_ACTION_CCC_LEVEL			2
Packit 857059
#define DEFAULT_CCC_LEVEL				CHECK_ACTION_CCC_LEVEL
Packit 857059
#define DEFAULT_CCC_METHOD				MD5_CHECKSUM_METHOD
Packit 857059
Packit 857059
// values for Sm.PathSelection parameter
Packit 857059
#define PATH_MODE_MINIMAL	0	// no more than 1 path per lid
Packit 857059
#define PATH_MODE_PAIRWISE	1	// cover every lid on "bigger side" exactly once
Packit 857059
#define PATH_MODE_ORDERALL	2	// PAIRWISE, then all src, all dst (skip dups)
Packit 857059
#define PATH_MODE_SRCDSTALL	3	// all src, all dst
Packit 857059
Packit 857059
// Bitmask definitions for [Debug] SM Skip Write
Packit 857059
#define SM_SKIP_WRITE_PORTINFO		0x00000001	// Includes Port Info
Packit 857059
#define SM_SKIP_WRITE_SMINFO		0x00000002	// Includes Sm Info
Packit 857059
#define SM_SKIP_WRITE_GUID			0x00000004	// Includes GUID Info
Packit 857059
#define SM_SKIP_WRITE_SWITCHINFO	0x00000008	// Includes Switch Info
Packit 857059
#define SM_SKIP_WRITE_VLARB			0x00000020	// Includes VLArb Tables (High / Low / Preempt Matrix)
Packit 857059
#define SM_SKIP_WRITE_MAPS			0x00000040	// Includes SL::SC, SC::SL, SC::VL
Packit 857059
Packit 857059
#define SM_SKIP_WRITE_LFT			0x00000080	// Includes LFT and  MFT
Packit 857059
Packit 857059
#define SM_SKIP_WRITE_AR			0x00000100	// Includes port group table, portgroup FDB
Packit 857059
#define SM_SKIP_WRITE_PKEY			0x00000200
Packit 857059
#define SM_SKIP_WRITE_CONG			0x00000400	// Includes HFI congestion / Switch congestion
Packit 857059
#define SM_SKIP_WRITE_BFRCTRL		0x00000800
Packit 857059
#define SM_SKIP_WRITE_NOTICE		0x00001000
Packit 857059
#define SM_SKIP_WRITE_PORTSTATEINFO 0x00002000  // Includes PortStateInfo sets for cascade activation
Packit 857059
Packit 857059
Packit 857059
// This can be used for values such as LogMask's where it is necessary
Packit 857059
// to know if a value was supplied.
Packit 857059
typedef struct _FmParamU32 {
Packit 857059
	uint32_t			value;
Packit 857059
	uint8_t				valid;	// is value valid
Packit 857059
} FmParamU32_t;
Packit 857059
Packit 857059
// Structures for parsing of Virtual Fabric XML tags
Packit 857059
Packit 857059
typedef struct _XmlGuid {
Packit 857059
	uint64_t			guid;
Packit 857059
	struct _XmlGuid		*next;
Packit 857059
} XmlGuid_t;
Packit 857059
Packit 857059
typedef struct _XmlNode {
Packit 857059
	char				node[MAX_VFABRIC_NAME];
Packit 857059
	struct _XmlNode		*next;
Packit 857059
} XmlNode_t;
Packit 857059
Packit 857059
typedef struct _XmlIncGroup {
Packit 857059
	char group[MAX_VFABRIC_NAME];
Packit 857059
	int  dg_index; // Index into dg_config
Packit 857059
	struct _XmlIncGroup	*next;
Packit 857059
} XmlIncGroup_t;
Packit 857059
Packit 857059
Packit 857059
#define MAX_BRACKETS_SUPPORTED 10
Packit 857059
#define MAX_DIGITS_TO_PROCESS 5
Packit 857059
#define MAX_NODE_DESC_REG_EXPR 1500
Packit 857059
typedef struct _RegexBracketParseInfo{
Packit 857059
  int     totalGroups;
Packit 857059
  boolean portRangeDefined;
Packit 857059
  int     portNum1;
Packit 857059
  int     portNum2;
Packit 857059
  int     lead0sPort1;
Packit 857059
  int     lead0sPort2;
Packit 857059
Packit 857059
  int numBracketRangesDefined;
Packit 857059
  int number1[MAX_BRACKETS_SUPPORTED];
Packit 857059
  int numDigitsNum1[MAX_BRACKETS_SUPPORTED];
Packit 857059
  int number2[MAX_BRACKETS_SUPPORTED];
Packit 857059
  int numDigitsNum2[MAX_BRACKETS_SUPPORTED];
Packit 857059
  int leading0sNum1[MAX_BRACKETS_SUPPORTED];
Packit 857059
  int leading0sNum2[MAX_BRACKETS_SUPPORTED];
Packit 857059
  int bracketGroupNum[MAX_BRACKETS_SUPPORTED];
Packit 857059
} RegexBracketParseInfo_t;
Packit 857059
Packit 857059
typedef struct _RegExp {
Packit 857059
	char			     	regexString[MAX_NODE_DESC_REG_EXPR];
Packit 857059
	boolean                 isSyntaxValid;
Packit 857059
	RegexBracketParseInfo_t regexInfo;
Packit 857059
Packit 857059
#ifdef __VXWORKS__
Packit 857059
	regexp                  *regexpCompiled;
Packit 857059
#else
Packit 857059
	regmatch_t              groupArray[MAX_BRACKETS_SUPPORTED];
Packit 857059
	regex_t                 regexCompiled;
Packit 857059
#endif
Packit 857059
Packit 857059
	struct _RegExp   	    *next;
Packit 857059
} RegExp_t;
Packit 857059
Packit 857059
Packit 857059
// Virtual Fabric Group configuration
Packit 857059
typedef struct  _DGConfig {
Packit 857059
	char            name[MAX_VFABRIC_NAME];
Packit 857059
	int             dg_index; // index into dg_config
Packit 857059
	uint32_t        number_of_system_image_guids;
Packit 857059
	cl_qmap_t       system_image_guid;
Packit 857059
	uint32_t        number_of_node_guids;
Packit 857059
	cl_qmap_t       node_guid;
Packit 857059
	uint32_t        number_of_port_guids;
Packit 857059
	cl_qmap_t       port_guid;
Packit 857059
	uint32_t        number_of_node_descriptions;
Packit 857059
	XmlNode_t      *node_description;
Packit 857059
	RegExp_t       *reg_expr; // setup by SM
Packit 857059
	uint32_t        number_of_included_groups;
Packit 857059
	XmlIncGroup_t  *included_group;
Packit 857059
Packit 857059
	// Select
Packit 857059
	uint8_t         select_all;
Packit 857059
	uint8_t         select_self;
Packit 857059
	uint8_t         select_swe0;
Packit 857059
	uint8_t         select_all_mgmt_allowed;
Packit 857059
	uint8_t         select_hfi_direct_connect;
Packit 857059
	uint8_t         select_all_tfis;
Packit 857059
Packit 857059
Packit 857059
	// NodeType
Packit 857059
	uint8_t         node_type_fi;
Packit 857059
	uint8_t         node_type_sw;
Packit 857059
} DGConfig_t;
Packit 857059
Packit 857059
typedef struct _XmlAppMgid {
Packit 857059
	char			mgid[MAX_VFABRIC_NAME];
Packit 857059
} XmlAppMgid_t;
Packit 857059
Packit 857059
typedef struct _XmlAppMgidRng {
Packit 857059
	char			range[MAX_VFABRIC_APP_ELEMENT];
Packit 857059
} XmlAppMgidRng_t;
Packit 857059
Packit 857059
typedef struct _XmlAppMgidMsk {
Packit 857059
	char			masked[MAX_VFABRIC_APP_ELEMENT];
Packit 857059
} XmlAppMgidMsk_t;
Packit 857059
Packit 857059
// Virtual Fabric Application configuration
Packit 857059
typedef struct 	_AppConfig {
Packit 857059
	char			name[MAX_VFABRIC_NAME]; /* MUST BE FIRST FIELD FOR MAP */
Packit 857059
	uint32_t		serviceIdMapSize;
Packit 857059
	cl_qmap_t		serviceIdMap;
Packit 857059
	uint32_t		serviceIdRangeMapSize;
Packit 857059
	cl_qmap_t		serviceIdRangeMap;
Packit 857059
	uint32_t		serviceIdMaskedMapSize;
Packit 857059
	cl_qmap_t		serviceIdMaskedMap;
Packit 857059
	uint32_t		number_of_mgids;
Packit 857059
	XmlAppMgid_t	mgid[MAX_VFABRIC_APP_MGIDS];
Packit 857059
	uint32_t		number_of_mgid_ranges;
Packit 857059
	XmlAppMgidRng_t	mgid_range[MAX_VFABRIC_APP_MGIDS];
Packit 857059
	uint32_t		number_of_mgid_maskeds;
Packit 857059
	XmlAppMgidMsk_t	mgid_masked[MAX_VFABRIC_APP_MGIDS];
Packit 857059
	uint32_t		number_of_included_apps;
Packit 857059
	XmlNode_t		included_app[MAX_INCLUDED_APPS];
Packit 857059
	uint8_t			select_sa;
Packit 857059
	uint8_t			select_unmatched_sid;
Packit 857059
	uint8_t			select_unmatched_mgid;
Packit 857059
	uint8_t			select_pm;
Packit 857059
} AppConfig_t;
Packit 857059
Packit 857059
// Virtual Fabric QOS Group configuration
Packit 857059
typedef struct 	_QosConfig {
Packit 857059
	char			name[MAX_VFABRIC_NAME];
Packit 857059
	uint8_t			enable;
Packit 857059
	uint8_t			qos_enable; /* For legacy support of VFs with QOS=0 */
Packit 857059
	uint8_t			private_group;     /* For legacy support of VFs with QOS=0 */
Packit 857059
	uint8_t			base_sl;
Packit 857059
	uint8_t			base_sl_specified;
Packit 857059
	uint8_t			resp_sl;
Packit 857059
	uint8_t			resp_sl_specified;
Packit 857059
	uint8_t			requires_resp_sl;
Packit 857059
	uint8_t			mcast_sl;
Packit 857059
	uint8_t			mcast_sl_specified;
Packit 857059
	uint8_t			contains_mcast;
Packit 857059
	uint8_t			flowControlDisable;
Packit 857059
	uint8_t			percent_bandwidth;
Packit 857059
	uint8_t			priority;
Packit 857059
	uint8_t			pkt_lifetime_mult; /* Converted to power of 2 */
Packit 857059
    uint32_t		hoqlife_qos;
Packit 857059
    uint8_t			preempt_rank;
Packit 857059
	uint32_t		num_implicit_vfs;
Packit 857059
	uint32_t		num_vfs;
Packit 857059
	uint8_t			pkt_lifetime_specified;
Packit 857059
	uint8_t			hoqlife_specified;
Packit 857059
} QosConfig_t;
Packit 857059
Packit 857059
// Application configuration
Packit 857059
typedef struct _XMLApp {
Packit 857059
	char            application[MAX_VFABRIC_NAME];
Packit 857059
} XMLApp_t;
Packit 857059
Packit 857059
typedef struct _XMLMember {
Packit 857059
	char member[MAX_VFABRIC_NAME];
Packit 857059
	int  dg_index; // Index into dg_config;
Packit 857059
} XMLMember_t;
Packit 857059
Packit 857059
// Virtual Fabric configuration
Packit 857059
typedef struct 	_VFConfig {
Packit 857059
	char			name[MAX_VFABRIC_NAME]; /* MUST BE FIRST FIELD FOR MAP */
Packit 857059
	uint32_t		enable;
Packit 857059
	uint32_t		standby;
Packit 857059
	uint32_t		pkey;
Packit 857059
	uint32_t		security;
Packit 857059
	uint32_t		qos_index;
Packit 857059
	char			qos_group[MAX_VFABRIC_NAME];
Packit 857059
	uint32_t		number_of_full_members;
Packit 857059
	XMLMember_t		full_member[MAX_VFABRIC_MEMBERS_PER_VF];
Packit 857059
	uint32_t		number_of_limited_members;
Packit 857059
	XMLMember_t		limited_member[MAX_VFABRIC_MEMBERS_PER_VF];
Packit 857059
	uint32_t		number_of_applications;
Packit 857059
	XMLApp_t 		application[MAX_VFABRIC_APPS_PER_VF];
Packit 857059
	uint8_t			max_mtu_int;
Packit 857059
	uint8_t			max_rate_int;
Packit 857059
	uint8_t			qos_implicit;
Packit 857059
	// Deprecated configuration items (see QOSConfig_t for new fields)
Packit 857059
	uint8_t			qos_enable;
Packit 857059
	uint8_t			base_sl;
Packit 857059
	uint8_t			resp_sl;
Packit 857059
	uint8_t			mcast_sl;
Packit 857059
	uint8_t			flowControlDisable;
Packit 857059
	uint8_t			percent_bandwidth;
Packit 857059
	uint8_t			priority;
Packit 857059
	uint8_t			pkt_lifetime_mult;
Packit 857059
    uint8_t			preempt_rank;
Packit 857059
    uint32_t		hoqlife_vf;
Packit 857059
} VFConfig_t;
Packit 857059
Packit 857059
// Application Database Composite per FM
Packit 857059
typedef struct 	_AppXmlConfig {
Packit 857059
	uint32_t			appMapSize;
Packit 857059
	cl_qmap_t			appMap;					// binary tree of apps by name
Packit 857059
} AppXmlConfig_t;
Packit 857059
Packit 857059
// DeviceGroup Database Composite per FM
Packit 857059
typedef struct 	_DGXmlConfig {
Packit 857059
	uint32_t			number_of_dgs;
Packit 857059
	DGConfig_t			*dg[MAX_VFABRIC_GROUPS];
Packit 857059
} DGXmlConfig_t;
Packit 857059
Packit 857059
// QOSGroup Database Composite per FM
Packit 857059
typedef struct 	_QosXmlConfig {
Packit 857059
	uint32_t			number_of_qosgroups;
Packit 857059
	QosConfig_t			*qosgroups[MAX_QOS_GROUPS];
Packit 857059
} QosXmlConfig_t;
Packit 857059
Packit 857059
// VirtualFabrics Database Composite per FM
Packit 857059
typedef struct 	_VFXmlConfig {
Packit 857059
	uint32_t			number_of_vfs;
Packit 857059
	VFConfig_t			*vf[MAX_CONFIGURED_VFABRICS];
Packit 857059
	uint8_t				securityEnabled;				// Composite of all vf's
Packit 857059
	uint8_t				qosEnabled;						// Composite of all vf's
Packit 857059
} VFXmlConfig_t;
Packit 857059
Packit 857059
// Internal structures for internal application use for Virtual Fabric Configuration
Packit 857059
Packit 857059
// Internal Service ID's
Packit 857059
typedef struct VFAppSid_t {
Packit 857059
	uint64_t        	service_id;					// service_id or first service_id in range
Packit 857059
													// if 0xfffffffffffffff then all apps
Packit 857059
	uint64_t        	service_id_last;			// if 0 then then no range
Packit 857059
	uint64_t        	service_id_mask;			// if 0xfffffffffffffff then no mask
Packit 857059
} VFAppSid_t;
Packit 857059
Packit 857059
// Internal Multicast Group ID's
Packit 857059
typedef struct _VFAppMgid {
Packit 857059
	uint64_t			mgid[2];					// 128 bit MGID - upper word at index 0
Packit 857059
	uint64_t			mgid_last[2];				// 128 bit MGID upper range - if 0 then
Packit 857059
													// no range
Packit 857059
	uint64_t			mgid_mask[2];				// 128 bit MGID mask
Packit 857059
													// if 0xffffffffffffffffffffffffffffff
Packit 857059
													// then no mask
Packit 857059
} VFAppMgid_t;
Packit 857059
Packit 857059
// Internal Virtual Fabric Applications
Packit 857059
typedef struct _VFApp {
Packit 857059
	// Service ID list
Packit 857059
	uint32_t			sidMapSize;
Packit 857059
	cl_qmap_t			sidMap;						// Map of VFAppSid_t
Packit 857059
	// Multicast Group list
Packit 857059
	uint32_t			mgidMapSize;
Packit 857059
	cl_qmap_t			mgidMap;					// Map of VFAppMgid_t
Packit 857059
Packit 857059
	// aggregate settings from application and included applications
Packit 857059
	uint8_t				select_sa;					// boolean select SA - defaults to 0
Packit 857059
	uint8_t				select_unmatched_sid;		// boolean select unmatched service id
Packit 857059
													// defaults to 0
Packit 857059
	uint8_t				select_unmatched_mgid;		// boolean select unmatched MGID
Packit 857059
	uint8_t				select_pm;					// boolean select PM - defaults to 0
Packit 857059
Packit 857059
Packit 857059
} VFApp_t;
Packit 857059
Packit 857059
// Internal rendering of Virtual Fabric Members
Packit 857059
typedef struct _VFMem {
Packit 857059
	// System Image GUID's
Packit 857059
	uint32_t		sysGuidMapSize;					// number of System Image GUID entries
Packit 857059
	cl_qmap_t		sysGuidMap;						// binary tree of System Image GUID's
Packit 857059
Packit 857059
	// Node GUID entries
Packit 857059
	uint32_t		nodeGuidMapSize;				// number of Node GUID entries
Packit 857059
	cl_qmap_t		nodeGuidMap;					// binary tree of Node GUID's
Packit 857059
Packit 857059
	// Port GUID entries
Packit 857059
	uint32_t        portGuidMapSize;    			// number of Port GUID entries
Packit 857059
	cl_qmap_t		portGuidMap;					// binary tree of Port GUID's
Packit 857059
Packit 857059
	// Node Description entries
Packit 857059
	uint32_t        nodeDescMapSize;				// number of Node descriptions
Packit 857059
	cl_qmap_t		nodeDescMap;					// binary tree of Node Description pointers
Packit 857059
Packit 857059
	// aggregate settings from group and included groups
Packit 857059
	uint8_t			select_all;						// boolean select all - defaults to 0
Packit 857059
	uint8_t			select_self;					// boolean select self - defaults to 0
Packit 857059
	uint8_t			select_hfi_direct_connect;		// boolean select all nodes in b2b (hfi direct connect)
Packit 857059
	uint8_t			select_swe0;					// boolean select SWE0 - defaults to 0
Packit 857059
	uint8_t			select_all_mgmt_allowed; 		// boolean select all mgmt allowed - defaults to 0
Packit 857059
	uint8_t			select_all_tfis; 	         	// boolean select all TFIs - defaults to 0
Packit 857059
Packit 857059
	// aggregate settings from group and included groups
Packit 857059
	uint8_t			node_type_fi;					// boolean FI type - defaults to 0
Packit 857059
	uint8_t			node_type_sw;					// boolean SW type - defaults to 0
Packit 857059
} VFMem_t;
Packit 857059
Packit 857059
// Internal rendering of Default Groups
Packit 857059
typedef struct _VFDg {
Packit 857059
	uint8_t				def_mc_create;				// if undefined will default to 1
Packit 857059
	uint32_t			def_mc_mlid;				// if undefined will default to 0x0
Packit 857059
	uint32_t			def_mc_pkey;			 	// if undefined will default to
Packit 857059
													// STL_DEFAULT_APP_PKEY
Packit 857059
	uint8_t				def_mc_mtu_int;				// if undefined will default to 0xff
Packit 857059
	uint8_t				def_mc_rate_int;			// if undefined will default to 0xff
Packit 857059
	uint8_t				def_mc_sl;					// if undefined will default to 0xff
Packit 857059
	uint32_t			def_mc_qkey;				// if undefined will default to 0x0
Packit 857059
	uint32_t			def_mc_fl;					// if undefined will default to 0x0
Packit 857059
	uint32_t			def_mc_tc;					// if undefined will default to 0x0
Packit 857059
Packit 857059
	uint32_t			mgidMapSize;
Packit 857059
	cl_qmap_t			mgidMap;					// Map of VFAppMgid_t
Packit 857059
	struct _VFDg		*next_default_group;		// pointer to next group
Packit 857059
} VFDg_t;
Packit 857059
Packit 857059
// Internal rendering of Virtual Fabric configuration - if no Vitual Fabrics
Packit 857059
// are configured or all Virtual Fabrics are Disabled, a default single
Packit 857059
// Virtual Fabric will be created. Disabled Virtual Fabrics will not show
Packit 857059
// up as a defined VirtualFabric within this structure.
Packit 857059
typedef struct _VFabric {
Packit 857059
	char			name[MAX_VFABRIC_NAME];		    // defaults to "Default"
Packit 857059
	uint32_t		index;							// one will be uniquely assigned
Packit 857059
	uint32_t		pkey;							// if 0xffffffff use default pkey
Packit 857059
	uint32_t		qos_index;
Packit 857059
	uint8_t			qos_implicit;
Packit 857059
	union {											// Index in old/new vf array
Packit 857059
		uint32_t    old_index;                      // if 0xFFFFFFFF (-1) then it is a new VF (added)
Packit 857059
		uint32_t    new_index;						// if 0xFFFFFFFF (-1) then it is a deleted VF (removed)
Packit 857059
	} reconf_idx;
Packit 857059
	uint8_t			standby;
Packit 857059
	uint8_t			security;						// defaults to 0 or false
Packit 857059
	uint8_t			max_mtu_int;					// if 0xff then unlimited
Packit 857059
	uint8_t			max_mtu_specified;
Packit 857059
	uint8_t			max_rate_int;					// if 0xff then unlimited
Packit 857059
	uint8_t			max_rate_specified;				// set by SM for use in queries
Packit 857059
	VFApp_t			apps;							// application SID's and MGID's etc...
Packit 857059
	uint32_t		number_of_full_members;
Packit 857059
	XMLMember_t		full_member[MAX_VFABRIC_MEMBERS_PER_VF];
Packit 857059
	uint32_t		number_of_limited_members;
Packit 857059
	XMLMember_t		limited_member[MAX_VFABRIC_MEMBERS_PER_VF];
Packit 857059
	uint32_t		number_of_default_groups;		// number of default multicast groups
Packit 857059
	VFDg_t			*default_group;					// default group configuration linked list
Packit 857059
	uint32_t		consistency_checksum;
Packit 857059
	uint32_t		disruptive_checksum;
Packit 857059
	uint32_t		overall_checksum;
Packit 857059
} VF_t;
Packit 857059
Packit 857059
// Internal rendering of Composite Virtual Fabric configuration
Packit 857059
typedef struct _SMVirtualFabricsInternal {
Packit 857059
	uint32_t		number_of_vfs_all;
Packit 857059
	uint32_t		number_of_qos_all;
Packit 857059
	uint8_t			securityEnabled;				// setup by SM
Packit 857059
	uint8_t			qosEnabled;						// setup by SM
Packit 857059
	VF_t			v_fabric_all[MAX_ENABLED_VFABRICS];
Packit 857059
	QosConfig_t		qos_all[MAX_QOS_GROUPS];
Packit 857059
	DGXmlConfig_t	dg_config;
Packit 857059
	uint32_t		consistency_checksum;
Packit 857059
	uint32_t		disruptive_checksum;
Packit 857059
	uint32_t		overall_checksum;
Packit 857059
} VirtualFabrics_t;
Packit 857059
Packit 857059
// SM Dynamic Packet Lifetime configuration
Packit 857059
typedef struct _SMDPLXmlConfig {
Packit 857059
    uint32_t    dp_lifetime[10];
Packit 857059
} SMDPLXmlConfig_t;
Packit 857059
Packit 857059
// SM Multicast DefaultGroup configuration
Packit 857059
typedef struct _SMMcastDefGrp {
Packit 857059
	uint32_t		def_mc_create;
Packit 857059
	uint32_t		def_mc_mlid;
Packit 857059
	char			virtual_fabric[MAX_VFABRIC_NAME];
Packit 857059
	uint32_t		def_mc_pkey;
Packit 857059
	uint8_t			def_mc_mtu_int;
Packit 857059
	uint8_t			def_mc_rate_int;
Packit 857059
	uint8_t			def_mc_sl;
Packit 857059
	uint32_t		def_mc_qkey;
Packit 857059
	uint32_t		def_mc_fl;
Packit 857059
	uint32_t		def_mc_tc;
Packit 857059
	uint32_t		number_of_mgids;
Packit 857059
	XmlAppMgid_t	mgid[MAX_VFABRIC_DG_MGIDS];
Packit 857059
	uint32_t		number_of_mgid_ranges;
Packit 857059
	XmlAppMgidRng_t	mgid_range[MAX_VFABRIC_DG_MGIDS];  // May implement in future
Packit 857059
	uint32_t		number_of_mgid_maskeds;
Packit 857059
	XmlAppMgidMsk_t	mgid_masked[MAX_VFABRIC_DG_MGIDS];  // May implement in future
Packit 857059
} SMMcastDefGrp_t;
Packit 857059
Packit 857059
// SM Multicast DefaultGroups
Packit 857059
typedef struct _SMMcastDefGrpCfg {
Packit 857059
	uint32_t			number_of_groups;
Packit 857059
	SMMcastDefGrp_t		group[MAX_DEFAULT_GROUPS];	// list of default groups
Packit 857059
} SMMcastDefGrpCfg_t;
Packit 857059
Packit 857059
// SM configuration for McastGrpMGidLimitMask
Packit 857059
typedef struct _mcastGrpMGidLimitMask {
Packit 857059
    char    	value[40];
Packit 857059
} mcastGrpMGidLimitMask_t;
Packit 857059
Packit 857059
// SM configuration for McastGrpMGidLimitValue
Packit 857059
typedef struct _mcastGrpMGidLimitValue {
Packit 857059
    char    	value[40];
Packit 857059
} mcastGrpMGidLimitValue_t;
Packit 857059
Packit 857059
// SM configuration of MLIDShared
Packit 857059
typedef struct _SmMcastMlidShared {
Packit 857059
	uint32_t					enable;
Packit 857059
	mcastGrpMGidLimitMask_t		mcastGrpMGidLimitMaskConvert;
Packit 857059
	mcastGrpMGidLimitValue_t	mcastGrpMGidLimitValueConvert;
Packit 857059
	uint32_t					mcastGrpMGidLimitMax;
Packit 857059
	uint32_t					mcastGrpMGidperPkeyMax;
Packit 857059
} SmMcastMlidShared_t;
Packit 857059
Packit 857059
// SM MLIDShared Instances
Packit 857059
typedef struct _SmMcastMlidShare {
Packit 857059
	uint32_t					number_of_shared;
Packit 857059
	SmMcastMlidShared_t			mcastMlid[MAX_SUPPORTED_MCAST_GRP_CLASSES_XML];
Packit 857059
} SmMcastMlidShare_t;
Packit 857059
Packit 857059
// SM configuration for Multicast configuration
Packit 857059
typedef struct _SMMcastConfig {
Packit 857059
    uint32_t 	disable_mcast_check;
Packit 857059
    uint32_t   	enable_pruning;
Packit 857059
    uint32_t   	mcast_mlid_table_cap;
Packit 857059
	char		mcroot_select_algorithm[STRING_SIZE];
Packit 857059
	char		mcroot_min_cost_improvement[STRING_SIZE];
Packit 857059
} SMMcastConfig_t;
Packit 857059
Packit 857059
// SM configuration for Link Policy
Packit 857059
typedef struct _SMPolicyConfig {
Packit 857059
	uint8_t	    	enabled;
Packit 857059
	uint16_t		policy;
Packit 857059
} SMPolicyConfig_t;
Packit 857059
Packit 857059
typedef struct _SMLinkPolicyXmlConfig {
Packit 857059
    uint16_t				link_max_downgrade;
Packit 857059
    SMPolicyConfig_t		width_policy;
Packit 857059
    SMPolicyConfig_t		speed_policy;
Packit 857059
} SMLinkPolicyXmlConfig_t;
Packit 857059
Packit 857059
typedef struct _SMFlappingXmlConfig{
Packit 857059
	uint32_t window_size; //Size in minutes of sliding window over which bounce events are counted
Packit 857059
	uint32_t high_thresh; // Threshold of bounce events used to trigger quarantine state for port
Packit 857059
	uint32_t low_thresh; // threshold of bounce events to trigger unquarantine or unmonitor of port
Packit 857059
} SMFlappingXmlConfig_t;
Packit 857059
Packit 857059
typedef struct _SMPortQuarantineXmlConfig {
Packit 857059
	uint8_t enabled;
Packit 857059
	SMFlappingXmlConfig_t flapping;
Packit 857059
} SMPortQuarantineXmlConfig_t;
Packit 857059
Packit 857059
// SM configuration for Preemption
Packit 857059
typedef struct _SMPreemptionXmlConfig {
Packit 857059
    uint32_t    small_packet;
Packit 857059
    uint32_t    large_packet;
Packit 857059
    uint32_t    preempt_limit;
Packit 857059
} SMPreemptionXmlConfig_t;
Packit 857059
Packit 857059
Packit 857059
// uniform switch congestion control settings
Packit 857059
typedef struct _SmSwCongestionXmlConfig {
Packit 857059
	uint8_t  victim_marking_enable;
Packit 857059
	uint8_t  threshold;
Packit 857059
	uint8_t  packet_size;
Packit 857059
	uint8_t  cs_threshold;
Packit 857059
	uint16_t cs_return_delay;
Packit 857059
	uint32_t marking_rate;
Packit 857059
} SmSwCongestionXmlConfig_t;
Packit 857059
Packit 857059
// uniform congestion control settings
Packit 857059
typedef struct _SmCaCongestionXmlConfig {
Packit 857059
	uint8_t  sl_based;
Packit 857059
	uint8_t  increase;
Packit 857059
	uint16_t timer;
Packit 857059
	uint8_t  threshold;
Packit 857059
	uint8_t  min;
Packit 857059
	uint16_t  limit;
Packit 857059
	uint32_t desired_max_delay;
Packit 857059
} SmCaCongestionXmlConfig_t;
Packit 857059
Packit 857059
// uniform congestion control settings
Packit 857059
typedef struct _SmCongestionXmlConfig {
Packit 857059
	uint8_t enable;
Packit 857059
	uint8_t debug;
Packit 857059
	SmSwCongestionXmlConfig_t sw;
Packit 857059
	SmCaCongestionXmlConfig_t ca;
Packit 857059
} SmCongestionXmlConfig_t;
Packit 857059
Packit 857059
Packit 857059
// Adaptive Routing control settings
Packit 857059
typedef struct _SmAdaptiveRoutingXmlConfig {
Packit 857059
	uint8_t enable;
Packit 857059
	uint8_t debug;
Packit 857059
	uint8_t lostRouteOnly;
Packit 857059
	uint8_t algorithm;
Packit 857059
	uint8_t	arFrequency;
Packit 857059
	uint8_t threshold;
Packit 857059
} SmAdaptiveRoutingXmlConfig_t;
Packit 857059
Packit 857059
#define MAX_TIER	10
Packit 857059
typedef struct _SmFtreeRouting_t {
Packit 857059
	uint8_t 	debug;
Packit 857059
	uint8_t 	passthru;
Packit 857059
	uint8_t 	converge;
Packit 857059
	uint8_t		tierCount;				// height of the fat tree. edges are rank 0.
Packit 857059
	uint8_t		fis_on_same_tier;		// indicates that all end nodes are at the bottom of the tree.
Packit 857059
	XMLMember_t	coreSwitches;			// device group indicating core switches
Packit 857059
	XMLMember_t	routeLast;				// device group indicating HFIs that should be routed last.
Packit 857059
} SmFtreeRouting_t;
Packit 857059
Packit 857059
Packit 857059
Packit 857059
/*
Packit 857059
 * Structure for Device Group Min Hop routing.
Packit 857059
 *
Packit 857059
 * MAX_DGROUTING_ORDER is arbitrarily capped at 8. This could be higher,
Packit 857059
 * but raising it might cause a performance hit.
Packit 857059
 */
Packit 857059
#define MAX_DGROUTING_ORDER 8
Packit 857059
typedef struct _SmDGRouting_t {
Packit 857059
	uint8_t 	dgCount;
Packit 857059
	XMLMember_t	dg[MAX_DGROUTING_ORDER];
Packit 857059
} SmDGRouting_t;
Packit 857059
Packit 857059
/*
Packit 857059
 * Structures for Enhanced Routing Control for Hypercube Routing, per switch.
Packit 857059
 */
Packit 857059
typedef uint32_t portMap_t;
Packit 857059
Packit 857059
static __inline__ void portMapSet(portMap_t *portMap, int port)
Packit 857059
{
Packit 857059
	portMap[port/(sizeof(portMap_t)*8)] |= (1u << port%(sizeof(portMap_t)*8));
Packit 857059
}
Packit 857059
Packit 857059
static __inline__ portMap_t portMapTest(portMap_t *portMap, int port)
Packit 857059
{
Packit 857059
	return portMap[port/(sizeof(portMap_t)*8)] & (1u << port%(sizeof(portMap_t)*8));
Packit 857059
}
Packit 857059
Packit 857059
typedef struct _SmSPRoutingPort {
Packit 857059
	uint8_t			pport;
Packit 857059
	uint8_t			vport;
Packit 857059
	uint16_t		cost;
Packit 857059
} SmSPRoutingPort_t;
Packit 857059
Packit 857059
typedef struct _SmSPRoutingCtrl {
Packit 857059
	struct _SmSPRoutingCtrl	*next;
Packit 857059
	XMLMember_t		switches;			// one or more switches
Packit 857059
	portMap_t		pportMap[MAX_SWITCH_PORTS/(sizeof(portMap_t)*8) + 1];
Packit 857059
	portMap_t		vportMap[MAX_SWITCH_PORTS/(sizeof(portMap_t)*8) + 1];
Packit 857059
	SmSPRoutingPort_t *ports;
Packit 857059
	uint16_t		portCount;
Packit 857059
} SmSPRoutingCtrl_t;
Packit 857059
Packit 857059
typedef struct _SmHypercubeRouting_t {
Packit 857059
	uint8_t				debug;
Packit 857059
	XMLMember_t			routeLast;		// device group indicating HFIs that should be routed last.
Packit 857059
	SmSPRoutingCtrl_t	*enhancedRoutingCtrl;
Packit 857059
} SmHypercubeRouting_t;
Packit 857059
Packit 857059
#define MAX_TOROIDAL_DIMENSIONS 6
Packit 857059
#define MAX_DOR_DIMENSIONS 20
Packit 857059
#define DEFAULT_DOR_PORT_PAIR_WARN_THRESHOLD	5
Packit 857059
#define DEFAULT_UPDN_MC_SAME_SPANNING_TREE	1
Packit 857059
#define DEFAULT_ESCAPE_VLS_IN_USE			1
Packit 857059
#define DEFAULT_FAULT_REGIONS_IN_USE		1
Packit 857059
Packit 857059
typedef enum {
Packit 857059
	DOR_MESH,
Packit 857059
	DOR_TORUS,
Packit 857059
	DOR_PARTIAL_TORUS,
Packit 857059
} DorTop_t;
Packit 857059
Packit 857059
typedef struct _SmPortPair {
Packit 857059
	uint8_t				port1;
Packit 857059
	uint8_t				port2;
Packit 857059
} SmPortPair_t;
Packit 857059
Packit 857059
typedef struct _SmDimension {
Packit 857059
	uint8_t				toroidal;
Packit 857059
	uint8_t				length;
Packit 857059
	uint8_t				portCount;
Packit 857059
	uint8_t				created;
Packit 857059
	SmPortPair_t		portPair[MAX_SWITCH_PORTS];
Packit 857059
} SmDimension_t;
Packit 857059
Packit 857059
typedef struct _SmDorRouting {
Packit 857059
	uint8_t				debug;
Packit 857059
	uint8_t				overlayMCast;
Packit 857059
	uint8_t				dimensionCount;
Packit 857059
	uint8_t				numToroidal;
Packit 857059
	uint8_t				routingSCs;
Packit 857059
	uint32_t			warn_threshold;
Packit 857059
	SmDimension_t		dimension[MAX_DOR_DIMENSIONS];
Packit 857059
	DorTop_t			topology;
Packit 857059
	uint8_t				escapeVLs;
Packit 857059
	uint8_t				faultRegions;
Packit 857059
	XMLMember_t			routeLast;				// device group indicating HFIs that should be routed last.
Packit 857059
} SmDorRouting_t;
Packit 857059
Packit 857059
#define MAX_SM_APPLIANCES       5
Packit 857059
typedef struct _SmAppliancesXmlConfig {
Packit 857059
	uint8_t             enable;
Packit 857059
    uint64_t            guids[MAX_SM_APPLIANCES];
Packit 857059
} SmAppliancesXmlConfig_t;
Packit 857059
Packit 857059
typedef enum {
Packit 857059
	FIELD_ENF_LEVEL_DISABLED 	= 0,
Packit 857059
	FIELD_ENF_LEVEL_WARN 		= 1,
Packit 857059
	FIELD_ENF_LEVEL_ENABLED 	= 2,
Packit 857059
} FieldEnforcementLevel_t;
Packit 857059
Packit 857059
typedef struct _SmPreDefTopoFieldEnfXmlConfig{
Packit 857059
	FieldEnforcementLevel_t nodeGuid;
Packit 857059
	FieldEnforcementLevel_t nodeDesc;
Packit 857059
	FieldEnforcementLevel_t portGuid;
Packit 857059
	FieldEnforcementLevel_t undefinedLink;
Packit 857059
} SmPreDefTopoFieldEnfXmlConfig_t;
Packit 857059
Packit 857059
typedef struct _SmPreDefTopoXmlConfig {
Packit 857059
	uint8_t 	enabled;
Packit 857059
	char 		topologyFilename[FILENAME_SIZE];
Packit 857059
	uint32_t 	logMessageThreshold;
Packit 857059
	SmPreDefTopoFieldEnfXmlConfig_t fieldEnforcement;
Packit 857059
} SmPreDefTopoXmlConfig_t;
Packit 857059
Packit 857059
extern const char* SmPreDefFieldEnfToText(FieldEnforcementLevel_t fieldEnfLevel);
Packit 857059
Packit 857059
typedef enum {
Packit 857059
	LID_STRATEGY_SERIAL,
Packit 857059
	LID_STRATEGY_TOPOLOGY
Packit 857059
} LidStrategy_t;
Packit 857059
Packit 857059
Packit 857059
Packit 857059
// SM configuration
Packit 857059
typedef struct _SMXmlConfig {
Packit 857059
	uint64_t	subnet_prefix;
Packit 857059
	uint32_t	subnet_size;
Packit 857059
	uint32_t	config_consistency_check_level;
Packit 857059
Packit 857059
	uint32_t	startup_retries;
Packit 857059
	uint32_t	startup_stable_wait;
Packit 857059
    uint64_t    sm_key;
Packit 857059
    uint64_t    mkey;
Packit 857059
    uint64_t    timer;
Packit 857059
    uint32_t    IgnoreTraps;
Packit 857059
    uint32_t    trap_hold_down;
Packit 857059
    uint32_t    max_retries;
Packit 857059
    uint32_t    rcv_wait_msec;
Packit 857059
    uint32_t    min_rcv_wait_msec;
Packit 857059
    uint32_t    master_ping_interval;
Packit 857059
    uint32_t    master_ping_max_fail;
Packit 857059
    uint32_t    topo_errors_threshold;
Packit 857059
    uint32_t    topo_abandon_threshold;
Packit 857059
    uint32_t    switch_lifetime_n2;
Packit 857059
    uint32_t    hoqlife_n2;
Packit 857059
    uint32_t    vl15FlowControlDisable;
Packit 857059
	uint32_t	vl15_credit_rate;
Packit 857059
    uint32_t    sa_resp_time_n2;
Packit 857059
    uint32_t    sa_packet_lifetime_n2;
Packit 857059
    uint32_t    vlstall;
Packit 857059
    uint32_t    db_sync_interval;
Packit 857059
	uint32_t    mc_dos_threshold;
Packit 857059
	uint32_t    mc_dos_action;
Packit 857059
	uint32_t    mc_dos_interval;
Packit 857059
    uint32_t    trap_threshold;
Packit 857059
	uint32_t	trap_threshold_min_count;
Packit 857059
    uint32_t    node_appearance_msg_thresh;
Packit 857059
    uint32_t    spine_first_routing;
Packit 857059
    uint32_t    shortestPathBalanced;
Packit 857059
    uint32_t    lmc;
Packit 857059
    uint32_t    lmc_e0;
Packit 857059
	char		routing_algorithm[STRING_SIZE];
Packit 857059
	uint32_t	path_selection;
Packit 857059
	uint32_t	queryValidation;
Packit 857059
	uint32_t	enforceVFPathRecs;	// Default to Enable to limit pathrecord scope to VFs
Packit 857059
									// otherwise, use PKEY as scope limit.
Packit 857059
	uint32_t	sma_batch_size;
Packit 857059
	uint32_t	max_parallel_reqs;
Packit 857059
 	uint32_t	check_mft_responses;
Packit 857059
	uint32_t	min_supported_vls;
Packit 857059
	uint64_t	cumulative_timeout_limit;
Packit 857059
	uint32_t	max_fixed_vls;
Packit 857059
	uint32_t	allow_mixed_vls;	// Don't quarantine nodes that can't support all VLs.
Packit 857059
	uint64_t	non_resp_tsec;
Packit 857059
	uint32_t	non_resp_max_count;
Packit 857059
Packit 857059
	uint32_t	monitor_standby_enable;
Packit 857059
	uint32_t	loopback_mode; 		// disable duplicate portguid checking, allowing loopback fabrics
Packit 857059
	uint32_t	max_supported_lid;
Packit 857059
	uint32_t	force_rebalance;
Packit 857059
	uint32_t	use_cached_node_data;
Packit 857059
	uint32_t	use_cached_hfi_node_data;
Packit 857059
Packit 857059
    SMLinkPolicyXmlConfig_t hfi_link_policy;
Packit 857059
    SMLinkPolicyXmlConfig_t isl_link_policy;
Packit 857059
	SMPortQuarantineXmlConfig_t port_quarantine; 
Packit 857059
    SMPreemptionXmlConfig_t preemption;
Packit 857059
Packit 857059
	SmCongestionXmlConfig_t congestion;
Packit 857059
Packit 857059
Packit 857059
	SmDorRouting_t smDorRouting;
Packit 857059
Packit 857059
	SmAdaptiveRoutingXmlConfig_t adaptiveRouting;
Packit 857059
Packit 857059
	uint32_t	sma_spoofing_check;	// used to enable/disable usage of SMA security checking
Packit 857059
	uint32_t	NoReplyIfBusy;				// Normally when an SA query cannot be processed because
Packit 857059
											// a context is temporarily not available or an error is
Packit 857059
											// detected which may be resolved when an im progress sweep
Packit 857059
											// finishes, a busy status will be returned to the requester.
Packit 857059
											//
Packit 857059
											// If the new configuration option NoReplyIfBusy is set to 1,
Packit 857059
											// rather than returning the busy status, no status will
Packit 857059
											// be returned.  The behaviour will be as if the MAD request
Packit 857059
											// were lost.
Packit 857059
											//
Packit 857059
											// If NoReplyIfBusy is set to 0 or is not in the configuration
Packit 857059
											// file, the behavior of SM will be the same as if this change
Packit 857059
											// had not been made.
Packit 857059
Packit 857059
	/* STL EXTENSIONS */
Packit 857059
	uint32_t	lft_multi_block;			// # of LFT blocks per MAD. Valid range is 1-31.
Packit 857059
	uint32_t	use_aggregates;				// 0/1 - if true, combine MADs where possible.
Packit 857059
	uint32_t    optimized_buffer_control;	// 0/1 - if true, use multi-port and uniform buffer ctrl
Packit 857059
											// MADs to program switch ports.
Packit 857059
    SmAppliancesXmlConfig_t appliances;     // List of node GUIDs associated with appliance nodes
Packit 857059
	SmPreDefTopoXmlConfig_t preDefTopo; 	// Pre-defined topology verification options and field enforcement
Packit 857059
Packit 857059
	uint32_t	minSharedVLMem;				// A specification (percentage) for minimum VL shared memory.
Packit 857059
	uint32_t	dedicatedVLMemMulti;		// A multiplier increasing the dedicated memory per VL
Packit 857059
	int32_t		wireDepthOverride;			// Value (bytes) to override the wire depth,
Packit 857059
											//     -1 means use from Portinfo, 0 means no wire depth
Packit 857059
	int32_t		replayDepthOverride;		// Value (bytes) to override the replay buffer depth, -1 means use from Portinfo
Packit 857059
											//     -1 means use from Portinfo, 0 means no replay depth
Packit 857059
Packit 857059
	uint8_t		cableInfoPolicy;			// 0 means no CI cache, 1 means assume CI is identical for both ends of a cable,
Packit 857059
											// 2 means do not assume CI is identical for both ends.
Packit 857059
	uint32_t 	forceAttributeRewrite; 		// Used to force the SM to rewrite all attributes upon resweep
Packit 857059
											// 0 is disabled (default), 1 is enabled
Packit 857059
    uint32_t    timerScalingEnable;         // 0 is disabled (default), when enabled - HOQ and SLL are potentially modified.
Packit 857059
	uint32_t 	defaultPortErrorAction; 	// Bitfield representing default PortInfo PortErrorAction(s) to set for each port
Packit 857059
	uint32_t 	skipAttributeWrite; 		// Bitfield indicating attributes to be skipped for updating (debug)
Packit 857059
	uint32_t 	switchCascadeActivateEnable;// 0 - Disabled, 1 - Enable cascade activation using IsActiveOptimizeEnable
Packit 857059
	uint32_t 	neighborNormalRetries; 		// Number of retries when a port fails to go ACTIVE based on neighbor state (NeighborNormal flag)
Packit 857059
	uint8_t		terminateAfter;				// Undocumented setting. 0 - Disabled, #>0 - Terminate after # sweeps.
Packit 857059
	uint8_t		psThreads;					// Undocumented setting. The # of threads to use for parallel SM programming.
Packit 857059
	uint32_t 	portBounceLogLimit; 		// Number of port bounce log messages to show before suppressing the rest.
Packit 857059
	uint32_t	neighborFWAuthenEnable;     // used to enable/disable usage of NeighborFWAuthenBypass checking
Packit 857059
    uint32_t    SslSecurityEnabled;
Packit 857059
	char		SslSecurityDir[FILENAME_SIZE];
Packit 857059
	char		SslSecurityFmCertificate[FILENAME_SIZE];
Packit 857059
	char		SslSecurityFmPrivateKey[FILENAME_SIZE];
Packit 857059
	char		SslSecurityFmCaCertificate[FILENAME_SIZE];
Packit 857059
    uint32_t    SslSecurityFmCertChainDepth;
Packit 857059
	char		SslSecurityFmDHParameters[FILENAME_SIZE];
Packit 857059
    uint32_t    SslSecurityFmCaCRLEnabled;
Packit 857059
    char        SslSecurityFmCaCRL[FILENAME_SIZE];
Packit 857059
Packit 857059
	uint32_t	consistency_checksum;		// used for checking SM consistency in fabric
Packit 857059
	uint32_t	overall_checksum;			// used to determine if SM config needs to be re-read
Packit 857059
	uint32_t	disruptive_checksum;		// checksum of parameters that are disruptive to change
Packit 857059
Packit 857059
	SmFtreeRouting_t ftreeRouting;
Packit 857059
	SmDGRouting_t dgRouting;
Packit 857059
	SmHypercubeRouting_t hypercubeRouting;
Packit 857059
Packit 857059
	char        name[MAX_VFABRIC_NAME];
Packit 857059
	uint32_t	start;
Packit 857059
    uint32_t    hca;
Packit 857059
    uint32_t	port;
Packit 857059
    uint64_t    port_guid;
Packit 857059
Packit 857059
    uint32_t    lid;
Packit 857059
	uint32_t	sa_rmpp_checksum;
Packit 857059
	uint32_t	dynamic_port_alloc;
Packit 857059
Packit 857059
	uint32_t	sm_debug_perf;
Packit 857059
	uint32_t	sa_debug_perf;
Packit 857059
	uint32_t	sm_debug_vf;
Packit 857059
	uint32_t	sm_debug_routing;
Packit 857059
 	uint32_t	sm_debug_lid_assign;
Packit 857059
	uint32_t	trap_log_suppress_trigger_interval;
Packit 857059
	uint32_t	debug_jm;
Packit 857059
Packit 857059
    uint32_t	priority;
Packit 857059
    uint32_t	elevated_priority;
Packit 857059
	char		CoreDumpLimit[STRING_SIZE]; // inherited from Common FM setting
Packit 857059
	char		CoreDumpDir[FILENAME_SIZE]; // inherited from Common FM setting
Packit 857059
    uint32_t	debug;
Packit 857059
    uint32_t	debug_rmpp;
Packit 857059
    uint32_t    log_level;
Packit 857059
	char		log_file[LOGFILE_SIZE];
Packit 857059
	uint32_t	syslog_mode;
Packit 857059
	char		syslog_facility[STRING_SIZE];
Packit 857059
    FmParamU32_t    log_masks[VIEO_LAST_MOD_ID+1];
Packit 857059
Packit 857059
	uint32_t	loop_test_on;
Packit 857059
	uint32_t	loop_test_fast_mode;
Packit 857059
	uint32_t	loop_test_packets;
Packit 857059
Packit 857059
	char		dumpCounters[LOGFILE_SIZE];	// Undocumented setting. Null - Disabled. Not Null - dump performance counters after each sweep.
Packit 857059
Packit 857059
	uint32_t	multicast_mask;
Packit 857059
	uint32_t	lid_strategy;
Packit 857059
	uint32_t	sm_dsap_enabled;
Packit 857059
	uint32_t	P_Key_8B;
Packit 857059
	uint32_t	P_Key_10B;
Packit 857059
} SMXmlConfig_t;
Packit 857059
Packit 857059
typedef struct _XMLMonitor {
Packit 857059
	char			monitor[MAX_VFABRIC_NAME];
Packit 857059
	uint16_t		dg_Index;
Packit 857059
} XMLMonitor_t;
Packit 857059
//Pm PortGroups
Packit 857059
typedef struct PmPortGroupXmlConfig {
Packit 857059
	uint8_t 		Enabled;
Packit 857059
	char			Name[STL_PM_GROUPNAMELEN+1];
Packit 857059
	XMLMonitor_t	Monitors[STL_PM_MAX_DG_PER_PMPG];
Packit 857059
} PmPortGroupXmlConfig_t;
Packit 857059
Packit 857059
// Pm Thresholds
Packit 857059
typedef struct _PmThresholdsXmlConfig {
Packit 857059
	uint32_t Integrity;
Packit 857059
	uint32_t Congestion;
Packit 857059
	uint32_t SmaCongestion;
Packit 857059
	uint32_t Bubble;
Packit 857059
	uint32_t Security;
Packit 857059
	uint32_t Routing;
Packit 857059
} PmThresholdsXmlConfig_t;
Packit 857059
Packit 857059
// Pm ThresholdsExceededMsgLimit
Packit 857059
typedef struct _PmThresholdsExceededMsgLimitXmlConfig {
Packit 857059
	uint32_t Integrity;
Packit 857059
	uint32_t Congestion;
Packit 857059
	uint32_t SmaCongestion;
Packit 857059
	uint32_t Bubble;
Packit 857059
	uint32_t Security;
Packit 857059
	uint32_t Routing;
Packit 857059
} PmThresholdsExceededMsgLimitXmlConfig_t;
Packit 857059
Packit 857059
typedef struct _PmSweepErrorInfoThresholds {
Packit 857059
	uint32_t Integrity;
Packit 857059
	uint32_t Security;
Packit 857059
	uint32_t Routing;
Packit 857059
} PmSweepErrorInfoThresholds_t;
Packit 857059
Packit 857059
// Pm IntegrityWeights
Packit 857059
typedef struct _PmIntegrityWeightsXmlConfig {
Packit 857059
	uint8_t LocalLinkIntegrityErrors;
Packit 857059
	uint8_t PortRcvErrors;
Packit 857059
	uint8_t ExcessiveBufferOverruns;
Packit 857059
	uint8_t LinkErrorRecovery;
Packit 857059
	uint8_t LinkDowned;
Packit 857059
	uint8_t UncorrectableErrors;
Packit 857059
	uint8_t FMConfigErrors;
Packit 857059
	uint8_t LinkQualityIndicator;
Packit 857059
	uint8_t LinkWidthDowngrade;
Packit 857059
} PmIntegrityWeightsXmlConfig_t;
Packit 857059
Packit 857059
// Pm CongestionWeights
Packit 857059
typedef struct _PmCongestionWeightsConfig {
Packit 857059
	uint8_t PortXmitWait;
Packit 857059
	uint8_t SwPortCongestion;
Packit 857059
	uint8_t PortRcvFECN;
Packit 857059
	uint8_t PortRcvBECN;
Packit 857059
	uint8_t PortXmitTimeCong;
Packit 857059
	uint8_t PortMarkFECN;
Packit 857059
} PmCongestionWeightsXmlConfig_t;
Packit 857059
Packit 857059
typedef struct _PmResolutionXmlConfig {
Packit 857059
	uint64_t LocalLinkIntegrity;
Packit 857059
	uint32_t LinkErrorRecovery;
Packit 857059
} PmResolutionXmlConfig_t;
Packit 857059
Packit 857059
typedef struct _PmShortTermHistoryXmlConfig {
Packit 857059
	uint8_t		enable;
Packit 857059
	char		StorageLocation[FILENAME_SIZE];
Packit 857059
	uint32_t	totalHistory;
Packit 857059
	uint32_t	imagesPerComposite;
Packit 857059
	uint64_t	maxDiskSpace;
Packit 857059
	uint8_t		compressionDivisions;
Packit 857059
} PmShortTermHistoryXmlConfig_t;
Packit 857059
Packit 857059
// PM configuration
Packit 857059
typedef struct _PMXmlConfig {
Packit 857059
	uint32_t	subnet_size;
Packit 857059
	uint32_t	config_consistency_check_level;
Packit 857059
Packit 857059
    uint16_t    sweep_interval;
Packit 857059
    uint32_t    timer;
Packit 857059
    uint8_t	    ErrorClear;
Packit 857059
    uint8_t	    ClearDataXfer;
Packit 857059
    uint8_t	    Clear64bit;
Packit 857059
    uint8_t	    Clear32bit;
Packit 857059
    uint8_t	    Clear8bit;
Packit 857059
	uint8_t 	process_hfi_counters;
Packit 857059
    uint8_t	    process_vl_counters;
Packit 857059
    uint8_t	    process_errorinfo;
Packit 857059
    uint32_t	MaxRetries;
Packit 857059
    uint32_t	RcvWaitInterval;
Packit 857059
    uint32_t	MinRcvWaitInterval;
Packit 857059
    uint32_t	SweepErrorsLogThreshold;
Packit 857059
    uint32_t	MaxParallelNodes;
Packit 857059
    uint32_t	PmaBatchSize;
Packit 857059
    uint32_t    freeze_frame_lease;
Packit 857059
    uint32_t    total_images;
Packit 857059
    uint32_t    freeze_frame_images;
Packit 857059
    uint32_t    max_clients;
Packit 857059
    uint32_t    history_file_update_rate;
Packit 857059
    uint16_t    image_update_interval;
Packit 857059
	PmThresholdsXmlConfig_t thresholds;
Packit 857059
	PmIntegrityWeightsXmlConfig_t integrityWeights;
Packit 857059
	PmCongestionWeightsXmlConfig_t congestionWeights;
Packit 857059
	PmResolutionXmlConfig_t resolution;
Packit 857059
	uint8_t		number_of_pm_groups;
Packit 857059
	PmPortGroupXmlConfig_t pm_portgroups[STL_PM_MAX_CUSTOM_PORT_GROUPS];
Packit 857059
	PmShortTermHistoryXmlConfig_t shortTermHistory;
Packit 857059
    uint32_t    SslSecurityEnabled;
Packit 857059
	char		SslSecurityDir[FILENAME_SIZE];
Packit 857059
	char		SslSecurityFmCertificate[FILENAME_SIZE];
Packit 857059
	char		SslSecurityFmPrivateKey[FILENAME_SIZE];
Packit 857059
	char		SslSecurityFmCaCertificate[FILENAME_SIZE];
Packit 857059
    uint32_t    SslSecurityFmCertChainDepth;
Packit 857059
	char		SslSecurityFmDHParameters[FILENAME_SIZE];
Packit 857059
    uint32_t    SslSecurityFmCaCRLEnabled;
Packit 857059
    char        SslSecurityFmCaCRL[FILENAME_SIZE];
Packit 857059
Packit 857059
	uint32_t	consistency_checksum;
Packit 857059
	uint32_t	overall_checksum;
Packit 857059
	uint32_t	disruptive_checksum;		// checksum of parameters that are disruptive to change
Packit 857059
Packit 857059
	char        name[MAX_VFABRIC_NAME];
Packit 857059
	uint32_t	start;
Packit 857059
    uint32_t    hca;
Packit 857059
    uint32_t	port;
Packit 857059
    uint64_t    port_guid;
Packit 857059
Packit 857059
    uint32_t   	priority;
Packit 857059
    uint32_t   	elevated_priority;
Packit 857059
    uint32_t   	debug;
Packit 857059
    uint32_t	debug_rmpp;
Packit 857059
	uint32_t	pm_debug_perf;
Packit 857059
    uint32_t    log_level;
Packit 857059
	char		log_file[LOGFILE_SIZE];
Packit 857059
	uint32_t	syslog_mode;
Packit 857059
	char		syslog_facility[STRING_SIZE];
Packit 857059
    FmParamU32_t log_masks[VIEO_LAST_MOD_ID+1];
Packit 857059
Packit 857059
	PmThresholdsExceededMsgLimitXmlConfig_t thresholdsExceededMsgLimit;
Packit 857059
Packit 857059
	PmSweepErrorInfoThresholds_t errorinfo_thresholds;
Packit 857059
Packit 857059
} PMXmlConfig_t;
Packit 857059
Packit 857059
// FE configuration
Packit 857059
typedef struct _FEXmlConfig {
Packit 857059
	uint32_t	subnet_size;
Packit 857059
	uint32_t	startup_retries;
Packit 857059
	uint32_t	startup_stable_wait;
Packit 857059
Packit 857059
	uint32_t 	manager_check_rate;
Packit 857059
    uint32_t   	login;
Packit 857059
	uint32_t	window;
Packit 857059
    uint32_t    SslSecurityEnabled;
Packit 857059
	char		SslSecurityDir[FILENAME_SIZE];
Packit 857059
	char		SslSecurityFmCertificate[FILENAME_SIZE];
Packit 857059
	char		SslSecurityFmPrivateKey[FILENAME_SIZE];
Packit 857059
	char		SslSecurityFmCaCertificate[FILENAME_SIZE];
Packit 857059
    uint32_t    SslSecurityFmCertChainDepth;
Packit 857059
	char		SslSecurityFmDHParameters[FILENAME_SIZE];
Packit 857059
    uint32_t    SslSecurityFmCaCRLEnabled;
Packit 857059
    char        SslSecurityFmCaCRL[FILENAME_SIZE];
Packit 857059
Packit 857059
	char        name[MAX_VFABRIC_NAME + 4]; // Padded for the "_fe" suffix.
Packit 857059
	uint32_t	start;
Packit 857059
    uint32_t    hca;
Packit 857059
    uint32_t	port;
Packit 857059
    uint64_t    port_guid;
Packit 857059
Packit 857059
    uint32_t    listen;
Packit 857059
Packit 857059
	char		CoreDumpLimit[STRING_SIZE];
Packit 857059
	char		CoreDumpDir[FILENAME_SIZE];
Packit 857059
    uint32_t   	debug;
Packit 857059
    uint32_t	debug_rmpp;
Packit 857059
    uint32_t   	log_level;
Packit 857059
	char		log_file[LOGFILE_SIZE];
Packit 857059
	uint32_t	syslog_mode;
Packit 857059
	char		syslog_facility[STRING_SIZE];
Packit 857059
    FmParamU32_t log_masks[VIEO_LAST_MOD_ID+1];
Packit 857059
Packit 857059
	uint32_t    trap_count;
Packit 857059
	uint16_t    trap_nums[FE_MAX_TRAP_SUBS];
Packit 857059
} FEXmlConfig_t;
Packit 857059
Packit 857059
// FM configuration (Shared)
Packit 857059
typedef struct _FMXmlConfig {
Packit 857059
	uint64_t	subnet_prefix;
Packit 857059
    uint32_t	subnet_size;
Packit 857059
	uint32_t	startup_retries;
Packit 857059
	uint32_t	startup_stable_wait;
Packit 857059
	uint32_t	config_consistency_check_level;
Packit 857059
    uint32_t    SslSecurityEnabled;
Packit 857059
	char		SslSecurityDir[FILENAME_SIZE];
Packit 857059
	char		SslSecurityFmCertificate[FILENAME_SIZE];
Packit 857059
	char		SslSecurityFmPrivateKey[FILENAME_SIZE];
Packit 857059
	char		SslSecurityFmCaCertificate[FILENAME_SIZE];
Packit 857059
    uint32_t    SslSecurityFmCertChainDepth;
Packit 857059
	char		SslSecurityFmDHParameters[FILENAME_SIZE];
Packit 857059
    uint32_t    SslSecurityFmCaCRLEnabled;
Packit 857059
    char        SslSecurityFmCaCRL[FILENAME_SIZE];
Packit 857059
Packit 857059
	char		fm_name[MAX_VFABRIC_NAME];
Packit 857059
	uint32_t	start;
Packit 857059
    uint32_t    hca;
Packit 857059
    uint32_t	port;
Packit 857059
    uint64_t    port_guid;
Packit 857059
Packit 857059
    uint32_t   	priority;
Packit 857059
    uint32_t   	elevated_priority;
Packit 857059
	char		CoreDumpLimit[STRING_SIZE];
Packit 857059
	char		CoreDumpDir[FILENAME_SIZE];
Packit 857059
    uint32_t   	debug;
Packit 857059
    uint32_t	debug_rmpp;
Packit 857059
    uint32_t   	log_level;
Packit 857059
	char		log_file[LOGFILE_SIZE];
Packit 857059
	uint32_t	syslog_mode;
Packit 857059
	char		syslog_facility[STRING_SIZE];
Packit 857059
    FmParamU32_t log_masks[VIEO_LAST_MOD_ID+1];
Packit 857059
	// FM config doesn't have checksums because all the data is contained in SM, PM, or FE configs
Packit 857059
} FMXmlConfig_t;
Packit 857059
Packit 857059
Packit 857059
Packit 857059
Packit 857059
// FM instance
Packit 857059
typedef struct _FMXmlInstance {
Packit 857059
	FMXmlConfig_t			fm_config;
Packit 857059
	SMXmlConfig_t			sm_config;
Packit 857059
	SMDPLXmlConfig_t		sm_dpl_config;
Packit 857059
	SMMcastConfig_t			sm_mc_config;
Packit 857059
	SmMcastMlidShare_t		sm_mls_config;
Packit 857059
	SMMcastDefGrpCfg_t      sm_mdg_config;
Packit 857059
	VFXmlConfig_t			vf_config;
Packit 857059
	QosXmlConfig_t			qos_config;
Packit 857059
	DGXmlConfig_t			dg_config;
Packit 857059
	AppXmlConfig_t			app_config;
Packit 857059
	PMXmlConfig_t			pm_config;
Packit 857059
	FEXmlConfig_t			fe_config;
Packit 857059
Packit 857059
Packit 857059
} FMXmlInstance_t;
Packit 857059
Packit 857059
// XML debug
Packit 857059
typedef struct _XmlDebug {
Packit 857059
	uint32_t	xml_all_debug;
Packit 857059
	uint32_t	xml_vf_debug;
Packit 857059
	uint32_t	xml_sm_debug;
Packit 857059
	uint32_t	xml_fe_debug;
Packit 857059
	uint32_t	xml_pm_debug;
Packit 857059
	uint32_t	xml_parse_debug;
Packit 857059
} XmlDebug_t;
Packit 857059
Packit 857059
// Composite FM configuration
Packit 857059
typedef struct _FMXmlCompositeConfig {
Packit 857059
	FMXmlInstance_t			*fm_instance_common;
Packit 857059
	FMXmlInstance_t			*fm_instance[MAX_INSTANCES];
Packit 857059
	int						num_instances;
Packit 857059
	XmlDebug_t				xmlDebug;
Packit 857059
} FMXmlCompositeConfig_t;
Packit 857059
Packit 857059
// parseFmConfig:
Packit 857059
// fm - instance to parse
Packit 857059
// full - Parse all the instances in the config file (ignore the fm parameter)
Packit 857059
// preverify - run renderVirtualFabics on config to verify VFs
Packit 857059
//             (not necessary if renderVirtualFabrics will be called)
Packit 857059
extern FMXmlCompositeConfig_t* parseFmConfig(char *filename, uint32_t flags, uint32_t fm, uint32_t full, uint32_t preverify, uint32_t embedded);
Packit 857059
extern void releaseXmlConfig(FMXmlCompositeConfig_t *config, uint32_t full);
Packit 857059
extern VirtualFabrics_t* renderVirtualFabricsConfig(uint32_t fm, FMXmlCompositeConfig_t *config, 
Packit 857059
	IXmlParserPrintMessage printError, IXmlParserPrintMessage printWarning);
Packit 857059
extern VirtualFabrics_t* reRenderVirtualFabricsConfig(uint32_t fm, VirtualFabrics_t *oldVfsip, FMXmlCompositeConfig_t *config,
Packit 857059
	IXmlParserPrintMessage printError, IXmlParserPrintMessage printWarning);
Packit 857059
Packit 857059
Packit 857059
extern void releaseVirtualFabricsConfig(VirtualFabrics_t *vfsip);
Packit 857059
extern void initXmlPoolGetCallback(void *function);
Packit 857059
extern void initXmlPoolFreeCallback(void *function);
Packit 857059
extern uint32_t xml_compute_pool_size(uint8_t full);
Packit 857059
extern uint8_t verifyFmConfig(char* filename, uint32_t flags);
Packit 857059
int generateDefaultXmlConfig(uint8_t cli);
Packit 857059
extern VF_t* findVfPointer(VirtualFabrics_t*, char*);
Packit 857059
extern void fmClearConfig(FMXmlConfig_t *fmp);
Packit 857059
extern void pmClearConfig(PMXmlConfig_t *pmp);
Packit 857059
extern void feClearConfig(FEXmlConfig_t *fep);
Packit 857059
extern void smScrubConfig(SMXmlConfig_t *smp);
Packit 857059
extern boolean smCopyConfig(SMXmlConfig_t *dst,SMXmlConfig_t *src);
Packit 857059
extern void smClearConfig(SMXmlConfig_t *smp);
Packit 857059
#ifndef __VXWORKS__
Packit 857059
extern int getFacility(char* name, uint8_t test);
Packit 857059
#endif
Packit 857059
extern void smShowConfig(SMXmlConfig_t *smp, SMDPLXmlConfig_t *dplp, SMMcastConfig_t *mcp, SmMcastMlidShare_t *mlsp);
Packit 857059
extern void pmShowConfig(PMXmlConfig_t *pmp);
Packit 857059
extern void feShowConfig(FEXmlConfig_t *fep);
Packit 857059
extern int getXMLConfigData(uint8_t *buffer, uint32_t bufflen, uint32_t *filelen);
Packit 857059
extern int putXMLConfigData(uint8_t *buffer, uint32_t filelen);
Packit 857059
extern int copyCompressXMLConfigFile(char *src, char *dst);
Packit 857059
extern void freeDgInfo(DGXmlConfig_t *dg);
Packit 857059
extern FSTATUS MatchImplicitMGIDtoVF(SMMcastDefGrp_t *mdgp, VirtualFabrics_t *vf_config);
Packit 857059
extern FSTATUS MatchExplicitMGIDtoVF(SMMcastDefGrp_t *mdgp, VirtualFabrics_t *vf_config, boolean update_active_vfabrics, int enforceVFPathRecs);
Packit 857059
int verifyAndConvertMGidString(char *mgidString, VFAppMgid_t *mgidMapping);
Packit 857059
// Export XML Memory mapping functions for the SM to use with the Topology lib on ESM
Packit 857059
#ifdef __VXWORKS__
Packit 857059
extern void* getParserMemory(size_t size);
Packit 857059
extern void* reallocParserMemory(void* ptr, size_t size);
Packit 857059
extern void freeParserMemory(void* ptr);
Packit 857059
#endif
Packit 857059
Packit 857059
// Macro for proper typecasting of pointers into the cl_map_item key
Packit 857059
#ifdef __VXWORKS__
Packit 857059
#define XML_QMAP_CHAR_CAST	(char*)(uint32)
Packit 857059
#define XML_QMAP_U64_CAST	(uint64)(uint32)
Packit 857059
#define XML_QMAP_VOID_CAST	(void*)(uint32)
Packit 857059
#define XML_QMAP_U8_CAST	(uint8_t*)(uint32)
Packit 857059
#else
Packit 857059
#define XML_QMAP_CHAR_CAST	(char*)
Packit 857059
#define XML_QMAP_U64_CAST	(uint64)
Packit 857059
#define XML_QMAP_VOID_CAST	(void*)
Packit 857059
#define XML_QMAP_U8_CAST	(uint8_t*)
Packit 857059
#endif
Packit 857059
Packit 857059
#define for_all_qmap_item(map, item) \
Packit 857059
	 for(item = cl_qmap_head(map); \
Packit 857059
	     item != cl_qmap_end(map); \
Packit 857059
		 item = cl_qmap_next(item))
Packit 857059
Packit 857059
#define for_all_qmap_type(map, item, obj, type) \
Packit 857059
	 for(item = cl_qmap_head(map), obj = type cl_qmap_key(item); \
Packit 857059
	     item != cl_qmap_end(map); \
Packit 857059
		 item = cl_qmap_next(item), obj = type cl_qmap_key(item))
Packit 857059
Packit 857059
#define for_all_qmap_u64(map, item, obj) for_all_qmap_type(map, item, obj, XML_QMAP_U64_CAST)
Packit 857059
#define for_all_qmap_ptr(map, item, obj) for_all_qmap_type(map, item, obj, XML_QMAP_VOID_CAST)
Packit 857059
Packit 857059
#endif // _FM_XML_H_