Blame Esm/ib/include/ib_sm.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
//    ib_mad.h                                                          /
Packit 857059
//                                                                      /
Packit 857059
// DESCRIPTION                                                          /
Packit 857059
//    general transport definitions                                     /
Packit 857059
//                                                                      /
Packit 857059
// DATA STRUCTURES                                                      /
Packit 857059
//    Trap64_t		Trap information (port up)			/
Packit 857059
//    Trap65_t		Trap information (link down)			/
Packit 857059
//    Trap66_t		Trap information (multicast group created)	/
Packit 857059
//    Trap67_t		Trap information (multicast group deleted)	/
Packit 857059
//    Trap128_t		Trap information (link state change)		/
Packit 857059
//    Trap129_t		Trap information (link integrity threshold)	/
Packit 857059
//    Trap130_t		Trap information (buffer overrun threshold)	/
Packit 857059
//    Trap131_t		Trap information (flow control update timer)	/
Packit 857059
//    Trap144_t		Trap information (change to cap mask/other)	/
Packit 857059
//    Trap256_t		Trap information (bad M_Key)			/
Packit 857059
//    Trap257_t		Trap information (bad P_Key)			/
Packit 857059
//    Trap258_t		Trap information (bad Q_Key)			/
Packit 857059
//    SMTrap259_t	Trap information (bad P_Key)			/
Packit 857059
//    NodeDesc_t	Node description				/
Packit 857059
//    GuidInfo_t	IEEE address information			/
Packit 857059
//    PKeyBlock_t	Partition Key 					/
Packit 857059
//                                                                      /
Packit 857059
// FUNCTIONS                                                            /
Packit 857059
//    None                                                              /
Packit 857059
//                                                                      /
Packit 857059
// DEPENDENCIES                                                         /
Packit 857059
//    ib_types.h                                                        /
Packit 857059
//                                                                      /
Packit 857059
//                                                                      /
Packit 857059
// HISTORY                                                              /
Packit 857059
//                                                                      /
Packit 857059
//    NAME      DATE  REMARKS                                           /
Packit 857059
//                                                                      /
Packit 857059
//----------------------------------------------------------------------/
Packit 857059
Packit 857059
//----------------------------------------------------------------------//
Packit 857059
//                                                                      //
Packit 857059
//	WARNING:  These structures do NOT represent the IBTA defined    //
Packit 857059
//		  structures as they appear in the Volume1 spec.        //
Packit 857059
//                                                                      //
Packit 857059
//----------------------------------------------------------------------//
Packit 857059
Packit 857059
#ifndef	_IB_SM_H_
Packit 857059
#define	_IB_SM_H_
Packit 857059
Packit 857059
#include "ib_types.h"
Packit 857059
Packit 857059
// IBTA:  Volume 1, Section 14.2.5
Packit 857059
Packit 857059
//
Packit 857059
//	Subnet Management Attributes (MAD_SMA)
Packit 857059
//
Packit 857059
#define	MAD_SMA_NOTICE		0x0002
Packit 857059
#define	MAD_SMA_NODEDESC	0x0010
Packit 857059
#define	MAD_SMA_NODEINFO	0x0011
Packit 857059
#define	MAD_SMA_SWITCHINFO	0x0012
Packit 857059
#define	MAD_SMA_GUIDINFO	0x0014
Packit 857059
#define	MAD_SMA_PORTINFO	0x0015
Packit 857059
#define	MAD_SMA_PART_TABLE	0x0016
Packit 857059
#define	MAD_SMA_VL_ARBITRATION	0x0018
Packit 857059
#define	MAD_SMA_LFT		0x0019
Packit 857059
#define	MAD_SMA_RFT		0x001a
Packit 857059
#define	MAD_SMA_MFT		0x001b
Packit 857059
#define	MAD_SMA_SMINFO		0x0020
Packit 857059
#define	MAD_SMA_VENDOR_DIAG	0x0030
Packit 857059
#define	MAD_SMA_LEDINFO		0x0031
Packit 857059
Packit 857059
// IBTA:  Volume 1, Section 14.2.5.1
Packit 857059
Packit 857059
//
Packit 857059
//	Subnet Management Traps (MAD_SMT)
Packit 857059
//
Packit 857059
#define	MAD_SMT_PORT_UP		 64
Packit 857059
#define	MAD_SMT_PORT_DOWN	 65
Packit 857059
#define	MAD_SMT_MCAST_GRP_CREATED 66
Packit 857059
#define	MAD_SMT_MCAST_GRP_DELETED 67
Packit 857059
#define	MAD_SMT_UNPATH 68
Packit 857059
#define	MAD_SMT_REPATH 69
Packit 857059
#define	MAD_SMT_PORT_CHANGE	128
Packit 857059
#define	MAD_SMT_LINK_INTEGRITY	129
Packit 857059
#define	MAD_SMT_BUF_OVERRUN	130
Packit 857059
#define	MAD_SMT_FLOW_CONTROL	131
Packit 857059
#define MAD_SMT_CAPABILITYMASK_CHANGE 144
Packit 857059
#define MAD_SMT_SYSTEMIMAGEGUID_CHANGE 145
Packit 857059
#define	MAD_SMT_BAD_MKEY	256
Packit 857059
#define	MAD_SMT_BAD_PKEY	257
Packit 857059
#define	MAD_SMT_BAD_QKEY	258
Packit 857059
/* optional bad pkey on switch external port */
Packit 857059
#define MAD_SMT_BAD_PKEY_ONPORT 259
Packit 857059
Packit 857059
// IBTA:  Volume 1, Section 14.2.5.2
Packit 857059
Packit 857059
#define ND_LEN				64
Packit 857059
Packit 857059
// IBTA:  Volume 1, Section 14.2.5.3
Packit 857059
Packit 857059
#define NI_LPN_MASK       0xff000000
Packit 857059
#define NI_VID_MASK       0x00ffffff
Packit 857059
Packit 857059
#define NI_TYPE_CA          0x01
Packit 857059
#define NI_TYPE_SWITCH      0x02
Packit 857059
#define NI_TYPE_ROUTER      0x03
Packit 857059
Packit 857059
#define NI_TYPE_MASK        0x03
Packit 857059
Packit 857059
Packit 857059
// IBTA:  Volume 1, Section 14.2.5.5
Packit 857059
Packit 857059
#define GUID_INFO_GUID_COUNT         8
Packit 857059
Packit 857059
typedef	struct {
Packit 857059
	uint64_t	guid[GUID_INFO_GUID_COUNT];	// list of GUID block elements
Packit 857059
} GuidInfo_t;
Packit 857059
Packit 857059
Packit 857059
// IBTA:  Table 126 Page 665  Vol1 1.0.a (June 19 2001)
Packit 857059
Packit 857059
//
Packit 857059
// CapabilityMask.
Packit 857059
//
Packit 857059
// Note for STL capability mask:
Packit 857059
// STL provides a bitfield definition for its capability mask. (see stl_sm_types.h)
Packit 857059
// Many capability bits that were optional in IB are now mandatory in STL.
Packit 857059
// However, as per STL1G1 spec, STL returns these "mandatory" capability
Packit 857059
// bits as 0.  Be careful when checking STL capabilities and using 
Packit 857059
// bitmask manipulations below instead of the new STL bitfields.
Packit 857059
// STL responses for the IB capability bits are annotated below.
Packit 857059
Packit 857059
#define PI_CM_RESERVED                  0xff00e011   // These are all reserved bits.
Packit 857059
#define PI_CM_IS_SM                               0x00000002 /* STL: 0/1 */
Packit 857059
//#define PI_CM_IS_NOTICE_SUPPORTED                 0x00000004 /* STL: 0   */
Packit 857059
//#define PI_CM_IS_TRAP_SUPPORTED                   0x00000008 /* STL: 0   */
Packit 857059
//#define PI_CM_IS_OPTIONAL_IPD_SUPPORTED           0x00000010 /* STL: 0   */
Packit 857059
#define PI_CM_IS_AUTOMATIC_MIGRATION_SUPPORTED    0x00000020 /* STL: 0/1 */
Packit 857059
//#define PI_CM_IS_SL_MAPPING_SUPPORTED             0x00000040 /* STL: 0   */
Packit 857059
//#define PI_CM_IS_MKEY_NVRAM                       0x00000080 /* STL: 0   */
Packit 857059
//#define PI_CM_IS_PKEY_NVRAM                       0x00000100 /* STL: 0   */
Packit 857059
//#define PI_CM_IS_LEDINFO_SUPPORTED                0x00000200 /* STL: 0   */
Packit 857059
//#define PI_CM_IS_SM_DISABLED                      0x00000400 /* STL: 0   */
Packit 857059
//#define PI_CM_IS_SYS_IMAGE_SUPPORTED              0x00000800 /* STL: 0   */
Packit 857059
//#define PI_CM_IS_PKEY_SWITCH_EXTERNAL_TRAP_SUPPORTED  0x00001000 /* STL: 0   */
Packit 857059
//#define PI_CM_IS_EXT_LINK_SPEED_SUPPORTED         0x00004000 /* STL: 0   */
Packit 857059
#define PI_CM_IS_COM_MGT_SUPPORTED                0x00010000 /* STL: 0/1 */
Packit 857059
//#define PI_CM_IS_SNMP_SUPPORTED                   0x00020000 /* STL: 0   */
Packit 857059
//#define PI_CM_IS_REINIT_SUPPORTED                 0x00040000 /* STL: 0   */
Packit 857059
#define PI_CM_IS_DEVICE_MGT_SUPPORTED             0x00080000 /* STL: 0/1 */
Packit 857059
#define PI_CM_IS_VENDOR_CLASS_SUPPORTED           0x00100000 /* STL: 0/1 */
Packit 857059
//#define PI_CM_IS_DRNOTICE_SUPPORTED               0x00200000 /* STL: 0   */
Packit 857059
#define PI_CM_IS_CAPMASKNOTICE_SUPPORTED          0x00400000 /* STL: 0/1 */
Packit 857059
//#define PI_CM_IS_BOOT_MGT_SUPPORTED               0x00800000 /* STL: 0   */
Packit 857059
//#define PI_CM_IS_LINK_ROUNDTRIP_LATENCY_SUPPORTED 0x01000000 /* STL: 0   */
Packit 857059
//#define PI_CM_IS_CLIENT_REREGISTER_SUPPORTED      0x02000000 /* STL: 0   */
Packit 857059
//#define PI_CM_IS_OTHER_LOCAL_NOTICE_SUPPORTED     0x04000000 /* STL: 0   */
Packit 857059
//#define PI_CM_IS_MULTICAST_FDB_TOP_SUPPORTED      0x40000000 /* STL: 0   */
Packit 857059
Packit 857059
// IBTA:  Volume 1, Section 14.2.5.7
Packit 857059
Packit 857059
/* Macros for extracting the two pieces of a PKey */
Packit 857059
#define PKEY_TYPE(key) ( ((uint16_t) (key)) >> 15 )
Packit 857059
#define PKEY_VALUE(key) ( ((uint16_t) (key)) & 0x7FFF )
Packit 857059
#define MAKE_PKEY(type, key) \
Packit 857059
	((uint16_t) ((((uint16_t)(type)) & 0x01) << 15) | ((key) & 0x7FFF))
