|
Packit |
857059 |
/* BEGIN_ICS_COPYRIGHT5 ****************************************
|
|
Packit |
857059 |
|
|
Packit |
857059 |
Copyright (c) 2015-2017, 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_COPYRIGHT5 ****************************************/
|
|
Packit |
857059 |
|
|
Packit |
857059 |
//==============================================================================//
|
|
Packit |
857059 |
// //
|
|
Packit |
857059 |
// FILE NAME //
|
|
Packit |
857059 |
// cs_utility.c //
|
|
Packit |
857059 |
// //
|
|
Packit |
857059 |
// DESCRIPTION //
|
|
Packit |
857059 |
// This file contains miscellaneous utility routiness. //
|
|
Packit |
857059 |
// //
|
|
Packit |
857059 |
// DATA STRUCTURES //
|
|
Packit |
857059 |
// None //
|
|
Packit |
857059 |
// //
|
|
Packit |
857059 |
// FUNCTIONS //
|
|
Packit |
857059 |
// bm_log write out logging information //
|
|
Packit |
857059 |
// //
|
|
Packit |
857059 |
// DEPENDENCIES //
|
|
Packit |
857059 |
// //
|
|
Packit |
857059 |
// HISTORY //
|
|
Packit |
857059 |
// //
|
|
Packit |
857059 |
// NAME DATE REMARKS //
|
|
Packit |
857059 |
// sjb 04/09/04 Initial creation of file. //
|
|
Packit |
857059 |
// //
|
|
Packit |
857059 |
//==============================================================================//
|
|
Packit |
857059 |
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#include <stdarg.h>
|
|
Packit |
857059 |
#include <stdio.h>
|
|
Packit |
857059 |
#include <string.h>
|
|
Packit |
857059 |
#include "cs_log.h"
|
|
Packit |
857059 |
#include "cs_queue.h"
|
|
Packit |
857059 |
#include "stl_mad_priv.h"
|
|
Packit |
857059 |
#include "ib_mad.h"
|
|
Packit |
857059 |
#include "ib_sa.h"
|
|
Packit |
857059 |
#include "stl_pa_priv.h"
|
|
Packit |
857059 |
#include "sm_l.h"
|
|
Packit |
857059 |
#include "stl_sa_priv.h"
|
|
Packit |
857059 |
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#include "mai_g.h"
|
|
Packit |
857059 |
#include "sm_dbsync.h"
|
|
Packit |
857059 |
#include "if3.h"
|
|
Packit |
857059 |
|
|
Packit |
857059 |
|
|
Packit |
857059 |
uint32_t cs_log_masks[VIEO_LAST_MOD_ID+1] = {
|
|
Packit |
857059 |
DEFAULT_LOG_MASK, // VIEO_NONE_MOD_ID for vs_syslog_output_message
|
|
Packit |
857059 |
0, // VIEO_CS_MOD_ID /* Library Modules */
|
|
Packit |
857059 |
DEFAULT_LOG_MASK, // VIEO_MAI_MOD_ID
|
|
Packit |
857059 |
DEFAULT_LOG_MASK, // VIEO_CAL_MOD_ID
|
|
Packit |
857059 |
DEFAULT_LOG_MASK, // VIEO_DRIVER_MOD_ID
|
|
Packit |
857059 |
DEFAULT_LOG_MASK, // VIEO_IF3_MOD_ID
|
|
Packit |
857059 |
DEFAULT_LOG_MASK, // VIEO_SM_MOD_ID /* Subnet Mgr */
|
|
Packit |
857059 |
DEFAULT_LOG_MASK, // VIEO_SA_MOD_ID /* Subnet Administrator */
|
|
Packit |
857059 |
DEFAULT_LOG_MASK, // VIEO_PM_MOD_ID /* Performance Mgr */
|
|
Packit |
857059 |
DEFAULT_LOG_MASK, // VIEO_PA_MOD_ID /* Performance Administrator */
|
|
Packit |
857059 |
DEFAULT_LOG_MASK, // VIEO_BM_MOD_ID /* Baseboard Mgr */
|
|
Packit |
857059 |
DEFAULT_LOG_MASK, // VIEO_FE_MOD_ID /* Fabric Executive */
|
|
Packit |
857059 |
DEFAULT_LOG_MASK, // VIEO_APP_MOD_ID /* Generic VIEO mod id */
|
|
Packit |
857059 |
};
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// module name in form of "name: ", useful for messages where name is optional
|
|
Packit |
857059 |
// for VIEO_NONE_MOD_ID, returns ""
|
|
Packit |
857059 |
const char *
|
|
Packit |
857059 |
cs_log_get_module_prefix(uint32_t modid)
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
switch (modid) {
|
|
Packit |
857059 |
case VIEO_NONE_MOD_ID: return "";
|
|
Packit |
857059 |
case VIEO_CS_MOD_ID: return "CS: ";
|
|
Packit |
857059 |
case VIEO_MAI_MOD_ID: return "MAI: ";
|
|
Packit |
857059 |
case VIEO_CAL_MOD_ID: return "CAL: ";
|
|
Packit |
857059 |
case VIEO_DRIVER_MOD_ID:return "DVR: ";
|
|
Packit |
857059 |
case VIEO_IF3_MOD_ID: return "IF3: ";
|
|
Packit |
857059 |
case VIEO_SM_MOD_ID: return "SM: ";
|
|
Packit |
857059 |
case VIEO_SA_MOD_ID: return "SA: ";
|
|
Packit |
857059 |
case VIEO_PM_MOD_ID: return "PM: ";
|
|
Packit |
857059 |
case VIEO_PA_MOD_ID: return "PA: ";
|
|
Packit |
857059 |
case VIEO_BM_MOD_ID: return "BM: ";
|
|
Packit |
857059 |
case VIEO_FE_MOD_ID: return "FE: ";
|
|
Packit |
857059 |
case VIEO_APP_MOD_ID: return "APP: ";
|
|
Packit |
857059 |
default: return "Unkwn: ";
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// module name in simple form, useful to put in middle of other messages
|
|
Packit |
857059 |
// names provided also match prefixes used in LogMask config file names
|
|
Packit |
857059 |
// for VIEO_NONE_MOD_ID, returns "NONE"
|
|
Packit |
857059 |
const char *
|
|
Packit |
857059 |
cs_log_get_module_name(uint32_t modid)
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
switch (modid) {
|
|
Packit |
857059 |
case VIEO_NONE_MOD_ID: return "NONE";
|
|
Packit |
857059 |
case VIEO_CS_MOD_ID: return "CS";
|
|
Packit |
857059 |
case VIEO_MAI_MOD_ID: return "MAI";
|
|
Packit |
857059 |
case VIEO_CAL_MOD_ID: return "CAL";
|
|
Packit |
857059 |
case VIEO_DRIVER_MOD_ID:return "DVR";
|
|
Packit |
857059 |
case VIEO_IF3_MOD_ID: return "IF3";
|
|
Packit |
857059 |
case VIEO_SM_MOD_ID: return "SM";
|
|
Packit |
857059 |
case VIEO_SA_MOD_ID: return "SA";
|
|
Packit |
857059 |
case VIEO_PM_MOD_ID: return "PM";
|
|
Packit |
857059 |
case VIEO_PA_MOD_ID: return "PA";
|
|
Packit |
857059 |
case VIEO_BM_MOD_ID: return "BM";
|
|
Packit |
857059 |
case VIEO_FE_MOD_ID: return "FE";
|
|
Packit |
857059 |
case VIEO_APP_MOD_ID: return "APP";
|
|
Packit |
857059 |
default: return "Unkwn";
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// convert module name to modid
|
|
Packit |
857059 |
// names provided also match prefixes used in LogMask config file names
|
|
Packit |
857059 |
uint32_t
|
|
Packit |
857059 |
cs_log_get_module_id(const char * mod)
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
uint32_t modid;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
for (modid = 0 ; modid <= VIEO_LAST_MOD_ID; modid++) {
|
|
Packit |
857059 |
if (modid == VIEO_NONE_MOD_ID)
|
|
Packit |
857059 |
continue;
|
|
Packit |
857059 |
if (0 == strcmp(cs_log_get_module_name(modid), mod))
|
|
Packit |
857059 |
return modid;
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
return 0; // VIEO_NONE_MOD_ID
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
const char*
|
|
Packit |
857059 |
cs_log_get_sev_name(uint32_t sev)
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
switch (sev) {
|
|
Packit |
857059 |
case VS_LOG_NONE: return "";
|
|
Packit |
857059 |
case VS_LOG_FATAL: return "FATAL";
|
|
Packit |
857059 |
case VS_LOG_CSM_ERROR: return "ERROR";
|
|
Packit |
857059 |
case VS_LOG_CSM_WARN: return "WARN ";
|
|
Packit |
857059 |
case VS_LOG_CSM_NOTICE: return "NOTIC";
|
|
Packit |
857059 |
case VS_LOG_CSM_INFO: return "INFO ";
|
|
Packit |
857059 |
case VS_LOG_ERROR: return "ERROR";
|
|
Packit |
857059 |
case VS_LOG_WARN: return "WARN ";
|
|
Packit |
857059 |
case VS_LOG_NOTICE: return "NOTIC";
|
|
Packit |
857059 |
case VS_LOG_INFINI_INFO:return "PROGR";
|
|
Packit |
857059 |
case VS_LOG_INFO: return "INFO ";
|
|
Packit |
857059 |
case VS_LOG_VERBOSE: return "VBOSE";
|
|
Packit |
857059 |
case VS_LOG_DATA: return "DATA ";
|
|
Packit |
857059 |
case VS_LOG_DEBUG1: return "DBG1 ";
|
|
Packit |
857059 |
case VS_LOG_DEBUG2: return "DBG2 ";
|
|
Packit |
857059 |
case VS_LOG_DEBUG3: return "DBG3 ";
|
|
Packit |
857059 |
case VS_LOG_DEBUG4: return "DBG4 ";
|
|
Packit |
857059 |
case VS_LOG_ENTER: return "ENTER";
|
|
Packit |
857059 |
case VS_LOG_ARGS: return "ARGS ";
|
|
Packit |
857059 |
case VS_LOG_EXIT: return "EXIT ";
|
|
Packit |
857059 |
default: return "UNKWN";
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// translate level and mode to a sev_mask and a mod_mask of modules
|
|
Packit |
857059 |
// which sev_mask should be set for. modules not in mod_mask
|
|
Packit |
857059 |
// should get a sev_mask of 0
|
|
Packit |
857059 |
static void
|
|
Packit |
857059 |
cs_log_translate_level(uint32_t level, int mode,
|
|
Packit |
857059 |
uint32_t *mod_mask, uint32_t *sev_mask)
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
switch(level)
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
case 5:
|
|
Packit |
857059 |
/* All of the modules on. */
|
|
Packit |
857059 |
*mod_mask = VS_MOD_ALL;
|
|
Packit |
857059 |
break;
|
|
Packit |
857059 |
default:
|
|
Packit |
857059 |
*mod_mask = (VS_MOD_ALL & ~(1<
|
|
Packit |
857059 |
break;
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
*sev_mask = 0;
|
|
Packit |
857059 |
if (mode & 1) {
|
|
Packit |
857059 |
switch(level)
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
case 7:
|
|
Packit |
857059 |
*sev_mask |= (VS_LOG_ARGS | VS_LOG_ENTER | VS_LOG_EXIT);
|
|
Packit |
857059 |
case 6:
|
|
Packit |
857059 |
*sev_mask |= (VS_LOG_DEBUG3 | VS_LOG_DEBUG4);
|
|
Packit |
857059 |
case 5:
|
|
Packit |
857059 |
*sev_mask |= (VS_LOG_DEBUG1 | VS_LOG_DEBUG2);
|
|
Packit |
857059 |
case 4:
|
|
Packit |
857059 |
*sev_mask |= (VS_LOG_DATA | VS_LOG_VERBOSE );
|
|
Packit |
857059 |
case 3:
|
|
Packit |
857059 |
*sev_mask |= (VS_LOG_INFO | VS_LOG_ERROR | VS_LOG_WARN
|
|
Packit |
857059 |
| VS_LOG_INFINI_INFO | VS_LOG_NOTICE);
|
|
Packit |
857059 |
case 2:
|
|
Packit |
857059 |
case 1:
|
|
Packit |
857059 |
*sev_mask |= (VS_LOG_CSM_ERROR | VS_LOG_CSM_WARN
|
|
Packit |
857059 |
| VS_LOG_CSM_NOTICE | VS_LOG_CSM_INFO);
|
|
Packit |
857059 |
default:
|
|
Packit |
857059 |
*sev_mask |= VS_LOG_FATAL;
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
} else {
|
|
Packit |
857059 |
switch(level)
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
case 7:
|
|
Packit |
857059 |
*sev_mask |= (VS_LOG_ARGS | VS_LOG_ENTER | VS_LOG_EXIT);
|
|
Packit |
857059 |
case 6:
|
|
Packit |
857059 |
*sev_mask |= (VS_LOG_DEBUG3 | VS_LOG_DEBUG4);
|
|
Packit |
857059 |
case 5:
|
|
Packit |
857059 |
*sev_mask |= (VS_LOG_DEBUG1 | VS_LOG_DEBUG2);
|
|
Packit |
857059 |
case 4:
|
|
Packit |
857059 |
*sev_mask |= (VS_LOG_DATA | VS_LOG_VERBOSE );
|
|
Packit |
857059 |
case 3:
|
|
Packit |
857059 |
*sev_mask |= (VS_LOG_INFO );
|
|
Packit |
857059 |
case 2:
|
|
Packit |
857059 |
*sev_mask |= (VS_LOG_INFINI_INFO | VS_LOG_NOTICE);
|
|
Packit |
857059 |
case 1:
|
|
Packit |
857059 |
*sev_mask |= (VS_LOG_CSM_ERROR | VS_LOG_CSM_WARN
|
|
Packit |
857059 |
| VS_LOG_CSM_NOTICE | VS_LOG_CSM_INFO
|
|
Packit |
857059 |
| VS_LOG_ERROR | VS_LOG_WARN );
|
|
Packit |
857059 |
default:
|
|
Packit |
857059 |
*sev_mask |= VS_LOG_FATAL;
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// fill in log_masks based on mod_mask and sev_mask, presently only used
|
|
Packit |
857059 |
// internally. Use of this implies a limit of
|
|
Packit |
857059 |
// 32 module ids. Probably enough for now
|
|
Packit |
857059 |
void
|
|
Packit |
857059 |
cs_log_set_mods_mask(uint32_t mod_mask, uint32_t sev_mask, uint32_t log_masks[VIEO_LAST_MOD_ID+1])
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
uint32_t modid;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
for (modid = 0; modid<= VIEO_LAST_MOD_ID; modid++) {
|
|
Packit |
857059 |
if (mod_mask & (1 << modid))
|
|
Packit |
857059 |
log_masks[modid] = sev_mask;
|
|
Packit |
857059 |
else
|
|
Packit |
857059 |
log_masks[modid] = 0;
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// build log_masks based on level and mode
|
|
Packit |
857059 |
void
|
|
Packit |
857059 |
cs_log_set_log_masks(uint32_t level, int mode, uint32_t log_masks[VIEO_LAST_MOD_ID+1])
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
uint32_t mod_mask;
|
|
Packit |
857059 |
uint32_t sev_mask;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
cs_log_translate_level(level, mode, &mod_mask, &sev_mask);
|
|
Packit |
857059 |
cs_log_set_mods_mask(mod_mask, sev_mask, log_masks);
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// set a single mask based on module name
|
|
Packit |
857059 |
void
|
|
Packit |
857059 |
cs_log_set_log_mask(const char* mod, uint32_t mask, uint32_t log_masks[VIEO_LAST_MOD_ID+1])
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
uint32_t modid = cs_log_get_module_id(mod);
|
|
Packit |
857059 |
if (modid)
|
|
Packit |
857059 |
log_masks[modid] = mask | VS_LOG_FATAL;
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// get a single mask based on module name
|
|
Packit |
857059 |
uint32_t
|
|
Packit |
857059 |
cs_log_get_log_mask(const char* mod, uint32_t log_masks[VIEO_LAST_MOD_ID+1])
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
uint32_t modid = cs_log_get_module_id(mod);
|
|
Packit |
857059 |
if (modid)
|
|
Packit |
857059 |
return log_masks[modid];
|
|
Packit |
857059 |
else
|
|
Packit |
857059 |
return 0;
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
//
|
|
Packit |
857059 |
// Convert a status code to a string
|
|
Packit |
857059 |
//
|
|
Packit |
857059 |
char *
|
|
Packit |
857059 |
cs_convert_status (Status_t status) {
|
|
Packit |
857059 |
switch (status) {
|
|
Packit |
857059 |
case VSTATUS_OK: return "0: OK";
|
|
Packit |
857059 |
case VSTATUS_BAD: return "1: Bad status";
|
|
Packit |
857059 |
case VSTATUS_MISMATCH: return "2: Key mismatch";
|
|
Packit |
857059 |
case VSTATUS_DROP: return "3: Drop this packet";
|
|
Packit |
857059 |
case VSTATUS_FORWARD: return "4: Forward this packet";
|
|
Packit |
857059 |
case VSTATUS_ILLPARM: return "5: Invalid parameter";
|
|
Packit |
857059 |
case VSTATUS_NOMEM: return "6: Out of memory";
|
|
Packit |
857059 |
case VSTATUS_TIMEOUT: return "7: Timeout";
|
|
Packit |
857059 |
case VSTATUS_NOPRIV: return "8: Not enough privs";
|
|
Packit |
857059 |
case VSTATUS_BUSY: return "9: Busy";
|
|
Packit |
857059 |
case VSTATUS_NODEV: return "10: No object available";
|
|
Packit |
857059 |
case VSTATUS_NXIO: return "11: Invalid object";
|
|
Packit |
857059 |
case VSTATUS_PARTIAL_PRIVS: return "12: Some privs are avail";
|
|
Packit |
857059 |
case VSTATUS_CONDITIONAL: return "13: Conditionally good";
|
|
Packit |
857059 |
case VSTATUS_NOPORT: return "14: Port does not exist";
|
|
Packit |
857059 |
case VSTATUS_INVALID_HANDL: return "15: invalid handle";
|
|
Packit |
857059 |
case VSTATUS_INVALID_TYPE: return "16: invalid type (ib_attr)";
|
|
Packit |
857059 |
case VSTATUS_INVALID_ATTR: return "17: invalid attribute (ib_attr)";
|
|
Packit |
857059 |
case VSTATUS_INVALID_PROTO: return "18: invalid protocol (RC,RD,UC,UD,RAW)";
|
|
Packit |
857059 |
case VSTATUS_INVALID_STATE: return "19: invalid CEP or QP state";
|
|
Packit |
857059 |
case VSTATUS_NOT_FOUND: return "20: Not found";
|
|
Packit |
857059 |
case VSTATUS_TOO_LARGE: return "21: Too large";
|
|
Packit |
857059 |
case VSTATUS_CONNECT_FAILED: return "22: Connect failed";
|
|
Packit |
857059 |
case VSTATUS_CONNECT_GONE: return "23: connection gone";
|
|
Packit |
857059 |
case VSTATUS_NOHANDLE: return "24: Out of handles";
|
|
Packit |
857059 |
case VSTATUS_NOCONNECT: return "25: Out of connections";
|
|
Packit |
857059 |
case VSTATUS_EIO: return "26: IO error";
|
|
Packit |
857059 |
case VSTATUS_KNOWN: return "27: Already known";
|
|
Packit |
857059 |
case VSTATUS_NOT_MASTER: return "28: Not the Master SM";
|
|
Packit |
857059 |
case VSTATUS_INVALID_MAD: return "29: invalid MAD";
|
|
Packit |
857059 |
case VSTATUS_QFULL: return "30: Queue full";
|
|
Packit |
857059 |
case VSTATUS_QEMPTY: return "31: Queue empty";
|
|
Packit |
857059 |
case VSTATUS_AGAIN: return "32: Data not available";
|
|
Packit |
857059 |
case VSTATUS_BAD_VERSION: return "33: Version mismatch";
|
|
Packit |
857059 |
case VSTATUS_UNINIT: return "34: Not initialized";
|
|
Packit |
857059 |
case VSTATUS_NOT_OWNER: return "35: Not resource owner";
|
|
Packit |
857059 |
case VSTATUS_INVALID_MADT: return "36: Malformed Mai_t";
|
|
Packit |
857059 |
case VSTATUS_INVALID_METHOD: return "37: MAD method invalid";
|
|
Packit |
857059 |
case VSTATUS_INVALID_HOPCNT: return "38: HopCount not in [0..63]";
|
|
Packit |
857059 |
case VSTATUS_MISSING_ADDRINFO: return "39: Mai_t has no addrInfo";
|
|
Packit |
857059 |
case VSTATUS_INVALID_LID: return "40: Invalid LID";
|
|
Packit |
857059 |
case VSTATUS_INVALID_ADDRINFO: return "41: addrInfo invalid in Mai_t";
|
|
Packit |
857059 |
case VSTATUS_MISSING_QP: return "42: QP not in Mai_t";
|
|
Packit |
857059 |
case VSTATUS_INVALID_QP: return "43: MAI QP not SMI(0) or GSI(1)";
|
|
Packit |
857059 |
case VSTATUS_INVALID_MCLASS: return "48: Reserved mclass used";
|
|
Packit |
857059 |
case VSTATUS_INVALID_QKEY: return "51: BTH qkey field for GSI invalid";
|
|
Packit |
857059 |
case VSTATUS_INVALID_MADLEN: return "53: MAD datasize invalid/not determinable";
|
|
Packit |
857059 |
case VSTATUS_NOSUPPORT: return "55: Function not supported";
|
|
Packit |
857059 |
case VSTATUS_IGNORE: return "56: Ignorable condition";
|
|
Packit |
857059 |
case VSTATUS_INUSE: return "57: Resource already in use";
|
|
Packit |
857059 |
case VSTATUS_INVALID_PORT: return "58: Port invalid";
|
|
Packit |
857059 |
case VSTATUS_ATOMICS_NOTSUP: return "59: Atomic operations not supported";
|
|
Packit |
857059 |
case VSTATUS_INVALID_ACCESSCTL: return "60: Access definition invalid";
|
|
Packit |
857059 |
case VSTATUS_INVALID_ADDR_HANDLE: return "61: Address handle invalid";
|
|
Packit |
857059 |
case VSTATUS_INVALID_ADDR: return "62: Address invalid";
|
|
Packit |
857059 |
case VSTATUS_INVALID_ARG: return "63: Arguments invalid";
|
|
Packit |
857059 |
case VSTATUS_INVALID_HCA_HANDLE: return "64: CA handle invalid";
|
|
Packit |
857059 |
case VSTATUS_INVALID_KEY_VALUE: return "65: Partition key invalid";
|
|
Packit |
857059 |
case VSTATUS_INVALID_MEMADDR: return "66: Memory not accessible";
|
|
Packit |
857059 |
case VSTATUS_INVALID_MEMSIZE: return "67: Memory region size not supported";
|
|
Packit |
857059 |
case VSTATUS_INVALID_MIGSTATE: return "68: Migration state requested invalid";
|
|
Packit |
857059 |
case VSTATUS_INVALID_NOTICE: return "69: Completion notice requested invalid";
|
|
Packit |
857059 |
case VSTATUS_INVALID_OFFSET: return "70: Offset specified invalid";
|
|
Packit |
857059 |
case VSTATUS_INVALID_PD: return "71: Protection domain invalid";
|
|
Packit |
857059 |
case VSTATUS_INVALID_PKEY_IDX: return "72: Partition key index invalid";
|
|
Packit |
857059 |
case VSTATUS_INVALID_RC_TIMER: return "73: Reliable connection timeout invalid";
|
|
Packit |
857059 |
case VSTATUS_INVALID_RDD: return "74: Reliable datagram domain invalid";
|
|
Packit |
857059 |
case VSTATUS_INVALID_REQUEST: return "75: Request is invalid for this hardware";
|
|
Packit |
857059 |
case VSTATUS_INVALID_RNR_CNT: return "76: Receiver not ready count invalid";
|
|
Packit |
857059 |
case VSTATUS_INVALID_RNR_TIMER: return "77: Receiver not ready timer invalid";
|
|
Packit |
857059 |
case VSTATUS_INVALID_TRANSPORT: return "78: Transport type invalid or not supported";
|
|
Packit |
857059 |
case VSTATUS_INVALID_WORKREQ: return "79: Work request invalid";
|
|
Packit |
857059 |
case VSTATUS_MCAST_NOTSUP: return "80: Multicast not supported";
|
|
Packit |
857059 |
case VSTATUS_MCGRP_QPEXCEEDED: return "81: Too many QPs in multicast group";
|
|
Packit |
857059 |
case VSTATUS_MEMRGN_NOTSUP: return "82: Memory regions not supported";
|
|
Packit |
857059 |
case VSTATUS_MEMWIN_NOTSUP: return "83: Memory windows not supported";
|
|
Packit |
857059 |
case VSTATUS_NORESOURCE: return "84: Out of hardware resources";
|
|
Packit |
857059 |
case VSTATUS_OPERATION_DENIED: return "85: Operation cannot be performed";
|
|
Packit |
857059 |
case VSTATUS_QP_BUSY: return "86: Queue Pair is already opened";
|
|
Packit |
857059 |
case VSTATUS_RDMA_NOTSUP: return "87: Remote DMA operations not supported";
|
|
Packit |
857059 |
case VSTATUS_RD_NOTSUP: return "88: Reliable Datagram transport not supported";
|
|
Packit |
857059 |
case VSTATUS_SG_TOOMANY: return "89: To many scatter/gather entries";
|
|
Packit |
857059 |
case VSTATUS_WQ_RESIZE_NOTSUP: return "90: Work queue resizing not supported";
|
|
Packit |
857059 |
case VSTATUS_WR_TOOMANY: return "91: Work queue size not supported";
|
|
Packit |
857059 |
case VSTATUS_INVALID_NODE: return "92: Node index invalid";
|
|
Packit |
857059 |
case VSTATUS_MAI_INTERNAL: return "93: MAI Internal message";
|
|
Packit |
857059 |
case VSTATUS_MAD_OVERFLOW: return "94: MAD buffer overflow";
|
|
Packit |
857059 |
case VSTATUS_SIGNAL: return "95: Signal received";
|
|
Packit |
857059 |
case VSTATUS_FILTER: return "96: Filter take over notification received";
|
|
Packit |
857059 |
case VSTATUS_EXPIRED: return "98: Time period has expired";
|
|
Packit |
857059 |
case VSTATUS_EVENT_CONSUMED: return "99: Handler consumed event";
|
|
Packit |
857059 |
case VSTATUS_INVALID_PATH: return "100: Path handle invalid";
|
|
Packit |
857059 |
case VSTATUS_INVALID_GID_INDEX: return "101: GID index invalid";
|
|
Packit |
857059 |
case VSTATUS_INVALID_DEVICE: return "102: Device ordinal out of range";
|
|
Packit |
857059 |
case VSTATUS_INVALID_RESOP: return "103: resolver operation invalid";
|
|
Packit |
857059 |
case VSTATUS_INVALID_RESCMD: return "104: resolver command invalid";
|
|
Packit |
857059 |
case VSTATUS_INVALID_ITERATOR: return "105: resolver iterator invalid";
|
|
Packit |
857059 |
case VSTATUS_INVALID_MAGIC: return "106:Incorrect magic number";
|
|
Packit |
857059 |
case VSTATUS_BADPAGESIZE: return "107: invalid memory page size specified";
|
|
Packit |
857059 |
case VSTATUS_UNRECOVERABLE: return "108: unrecoverable error";
|
|
Packit |
857059 |
case VSTATUS_TIMEOUT_LIMIT: return "109: cumulative timeout limit reached";
|
|
Packit |
857059 |
case VSTATUS_ITERATOR_OUT_OF_DATE: return "119: data referred by case updated or deleted.";
|
|
Packit |
857059 |
case VSTATUS_INSUFFICIENT_PERMISSION: return "120: client has insufficient privillages";
|
|
Packit |
857059 |
case VSTATUS_INVALID_CQ_HANDLE: return "126: CQ handle is invalid";
|
|
Packit |
857059 |
case VSTATUS_INVALID_FORMAT: return "127: Data format is invalid";
|
|
Packit |
857059 |
case VSTATUS_REJECT: return "128: Request rejected";
|
|
Packit |
857059 |
case VSTATUS_DONE: return "129: Request done";
|
|
Packit |
857059 |
// a few extra just in case
|
|
Packit |
857059 |
case 130: return "130: Unknown status code";
|
|
Packit |
857059 |
case 131: return "131: Unknown status code";
|
|
Packit |
857059 |
case 132: return "132: Unknown status code";
|
|
Packit |
857059 |
default: return "Unknown status code";
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
|
|
Packit |
857059 |
//
|
|
Packit |
857059 |
// return attribute ID text given the ID
|
|
Packit |
857059 |
//
|
|
Packit |
857059 |
char *cs_getAidName(uint16_t aidClass, uint16_t aid) {
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#define CASE_AID(aid) case aid: return #aid
|
|
Packit |
857059 |
#define CASE_MCLASS_AID(aid) case MCLASS_ATTRIB_ID_##aid: return #aid
|
|
Packit |
857059 |
#define CASE_STL_MCLASS_AID(aid) case STL_MCLASS_ATTRIB_ID_##aid: return #aid
|
|
Packit |
857059 |
#define CASE_STL_SA_AID(aid) case STL_SA_ATTR_##aid: return #aid
|
|
Packit |
857059 |
#define CASE_STL_PM_AID(aid) case STL_PM_ATTRIB_ID_##aid: return #aid
|
|
Packit |
857059 |
#define CASE_MAD_CV(aid) case MAD_CV_##aid: return "Class " #aid
|
|
Packit |
857059 |
#define CASE_STL_PA_AID(aid) case STL_PA_ATTRID_##aid: return #aid
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// Check common attribute ids first
|
|
Packit |
857059 |
switch (aid) {
|
|
Packit |
857059 |
CASE_MCLASS_AID(RESERVED_0);
|
|
Packit |
857059 |
CASE_MCLASS_AID(CLASS_PORT_INFO);
|
|
Packit |
857059 |
CASE_MCLASS_AID(NOTICE);
|
|
Packit |
857059 |
CASE_MCLASS_AID(INFORM_INFO);
|
|
Packit |
857059 |
default:
|
|
Packit |
857059 |
break;
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
switch (aidClass) {
|
|
Packit |
857059 |
case MAD_CV_SUBN_LR:
|
|
Packit |
857059 |
case MAD_CV_SUBN_DR:
|
|
Packit |
857059 |
switch (aid) {
|
|
Packit |
857059 |
CASE_STL_MCLASS_AID(NODE_DESCRIPTION);
|
|
Packit |
857059 |
CASE_STL_MCLASS_AID(NODE_INFO);
|
|
Packit |
857059 |
CASE_STL_MCLASS_AID(SWITCH_INFO);
|
|
Packit |
857059 |
CASE_STL_MCLASS_AID(PORT_INFO);
|
|
Packit |
857059 |
CASE_STL_MCLASS_AID(PART_TABLE);
|
|
Packit |
857059 |
CASE_STL_MCLASS_AID(SL_SC_MAPPING_TABLE);
|
|
Packit |
857059 |
CASE_STL_MCLASS_AID(VL_ARBITRATION);
|
|
Packit |
857059 |
CASE_STL_MCLASS_AID(LINEAR_FWD_TABLE);
|
|
Packit |
857059 |
CASE_STL_MCLASS_AID(MCAST_FWD_TABLE);
|
|
Packit |
857059 |
CASE_STL_MCLASS_AID(SM_INFO);
|
|
Packit |
857059 |
CASE_STL_MCLASS_AID(LED_INFO);
|
|
Packit |
857059 |
CASE_STL_MCLASS_AID(CABLE_INFO);
|
|
Packit |
857059 |
CASE_STL_MCLASS_AID(AGGREGATE);
|
|
Packit |
857059 |
CASE_STL_MCLASS_AID(SC_SC_MAPPING_TABLE);
|
|
Packit |
857059 |
CASE_STL_MCLASS_AID(SC_SL_MAPPING_TABLE);
|
|
Packit |
857059 |
CASE_STL_MCLASS_AID(SC_VLR_MAPPING_TABLE);
|
|
Packit |
857059 |
CASE_STL_MCLASS_AID(SC_VLT_MAPPING_TABLE);
|
|
Packit |
857059 |
CASE_STL_MCLASS_AID(SC_VLNT_MAPPING_TABLE);
|
|
Packit |
857059 |
CASE_STL_MCLASS_AID(PORT_STATE_INFO);
|
|
Packit |
857059 |
CASE_STL_MCLASS_AID(PORT_GROUP_FWD_TABLE);
|
|
Packit |
857059 |
CASE_STL_MCLASS_AID(PORT_GROUP_TABLE);
|
|
Packit |
857059 |
CASE_STL_MCLASS_AID(BUFFER_CONTROL_TABLE);
|
|
Packit |
857059 |
CASE_STL_MCLASS_AID(CONGESTION_INFO);
|
|
Packit |
857059 |
CASE_STL_MCLASS_AID(SWITCH_CONGESTION_LOG);
|
|
Packit |
857059 |
CASE_STL_MCLASS_AID(SWITCH_CONGESTION_SETTING);
|
|
Packit |
857059 |
CASE_STL_MCLASS_AID(SWITCH_PORT_CONGESTION_SETTING);
|
|
Packit |
857059 |
CASE_STL_MCLASS_AID(HFI_CONGESTION_LOG);
|
|
Packit |
857059 |
CASE_STL_MCLASS_AID(HFI_CONGESTION_SETTING);
|
|
Packit |
857059 |
CASE_STL_MCLASS_AID(HFI_CONGESTION_CONTROL_TABLE);
|
|
Packit |
857059 |
CASE_STL_MCLASS_AID(SC_SC_MULTI_SET);
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// IB AIDs that do not conflict with STL AIDs
|
|
Packit |
857059 |
CASE_MCLASS_AID(GUID_INFO);
|
|
Packit |
857059 |
CASE_MCLASS_AID(VENDOR_DIAG);
|
|
Packit |
857059 |
CASE_MCLASS_AID(PORT_LFT);
|
|
Packit |
857059 |
CASE_MCLASS_AID(PORT_GROUP);
|
|
Packit |
857059 |
CASE_MCLASS_AID(AR_LIDMASK);
|
|
Packit |
857059 |
CASE_MCLASS_AID(COLLECTIVE_NOTICE);
|
|
Packit |
857059 |
CASE_MCLASS_AID(CMLIST);
|
|
Packit |
857059 |
CASE_MCLASS_AID(CFT);
|
|
Packit |
857059 |
|
|
Packit |
857059 |
default:
|
|
Packit |
857059 |
break;
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
case MAD_CV_VENDOR_DBSYNC:
|
|
Packit |
857059 |
switch (aid) {
|
|
Packit |
857059 |
CASE_AID(DBSYNC_AID_SYNC);
|
|
Packit |
857059 |
CASE_AID(DBSYNC_AID_GROUP);
|
|
Packit |
857059 |
CASE_AID(DBSYNC_AID_SERVICE);
|
|
Packit |
857059 |
CASE_AID(DBSYNC_AID_INFORM);
|
|
Packit |
857059 |
CASE_AID(DBSYNC_AID_MCROOT);
|
|
Packit |
857059 |
default:
|
|
Packit |
857059 |
break;
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
case MAD_CV_SUBN_ADM:
|
|
Packit |
857059 |
switch (aid) {
|
|
Packit |
857059 |
CASE_STL_SA_AID(CLASS_PORT_INFO);
|
|
Packit |
857059 |
CASE_STL_SA_AID(NOTICE);
|
|
Packit |
857059 |
CASE_STL_SA_AID(INFORM_INFO);
|
|
Packit |
857059 |
CASE_STL_SA_AID(NODE_RECORD);
|
|
Packit |
857059 |
CASE_STL_SA_AID(PORTINFO_RECORD);
|
|
Packit |
857059 |
CASE_STL_SA_AID(SC_MAPTBL_RECORD);
|
|
Packit |
857059 |
CASE_STL_SA_AID(SWITCHINFO_RECORD);
|
|
Packit |
857059 |
CASE_STL_SA_AID(LINEAR_FWDTBL_RECORD);
|
|
Packit |
857059 |
CASE_STL_SA_AID(MCAST_FWDTBL_RECORD);
|
|
Packit |
857059 |
CASE_STL_SA_AID(SMINFO_RECORD);
|
|
Packit |
857059 |
CASE_STL_SA_AID(LINK_SPD_WDTH_PAIRS_RECORD);
|
|
Packit |
857059 |
CASE_STL_SA_AID(LINK_RECORD);
|
|
Packit |
857059 |
CASE_STL_SA_AID(SERVICE_RECORD);
|
|
Packit |
857059 |
CASE_STL_SA_AID(P_KEY_TABLE_RECORD);
|
|
Packit |
857059 |
CASE_STL_SA_AID(PATH_RECORD);
|
|
Packit |
857059 |
CASE_STL_SA_AID(VLARBTABLE_RECORD);
|
|
Packit |
857059 |
CASE_STL_SA_AID(MCMEMBER_RECORD);
|
|
Packit |
857059 |
CASE_STL_SA_AID(TRACE_RECORD);
|
|
Packit |
857059 |
CASE_STL_SA_AID(MULTIPATH_GID_RECORD);
|
|
Packit |
857059 |
CASE_STL_SA_AID(SERVICEASSOCIATION_RECORD);
|
|
Packit |
857059 |
CASE_STL_SA_AID(INFORM_INFO_RECORD);
|
|
Packit |
857059 |
CASE_STL_SA_AID(SC2SL_MAPTBL_RECORD);
|
|
Packit |
857059 |
CASE_STL_SA_AID(SC2VL_NT_MAPTBL_RECORD);
|
|
Packit |
857059 |
CASE_STL_SA_AID(SC2VL_T_MAPTBL_RECORD);
|
|
Packit |
857059 |
CASE_STL_SA_AID(SC2VL_R_MAPTBL_RECORD);
|
|
Packit |
857059 |
CASE_STL_SA_AID(PGROUP_FWDTBL_RECORD);
|
|
Packit |
857059 |
CASE_STL_SA_AID(MULTIPATH_GUID_RECORD);
|
|
Packit |
857059 |
CASE_STL_SA_AID(MULTIPATH_LID_RECORD);
|
|
Packit |
857059 |
CASE_STL_SA_AID(CABLE_INFO_RECORD);
|
|
Packit |
857059 |
CASE_STL_SA_AID(VF_INFO_RECORD);
|
|
Packit |
857059 |
CASE_STL_SA_AID(PORT_STATE_INFO_RECORD);
|
|
Packit |
857059 |
CASE_STL_SA_AID(PORTGROUP_TABLE_RECORD);
|
|
Packit |
857059 |
CASE_STL_SA_AID(BUFF_CTRL_TAB_RECORD);
|
|
Packit |
857059 |
CASE_STL_SA_AID(FABRICINFO_RECORD);
|
|
Packit |
857059 |
CASE_STL_SA_AID(QUARANTINED_NODE_RECORD);
|
|
Packit |
857059 |
CASE_STL_SA_AID(CONGESTION_INFO_RECORD);
|
|
Packit |
857059 |
CASE_STL_SA_AID(SWITCH_CONG_RECORD);
|
|
Packit |
857059 |
CASE_STL_SA_AID(SWITCH_PORT_CONG_RECORD);
|
|
Packit |
857059 |
CASE_STL_SA_AID(HFI_CONG_RECORD);
|
|
Packit |
857059 |
CASE_STL_SA_AID(HFI_CONG_CTRL_RECORD);
|
|
Packit |
857059 |
CASE_STL_SA_AID(DG_MEMBER_RECORD);
|
|
Packit |
857059 |
CASE_STL_SA_AID(DG_NAME_RECORD);
|
|
Packit |
857059 |
CASE_STL_SA_AID(DT_MEMBER_RECORD);
|
|
Packit |
857059 |
default:
|
|
Packit |
857059 |
break;
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
case MAD_CV_PERF:
|
|
Packit |
857059 |
switch (aid) {
|
|
Packit |
857059 |
CASE_STL_PM_AID(PORT_STATUS);
|
|
Packit |
857059 |
CASE_STL_PM_AID(CLEAR_PORT_STATUS);
|
|
Packit |
857059 |
CASE_STL_PM_AID(DATA_PORT_COUNTERS);
|
|
Packit |
857059 |
CASE_STL_PM_AID(ERROR_PORT_COUNTERS);
|
|
Packit |
857059 |
CASE_STL_PM_AID(ERROR_INFO);
|
|
Packit |
857059 |
default:
|
|
Packit |
857059 |
break;
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
case MAD_CV_VFI_PM:
|
|
Packit |
857059 |
switch (aid) {
|
|
Packit |
857059 |
CASE_STL_PA_AID(GET_GRP_LIST);
|
|
Packit |
857059 |
CASE_STL_PA_AID(GET_GRP_INFO);
|
|
Packit |
857059 |
CASE_STL_PA_AID(GET_GRP_CFG);
|
|
Packit |
857059 |
CASE_STL_PA_AID(GET_PORT_CTRS);
|
|
Packit |
857059 |
CASE_STL_PA_AID(CLR_PORT_CTRS);
|
|
Packit |
857059 |
CASE_STL_PA_AID(CLR_ALL_PORT_CTRS);
|
|
Packit |
857059 |
CASE_STL_PA_AID(GET_PM_CONFIG);
|
|
Packit |
857059 |
CASE_STL_PA_AID(FREEZE_IMAGE);
|
|
Packit |
857059 |
CASE_STL_PA_AID(RELEASE_IMAGE);
|
|
Packit |
857059 |
CASE_STL_PA_AID(RENEW_IMAGE);
|
|
Packit |
857059 |
CASE_STL_PA_AID(GET_FOCUS_PORTS);
|
|
Packit |
857059 |
CASE_STL_PA_AID(GET_IMAGE_INFO);
|
|
Packit |
857059 |
CASE_STL_PA_AID(MOVE_FREEZE_FRAME);
|
|
Packit |
857059 |
CASE_STL_PA_AID(GET_VF_LIST);
|
|
Packit |
857059 |
CASE_STL_PA_AID(GET_VF_INFO);
|
|
Packit |
857059 |
CASE_STL_PA_AID(GET_VF_CONFIG);
|
|
Packit |
857059 |
CASE_STL_PA_AID(GET_VF_PORT_CTRS);
|
|
Packit |
857059 |
CASE_STL_PA_AID(CLR_VF_PORT_CTRS);
|
|
Packit |
857059 |
CASE_STL_PA_AID(GET_VF_FOCUS_PORTS);
|
|
Packit |
857059 |
default:
|
|
Packit |
857059 |
break;
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// Unhandled Classes
|
|
Packit |
857059 |
CASE_MAD_CV(BM);
|
|
Packit |
857059 |
CASE_MAD_CV(DEV_MGT);
|
|
Packit |
857059 |
CASE_MAD_CV(COMM_MGT);
|
|
Packit |
857059 |
CASE_MAD_CV(SNMP);
|
|
Packit |
857059 |
CASE_MAD_CV(VENDOR_CM);
|
|
Packit |
857059 |
CASE_MAD_CV(VENDOR_LOG);
|
|
Packit |
857059 |
CASE_MAD_CV(VENDOR_1);
|
|
Packit |
857059 |
CASE_MAD_CV(APP_0);
|
|
Packit |
857059 |
CASE_MAD_CV(APP_1);
|
|
Packit |
857059 |
CASE_MAD_CV(CC);
|
|
Packit |
857059 |
CASE_MAD_CV(VENDOR_FE);
|
|
Packit |
857059 |
CASE_MAD_CV(VFI_BM);
|
|
Packit |
857059 |
default:
|
|
Packit |
857059 |
break;
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
#undef CASE_AID
|
|
Packit |
857059 |
#undef CASE_MCLASS_AID
|
|
Packit |
857059 |
#undef CASE_STL_MCLASS_AID
|
|
Packit |
857059 |
#undef CASE_STL_SA_AID
|
|
Packit |
857059 |
#undef CASE_STL_PM_AID
|
|
Packit |
857059 |
#undef CASE_MAD_CV
|
|
Packit |
857059 |
#undef CASE_STL_PA_AID
|
|
Packit |
857059 |
return "UNKNOWN";
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
//
|
|
Packit |
857059 |
// return method text representation given the ID
|
|
Packit |
857059 |
//
|
|
Packit |
857059 |
char *cs_getMethodText(uint8_t method) {
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#define CASE_MAD_CM(aid) case MAD_CM_##aid: return #aid
|
|
Packit |
857059 |
#define CASE_SA_CM(aid) case SA_CM_##aid: return #aid
|
|
Packit |
857059 |
#define CASE_FE_MNGR(aid) case FE_MNGR_##aid: return #aid
|
|
Packit |
857059 |
#define CASE_FE_CMD(aid) case FE_CMD_##aid: return #aid
|
|
Packit |
857059 |
#define CASE_FM_CMD(aid) case FM_CMD_##aid: return #aid
|
|
Packit |
857059 |
switch (method) {
|
|
Packit |
857059 |
CASE_MAD_CM(GET);
|
|
Packit |
857059 |
CASE_MAD_CM(SET);
|
|
Packit |
857059 |
CASE_MAD_CM(GET_RESP);
|
|
Packit |
857059 |
CASE_MAD_CM(SEND);
|
|
Packit |
857059 |
CASE_MAD_CM(TRAP);
|
|
Packit |
857059 |
CASE_MAD_CM(REPORT);
|
|
Packit |
857059 |
CASE_MAD_CM(REPORT_RESP);
|
|
Packit |
857059 |
CASE_MAD_CM(TRAP_REPRESS);
|
|
Packit |
857059 |
CASE_MAD_CM(VIEO_REQ);
|
|
Packit |
857059 |
CASE_MAD_CM(VIEO_REP);
|
|
Packit |
857059 |
|
|
Packit |
857059 |
CASE_SA_CM(GETTABLE);
|
|
Packit |
857059 |
CASE_SA_CM(GETTABLE_RESP);
|
|
Packit |
857059 |
CASE_SA_CM(GETTRACETABLE);
|
|
Packit |
857059 |
CASE_SA_CM(GETMULTI);
|
|
Packit |
857059 |
CASE_SA_CM(GETMULTI_RESP);
|
|
Packit |
857059 |
CASE_SA_CM(DELETE);
|
|
Packit |
857059 |
CASE_SA_CM(DELETE_RESP);
|
|
Packit |
857059 |
|
|
Packit |
857059 |
CASE_FE_MNGR(PROBE_CMD);
|
|
Packit |
857059 |
CASE_FE_MNGR(CLOSE_CMD);
|
|
Packit |
857059 |
CASE_FE_CMD(RESP);
|
|
Packit |
857059 |
|
|
Packit |
857059 |
CASE_FM_CMD(SHUTDOWN);
|
|
Packit |
857059 |
default:
|
|
Packit |
857059 |
break;
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
#undef CASE_MAD_CM
|
|
Packit |
857059 |
#undef CASE_SA_CM
|
|
Packit |
857059 |
#undef CASE_FE_MNGR
|
|
Packit |
857059 |
#undef CASE_FE_CMD
|
|
Packit |
857059 |
#undef CASE_FM_CMD
|
|
Packit |
857059 |
return "UNKNOWN";
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
|
|
Packit |
857059 |
/* Computational Utilty Functions */
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// This is the smallest switch we will see in clusters moving forward.
|
|
Packit |
857059 |
// These computations will be slightly high for 36 port switches, but
|
|
Packit |
857059 |
// should be safe and not too far off.
|
|
Packit |
857059 |
// Fat Tree is the most hardware intensive topology, so these will be high
|
|
Packit |
857059 |
// for others. However they could be a hair low for Scalable Unit fat trees
|
|
Packit |
857059 |
#define MIN_SWITCH_PORTS 24
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// assuming a fat tree topology with switches of size MIN_SWITCH_PORTS
|
|
Packit |
857059 |
// compute number of switching tiers in a typical FBB fabric
|
|
Packit |
857059 |
static uint32_t cs_numTiers(uint32_t subnet_size)
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
uint32_t tiers = 1; // minimum we care about
|
|
Packit |
857059 |
while (subnet_size > MIN_SWITCH_PORTS) {
|
|
Packit |
857059 |
tiers++;
|
|
Packit |
857059 |
subnet_size /= (MIN_SWITCH_PORTS/2);
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
return tiers;
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// assuming a fat tree topology with switches of size MIN_SWITCH_PORTS
|
|
Packit |
857059 |
// compute number of switches in a typical FBB fabric
|
|
Packit |
857059 |
uint32_t cs_numSwitches(uint32_t subnet_size)
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
// edge switches (and intermediate tiers)
|
|
Packit |
857059 |
uint32_t edge_sw = (subnet_size + (MIN_SWITCH_PORTS/2)-1)/(MIN_SWITCH_PORTS/2);
|
|
Packit |
857059 |
uint32_t tiers = cs_numTiers(subnet_size);
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// core/spine is half as many switches as edge
|
|
Packit |
857059 |
return (edge_sw * (tiers-1)) + (edge_sw/2);
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// assuming a fat tree topology with switches of size MIN_SWITCH_PORTS
|
|
Packit |
857059 |
// compute number of node records (1 per CA port, 1 per switch)
|
|
Packit |
857059 |
// in a typical FBB fabric
|
|
Packit |
857059 |
uint32_t cs_numNodeRecords(uint32_t subnet_size)
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
return subnet_size + cs_numSwitches(subnet_size);
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// assuming a fat tree topology with switches of size MIN_SWITCH_PORTS
|
|
Packit |
857059 |
// compute number of port records (1 per CA port, 1 per switch port)
|
|
Packit |
857059 |
// in a typical FBB fabric
|
|
Packit |
857059 |
// (this will be slightly high for larger switches since there will
|
|
Packit |
857059 |
// be fewer switches (less switch port 0), less tiers and potentially
|
|
Packit |
857059 |
// fewer ISLs (hence fewer switch ports).
|
|
Packit |
857059 |
uint32_t cs_numPortRecords(uint32_t subnet_size)
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
// +1 is for port 0 of switch chips
|
|
Packit |
857059 |
return subnet_size + cs_numSwitches(subnet_size) * (MIN_SWITCH_PORTS+1);
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// assuming a fat tree topology with switches of size MIN_SWITCH_PORTS
|
|
Packit |
857059 |
// compute number of links records (ISL and CA to Switch)
|
|
Packit |
857059 |
// in a typical FBB fabric
|
|
Packit |
857059 |
uint32_t cs_numLinkRecords(uint32_t subnet_size)
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
// standard switching tiers calculation is a hair too low, so increase
|
|
Packit |
857059 |
// the number of switching tiers to accommodate the number of links records.
|
|
Packit |
857059 |
return (cs_numTiers(subnet_size) + 2)*subnet_size;
|
|
Packit |
857059 |
}
|