Packit 857059
Packit 857059
typedef PKey_t PKeyBlock_t;
Packit 857059
Packit 857059
// IBTA:  Volume 1, Section 14.2.5.10
Packit 857059
Packit 857059
#define LFTABLE_LIST_COUNT 64
Packit 857059
Packit 857059
#define MFTABLE_LIST_COUNT 32	// entries per MFT Table block
Packit 857059
#define MFTABLE_POSITION_COUNT 16	// Positions per portMask
Packit 857059
Packit 857059
#define	MFT_MAX_INDEX		511		// maximum Block Number value for Get or Set
Packit 857059
#define MFT_MAX_POSITION	15		// Maximum PortMask Position value for Get or Set
Packit 857059
Packit 857059
// IBTA:  Volume 1, Section 14.2.5.13
Packit 857059
Packit 857059
#define	SM_STATE_NOTACTIVE	0
Packit 857059
#define	SM_STATE_DISCOVERING	1
Packit 857059
#define	SM_STATE_STANDBY	2
Packit 857059
#define	SM_STATE_MASTER		3
Packit 857059
Packit 857059
#define	SM_AMOD_HANDOVER	1		// SM state transitions
Packit 857059
#define	SM_AMOD_ACKNOWLEDGE	2
Packit 857059
#define	SM_AMOD_DISABLE		3
Packit 857059
#define	SM_AMOD_STANDBY		4
Packit 857059
#define	SM_AMOD_DISCOVER	5
Packit 857059
Packit 857059
#define SM_VERSION		0x01
Packit 857059
Packit 857059
//
Packit 857059
// SM Service Record Capability bits
Packit 857059
//
Packit 857059
#define SM_CAPABILITY_NONE		0x00000000
Packit 857059
#define SM_CAPABILITY_VSWINFO	0x00000001
Packit 857059
Packit 857059
/*
Packit 857059
 * Per SM data
Packit 857059
 */ 
Packit 857059
typedef struct {
Packit 857059
    uint32_t        version;                /* version = 1 */
Packit 857059
Packit 857059
    uint32_t        fullSyncStatus;         /* 0=un-initialized, 1=in progress, 2=synchronized, 3=failure */
Packit 857059
    uint32_t        fullSyncFailCount;      /* count of consecutive full sync attempt failures */
Packit 857059
    uint32_t        fullTimeSyncFail;       /* time of last full sync attempt failure */
Packit 857059
    uint32_t        fullTimeLastSync;       /* time of last scheduled full sync - 0 if never sync'd */
Packit 857059
Packit 857059
    uint32_t        informSyncStatus;       /* 0=un-initialized, 1=in progress, 2=synchronized, 3=failure */
Packit 857059
    uint32_t        informSyncFailCount;    /* count of consecutive sync attempt failures for INFORM records */
Packit 857059
    uint32_t        informTimeSyncFail;     /* time of last INFORM sync attempt failure */
Packit 857059
    uint32_t        informTimeLastSync;     /* time of last sync of INFORM records; 0=un-initialized */
Packit 857059
Packit 857059
    uint32_t        groupSyncStatus;        /* 0=un-initialized, 1=in progress, 2=synchronized, 3=failure */
Packit 857059
    uint32_t        groupSyncFailCount;     /* count of consecutive sync attempt failures for MCAST group records */
Packit 857059
    uint32_t        groupTimeSyncFail;      /* time of last MCAST group sync attempt failure */
Packit 857059
    uint32_t        groupTimeLastSync;      /* time of last sync of mcast groups; 0=un-initialized */
Packit 857059
Packit 857059
    uint32_t        serviceSyncStatus;      /* 0=un-initialized, 1=in progress, 2=synchronized, 3=failure */
Packit 857059
    uint32_t        serviceSyncFailCount;   /* count of consecutive sync attempt failures for SERVICE records */
Packit 857059
    uint32_t        serviceTimeSyncFail;    /* time of last SERVICE sync attempt failure */
Packit 857059
    uint32_t        serviceTimeLastSync;    /* time of last sync of services; 0=un-initialized */
Packit 857059
Packit 857059
	uint32_t        mcrootSyncStatus;      /* 0=un-initialized, 1=in progress, 2=synchronized, 3=failure */
Packit 857059
    uint32_t        mcrootSyncFailCount;   /* count of consecutive sync attempt failures for MC Root records */
Packit 857059
    uint32_t        mcrootTimeSyncFail;    /* time of last MC Root sync attempt failure */
Packit 857059
    uint32_t        mcrootTimeLastSync;    /* time of last sync of services; 0=un-initialized */
Packit 857059
Packit 857059
    uint32_t        datelineGuidSyncStatus;   /*0=un-initialized, 1=in progress, 2=synchronized, 3=failure */
Packit 857059
    uint32_t        datelineGuidSyncFailCount;/* count of consecutive sync attempt failures for Dateline Switch GUID records */
Packit 857059
    uint32_t        datelineGuidTimeSyncFail; /* time of last Dateline Switch GUID sync attempt failure */
Packit 857059
    uint32_t        datelineGuidTimeLastSync; /* time of last sync of services; 0=un-initialized */
Packit 857059
} SMDBSync_t;
Packit 857059
typedef SMDBSync_t  *SMDBSyncp;         /* SM DBSYNC pointer type */
Packit 857059
Packit 857059
// FM Protocol Version
Packit 857059
Packit 857059
Packit 857059
// version 1 - initial creation of FM protocol version feature
Packit 857059
// version 2 - 10.0.1 releases and before
Packit 857059
// version 3 - 10.1 release
Packit 857059
// version 4 - 10.2 release
Packit 857059
// version 5 - 10.3 release
Packit 857059
// version 6 - 10.4 release
Packit 857059
// version 7 - 10.5 release
Packit 857059
// version 8 - 10.6 release
Packit 857059
// version 9 - 10.7 release
Packit 857059
// version 10 - 10.8 release
Packit 857059
// version 11 - 10.9 release
Packit 857059
// version 12 - 10.9.3 release
Packit 857059
// version 13 - 10.10.1 release
Packit 857059
#define     FM_PROTOCOL_VERSION    13
Packit 857059
Packit 857059
Packit 857059
typedef struct {
Packit 857059
    uint32_t        protocolVersion;
Packit 857059
Packit 857059
    // SM checksums
Packit 857059
	uint32_t		smVfChecksum;			/* Virtual Fabric database checksum */
Packit 857059
    uint32_t        smConfigChecksum;		/* SM configuration checksum */
Packit 857059
Packit 857059
    // PM checksums
Packit 857059
    uint32_t        pmConfigChecksum;
Packit 857059
Packit 857059
	// EM checksums
Packit 857059
	uint32_t		emConfigChecksum;		/* Ethernet over STL */
Packit 857059
Packit 857059
	// spare values for future expansion so packet framing does not need to change
Packit 857059
	uint32_t		spare1;
Packit 857059
	uint32_t		spare2;
Packit 857059
	uint32_t		spare3;
Packit 857059
	uint32_t		spare4;
Packit 857059
	uint32_t		spare5;
Packit 857059
	uint32_t		spare6;
Packit 857059
	uint32_t		spare7;
Packit 857059
	uint32_t                spare8;
Packit 857059
Packit 857059
} SMDBCCCSync_t;
Packit 857059
typedef SMDBCCCSync_t  *SMDBCCCSyncp;         /* SM DBSYNC CCC pointer type */
Packit 857059
Packit 857059
// File transport structure
Packit 857059
Packit 857059
#define DBSYNC_FILE_TRANSPORT_VERSION   1
Packit 857059
Packit 857059
typedef enum {
Packit 857059
	DBSYNC_FILE_XML_CONFIG = 1,
Packit 857059
	DBSYNC_PM_SWEEP_IMAGE,
Packit 857059
	DBSYNC_PM_HIST_IMAGE
Packit 857059
} DBSyncFileType_t;
Packit 857059
Packit 857059
#define SMDBSYNCFILE_NAME_LEN 64
Packit 857059
typedef struct {
Packit 857059
    uint32_t        version;        /* structure version */
Packit 857059
    uint32_t        length;         /* structure length */
Packit 857059
    uint32_t        activate;       /* should file be activated */
Packit 857059
    uint32_t        type;           /* type of file */
Packit 857059
    uint32_t        size;           /* size of file */
Packit 857059
    uint32_t        spare1;
Packit 857059
    uint32_t        spare2;
Packit 857059
    uint32_t        spare3;
Packit 857059
    uint32_t        spare4;
Packit 857059
    char            name[SMDBSYNCFILE_NAME_LEN];       /* filename */
Packit 857059
} SMDBSyncFile_t;
Packit 857059
typedef SMDBSyncFile_t *SMDBSyncFilep;  /* pointer to sync file transport structure */
Packit 857059
Packit 857059
#endif	// _IB_SM_H_
Packit 857059