Blame libopensm/osm_helper.c

Packit 13e616
/*
Packit 13e616
 * Copyright (c) 2004-2009 Voltaire, Inc. All rights reserved.
Packit 13e616
 * Copyright (c) 2002-2015 Mellanox Technologies LTD. All rights reserved.
Packit 13e616
 * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
Packit 13e616
 * Copyright (c) 2009 HNR Consulting. All rights reserved.
Packit 13e616
 * Copyright (c) 2009 Sun Microsystems, Inc. All rights reserved.
Packit 13e616
 *
Packit 13e616
 * This software is available to you under a choice of one of two
Packit 13e616
 * licenses.  You may choose to be licensed under the terms of the GNU
Packit 13e616
 * General Public License (GPL) Version 2, available from the file
Packit 13e616
 * COPYING in the main directory of this source tree, or the
Packit 13e616
 * OpenIB.org BSD license below:
Packit 13e616
 *
Packit 13e616
 *     Redistribution and use in source and binary forms, with or
Packit 13e616
 *     without modification, are permitted provided that the following
Packit 13e616
 *     conditions are met:
Packit 13e616
 *
Packit 13e616
 *      - Redistributions of source code must retain the above
Packit 13e616
 *        copyright notice, this list of conditions and the following
Packit 13e616
 *        disclaimer.
Packit 13e616
 *
Packit 13e616
 *      - Redistributions in binary form must reproduce the above
Packit 13e616
 *        copyright notice, this list of conditions and the following
Packit 13e616
 *        disclaimer in the documentation and/or other materials
Packit 13e616
 *        provided with the distribution.
Packit 13e616
 *
Packit 13e616
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
Packit 13e616
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
Packit 13e616
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
Packit 13e616
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
Packit 13e616
 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
Packit 13e616
 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
Packit 13e616
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
Packit 13e616
 * SOFTWARE.
Packit 13e616
 *
Packit 13e616
 */
Packit 13e616
Packit 13e616
/*
Packit 13e616
 * Abstract:
Packit 13e616
 *    Implementation of opensm helper functions.
Packit 13e616
 */
Packit 13e616
Packit 13e616
#if HAVE_CONFIG_H
Packit 13e616
#  include <config.h>
Packit 13e616
#endif				/* HAVE_CONFIG_H */
Packit 13e616
Packit 13e616
#include <stdlib.h>
Packit 13e616
#include <stdio.h>
Packit 13e616
#include <string.h>
Packit 13e616
#include <arpa/inet.h>
Packit 13e616
#include <complib/cl_debug.h>
Packit 13e616
#include <iba/ib_types.h>
Packit 13e616
#include <opensm/osm_file_ids.h>
Packit 13e616
#define FILE_ID OSM_FILE_HELPER_C
Packit 13e616
#include <opensm/osm_helper.h>
Packit 13e616
#include <opensm/osm_log.h>
Packit 13e616
Packit 13e616
#define LINE_LENGTH 256
Packit 13e616
Packit 13e616
#define ARR_SIZE(a) (sizeof(a)/sizeof((a)[0]))
Packit 13e616
Packit 13e616
/* we use two tables - one for queries and one for responses */
Packit 13e616
static const char *ib_sa_method_str[] = {
Packit 13e616
	"RESERVED",		/* 0 */
Packit 13e616
	"SubnAdmGet",		/* 1 */
Packit 13e616
	"SubnAdmSet",		/* 2 */
Packit 13e616
	"RESERVED",		/* 3 */
Packit 13e616
	"RESERVED",		/* 4 */
Packit 13e616
	"RESERVED",		/* 5 */
Packit 13e616
	"SubnAdmReport",	/* 6 */
Packit 13e616
	"RESERVED",		/* 7 */
Packit 13e616
	"RESERVED",		/* 8 */
Packit 13e616
	"RESERVED",		/* 9 */
Packit 13e616
	"RESERVED",		/* A */
Packit 13e616
	"RESERVED",		/* B */
Packit 13e616
	"RESERVED",		/* C */
Packit 13e616
	"RESERVED",		/* D */
Packit 13e616
	"RESERVED",		/* E */
Packit 13e616
	"RESERVED",		/* F */
Packit 13e616
	"RESERVED",		/* 10 */
Packit 13e616
	"RESERVED",		/* 11 */
Packit 13e616
	"SubnAdmGetTable",	/* 12 */
Packit 13e616
	"SubnAdmGetTraceTable",	/* 13 */
Packit 13e616
	"SubnAdmGetMulti",	/* 14 */
Packit 13e616
	"SubnAdmDelete",	/* 15 */
Packit 13e616
	"UNKNOWN"		/* 16 */
Packit 13e616
};
Packit 13e616
Packit 13e616
#define OSM_SA_METHOD_STR_UNKNOWN_VAL (ARR_SIZE(ib_sa_method_str) - 1)
Packit 13e616
Packit 13e616
static const char *ib_sa_resp_method_str[] = {
Packit 13e616
	"RESERVED",		/* 80 */
Packit 13e616
	"SubnAdmGetResp",	/* 81 */
Packit 13e616
	"RESERVED (SetResp?)",	/* 82 */
Packit 13e616
	"RESERVED",		/* 83 */
Packit 13e616
	"RESERVED",		/* 84 */
Packit 13e616
	"RESERVED",		/* 85 */
Packit 13e616
	"SubnAdmReportResp",	/* 86 */
Packit 13e616
	"RESERVED",		/* 87 */
Packit 13e616
	"RESERVED",		/* 88 */
Packit 13e616
	"RESERVED",		/* 89 */
Packit 13e616
	"RESERVED",		/* 8A */
Packit 13e616
	"RESERVED",		/* 8B */
Packit 13e616
	"RESERVED",		/* 8C */
Packit 13e616
	"RESERVED",		/* 8D */
Packit 13e616
	"RESERVED",		/* 8E */
Packit 13e616
	"RESERVED",		/* 8F */
Packit 13e616
	"RESERVED",		/* 90 */
Packit 13e616
	"RESERVED",		/* 91 */
Packit 13e616
	"SubnAdmGetTableResp",	/* 92 */
Packit 13e616
	"RESERVED",		/* 93 */
Packit 13e616
	"SubnAdmGetMultiResp",	/* 94 */
Packit 13e616
	"SubnAdmDeleteResp",	/* 95 */
Packit 13e616
	"UNKNOWN"
Packit 13e616
};
Packit 13e616
Packit 13e616
static const char *ib_sm_method_str[] = {
Packit 13e616
	"RESERVED0",		/* 0 */
Packit 13e616
	"SubnGet",		/* 1 */
Packit 13e616
	"SubnSet",		/* 2 */
Packit 13e616
	"RESERVED3",		/* 3 */
Packit 13e616
	"RESERVED4",		/* 4 */
Packit 13e616
	"SubnTrap",		/* 5 */
Packit 13e616
	"RESERVED6",		/* 6 */
Packit 13e616
	"SubnTrapRepress",	/* 7 */
Packit 13e616
	"RESERVED8",		/* 8 */
Packit 13e616
	"RESERVED9",		/* 9 */
Packit 13e616
	"RESERVEDA",		/* A */
Packit 13e616
	"RESERVEDB",		/* B */
Packit 13e616
	"RESERVEDC",		/* C */
Packit 13e616
	"RESERVEDD",		/* D */
Packit 13e616
	"RESERVEDE",		/* E */
Packit 13e616
	"RESERVEDF",		/* F */
Packit 13e616
	"RESERVED10",		/* 10 */
Packit 13e616
	"SubnGetResp",		/* 11 */
Packit 13e616
	"RESERVED12",		/* 12 */
Packit 13e616
	"RESERVED13",		/* 13 */
Packit 13e616
	"RESERVED14",		/* 14 */
Packit 13e616
	"RESERVED15",		/* 15 */
Packit 13e616
	"RESERVED16",		/* 16 */
Packit 13e616
	"RESERVED17",		/* 17 */
Packit 13e616
	"RESERVED18",		/* 18 */
Packit 13e616
	"RESERVED19",		/* 19 */
Packit 13e616
	"RESERVED1A",		/* 1A */
Packit 13e616
	"RESERVED1B",		/* 1B */
Packit 13e616
	"RESERVED1C",		/* 1C */
Packit 13e616
	"RESERVED1D",		/* 1D */
Packit 13e616
	"RESERVED1E",		/* 1E */
Packit 13e616
	"RESERVED1F",		/* 1F */
Packit 13e616
	"UNKNOWN"		/* 20 */
Packit 13e616
};
Packit 13e616
Packit 13e616
#define OSM_SM_METHOD_STR_UNKNOWN_VAL (ARR_SIZE(ib_sm_method_str) - 1)
Packit 13e616
Packit 13e616
static const char *ib_sm_attr_str[] = {
Packit 13e616
	"RESERVED",		/* 0 */
Packit 13e616
	"ClassPortInfo",	/* 1 */
Packit 13e616
	"Notice",		/* 2 */
Packit 13e616
	"InformInfo",		/* 3 */
Packit 13e616
	"RESERVED",		/* 4 */
Packit 13e616
	"RESERVED",		/* 5 */
Packit 13e616
	"RESERVED",		/* 6 */
Packit 13e616
	"RESERVED",		/* 7 */
Packit 13e616
	"RESERVED",		/* 8 */
Packit 13e616
	"RESERVED",		/* 9 */
Packit 13e616
	"RESERVED",		/* A */
Packit 13e616
	"RESERVED",		/* B */
Packit 13e616
	"RESERVED",		/* C */
Packit 13e616
	"RESERVED",		/* D */
Packit 13e616
	"RESERVED",		/* E */
Packit 13e616
	"RESERVED",		/* F */
Packit 13e616
	"NodeDescription",	/* 10 */
Packit 13e616
	"NodeInfo",		/* 11 */
Packit 13e616
	"SwitchInfo",		/* 12 */
Packit 13e616
	"UNKNOWN",		/* 13 */
Packit 13e616
	"GUIDInfo",		/* 14 */
Packit 13e616
	"PortInfo",		/* 15 */
Packit 13e616
	"P_KeyTable",		/* 16 */
Packit 13e616
	"SLtoVLMappingTable",	/* 17 */
Packit 13e616
	"VLArbitrationTable",	/* 18 */
Packit 13e616
	"LinearForwardingTable",	/* 19 */
Packit 13e616
	"RandomForwardingTable",	/* 1A */
Packit 13e616
	"MulticastForwardingTable",	/* 1B */
Packit 13e616
	"UNKNOWN",		/* 1C */
Packit 13e616
	"UNKNOWN",		/* 1D */
Packit 13e616
	"UNKNOWN",		/* 1E */
Packit 13e616
	"UNKNOWN",		/* 1F */
Packit 13e616
	"SMInfo",		/* 20 */
Packit 13e616
	"UNKNOWN"		/* 21 - always highest value */
Packit 13e616
};
Packit 13e616
Packit 13e616
#define OSM_SM_ATTR_STR_UNKNOWN_VAL (ARR_SIZE(ib_sm_attr_str) - 1)
Packit 13e616
Packit 13e616
static const char *ib_sa_attr_str[] = {
Packit 13e616
	"RESERVED",		/* 0 */
Packit 13e616
	"ClassPortInfo",	/* 1 */
Packit 13e616
	"Notice",		/* 2 */
Packit 13e616
	"InformInfo",		/* 3 */
Packit 13e616
	"RESERVED",		/* 4 */
Packit 13e616
	"RESERVED",		/* 5 */
Packit 13e616
	"RESERVED",		/* 6 */
Packit 13e616
	"RESERVED",		/* 7 */
Packit 13e616
	"RESERVED",		/* 8 */
Packit 13e616
	"RESERVED",		/* 9 */
Packit 13e616
	"RESERVED",		/* A */
Packit 13e616
	"RESERVED",		/* B */
Packit 13e616
	"RESERVED",		/* C */
Packit 13e616
	"RESERVED",		/* D */
Packit 13e616
	"RESERVED",		/* E */
Packit 13e616
	"RESERVED",		/* F */
Packit 13e616
	"RESERVED",		/* 10 */
Packit 13e616
	"NodeRecord",		/* 11 */
Packit 13e616
	"PortInfoRecord",	/* 12 */
Packit 13e616
	"SLtoVLMappingTableRecord",	/* 13 */
Packit 13e616
	"SwitchInfoRecord",	/* 14 */
Packit 13e616
	"LinearForwardingTableRecord",	/* 15 */
Packit 13e616
	"RandomForwardingTableRecord",	/* 16 */
Packit 13e616
	"MulticastForwardingTableRecord",	/* 17 */
Packit 13e616
	"SMInfoRecord",		/* 18 */
Packit 13e616
	"RESERVED",		/* 19 */
Packit 13e616
	"RandomForwardingTable",	/* 1A */
Packit 13e616
	"MulticastForwardingTable",	/* 1B */
Packit 13e616
	"UNKNOWN",		/* 1C */
Packit 13e616
	"UNKNOWN",		/* 1D */
Packit 13e616
	"UNKNOWN",		/* 1E */
Packit 13e616
	"UNKNOWN",		/* 1F */
Packit 13e616
	"LinkRecord",		/* 20 */
Packit 13e616
	"UNKNOWN",		/* 21 */
Packit 13e616
	"UNKNOWN",		/* 22 */
Packit 13e616
	"UNKNOWN",		/* 23 */
Packit 13e616
	"UNKNOWN",		/* 24 */
Packit 13e616
	"UNKNOWN",		/* 25 */
Packit 13e616
	"UNKNOWN",		/* 26 */
Packit 13e616
	"UNKNOWN",		/* 27 */
Packit 13e616
	"UNKNOWN",		/* 28 */
Packit 13e616
	"UNKNOWN",		/* 29 */
Packit 13e616
	"UNKNOWN",		/* 2A */
Packit 13e616
	"UNKNOWN",		/* 2B */
Packit 13e616
	"UNKNOWN",		/* 2C */
Packit 13e616
	"UNKNOWN",		/* 2D */
Packit 13e616
	"UNKNOWN",		/* 2E */
Packit 13e616
	"UNKNOWN",		/* 2F */
Packit 13e616
	"GuidInfoRecord",	/* 30 */
Packit 13e616
	"ServiceRecord",	/* 31 */
Packit 13e616
	"UNKNOWN",		/* 32 */
Packit 13e616
	"P_KeyTableRecord",	/* 33 */
Packit 13e616
	"UNKNOWN",		/* 34 */
Packit 13e616
	"PathRecord",		/* 35 */
Packit 13e616
	"VLArbitrationTableRecord",	/* 36 */
Packit 13e616
	"UNKNOWN",		/* 37 */
Packit 13e616
	"MCMemberRecord",	/* 38 */
Packit 13e616
	"TraceRecord",		/* 39 */
Packit 13e616
	"MultiPathRecord",	/* 3A */
Packit 13e616
	"ServiceAssociationRecord",	/* 3B */
Packit 13e616
	"UNKNOWN",		/* 3C */
Packit 13e616
	"UNKNOWN",		/* 3D */
Packit 13e616
	"UNKNOWN",		/* 3E */
Packit 13e616
	"UNKNOWN",		/* 3F */
Packit 13e616
	"UNKNOWN",		/* 40 */
Packit 13e616
	"UNKNOWN",		/* 41 */
Packit 13e616
	"UNKNOWN",		/* 42 */
Packit 13e616
	"UNKNOWN",		/* 43 */
Packit 13e616
	"UNKNOWN",		/* 44 */
Packit 13e616
	"UNKNOWN",		/* 45 */
Packit 13e616
	"UNKNOWN",		/* 46 */
Packit 13e616
	"UNKNOWN",		/* 47 */
Packit 13e616
	"UNKNOWN",		/* 48 */
Packit 13e616
	"UNKNOWN",		/* 49 */
Packit 13e616
	"UNKNOWN",		/* 4A */
Packit 13e616
	"UNKNOWN",		/* 4B */
Packit 13e616
	"UNKNOWN",		/* 4C */
Packit 13e616
	"UNKNOWN",		/* 4D */
Packit 13e616
	"UNKNOWN",		/* 4E */
Packit 13e616
	"UNKNOWN",		/* 4F */
Packit 13e616
	"UNKNOWN",		/* 50 */
Packit 13e616
	"UNKNOWN",		/* 51 */
Packit 13e616
	"UNKNOWN",		/* 52 */
Packit 13e616
	"UNKNOWN",		/* 53 */
Packit 13e616
	"UNKNOWN",		/* 54 */
Packit 13e616
	"UNKNOWN",		/* 55 */
Packit 13e616
	"UNKNOWN",		/* 56 */
Packit 13e616
	"UNKNOWN",		/* 57 */
Packit 13e616
	"UNKNOWN",		/* 58 */
Packit 13e616
	"UNKNOWN",		/* 59 */
Packit 13e616
	"UNKNOWN",		/* 5A */
Packit 13e616
	"UNKNOWN",		/* 5B */
Packit 13e616
	"UNKNOWN",		/* 5C */
Packit 13e616
	"UNKNOWN",		/* 5D */
Packit 13e616
	"UNKNOWN",		/* 5E */
Packit 13e616
	"UNKNOWN",		/* 5F */
Packit 13e616
	"UNKNOWN",		/* 60 */
Packit 13e616
	"UNKNOWN",		/* 61 */
Packit 13e616
	"UNKNOWN",		/* 62 */
Packit 13e616
	"UNKNOWN",		/* 63 */
Packit 13e616
	"UNKNOWN",		/* 64 */
Packit 13e616
	"UNKNOWN",		/* 65 */
Packit 13e616
	"UNKNOWN",		/* 66 */
Packit 13e616
	"UNKNOWN",		/* 67 */
Packit 13e616
	"UNKNOWN",		/* 68 */
Packit 13e616
	"UNKNOWN",		/* 69 */
Packit 13e616
	"UNKNOWN",		/* 6A */
Packit 13e616
	"UNKNOWN",		/* 6B */
Packit 13e616
	"UNKNOWN",		/* 6C */
Packit 13e616
	"UNKNOWN",		/* 6D */
Packit 13e616
	"UNKNOWN",		/* 6E */
Packit 13e616
	"UNKNOWN",		/* 6F */
Packit 13e616
	"UNKNOWN",		/* 70 */
Packit 13e616
	"UNKNOWN",		/* 71 */
Packit 13e616
	"UNKNOWN",		/* 72 */
Packit 13e616
	"UNKNOWN",		/* 73 */
Packit 13e616
	"UNKNOWN",		/* 74 */
Packit 13e616
	"UNKNOWN",		/* 75 */
Packit 13e616
	"UNKNOWN",		/* 76 */
Packit 13e616
	"UNKNOWN",		/* 77 */
Packit 13e616
	"UNKNOWN",		/* 78 */
Packit 13e616
	"UNKNOWN",		/* 79 */
Packit 13e616
	"UNKNOWN",		/* 7A */
Packit 13e616
	"UNKNOWN",		/* 7B */
Packit 13e616
	"UNKNOWN",		/* 7C */
Packit 13e616
	"UNKNOWN",		/* 7D */
Packit 13e616
	"UNKNOWN",		/* 7E */
Packit 13e616
	"UNKNOWN",		/* 7F */
Packit 13e616
	"UNKNOWN",		/* 80 */
Packit 13e616
	"UNKNOWN",		/* 81 */
Packit 13e616
	"UNKNOWN",		/* 82 */
Packit 13e616
	"UNKNOWN",		/* 83 */
Packit 13e616
	"UNKNOWN",		/* 84 */
Packit 13e616
	"UNKNOWN",		/* 85 */
Packit 13e616
	"UNKNOWN",		/* 86 */
Packit 13e616
	"UNKNOWN",		/* 87 */
Packit 13e616
	"UNKNOWN",		/* 88 */
Packit 13e616
	"UNKNOWN",		/* 89 */
Packit 13e616
	"UNKNOWN",		/* 8A */
Packit 13e616
	"UNKNOWN",		/* 8B */
Packit 13e616
	"UNKNOWN",		/* 8C */
Packit 13e616
	"UNKNOWN",		/* 8D */
Packit 13e616
	"UNKNOWN",		/* 8E */
Packit 13e616
	"UNKNOWN",		/* 8F */
Packit 13e616
	"UNKNOWN",		/* 90 */
Packit 13e616
	"UNKNOWN",		/* 91 */
Packit 13e616
	"UNKNOWN",		/* 92 */
Packit 13e616
	"UNKNOWN",		/* 93 */
Packit 13e616
	"UNKNOWN",		/* 94 */
Packit 13e616
	"UNKNOWN",		/* 95 */
Packit 13e616
	"UNKNOWN",		/* 96 */
Packit 13e616
	"UNKNOWN",		/* 97 */
Packit 13e616
	"UNKNOWN",		/* 98 */
Packit 13e616
	"UNKNOWN",		/* 99 */
Packit 13e616
	"UNKNOWN",		/* 9A */
Packit 13e616
	"UNKNOWN",		/* 9B */
Packit 13e616
	"UNKNOWN",		/* 9C */
Packit 13e616
	"UNKNOWN",		/* 9D */
Packit 13e616
	"UNKNOWN",		/* 9E */
Packit 13e616
	"UNKNOWN",		/* 9F */
Packit 13e616
	"UNKNOWN",		/* A0 */
Packit 13e616
	"UNKNOWN",		/* A1 */
Packit 13e616
	"UNKNOWN",		/* A2 */
Packit 13e616
	"UNKNOWN",		/* A3 */
Packit 13e616
	"UNKNOWN",		/* A4 */
Packit 13e616
	"UNKNOWN",		/* A5 */
Packit 13e616
	"UNKNOWN",		/* A6 */
Packit 13e616
	"UNKNOWN",		/* A7 */
Packit 13e616
	"UNKNOWN",		/* A8 */
Packit 13e616
	"UNKNOWN",		/* A9 */
Packit 13e616
	"UNKNOWN",		/* AA */
Packit 13e616
	"UNKNOWN",		/* AB */
Packit 13e616
	"UNKNOWN",		/* AC */
Packit 13e616
	"UNKNOWN",		/* AD */
Packit 13e616
	"UNKNOWN",		/* AE */
Packit 13e616
	"UNKNOWN",		/* AF */
Packit 13e616
	"UNKNOWN",		/* B0 */
Packit 13e616
	"UNKNOWN",		/* B1 */
Packit 13e616
	"UNKNOWN",		/* B2 */
Packit 13e616
	"UNKNOWN",		/* B3 */
Packit 13e616
	"UNKNOWN",		/* B4 */
Packit 13e616
	"UNKNOWN",		/* B5 */
Packit 13e616
	"UNKNOWN",		/* B6 */
Packit 13e616
	"UNKNOWN",		/* B7 */
Packit 13e616
	"UNKNOWN",		/* B8 */
Packit 13e616
	"UNKNOWN",		/* B9 */
Packit 13e616
	"UNKNOWN",		/* BA */
Packit 13e616
	"UNKNOWN",		/* BB */
Packit 13e616
	"UNKNOWN",		/* BC */
Packit 13e616
	"UNKNOWN",		/* BD */
Packit 13e616
	"UNKNOWN",		/* BE */
Packit 13e616
	"UNKNOWN",		/* BF */
Packit 13e616
	"UNKNOWN",		/* C0 */
Packit 13e616
	"UNKNOWN",		/* C1 */
Packit 13e616
	"UNKNOWN",		/* C2 */
Packit 13e616
	"UNKNOWN",		/* C3 */
Packit 13e616
	"UNKNOWN",		/* C4 */
Packit 13e616
	"UNKNOWN",		/* C5 */
Packit 13e616
	"UNKNOWN",		/* C6 */
Packit 13e616
	"UNKNOWN",		/* C7 */
Packit 13e616
	"UNKNOWN",		/* C8 */
Packit 13e616
	"UNKNOWN",		/* C9 */
Packit 13e616
	"UNKNOWN",		/* CA */
Packit 13e616
	"UNKNOWN",		/* CB */
Packit 13e616
	"UNKNOWN",		/* CC */
Packit 13e616
	"UNKNOWN",		/* CD */
Packit 13e616
	"UNKNOWN",		/* CE */
Packit 13e616
	"UNKNOWN",		/* CF */
Packit 13e616
	"UNKNOWN",		/* D0 */
Packit 13e616
	"UNKNOWN",		/* D1 */
Packit 13e616
	"UNKNOWN",		/* D2 */
Packit 13e616
	"UNKNOWN",		/* D3 */
Packit 13e616
	"UNKNOWN",		/* D4 */
Packit 13e616
	"UNKNOWN",		/* D5 */
Packit 13e616
	"UNKNOWN",		/* D6 */
Packit 13e616
	"UNKNOWN",		/* D7 */
Packit 13e616
	"UNKNOWN",		/* D8 */
Packit 13e616
	"UNKNOWN",		/* D9 */
Packit 13e616
	"UNKNOWN",		/* DA */
Packit 13e616
	"UNKNOWN",		/* DB */
Packit 13e616
	"UNKNOWN",		/* DC */
Packit 13e616
	"UNKNOWN",		/* DD */
Packit 13e616
	"UNKNOWN",		/* DE */
Packit 13e616
	"UNKNOWN",		/* DF */
Packit 13e616
	"UNKNOWN",		/* E0 */
Packit 13e616
	"UNKNOWN",		/* E1 */
Packit 13e616
	"UNKNOWN",		/* E2 */
Packit 13e616
	"UNKNOWN",		/* E3 */
Packit 13e616
	"UNKNOWN",		/* E4 */
Packit 13e616
	"UNKNOWN",		/* E5 */
Packit 13e616
	"UNKNOWN",		/* E6 */
Packit 13e616
	"UNKNOWN",		/* E7 */
Packit 13e616
	"UNKNOWN",		/* E8 */
Packit 13e616
	"UNKNOWN",		/* E9 */
Packit 13e616
	"UNKNOWN",		/* EA */
Packit 13e616
	"UNKNOWN",		/* EB */
Packit 13e616
	"UNKNOWN",		/* EC */
Packit 13e616
	"UNKNOWN",		/* ED */
Packit 13e616
	"UNKNOWN",		/* EE */
Packit 13e616
	"UNKNOWN",		/* EF */
Packit 13e616
	"UNKNOWN",		/* F0 */
Packit 13e616
	"UNKNOWN",		/* F1 */
Packit 13e616
	"UNKNOWN",		/* F2 */
Packit 13e616
	"InformInfoRecord",	/* F3 */
Packit 13e616
	"UNKNOWN"		/* F4 - always highest value */
Packit 13e616
};
Packit 13e616
Packit 13e616
#define OSM_SA_ATTR_STR_UNKNOWN_VAL (ARR_SIZE(ib_sa_attr_str) - 1)
Packit 13e616
Packit 13e616
static int ordered_rates[] = {
Packit 13e616
	0, 0,	/*  0, 1 - reserved */
Packit 13e616
	1,	/*  2 - 2.5 Gbps */
Packit 13e616
	3,	/*  3 - 10  Gbps */
Packit 13e616
	6,	/*  4 - 30  Gbps */
Packit 13e616
	2,	/*  5 - 5   Gbps */
Packit 13e616
	5,	/*  6 - 20  Gbps */
Packit 13e616
	9,	/*  7 - 40  Gbps */
Packit 13e616
	10,	/*  8 - 60  Gbps */
Packit 13e616
	13,	/*  9 - 80  Gbps */
Packit 13e616
	14,	/* 10 - 120 Gbps */
Packit 13e616
	4,	/* 11 -  14 Gbps (17 Gbps equiv) */
Packit 13e616
	12,	/* 12 -  56 Gbps (68 Gbps equiv) */
Packit 13e616
	16,	/* 13 - 112 Gbps (136 Gbps equiv) */
Packit 13e616
	17,	/* 14 - 168 Gbps (204 Gbps equiv) */
Packit 13e616
	7,	/* 15 -  25 Gbps (31.25 Gbps equiv) */
Packit 13e616
	15,	/* 16 - 100 Gbps (125 Gbps equiv) */
Packit 13e616
	18,	/* 17 - 200 Gbps (250 Gbps equiv) */
Packit 13e616
	19,	/* 18 - 300 Gbps (375 Gbps equiv) */
Packit 13e616
	8,	/* 19 -  28 Gbps (35 Gbps equiv) */
Packit 13e616
	11,	/* 20 -  50 Gbps (62.5 Gbps equiv) */
Packit 13e616
	20,	/* 21 - 400 Gbps (500 Gbps equiv) */
Packit 13e616
	21,	/* 22 - 600 Gbps (750 Gbps equiv) */
Packit 13e616
};
Packit 13e616
Packit 13e616
int sprint_uint8_arr(char *buf, size_t size,
Packit 13e616
		     const uint8_t * arr, size_t len)
Packit 13e616
{
Packit 13e616
	int n;
Packit 13e616
	unsigned int i;
Packit 13e616
	for (i = 0, n = 0; i < len; i++) {
Packit 13e616
		n += snprintf(buf + n, size - n, "%s%u", i == 0 ? "" : ",",
Packit 13e616
			      arr[i]);
Packit 13e616
		if (n >= size)
Packit 13e616
			break;
Packit 13e616
	}
Packit 13e616
	return n;
Packit 13e616
}
Packit 13e616
Packit 13e616
const char *ib_get_sa_method_str(IN uint8_t method)
Packit 13e616
{
Packit 13e616
	if (method & 0x80) {
Packit 13e616
		method = method & 0x7f;
Packit 13e616
		if (method > OSM_SA_METHOD_STR_UNKNOWN_VAL)
Packit 13e616
			method = OSM_SA_METHOD_STR_UNKNOWN_VAL;
Packit 13e616
		/* it is a response - use the response table */
Packit 13e616
		return ib_sa_resp_method_str[method];
Packit 13e616
	} else {
Packit 13e616
		if (method > OSM_SA_METHOD_STR_UNKNOWN_VAL)
Packit 13e616
			method = OSM_SA_METHOD_STR_UNKNOWN_VAL;
Packit 13e616
		return ib_sa_method_str[method];
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
const char *ib_get_sm_method_str(IN uint8_t method)
Packit 13e616
{
Packit 13e616
	if (method & 0x80)
Packit 13e616
		method = (method & 0x0F) | 0x10;
Packit 13e616
	if (method > OSM_SM_METHOD_STR_UNKNOWN_VAL)
Packit 13e616
		method = OSM_SM_METHOD_STR_UNKNOWN_VAL;
Packit 13e616
	return ib_sm_method_str[method];
Packit 13e616
}
Packit 13e616
Packit 13e616
const char *ib_get_sm_attr_str(IN ib_net16_t attr)
Packit 13e616
{
Packit 13e616
	uint16_t host_attr = cl_ntoh16(attr);
Packit 13e616
Packit 13e616
	if (attr == IB_MAD_ATTR_MLNX_EXTENDED_PORT_INFO)
Packit 13e616
		return "MLNXExtendedPortInfo";
Packit 13e616
Packit 13e616
	if (host_attr > OSM_SM_ATTR_STR_UNKNOWN_VAL)
Packit 13e616
		host_attr = OSM_SM_ATTR_STR_UNKNOWN_VAL;
Packit 13e616
Packit 13e616
	return ib_sm_attr_str[host_attr];
Packit 13e616
}
Packit 13e616
Packit 13e616
const char *ib_get_sa_attr_str(IN ib_net16_t attr)
Packit 13e616
{
Packit 13e616
	uint16_t host_attr = cl_ntoh16(attr);
Packit 13e616
Packit 13e616
	if (host_attr > OSM_SA_ATTR_STR_UNKNOWN_VAL)
Packit 13e616
		host_attr = OSM_SA_ATTR_STR_UNKNOWN_VAL;
Packit 13e616
Packit 13e616
	return ib_sa_attr_str[host_attr];
Packit 13e616
}
Packit 13e616
Packit 13e616
const char *ib_get_trap_str(ib_net16_t trap_num)
Packit 13e616
{
Packit 13e616
	switch (cl_ntoh16(trap_num)) {
Packit 13e616
	case SM_GID_IN_SERVICE_TRAP:	/* 64 */
Packit 13e616
		return "GID in service";
Packit 13e616
	case SM_GID_OUT_OF_SERVICE_TRAP: /* 65 */
Packit 13e616
		return "GID out of service";
Packit 13e616
	case SM_MGID_CREATED_TRAP:	/* 66 */
Packit 13e616
		return "New mcast group created";
Packit 13e616
	case SM_MGID_DESTROYED_TRAP:	/* 67 */
Packit 13e616
		return "Mcast group deleted";
Packit 13e616
	case SM_UNPATH_TRAP:		/* 68 */
Packit 13e616
		return "UnPath, Path no longer valid";
Packit 13e616
	case SM_REPATH_TRAP:		/* 69 */
Packit 13e616
		return "RePath, Path recomputed";
Packit 13e616
	case SM_LINK_STATE_CHANGED_TRAP: /* 128 */
Packit 13e616
		return "Link state change";
Packit 13e616
	case SM_LINK_INTEGRITY_THRESHOLD_TRAP: /* 129 */
Packit 13e616
		return "Local Link integrity threshold reached";
Packit 13e616
	case SM_BUFFER_OVERRUN_THRESHOLD_TRAP: /* 130 */
Packit 13e616
		return "Excessive Buffer Overrun Threshold reached";
Packit 13e616
	case SM_WATCHDOG_TIMER_EXPIRED_TRAP:   /* 131 */
Packit 13e616
		return "Flow Control Update watchdog timer expired";
Packit 13e616
	case SM_LOCAL_CHANGES_TRAP:	/* 144 */
Packit 13e616
		return
Packit 13e616
		    "CapabilityMask, NodeDescription, Link [Width|Speed] Enabled, SM priority changed";
Packit 13e616
	case SM_SYS_IMG_GUID_CHANGED_TRAP: /* 145 */
Packit 13e616
		return "System Image GUID changed";
Packit 13e616
	case SM_BAD_MKEY_TRAP:		/* 256 */
Packit 13e616
		return "Bad M_Key";
Packit 13e616
	case SM_BAD_PKEY_TRAP:		/* 257 */
Packit 13e616
		return "Bad P_Key";
Packit 13e616
	case SM_BAD_QKEY_TRAP:		/* 258 */
Packit 13e616
		return "Bad Q_Key";
Packit 13e616
	case SM_BAD_SWITCH_PKEY_TRAP:	/* 259 */
Packit 13e616
		return "Bad P_Key (switch external port)";
Packit 13e616
	default:
Packit 13e616
		break;
Packit 13e616
	}
Packit 13e616
	return "Unknown";
Packit 13e616
}
Packit 13e616
Packit 13e616
const ib_gid_t ib_zero_gid = { {0} };
Packit 13e616
Packit 13e616
static ib_api_status_t dbg_do_line(IN char **pp_local, IN uint32_t buf_size,
Packit 13e616
				   IN const char *p_prefix_str,
Packit 13e616
				   IN const char *p_new_str,
Packit 13e616
				   IN uint32_t * p_total_len)
Packit 13e616
{
Packit 13e616
	char line[LINE_LENGTH];
Packit 13e616
	uint32_t len;
Packit 13e616
Packit 13e616
	sprintf(line, "%s%s", p_prefix_str, p_new_str);
Packit 13e616
	len = (uint32_t) strlen(line);
Packit 13e616
	*p_total_len += len;
Packit 13e616
	if (*p_total_len + sizeof('\0') > buf_size)
Packit 13e616
		return IB_INSUFFICIENT_MEMORY;
Packit 13e616
Packit 13e616
	strcpy(*pp_local, line);
Packit 13e616
	*pp_local += len;
Packit 13e616
	return IB_SUCCESS;
Packit 13e616
}
Packit 13e616
Packit 13e616
static void dbg_get_capabilities_str(IN char *p_buf, IN uint32_t buf_size,
Packit 13e616
				     IN const char *p_prefix_str,
Packit 13e616
				     IN const ib_port_info_t * p_pi)
Packit 13e616
{
Packit 13e616
	uint32_t total_len = 0;
Packit 13e616
	char *p_local = p_buf;
Packit 13e616
Packit 13e616
	strcpy(p_local, "Capability Mask:\n");
Packit 13e616
	p_local += strlen(p_local);
Packit 13e616
Packit 13e616
	if (p_pi->capability_mask & IB_PORT_CAP_RESV0) {
Packit 13e616
		if (dbg_do_line(&p_local, buf_size, p_prefix_str,
Packit 13e616
				"IB_PORT_CAP_RESV0\n",
Packit 13e616
				&total_len) != IB_SUCCESS)
Packit 13e616
			return;
Packit 13e616
	}
Packit 13e616
	if (p_pi->capability_mask & IB_PORT_CAP_IS_SM) {
Packit 13e616
		if (dbg_do_line(&p_local, buf_size, p_prefix_str,
Packit 13e616
				"IB_PORT_CAP_IS_SM\n",
Packit 13e616
				&total_len) != IB_SUCCESS)
Packit 13e616
			return;
Packit 13e616
	}
Packit 13e616
	if (p_pi->capability_mask & IB_PORT_CAP_HAS_NOTICE) {
Packit 13e616
		if (dbg_do_line(&p_local, buf_size, p_prefix_str,
Packit 13e616
				"IB_PORT_CAP_HAS_NOTICE\n",
Packit 13e616
				&total_len) != IB_SUCCESS)
Packit 13e616
			return;
Packit 13e616
	}
Packit 13e616
	if (p_pi->capability_mask & IB_PORT_CAP_HAS_TRAP) {
Packit 13e616
		if (dbg_do_line(&p_local, buf_size, p_prefix_str,
Packit 13e616
				"IB_PORT_CAP_HAS_TRAP\n",
Packit 13e616
				&total_len) != IB_SUCCESS)
Packit 13e616
			return;
Packit 13e616
	}
Packit 13e616
	if (p_pi->capability_mask & IB_PORT_CAP_HAS_IPD) {
Packit 13e616
		if (dbg_do_line(&p_local, buf_size, p_prefix_str,
Packit 13e616
				"IB_PORT_CAP_HAS_IPD\n",
Packit 13e616
				&total_len) != IB_SUCCESS)
Packit 13e616
			return;
Packit 13e616
	}
Packit 13e616
	if (p_pi->capability_mask & IB_PORT_CAP_HAS_AUTO_MIG) {
Packit 13e616
		if (dbg_do_line(&p_local, buf_size, p_prefix_str,
Packit 13e616
				"IB_PORT_CAP_HAS_AUTO_MIG\n",
Packit 13e616
				&total_len) != IB_SUCCESS)
Packit 13e616
			return;
Packit 13e616
	}
Packit 13e616
	if (p_pi->capability_mask & IB_PORT_CAP_HAS_SL_MAP) {
Packit 13e616
		if (dbg_do_line(&p_local, buf_size, p_prefix_str,
Packit 13e616
				"IB_PORT_CAP_HAS_SL_MAP\n",
Packit 13e616
				&total_len) != IB_SUCCESS)
Packit 13e616
			return;
Packit 13e616
	}
Packit 13e616
	if (p_pi->capability_mask & IB_PORT_CAP_HAS_NV_MKEY) {
Packit 13e616
		if (dbg_do_line(&p_local, buf_size, p_prefix_str,
Packit 13e616
				"IB_PORT_CAP_HAS_NV_MKEY\n",
Packit 13e616
				&total_len) != IB_SUCCESS)
Packit 13e616
			return;
Packit 13e616
	}
Packit 13e616
	if (p_pi->capability_mask & IB_PORT_CAP_HAS_NV_PKEY) {
Packit 13e616
		if (dbg_do_line(&p_local, buf_size, p_prefix_str,
Packit 13e616
				"IB_PORT_CAP_HAS_NV_PKEY\n",
Packit 13e616
				&total_len) != IB_SUCCESS)
Packit 13e616
			return;
Packit 13e616
	}
Packit 13e616
	if (p_pi->capability_mask & IB_PORT_CAP_HAS_LED_INFO) {
Packit 13e616
		if (dbg_do_line(&p_local, buf_size, p_prefix_str,
Packit 13e616
				"IB_PORT_CAP_HAS_LED_INFO\n",
Packit 13e616
				&total_len) != IB_SUCCESS)
Packit 13e616
			return;
Packit 13e616
	}
Packit 13e616
	if (p_pi->capability_mask & IB_PORT_CAP_SM_DISAB) {
Packit 13e616
		if (dbg_do_line(&p_local, buf_size, p_prefix_str,
Packit 13e616
				"IB_PORT_CAP_SM_DISAB\n",
Packit 13e616
				&total_len) != IB_SUCCESS)
Packit 13e616
			return;
Packit 13e616
	}
Packit 13e616
	if (p_pi->capability_mask & IB_PORT_CAP_HAS_SYS_IMG_GUID) {
Packit 13e616
		if (dbg_do_line(&p_local, buf_size, p_prefix_str,
Packit 13e616
				"IB_PORT_CAP_HAS_SYS_IMG_GUID\n",
Packit 13e616
				&total_len) != IB_SUCCESS)
Packit 13e616
			return;
Packit 13e616
	}
Packit 13e616
	if (p_pi->capability_mask & IB_PORT_CAP_HAS_PKEY_SW_EXT_PORT_TRAP) {
Packit 13e616
		if (dbg_do_line(&p_local, buf_size, p_prefix_str,
Packit 13e616
				"IB_PORT_CAP_PKEY_SW_EXT_PORT_TRAP\n",
Packit 13e616
				&total_len) != IB_SUCCESS)
Packit 13e616
			return;
Packit 13e616
	}
Packit 13e616
	if (p_pi->capability_mask & IB_PORT_CAP_HAS_CABLE_INFO) {
Packit 13e616
		if (dbg_do_line(&p_local, buf_size, p_prefix_str,
Packit 13e616
				"IB_PORT_CAP_HAS_CABLE_INFO\n",
Packit 13e616
				&total_len) != IB_SUCCESS)
Packit 13e616
			return;
Packit 13e616
	}
Packit 13e616
	if (p_pi->capability_mask & IB_PORT_CAP_HAS_EXT_SPEEDS) {
Packit 13e616
		if (dbg_do_line(&p_local, buf_size, p_prefix_str,
Packit 13e616
				"IB_PORT_CAP_HAS_EXT_SPEEDS\n",
Packit 13e616
				&total_len) != IB_SUCCESS)
Packit 13e616
			return;
Packit 13e616
	}
Packit 13e616
	if (p_pi->capability_mask & IB_PORT_CAP_HAS_CAP_MASK2) {
Packit 13e616
		if (dbg_do_line(&p_local, buf_size, p_prefix_str,
Packit 13e616
				"IB_PORT_CAP_HAS_CAP_MASK2\n",
Packit 13e616
				&total_len) != IB_SUCCESS)
Packit 13e616
			return;
Packit 13e616
	}
Packit 13e616
	if (p_pi->capability_mask & IB_PORT_CAP_HAS_COM_MGT) {
Packit 13e616
		if (dbg_do_line(&p_local, buf_size, p_prefix_str,
Packit 13e616
				"IB_PORT_CAP_HAS_COM_MGT\n",
Packit 13e616
				&total_len) != IB_SUCCESS)
Packit 13e616
			return;
Packit 13e616
	}
Packit 13e616
	if (p_pi->capability_mask & IB_PORT_CAP_HAS_SNMP) {
Packit 13e616
		if (dbg_do_line(&p_local, buf_size, p_prefix_str,
Packit 13e616
				"IB_PORT_CAP_HAS_SNMP\n",
Packit 13e616
				&total_len) != IB_SUCCESS)
Packit 13e616
			return;
Packit 13e616
	}
Packit 13e616
	if (p_pi->capability_mask & IB_PORT_CAP_REINIT) {
Packit 13e616
		if (dbg_do_line(&p_local, buf_size, p_prefix_str,
Packit 13e616
				"IB_PORT_CAP_REINIT\n",
Packit 13e616
				&total_len) != IB_SUCCESS)
Packit 13e616
			return;
Packit 13e616
	}
Packit 13e616
	if (p_pi->capability_mask & IB_PORT_CAP_HAS_DEV_MGT) {
Packit 13e616
		if (dbg_do_line(&p_local, buf_size, p_prefix_str,
Packit 13e616
				"IB_PORT_CAP_HAS_DEV_MGT\n",
Packit 13e616
				&total_len) != IB_SUCCESS)
Packit 13e616
			return;
Packit 13e616
	}
Packit 13e616
	if (p_pi->capability_mask & IB_PORT_CAP_HAS_VEND_CLS) {
Packit 13e616
		if (dbg_do_line(&p_local, buf_size, p_prefix_str,
Packit 13e616
				"IB_PORT_CAP_HAS_VEND_CLS\n",
Packit 13e616
				&total_len) != IB_SUCCESS)
Packit 13e616
			return;
Packit 13e616
	}
Packit 13e616
	if (p_pi->capability_mask & IB_PORT_CAP_HAS_DR_NTC) {
Packit 13e616
		if (dbg_do_line(&p_local, buf_size, p_prefix_str,
Packit 13e616
				"IB_PORT_CAP_HAS_DR_NTC\n",
Packit 13e616
				&total_len) != IB_SUCCESS)
Packit 13e616
			return;
Packit 13e616
	}
Packit 13e616
	if (p_pi->capability_mask & IB_PORT_CAP_HAS_CAP_NTC) {
Packit 13e616
		if (dbg_do_line(&p_local, buf_size, p_prefix_str,
Packit 13e616
				"IB_PORT_CAP_HAS_CAP_NTC\n",
Packit 13e616
				&total_len) != IB_SUCCESS)
Packit 13e616
			return;
Packit 13e616
	}
Packit 13e616
	if (p_pi->capability_mask & IB_PORT_CAP_HAS_BM) {
Packit 13e616
		if (dbg_do_line(&p_local, buf_size, p_prefix_str,
Packit 13e616
				"IB_PORT_CAP_HAS_BM\n",
Packit 13e616
				&total_len) != IB_SUCCESS)
Packit 13e616
			return;
Packit 13e616
	}
Packit 13e616
	if (p_pi->capability_mask & IB_PORT_CAP_HAS_LINK_RT_LATENCY) {
Packit 13e616
		if (dbg_do_line(&p_local, buf_size, p_prefix_str,
Packit 13e616
				"IB_PORT_CAP_HAS_LINK_RT_LATENCY\n",
Packit 13e616
				&total_len) != IB_SUCCESS)
Packit 13e616
			return;
Packit 13e616
	}
Packit 13e616
	if (p_pi->capability_mask & IB_PORT_CAP_HAS_CLIENT_REREG) {
Packit 13e616
		if (dbg_do_line(&p_local, buf_size, p_prefix_str,
Packit 13e616
				"IB_PORT_CAP_HAS_CLIENT_REREG\n",
Packit 13e616
				&total_len) != IB_SUCCESS)
Packit 13e616
			return;
Packit 13e616
	}
Packit 13e616
	if (p_pi->capability_mask & IB_PORT_CAP_HAS_OTHER_LOCAL_CHANGES_NTC) {
Packit 13e616
		if (dbg_do_line(&p_local, buf_size, p_prefix_str,
Packit 13e616
				"IB_PORT_CAP_HAS_OTHER_LOCAL_CHANGES_NTC\n",
Packit 13e616
				&total_len) != IB_SUCCESS)
Packit 13e616
			return;
Packit 13e616
	}
Packit 13e616
	if (p_pi->capability_mask & IB_PORT_CAP_HAS_LINK_SPEED_WIDTH_PAIRS_TBL) {
Packit 13e616
		if (dbg_do_line(&p_local, buf_size, p_prefix_str,
Packit 13e616
				"IB_PORT_CAP_HAS_LINK_SPEED_WIDTH_PAIRS_TBL\n",
Packit 13e616
				&total_len) != IB_SUCCESS)
Packit 13e616
			return;
Packit 13e616
	}
Packit 13e616
	if (p_pi->capability_mask & IB_PORT_CAP_HAS_VEND_MADS) {
Packit 13e616
		if (dbg_do_line(&p_local, buf_size, p_prefix_str,
Packit 13e616
				"IB_PORT_CAP_HAS_VEND_MADS\n",
Packit 13e616
				&total_len) != IB_SUCCESS)
Packit 13e616
			return;
Packit 13e616
	}
Packit 13e616
	if (p_pi->capability_mask & IB_PORT_CAP_HAS_MCAST_PKEY_TRAP_SUPPRESS) {
Packit 13e616
		if (dbg_do_line(&p_local, buf_size, p_prefix_str,
Packit 13e616
				"IB_PORT_CAP_HAS_MCAST_PKEY_TRAP_SUPPRESS\n",
Packit 13e616
				&total_len) != IB_SUCCESS)
Packit 13e616
			return;
Packit 13e616
	}
Packit 13e616
	if (p_pi->capability_mask & IB_PORT_CAP_HAS_MCAST_FDB_TOP) {
Packit 13e616
		if (dbg_do_line(&p_local, buf_size, p_prefix_str,
Packit 13e616
				"IB_PORT_CAP_HAS_MCAST_FDB_TOP\n",
Packit 13e616
				&total_len) != IB_SUCCESS)
Packit 13e616
			return;
Packit 13e616
	}
Packit 13e616
	if (p_pi->capability_mask & IB_PORT_CAP_HAS_HIER_INFO) {
Packit 13e616
		if (dbg_do_line(&p_local, buf_size, p_prefix_str,
Packit 13e616
				"IB_PORT_CAP_HAS_HIER_INFO\n",
Packit 13e616
				&total_len) != IB_SUCCESS)
Packit 13e616
			return;
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
static void dbg_get_capabilities2_str(IN char *p_buf, IN uint32_t buf_size,
Packit 13e616
				      IN const char *p_prefix_str,
Packit 13e616
				      IN const ib_port_info_t * p_pi)
Packit 13e616
{
Packit 13e616
	uint32_t total_len = 0;
Packit 13e616
	char *p_local = p_buf;
Packit 13e616
Packit 13e616
	strcpy(p_local, "Capability Mask2:\n");
Packit 13e616
	p_local += strlen(p_local);
Packit 13e616
Packit 13e616
	if (p_pi->capability_mask2 & IB_PORT_CAP2_IS_SET_NODE_DESC_SUPPORTED) {
Packit 13e616
		if (dbg_do_line(&p_local, buf_size, p_prefix_str,
Packit 13e616
				"IB_PORT_CAP2_IS_SET_NODE_DESC_SUPPORTED\n",
Packit 13e616
				&total_len) != IB_SUCCESS)
Packit 13e616
			return;
Packit 13e616
	}
Packit 13e616
	if (p_pi->capability_mask2 & IB_PORT_CAP2_IS_PORT_INFO_EXT_SUPPORTED) {
Packit 13e616
		if (dbg_do_line(&p_local, buf_size, p_prefix_str,
Packit 13e616
				"IB_PORT_CAP2_IS_PORT_INFO_EXT_SUPPORTED\n",
Packit 13e616
				&total_len) != IB_SUCCESS)
Packit 13e616
			return;
Packit 13e616
	}
Packit 13e616
	if (p_pi->capability_mask2 & IB_PORT_CAP2_IS_VIRT_SUPPORTED) {
Packit 13e616
		if (dbg_do_line(&p_local, buf_size, p_prefix_str,
Packit 13e616
				"IB_PORT_CAP2_IS_VIRT_SUPPORTED\n",
Packit 13e616
				&total_len) != IB_SUCCESS)
Packit 13e616
			return;
Packit 13e616
	}
Packit 13e616
	if (p_pi->capability_mask2 & IB_PORT_CAP2_IS_SWITCH_PORT_STATE_TBL_SUPP) {
Packit 13e616
		if (dbg_do_line(&p_local, buf_size, p_prefix_str,
Packit 13e616
				"IB_PORT_CAP2_IS_SWITCH_PORT_STATE_TBL_SUPP\n",
Packit 13e616
				&total_len) != IB_SUCCESS)
Packit 13e616
			return;
Packit 13e616
	}
Packit 13e616
	if (p_pi->capability_mask2 & IB_PORT_CAP2_IS_LINK_WIDTH_2X_SUPPORTED) {
Packit 13e616
		if (dbg_do_line(&p_local, buf_size, p_prefix_str,
Packit 13e616
				"IB_PORT_CAP2_IS_LINK_WIDTH_2X_SUPPORTED\n",
Packit 13e616
				&total_len) != IB_SUCCESS)
Packit 13e616
			return;
Packit 13e616
	}
Packit 13e616
	if (p_pi->capability_mask2 & IB_PORT_CAP2_IS_LINK_SPEED_HDR_SUPPORTED) {
Packit 13e616
		if (dbg_do_line(&p_local, buf_size, p_prefix_str,
Packit 13e616
				"IB_PORT_CAP2_IS_LINK_SPEED_HDR_SUPPORTED\n",
Packit 13e616
				&total_len) != IB_SUCCESS)
Packit 13e616
			return;
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
static void osm_dump_port_info_to_buf(IN ib_net64_t node_guid,
Packit 13e616
				      IN ib_net64_t port_guid,
Packit 13e616
				      IN uint8_t port_num,
Packit 13e616
				      IN const ib_port_info_t * p_pi,
Packit 13e616
				      OUT char * buf)
Packit 13e616
{
Packit 13e616
	if (!buf || !p_pi)
Packit 13e616
		return;
Packit 13e616
	else {
Packit 13e616
		sprintf(buf,
Packit 13e616
			"PortInfo dump:\n"
Packit 13e616
			"\t\t\t\tport number..............%u\n"
Packit 13e616
			"\t\t\t\tnode_guid................0x%016" PRIx64 "\n"
Packit 13e616
			"\t\t\t\tport_guid................0x%016" PRIx64 "\n"
Packit 13e616
			"\t\t\t\tm_key....................0x%016" PRIx64 "\n"
Packit 13e616
			"\t\t\t\tsubnet_prefix............0x%016" PRIx64 "\n"
Packit 13e616
			"\t\t\t\tbase_lid.................%u\n"
Packit 13e616
			"\t\t\t\tmaster_sm_base_lid.......%u\n"
Packit 13e616
			"\t\t\t\tcapability_mask..........0x%X\n"
Packit 13e616
			"\t\t\t\tdiag_code................0x%X\n"
Packit 13e616
			"\t\t\t\tm_key_lease_period.......0x%X\n"
Packit 13e616
			"\t\t\t\tlocal_port_num...........%u\n"
Packit 13e616
			"\t\t\t\tlink_width_enabled.......0x%X\n"
Packit 13e616
			"\t\t\t\tlink_width_supported.....0x%X\n"
Packit 13e616
			"\t\t\t\tlink_width_active........0x%X\n"
Packit 13e616
			"\t\t\t\tlink_speed_supported.....0x%X\n"
Packit 13e616
			"\t\t\t\tport_state...............%s\n"
Packit 13e616
			"\t\t\t\tstate_info2..............0x%X\n"
Packit 13e616
			"\t\t\t\tm_key_protect_bits.......0x%X\n"
Packit 13e616
			"\t\t\t\tlmc......................0x%X\n"
Packit 13e616
			"\t\t\t\tlink_speed...............0x%X\n"
Packit 13e616
			"\t\t\t\tmtu_smsl.................0x%X\n"
Packit 13e616
			"\t\t\t\tvl_cap_init_type.........0x%X\n"
Packit 13e616
			"\t\t\t\tvl_high_limit............0x%X\n"
Packit 13e616
			"\t\t\t\tvl_arb_high_cap..........0x%X\n"
Packit 13e616
			"\t\t\t\tvl_arb_low_cap...........0x%X\n"
Packit 13e616
			"\t\t\t\tinit_rep_mtu_cap.........0x%X\n"
Packit 13e616
			"\t\t\t\tvl_stall_life............0x%X\n"
Packit 13e616
			"\t\t\t\tvl_enforce...............0x%X\n"
Packit 13e616
			"\t\t\t\tm_key_violations.........0x%X\n"
Packit 13e616
			"\t\t\t\tp_key_violations.........0x%X\n"
Packit 13e616
			"\t\t\t\tq_key_violations.........0x%X\n"
Packit 13e616
			"\t\t\t\tguid_cap.................0x%X\n"
Packit 13e616
			"\t\t\t\tclient_reregister........0x%X\n"
Packit 13e616
			"\t\t\t\tmcast_pkey_trap_suppr....0x%X\n"
Packit 13e616
			"\t\t\t\tsubnet_timeout...........0x%X\n"
Packit 13e616
			"\t\t\t\tresp_time_value..........0x%X\n"
Packit 13e616
			"\t\t\t\terror_threshold..........0x%X\n"
Packit 13e616
			"\t\t\t\tmax_credit_hint..........0x%X\n"
Packit 13e616
			"\t\t\t\tlink_round_trip_latency..0x%X\n"
Packit 13e616
			"\t\t\t\tcapability_mask2.........0x%X\n"
Packit 13e616
			"\t\t\t\tlink_speed_ext_active....0x%X\n"
Packit 13e616
			"\t\t\t\tlink_speed_ext_supported.0x%X\n"
Packit 13e616
			"\t\t\t\tlink_speed_ext_enabled...0x%X\n",
Packit 13e616
			port_num, cl_ntoh64(node_guid), cl_ntoh64(port_guid),
Packit 13e616
			cl_ntoh64(p_pi->m_key), cl_ntoh64(p_pi->subnet_prefix),
Packit 13e616
			cl_ntoh16(p_pi->base_lid),
Packit 13e616
			cl_ntoh16(p_pi->master_sm_base_lid),
Packit 13e616
			cl_ntoh32(p_pi->capability_mask),
Packit 13e616
			cl_ntoh16(p_pi->diag_code),
Packit 13e616
			cl_ntoh16(p_pi->m_key_lease_period),
Packit 13e616
			p_pi->local_port_num, p_pi->link_width_enabled,
Packit 13e616
			p_pi->link_width_supported, p_pi->link_width_active,
Packit 13e616
			ib_port_info_get_link_speed_sup(p_pi),
Packit 13e616
			ib_get_port_state_str(ib_port_info_get_port_state
Packit 13e616
					      (p_pi)), p_pi->state_info2,
Packit 13e616
			ib_port_info_get_mpb(p_pi), ib_port_info_get_lmc(p_pi),
Packit 13e616
			p_pi->link_speed, p_pi->mtu_smsl, p_pi->vl_cap,
Packit 13e616
			p_pi->vl_high_limit, p_pi->vl_arb_high_cap,
Packit 13e616
			p_pi->vl_arb_low_cap, p_pi->mtu_cap,
Packit 13e616
			p_pi->vl_stall_life, p_pi->vl_enforce,
Packit 13e616
			cl_ntoh16(p_pi->m_key_violations),
Packit 13e616
			cl_ntoh16(p_pi->p_key_violations),
Packit 13e616
			cl_ntoh16(p_pi->q_key_violations), p_pi->guid_cap,
Packit 13e616
			ib_port_info_get_client_rereg(p_pi),
Packit 13e616
			ib_port_info_get_mcast_pkey_trap_suppress(p_pi),
Packit 13e616
			ib_port_info_get_timeout(p_pi),
Packit 13e616
			ib_port_info_get_resp_time_value(p_pi),
Packit 13e616
			p_pi->error_threshold, cl_ntoh16(p_pi->max_credit_hint),
Packit 13e616
			cl_ntoh32(p_pi->link_rt_latency),
Packit 13e616
			cl_ntoh16(p_pi->capability_mask2),
Packit 13e616
			ib_port_info_get_link_speed_ext_active(p_pi),
Packit 13e616
			ib_port_info_get_link_speed_ext_sup(p_pi),
Packit 13e616
			p_pi->link_speed_ext_enabled);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_port_info(IN osm_log_t * p_log, IN ib_net64_t node_guid,
Packit 13e616
			IN ib_net64_t port_guid, IN uint8_t port_num,
Packit 13e616
			IN const ib_port_info_t * p_pi,
Packit 13e616
			IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active(p_log, log_level)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_port_info_to_buf(node_guid, port_guid,
Packit 13e616
					  port_num, p_pi, buf);
Packit 13e616
Packit 13e616
		osm_log(p_log, log_level, "%s", buf);
Packit 13e616
Packit 13e616
		/*  show the capabilities masks */
Packit 13e616
		if (p_pi->capability_mask) {
Packit 13e616
			dbg_get_capabilities_str(buf, BUF_SIZE, "\t\t\t\t",
Packit 13e616
						 p_pi);
Packit 13e616
			osm_log(p_log, log_level, "%s", buf);
Packit 13e616
		}
Packit 13e616
		if ((p_pi->capability_mask & IB_PORT_CAP_HAS_CAP_MASK2) &&
Packit 13e616
		    p_pi->capability_mask2) {
Packit 13e616
			dbg_get_capabilities2_str(buf, BUF_SIZE, "\t\t\t\t",
Packit 13e616
						  p_pi);
Packit 13e616
			osm_log(p_log, log_level, "%s", buf);
Packit 13e616
		}
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_port_info_v2(IN osm_log_t * p_log, IN ib_net64_t node_guid,
Packit 13e616
			   IN ib_net64_t port_guid, IN uint8_t port_num,
Packit 13e616
			   IN const ib_port_info_t * p_pi, IN const int file_id,
Packit 13e616
			   IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active_v2(p_log, log_level, file_id)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_port_info_to_buf(node_guid, port_guid,
Packit 13e616
					  port_num, p_pi, buf);
Packit 13e616
Packit 13e616
		osm_log_v2(p_log, log_level, file_id, "%s", buf);
Packit 13e616
Packit 13e616
		/*  show the capabilities masks */
Packit 13e616
		if (p_pi->capability_mask) {
Packit 13e616
			dbg_get_capabilities_str(buf, BUF_SIZE, "\t\t\t\t",
Packit 13e616
						 p_pi);
Packit 13e616
			osm_log_v2(p_log, log_level, file_id, "%s", buf);
Packit 13e616
		}
Packit 13e616
		if ((p_pi->capability_mask & IB_PORT_CAP_HAS_CAP_MASK2) &&
Packit 13e616
		    p_pi->capability_mask2) {
Packit 13e616
			dbg_get_capabilities2_str(buf, BUF_SIZE, "\t\t\t\t",
Packit 13e616
						  p_pi);
Packit 13e616
			osm_log(p_log, log_level, "%s", buf);
Packit 13e616
		}
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
static void osm_dump_mlnx_ext_port_info_to_buf(IN ib_net64_t node_guid,
Packit 13e616
					       IN ib_net64_t port_guid, IN uint8_t port_num,
Packit 13e616
					       IN const ib_mlnx_ext_port_info_t * p_pi,
Packit 13e616
					       OUT char * buf)
Packit 13e616
{
Packit 13e616
	if (!buf || !p_pi)
Packit 13e616
		return;
Packit 13e616
	else {
Packit 13e616
		sprintf(buf,
Packit 13e616
                        "MLNX ExtendedPortInfo dump:\n"
Packit 13e616
                        "\t\t\t\tport number..............%u\n"
Packit 13e616
                        "\t\t\t\tnode_guid................0x%016" PRIx64 "\n"
Packit 13e616
                        "\t\t\t\tport_guid................0x%016" PRIx64 "\n"
Packit 13e616
                        "\t\t\t\tStateChangeEnable........0x%X\n"
Packit 13e616
                        "\t\t\t\tLinkSpeedSupported.......0x%X\n"
Packit 13e616
                        "\t\t\t\tLinkSpeedEnabled.........0x%X\n"
Packit 13e616
                        "\t\t\t\tLinkSpeedActive..........0x%X\n",
Packit 13e616
                        port_num, cl_ntoh64(node_guid), cl_ntoh64(port_guid),
Packit 13e616
                        p_pi->state_change_enable, p_pi->link_speed_supported,
Packit 13e616
                        p_pi->link_speed_enabled, p_pi->link_speed_active);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_mlnx_ext_port_info(IN osm_log_t * p_log, IN ib_net64_t node_guid,
Packit 13e616
				 IN ib_net64_t port_guid, IN uint8_t port_num,
Packit 13e616
				 IN const ib_mlnx_ext_port_info_t * p_pi,
Packit 13e616
				 IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active(p_log, log_level)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_mlnx_ext_port_info_to_buf(node_guid, port_guid,
Packit 13e616
						   port_num, p_pi, buf);
Packit 13e616
Packit 13e616
		osm_log(p_log, log_level, "%s", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_mlnx_ext_port_info_v2(IN osm_log_t * p_log, IN ib_net64_t node_guid,
Packit 13e616
				    IN ib_net64_t port_guid, IN uint8_t port_num,
Packit 13e616
				    IN const ib_mlnx_ext_port_info_t * p_pi,
Packit 13e616
				    IN const int file_id, IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
        if (osm_log_is_active_v2(p_log, log_level, file_id)) {
Packit 13e616
                char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_mlnx_ext_port_info_to_buf(node_guid, port_guid,
Packit 13e616
						   port_num, p_pi, buf);
Packit 13e616
Packit 13e616
		osm_log_v2(p_log, log_level, file_id, "%s", buf);
Packit 13e616
        }
Packit 13e616
}
Packit 13e616
Packit 13e616
static void osm_dump_portinfo_record_to_buf(IN const ib_portinfo_record_t * p_pir,
Packit 13e616
					    OUT char * buf)
Packit 13e616
{
Packit 13e616
	if (!buf || !p_pir)
Packit 13e616
		return;
Packit 13e616
	else {
Packit 13e616
		const ib_port_info_t *p_pi = &p_pir->port_info;
Packit 13e616
Packit 13e616
		sprintf(buf,
Packit 13e616
			"PortInfo Record dump:\n"
Packit 13e616
			"\t\t\t\tRID\n"
Packit 13e616
			"\t\t\t\tEndPortLid...............%u\n"
Packit 13e616
			"\t\t\t\tPortNum..................%u\n"
Packit 13e616
			"\t\t\t\tOptions..................0x%X\n"
Packit 13e616
			"\t\t\t\tPortInfo dump:\n"
Packit 13e616
			"\t\t\t\tm_key....................0x%016" PRIx64 "\n"
Packit 13e616
			"\t\t\t\tsubnet_prefix............0x%016" PRIx64 "\n"
Packit 13e616
			"\t\t\t\tbase_lid.................%u\n"
Packit 13e616
			"\t\t\t\tmaster_sm_base_lid.......%u\n"
Packit 13e616
			"\t\t\t\tcapability_mask..........0x%X\n"
Packit 13e616
			"\t\t\t\tdiag_code................0x%X\n"
Packit 13e616
			"\t\t\t\tm_key_lease_period.......0x%X\n"
Packit 13e616
			"\t\t\t\tlocal_port_num...........%u\n"
Packit 13e616
			"\t\t\t\tlink_width_enabled.......0x%X\n"
Packit 13e616
			"\t\t\t\tlink_width_supported.....0x%X\n"
Packit 13e616
			"\t\t\t\tlink_width_active........0x%X\n"
Packit 13e616
			"\t\t\t\tlink_speed_supported.....0x%X\n"
Packit 13e616
			"\t\t\t\tport_state...............%s\n"
Packit 13e616
			"\t\t\t\tstate_info2..............0x%X\n"
Packit 13e616
			"\t\t\t\tm_key_protect_bits.......0x%X\n"
Packit 13e616
			"\t\t\t\tlmc......................0x%X\n"
Packit 13e616
			"\t\t\t\tlink_speed...............0x%X\n"
Packit 13e616
			"\t\t\t\tmtu_smsl.................0x%X\n"
Packit 13e616
			"\t\t\t\tvl_cap_init_type.........0x%X\n"
Packit 13e616
			"\t\t\t\tvl_high_limit............0x%X\n"
Packit 13e616
			"\t\t\t\tvl_arb_high_cap..........0x%X\n"
Packit 13e616
			"\t\t\t\tvl_arb_low_cap...........0x%X\n"
Packit 13e616
			"\t\t\t\tinit_rep_mtu_cap.........0x%X\n"
Packit 13e616
			"\t\t\t\tvl_stall_life............0x%X\n"
Packit 13e616
			"\t\t\t\tvl_enforce...............0x%X\n"
Packit 13e616
			"\t\t\t\tm_key_violations.........0x%X\n"
Packit 13e616
			"\t\t\t\tp_key_violations.........0x%X\n"
Packit 13e616
			"\t\t\t\tq_key_violations.........0x%X\n"
Packit 13e616
			"\t\t\t\tguid_cap.................0x%X\n"
Packit 13e616
			"\t\t\t\tclient_reregister........0x%X\n"
Packit 13e616
			"\t\t\t\tmcast_pkey_trap_suppr....0x%X\n"
Packit 13e616
			"\t\t\t\tsubnet_timeout...........0x%X\n"
Packit 13e616
			"\t\t\t\tresp_time_value..........0x%X\n"
Packit 13e616
			"\t\t\t\terror_threshold..........0x%X\n"
Packit 13e616
			"\t\t\t\tmax_credit_hint..........0x%X\n"
Packit 13e616
			"\t\t\t\tlink_round_trip_latency..0x%X\n"
Packit 13e616
			"\t\t\t\tcapability_mask2.........0x%X\n"
Packit 13e616
			"\t\t\t\tlink_speed_ext_active....0x%X\n"
Packit 13e616
			"\t\t\t\tlink_speed_ext_supported.0x%X\n"
Packit 13e616
			"\t\t\t\tlink_speed_ext_enabled...0x%X\n",
Packit 13e616
			cl_ntoh16(p_pir->lid), p_pir->port_num, p_pir->options,
Packit 13e616
			cl_ntoh64(p_pi->m_key), cl_ntoh64(p_pi->subnet_prefix),
Packit 13e616
			cl_ntoh16(p_pi->base_lid),
Packit 13e616
			cl_ntoh16(p_pi->master_sm_base_lid),
Packit 13e616
			cl_ntoh32(p_pi->capability_mask),
Packit 13e616
			cl_ntoh16(p_pi->diag_code),
Packit 13e616
			cl_ntoh16(p_pi->m_key_lease_period),
Packit 13e616
			p_pi->local_port_num, p_pi->link_width_enabled,
Packit 13e616
			p_pi->link_width_supported, p_pi->link_width_active,
Packit 13e616
			ib_port_info_get_link_speed_sup(p_pi),
Packit 13e616
			ib_get_port_state_str(ib_port_info_get_port_state
Packit 13e616
					      (p_pi)), p_pi->state_info2,
Packit 13e616
			ib_port_info_get_mpb(p_pi), ib_port_info_get_lmc(p_pi),
Packit 13e616
			p_pi->link_speed, p_pi->mtu_smsl, p_pi->vl_cap,
Packit 13e616
			p_pi->vl_high_limit, p_pi->vl_arb_high_cap,
Packit 13e616
			p_pi->vl_arb_low_cap, p_pi->mtu_cap,
Packit 13e616
			p_pi->vl_stall_life, p_pi->vl_enforce,
Packit 13e616
			cl_ntoh16(p_pi->m_key_violations),
Packit 13e616
			cl_ntoh16(p_pi->p_key_violations),
Packit 13e616
			cl_ntoh16(p_pi->q_key_violations), p_pi->guid_cap,
Packit 13e616
			ib_port_info_get_client_rereg(p_pi),
Packit 13e616
			ib_port_info_get_mcast_pkey_trap_suppress(p_pi),
Packit 13e616
			ib_port_info_get_timeout(p_pi),
Packit 13e616
			ib_port_info_get_resp_time_value(p_pi),
Packit 13e616
			p_pi->error_threshold, cl_ntoh16(p_pi->max_credit_hint),
Packit 13e616
			cl_ntoh32(p_pi->link_rt_latency),
Packit 13e616
			cl_ntoh16(p_pi->capability_mask2),
Packit 13e616
			ib_port_info_get_link_speed_ext_active(p_pi),
Packit 13e616
			ib_port_info_get_link_speed_ext_sup(p_pi),
Packit 13e616
			p_pi->link_speed_ext_enabled);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_portinfo_record(IN osm_log_t * p_log,
Packit 13e616
			      IN const ib_portinfo_record_t * p_pir,
Packit 13e616
			      IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active(p_log, log_level)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
		const ib_port_info_t *p_pi = &p_pir->port_info;
Packit 13e616
Packit 13e616
		osm_dump_portinfo_record_to_buf(p_pir, buf);
Packit 13e616
Packit 13e616
		osm_log(p_log, log_level, "%s", buf);
Packit 13e616
Packit 13e616
		/*  show the capabilities masks */
Packit 13e616
		if (p_pi->capability_mask) {
Packit 13e616
			dbg_get_capabilities_str(buf, BUF_SIZE, "\t\t\t\t",
Packit 13e616
						 p_pi);
Packit 13e616
			osm_log(p_log, log_level, "%s", buf);
Packit 13e616
		}
Packit 13e616
		if ((p_pi->capability_mask & IB_PORT_CAP_HAS_CAP_MASK2) &&
Packit 13e616
		    p_pi->capability_mask2) {
Packit 13e616
			dbg_get_capabilities2_str(buf, BUF_SIZE, "\t\t\t\t",
Packit 13e616
						  p_pi);
Packit 13e616
			osm_log(p_log, log_level, "%s", buf);
Packit 13e616
		}
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_portinfo_record_v2(IN osm_log_t * p_log,
Packit 13e616
				 IN const ib_portinfo_record_t * p_pir,
Packit 13e616
				 IN const int file_id,
Packit 13e616
				 IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active_v2(p_log, log_level, file_id)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
		const ib_port_info_t *p_pi = &p_pir->port_info;
Packit 13e616
Packit 13e616
		osm_dump_portinfo_record_to_buf(p_pir, buf);
Packit 13e616
Packit 13e616
		osm_log_v2(p_log, log_level, file_id, "%s", buf);
Packit 13e616
Packit 13e616
		/*  show the capabilities masks */
Packit 13e616
		if (p_pi->capability_mask) {
Packit 13e616
			dbg_get_capabilities_str(buf, BUF_SIZE, "\t\t\t\t",
Packit 13e616
						 p_pi);
Packit 13e616
			osm_log_v2(p_log, log_level, file_id, "%s", buf);
Packit 13e616
		}
Packit 13e616
		if ((p_pi->capability_mask & IB_PORT_CAP_HAS_CAP_MASK2) &&
Packit 13e616
		    p_pi->capability_mask2) {
Packit 13e616
			dbg_get_capabilities2_str(buf, BUF_SIZE, "\t\t\t\t",
Packit 13e616
						  p_pi);
Packit 13e616
			osm_log(p_log, log_level, "%s", buf);
Packit 13e616
		}
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
static void osm_dump_guid_info_to_buf(IN ib_net64_t node_guid,
Packit 13e616
				      IN ib_net64_t port_guid,
Packit 13e616
				      IN uint8_t block_num,
Packit 13e616
				      IN const ib_guid_info_t * p_gi,
Packit 13e616
				      OUT char * buf)
Packit 13e616
{
Packit 13e616
	if (!buf || !p_gi)
Packit 13e616
		return;
Packit 13e616
	else {
Packit 13e616
		sprintf(buf,
Packit 13e616
			"GUIDInfo dump:\n"
Packit 13e616
			"\t\t\t\tblock number............%u\n"
Packit 13e616
			"\t\t\t\tnode_guid...............0x%016" PRIx64 "\n"
Packit 13e616
			"\t\t\t\tport_guid...............0x%016" PRIx64 "\n"
Packit 13e616
			"\t\t\t\tGUID 0..................0x%016" PRIx64 "\n"
Packit 13e616
			"\t\t\t\tGUID 1..................0x%016" PRIx64 "\n"
Packit 13e616
			"\t\t\t\tGUID 2..................0x%016" PRIx64 "\n"
Packit 13e616
			"\t\t\t\tGUID 3..................0x%016" PRIx64 "\n"
Packit 13e616
			"\t\t\t\tGUID 4..................0x%016" PRIx64 "\n"
Packit 13e616
			"\t\t\t\tGUID 5..................0x%016" PRIx64 "\n"
Packit 13e616
			"\t\t\t\tGUID 6..................0x%016" PRIx64 "\n"
Packit 13e616
			"\t\t\t\tGUID 7..................0x%016" PRIx64 "\n",
Packit 13e616
			block_num, cl_ntoh64(node_guid), cl_ntoh64(port_guid),
Packit 13e616
			cl_ntoh64(p_gi->guid[0]), cl_ntoh64(p_gi->guid[1]),
Packit 13e616
			cl_ntoh64(p_gi->guid[2]), cl_ntoh64(p_gi->guid[3]),
Packit 13e616
			cl_ntoh64(p_gi->guid[4]), cl_ntoh64(p_gi->guid[5]),
Packit 13e616
			cl_ntoh64(p_gi->guid[6]), cl_ntoh64(p_gi->guid[7]));
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_guid_info(IN osm_log_t * p_log, IN ib_net64_t node_guid,
Packit 13e616
			IN ib_net64_t port_guid, IN uint8_t block_num,
Packit 13e616
			IN const ib_guid_info_t * p_gi,
Packit 13e616
			IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active(p_log, log_level)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_guid_info_to_buf(node_guid, port_guid,
Packit 13e616
					  block_num, p_gi, buf);
Packit 13e616
Packit 13e616
		osm_log(p_log, log_level, "%s", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_guid_info_v2(IN osm_log_t * p_log, IN ib_net64_t node_guid,
Packit 13e616
			   IN ib_net64_t port_guid, IN uint8_t block_num,
Packit 13e616
			   IN const ib_guid_info_t * p_gi,
Packit 13e616
			   IN const int file_id,
Packit 13e616
			   IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active_v2(p_log, log_level, file_id)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_guid_info_to_buf(node_guid, port_guid,
Packit 13e616
					  block_num, p_gi, buf);
Packit 13e616
Packit 13e616
		osm_log_v2(p_log, log_level, file_id, "%s", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
static void osm_dump_guidinfo_record_to_buf(IN const ib_guidinfo_record_t * p_gir,
Packit 13e616
					    OUT char * buf)
Packit 13e616
{
Packit 13e616
	if (!buf || !p_gir)
Packit 13e616
		return;
Packit 13e616
	else {
Packit 13e616
		const ib_guid_info_t *p_gi = &p_gir->guid_info;
Packit 13e616
Packit 13e616
		sprintf(buf,
Packit 13e616
			"GUIDInfo Record dump:\n"
Packit 13e616
			"\t\t\t\tRID\n"
Packit 13e616
			"\t\t\t\tLid.....................%u\n"
Packit 13e616
			"\t\t\t\tBlockNum................0x%X\n"
Packit 13e616
			"\t\t\t\tReserved................0x%X\n"
Packit 13e616
			"\t\t\t\tGUIDInfo dump:\n"
Packit 13e616
			"\t\t\t\tReserved................0x%X\n"
Packit 13e616
			"\t\t\t\tGUID 0..................0x%016" PRIx64 "\n"
Packit 13e616
			"\t\t\t\tGUID 1..................0x%016" PRIx64 "\n"
Packit 13e616
			"\t\t\t\tGUID 2..................0x%016" PRIx64 "\n"
Packit 13e616
			"\t\t\t\tGUID 3..................0x%016" PRIx64 "\n"
Packit 13e616
			"\t\t\t\tGUID 4..................0x%016" PRIx64 "\n"
Packit 13e616
			"\t\t\t\tGUID 5..................0x%016" PRIx64 "\n"
Packit 13e616
			"\t\t\t\tGUID 6..................0x%016" PRIx64 "\n"
Packit 13e616
			"\t\t\t\tGUID 7..................0x%016" PRIx64 "\n",
Packit 13e616
			cl_ntoh16(p_gir->lid), p_gir->block_num, p_gir->resv,
Packit 13e616
			cl_ntoh32(p_gir->reserved),
Packit 13e616
			cl_ntoh64(p_gi->guid[0]), cl_ntoh64(p_gi->guid[1]),
Packit 13e616
			cl_ntoh64(p_gi->guid[2]), cl_ntoh64(p_gi->guid[3]),
Packit 13e616
			cl_ntoh64(p_gi->guid[4]), cl_ntoh64(p_gi->guid[5]),
Packit 13e616
			cl_ntoh64(p_gi->guid[6]), cl_ntoh64(p_gi->guid[7]));
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
void osm_dump_guidinfo_record(IN osm_log_t * p_log,
Packit 13e616
			      IN const ib_guidinfo_record_t * p_gir,
Packit 13e616
			      IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active(p_log, log_level)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_guidinfo_record_to_buf(p_gir, buf);
Packit 13e616
Packit 13e616
		osm_log(p_log, log_level, "%s", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_guidinfo_record_v2(IN osm_log_t * p_log,
Packit 13e616
				 IN const ib_guidinfo_record_t * p_gir,
Packit 13e616
				 IN const int file_id,
Packit 13e616
				 IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active_v2(p_log, log_level, file_id)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_guidinfo_record_to_buf(p_gir, buf);
Packit 13e616
Packit 13e616
		osm_log_v2(p_log, log_level, file_id, "%s", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
static void osm_dump_node_info_to_buf(IN const ib_node_info_t * p_ni,
Packit 13e616
				      OUT char * buf)
Packit 13e616
{
Packit 13e616
	if (!buf || !p_ni)
Packit 13e616
		return;
Packit 13e616
	else {
Packit 13e616
		sprintf(buf,
Packit 13e616
			"NodeInfo dump:\n"
Packit 13e616
			"\t\t\t\tbase_version............0x%X\n"
Packit 13e616
			"\t\t\t\tclass_version...........0x%X\n"
Packit 13e616
			"\t\t\t\tnode_type...............%s\n"
Packit 13e616
			"\t\t\t\tnum_ports...............%u\n"
Packit 13e616
			"\t\t\t\tsys_guid................0x%016" PRIx64 "\n"
Packit 13e616
			"\t\t\t\tnode_guid...............0x%016" PRIx64 "\n"
Packit 13e616
			"\t\t\t\tport_guid...............0x%016" PRIx64 "\n"
Packit 13e616
			"\t\t\t\tpartition_cap...........0x%X\n"
Packit 13e616
			"\t\t\t\tdevice_id...............0x%X\n"
Packit 13e616
			"\t\t\t\trevision................0x%X\n"
Packit 13e616
			"\t\t\t\tport_num................%u\n"
Packit 13e616
			"\t\t\t\tvendor_id...............0x%X\n",
Packit 13e616
			p_ni->base_version, p_ni->class_version,
Packit 13e616
			ib_get_node_type_str(p_ni->node_type), p_ni->num_ports,
Packit 13e616
			cl_ntoh64(p_ni->sys_guid), cl_ntoh64(p_ni->node_guid),
Packit 13e616
			cl_ntoh64(p_ni->port_guid),
Packit 13e616
			cl_ntoh16(p_ni->partition_cap),
Packit 13e616
			cl_ntoh16(p_ni->device_id), cl_ntoh32(p_ni->revision),
Packit 13e616
			ib_node_info_get_local_port_num(p_ni),
Packit 13e616
			cl_ntoh32(ib_node_info_get_vendor_id(p_ni)));
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_node_info(IN osm_log_t * p_log, IN const ib_node_info_t * p_ni,
Packit 13e616
			IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active(p_log, log_level)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_node_info_to_buf(p_ni, buf);
Packit 13e616
Packit 13e616
		osm_log(p_log, log_level, "%s", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_node_info_v2(IN osm_log_t * p_log, IN const ib_node_info_t * p_ni,
Packit 13e616
			   IN const int file_id, IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active_v2(p_log, log_level, file_id)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_node_info_to_buf(p_ni, buf);
Packit 13e616
Packit 13e616
		osm_log_v2(p_log, log_level, file_id, "%s", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
static void osm_dump_node_record_to_buf(IN const ib_node_record_t * p_nr,
Packit 13e616
					OUT char * buf)
Packit 13e616
{
Packit 13e616
	if (!buf || !p_nr)
Packit 13e616
		return;
Packit 13e616
	else {
Packit 13e616
		char desc[sizeof(p_nr->node_desc.description) + 1];
Packit 13e616
		const ib_node_info_t *p_ni = &p_nr->node_info;
Packit 13e616
Packit 13e616
		memcpy(desc, p_nr->node_desc.description,
Packit 13e616
		       sizeof(p_nr->node_desc.description));
Packit 13e616
		desc[sizeof(desc) - 1] = '\0';
Packit 13e616
		sprintf(buf,
Packit 13e616
			"Node Record dump:\n"
Packit 13e616
			"\t\t\t\tRID\n"
Packit 13e616
			"\t\t\t\tLid.....................%u\n"
Packit 13e616
			"\t\t\t\tReserved................0x%X\n"
Packit 13e616
			"\t\t\t\tNodeInfo dump:\n"
Packit 13e616
			"\t\t\t\tbase_version............0x%X\n"
Packit 13e616
			"\t\t\t\tclass_version...........0x%X\n"
Packit 13e616
			"\t\t\t\tnode_type...............%s\n"
Packit 13e616
			"\t\t\t\tnum_ports...............%u\n"
Packit 13e616
			"\t\t\t\tsys_guid................0x%016" PRIx64 "\n"
Packit 13e616
			"\t\t\t\tnode_guid...............0x%016" PRIx64 "\n"
Packit 13e616
			"\t\t\t\tport_guid...............0x%016" PRIx64 "\n"
Packit 13e616
			"\t\t\t\tpartition_cap...........0x%X\n"
Packit 13e616
			"\t\t\t\tdevice_id...............0x%X\n"
Packit 13e616
			"\t\t\t\trevision................0x%X\n"
Packit 13e616
			"\t\t\t\tport_num................%u\n"
Packit 13e616
			"\t\t\t\tvendor_id...............0x%X\n"
Packit 13e616
			"\t\t\t\tNodeDescription\n"
Packit 13e616
			"\t\t\t\t%s\n",
Packit 13e616
			cl_ntoh16(p_nr->lid), cl_ntoh16(p_nr->resv),
Packit 13e616
			p_ni->base_version, p_ni->class_version,
Packit 13e616
			ib_get_node_type_str(p_ni->node_type), p_ni->num_ports,
Packit 13e616
			cl_ntoh64(p_ni->sys_guid), cl_ntoh64(p_ni->node_guid),
Packit 13e616
			cl_ntoh64(p_ni->port_guid),
Packit 13e616
			cl_ntoh16(p_ni->partition_cap),
Packit 13e616
			cl_ntoh16(p_ni->device_id), cl_ntoh32(p_ni->revision),
Packit 13e616
			ib_node_info_get_local_port_num(p_ni),
Packit 13e616
			cl_ntoh32(ib_node_info_get_vendor_id(p_ni)), desc);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_node_record(IN osm_log_t * p_log,
Packit 13e616
			  IN const ib_node_record_t * p_nr,
Packit 13e616
			  IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active(p_log, log_level)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_node_record_to_buf(p_nr, buf);
Packit 13e616
Packit 13e616
		osm_log(p_log, log_level, "%s", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_node_record_v2(IN osm_log_t * p_log,
Packit 13e616
			     IN const ib_node_record_t * p_nr,
Packit 13e616
			     IN const int file_id,
Packit 13e616
			     IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active_v2(p_log, log_level, file_id)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_node_record_to_buf(p_nr, buf);
Packit 13e616
Packit 13e616
		osm_log_v2(p_log, log_level, file_id, "%s", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
static void osm_dump_path_record_to_buf(IN const ib_path_rec_t * p_pr,
Packit 13e616
					OUT char * buf)
Packit 13e616
{
Packit 13e616
	if (!buf || !p_pr)
Packit 13e616
		return;
Packit 13e616
	else {
Packit 13e616
		char gid_str[INET6_ADDRSTRLEN];
Packit 13e616
		char gid_str2[INET6_ADDRSTRLEN];
Packit 13e616
Packit 13e616
		sprintf(buf,
Packit 13e616
			"PathRecord dump:\n"
Packit 13e616
			"\t\t\t\tservice_id..............0x%016" PRIx64 "\n"
Packit 13e616
			"\t\t\t\tdgid....................%s\n"
Packit 13e616
			"\t\t\t\tsgid....................%s\n"
Packit 13e616
			"\t\t\t\tdlid....................%u\n"
Packit 13e616
			"\t\t\t\tslid....................%u\n"
Packit 13e616
			"\t\t\t\thop_flow_raw............0x%X\n"
Packit 13e616
			"\t\t\t\ttclass..................0x%X\n"
Packit 13e616
			"\t\t\t\tnum_path_revers.........0x%X\n"
Packit 13e616
			"\t\t\t\tpkey....................0x%X\n"
Packit 13e616
			"\t\t\t\tqos_class...............0x%X\n"
Packit 13e616
			"\t\t\t\tsl......................0x%X\n"
Packit 13e616
			"\t\t\t\tmtu.....................0x%X\n"
Packit 13e616
			"\t\t\t\trate....................0x%X\n"
Packit 13e616
			"\t\t\t\tpkt_life................0x%X\n"
Packit 13e616
			"\t\t\t\tpreference..............0x%X\n"
Packit 13e616
			"\t\t\t\tresv2...................0x%02X%02X%02X%02X%02X%02X\n",
Packit 13e616
			cl_ntoh64(p_pr->service_id),
Packit 13e616
			inet_ntop(AF_INET6, p_pr->dgid.raw, gid_str,
Packit 13e616
				  sizeof gid_str),
Packit 13e616
			inet_ntop(AF_INET6, p_pr->sgid.raw, gid_str2,
Packit 13e616
				  sizeof gid_str2),
Packit 13e616
			cl_ntoh16(p_pr->dlid), cl_ntoh16(p_pr->slid),
Packit 13e616
			cl_ntoh32(p_pr->hop_flow_raw), p_pr->tclass,
Packit 13e616
			p_pr->num_path, cl_ntoh16(p_pr->pkey),
Packit 13e616
			ib_path_rec_qos_class(p_pr), ib_path_rec_sl(p_pr),
Packit 13e616
			p_pr->mtu, p_pr->rate, p_pr->pkt_life, p_pr->preference,
Packit 13e616
			p_pr->resv2[0], p_pr->resv2[1], p_pr->resv2[2],
Packit 13e616
			p_pr->resv2[3], p_pr->resv2[4], p_pr->resv2[5]);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_path_record(IN osm_log_t * p_log, IN const ib_path_rec_t * p_pr,
Packit 13e616
			  IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active(p_log, log_level)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_path_record_to_buf(p_pr, buf);
Packit 13e616
Packit 13e616
		osm_log(p_log, log_level, "%s", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_path_record_v2(IN osm_log_t * p_log, IN const ib_path_rec_t * p_pr,
Packit 13e616
			     IN const int file_id, IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active_v2(p_log, log_level, file_id)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_path_record_to_buf(p_pr, buf);
Packit 13e616
Packit 13e616
		osm_log_v2(p_log, log_level, file_id, "%s", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
static void osm_dump_multipath_record_to_buf(IN const ib_multipath_rec_t * p_mpr,
Packit 13e616
					     OUT char * buf)
Packit 13e616
{
Packit 13e616
	if (!buf || !p_mpr)
Packit 13e616
		return;
Packit 13e616
	else {
Packit 13e616
		char gid_str[INET6_ADDRSTRLEN];
Packit 13e616
		char buf_line[1024];
Packit 13e616
		ib_gid_t const *p_gid = p_mpr->gids;
Packit 13e616
		int i, n = 0;
Packit 13e616
Packit 13e616
		if (p_mpr->sgid_count) {
Packit 13e616
			for (i = 0; i < p_mpr->sgid_count; i++) {
Packit 13e616
				n += sprintf(buf_line + n,
Packit 13e616
					     "\t\t\t\tsgid%02d.................."
Packit 13e616
					     "%s\n", i + 1,
Packit 13e616
					     inet_ntop(AF_INET6, p_gid->raw,
Packit 13e616
						       gid_str,
Packit 13e616
						       sizeof gid_str));
Packit 13e616
				p_gid++;
Packit 13e616
			}
Packit 13e616
		}
Packit 13e616
		if (p_mpr->dgid_count) {
Packit 13e616
			for (i = 0; i < p_mpr->dgid_count; i++) {
Packit 13e616
				n += sprintf(buf_line + n,
Packit 13e616
					     "\t\t\t\tdgid%02d.................."
Packit 13e616
					     "%s\n", i + 1,
Packit 13e616
					     inet_ntop(AF_INET6, p_gid->raw,
Packit 13e616
						       gid_str,
Packit 13e616
						       sizeof gid_str));
Packit 13e616
				p_gid++;
Packit 13e616
			}
Packit 13e616
		}
Packit 13e616
		sprintf(buf,
Packit 13e616
			"MultiPath Record dump:\n"
Packit 13e616
			"\t\t\t\thop_flow_raw............0x%X\n"
Packit 13e616
			"\t\t\t\ttclass..................0x%X\n"
Packit 13e616
			"\t\t\t\tnum_path_revers.........0x%X\n"
Packit 13e616
			"\t\t\t\tpkey....................0x%X\n"
Packit 13e616
			"\t\t\t\tqos_class...............0x%X\n"
Packit 13e616
			"\t\t\t\tsl......................0x%X\n"
Packit 13e616
			"\t\t\t\tmtu.....................0x%X\n"
Packit 13e616
			"\t\t\t\trate....................0x%X\n"
Packit 13e616
			"\t\t\t\tpkt_life................0x%X\n"
Packit 13e616
			"\t\t\t\tindependence............0x%X\n"
Packit 13e616
			"\t\t\t\tsgid_count..............0x%X\n"
Packit 13e616
			"\t\t\t\tdgid_count..............0x%X\n"
Packit 13e616
			"\t\t\t\tservice_id..............0x%016" PRIx64 "\n"
Packit 13e616
			"%s\n",
Packit 13e616
			cl_ntoh32(p_mpr->hop_flow_raw), p_mpr->tclass,
Packit 13e616
			p_mpr->num_path, cl_ntoh16(p_mpr->pkey),
Packit 13e616
			ib_multipath_rec_qos_class(p_mpr),
Packit 13e616
			ib_multipath_rec_sl(p_mpr), p_mpr->mtu, p_mpr->rate,
Packit 13e616
			p_mpr->pkt_life, p_mpr->independence,
Packit 13e616
			p_mpr->sgid_count, p_mpr->dgid_count,
Packit 13e616
			cl_ntoh64(ib_multipath_rec_service_id(p_mpr)),
Packit 13e616
			buf_line);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_multipath_record(IN osm_log_t * p_log,
Packit 13e616
			       IN const ib_multipath_rec_t * p_mpr,
Packit 13e616
			       IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active(p_log, log_level)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_multipath_record_to_buf(p_mpr, buf);
Packit 13e616
Packit 13e616
		osm_log(p_log, log_level, "%s", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_multipath_record_v2(IN osm_log_t * p_log,
Packit 13e616
				  IN const ib_multipath_rec_t * p_mpr,
Packit 13e616
				  IN const int file_id,
Packit 13e616
				  IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active_v2(p_log, log_level, file_id)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_multipath_record_to_buf(p_mpr, buf);
Packit 13e616
Packit 13e616
		osm_log_v2(p_log, log_level, file_id, "%s", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
static void osm_dump_mc_record_to_buf(IN const ib_member_rec_t * p_mcmr,
Packit 13e616
				      OUT char * buf)
Packit 13e616
{
Packit 13e616
	if(!buf || !p_mcmr)
Packit 13e616
		return;
Packit 13e616
	else {
Packit 13e616
		char gid_str[INET6_ADDRSTRLEN];
Packit 13e616
		char gid_str2[INET6_ADDRSTRLEN];
Packit 13e616
Packit 13e616
		sprintf(buf,
Packit 13e616
			"MCMember Record dump:\n"
Packit 13e616
			"\t\t\t\tMGID....................%s\n"
Packit 13e616
			"\t\t\t\tPortGid.................%s\n"
Packit 13e616
			"\t\t\t\tqkey....................0x%X\n"
Packit 13e616
			"\t\t\t\tmlid....................0x%X\n"
Packit 13e616
			"\t\t\t\tmtu.....................0x%X\n"
Packit 13e616
			"\t\t\t\tTClass..................0x%X\n"
Packit 13e616
			"\t\t\t\tpkey....................0x%X\n"
Packit 13e616
			"\t\t\t\trate....................0x%X\n"
Packit 13e616
			"\t\t\t\tpkt_life................0x%X\n"
Packit 13e616
			"\t\t\t\tSLFlowLabelHopLimit.....0x%X\n"
Packit 13e616
			"\t\t\t\tScopeState..............0x%X\n"
Packit 13e616
			"\t\t\t\tProxyJoin...............0x%X\n",
Packit 13e616
			inet_ntop(AF_INET6, p_mcmr->mgid.raw, gid_str,
Packit 13e616
				  sizeof gid_str),
Packit 13e616
			inet_ntop(AF_INET6, p_mcmr->port_gid.raw, gid_str2,
Packit 13e616
				  sizeof gid_str2),
Packit 13e616
			cl_ntoh32(p_mcmr->qkey), cl_ntoh16(p_mcmr->mlid),
Packit 13e616
			p_mcmr->mtu, p_mcmr->tclass, cl_ntoh16(p_mcmr->pkey),
Packit 13e616
			p_mcmr->rate, p_mcmr->pkt_life,
Packit 13e616
			cl_ntoh32(p_mcmr->sl_flow_hop),
Packit 13e616
			p_mcmr->scope_state, p_mcmr->proxy_join);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_mc_record(IN osm_log_t * p_log, IN const ib_member_rec_t * p_mcmr,
Packit 13e616
			IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active(p_log, log_level)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_mc_record_to_buf(p_mcmr, buf);
Packit 13e616
Packit 13e616
		osm_log(p_log, log_level, "%s", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_mc_record_v2(IN osm_log_t * p_log, IN const ib_member_rec_t * p_mcmr,
Packit 13e616
			   IN const int file_id, IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active_v2(p_log, log_level, file_id)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_mc_record_to_buf(p_mcmr, buf);
Packit 13e616
Packit 13e616
		osm_log_v2(p_log, log_level, file_id, "%s", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
static void osm_dump_service_record_to_buf(IN const ib_service_record_t * p_sr,
Packit 13e616
					   OUT char * buf)
Packit 13e616
{
Packit 13e616
	if (!buf || !p_sr)
Packit 13e616
		return;
Packit 13e616
	else {
Packit 13e616
		char gid_str[INET6_ADDRSTRLEN];
Packit 13e616
		char buf_service_key[35];
Packit 13e616
		char buf_service_name[65];
Packit 13e616
Packit 13e616
		sprintf(buf_service_key,
Packit 13e616
			"0x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
Packit 13e616
			p_sr->service_key[0], p_sr->service_key[1],
Packit 13e616
			p_sr->service_key[2], p_sr->service_key[3],
Packit 13e616
			p_sr->service_key[4], p_sr->service_key[5],
Packit 13e616
			p_sr->service_key[6], p_sr->service_key[7],
Packit 13e616
			p_sr->service_key[8], p_sr->service_key[9],
Packit 13e616
			p_sr->service_key[10], p_sr->service_key[11],
Packit 13e616
			p_sr->service_key[12], p_sr->service_key[13],
Packit 13e616
			p_sr->service_key[14], p_sr->service_key[15]);
Packit 13e616
		strncpy(buf_service_name, (char *)p_sr->service_name, 64);
Packit 13e616
		buf_service_name[64] = '\0';
Packit 13e616
Packit 13e616
		sprintf(buf,
Packit 13e616
			"Service Record dump:\n"
Packit 13e616
			"\t\t\t\tServiceID...............0x%016" PRIx64 "\n"
Packit 13e616
			"\t\t\t\tServiceGID..............%s\n"
Packit 13e616
			"\t\t\t\tServiceP_Key............0x%X\n"
Packit 13e616
			"\t\t\t\tServiceLease............0x%X\n"
Packit 13e616
			"\t\t\t\tServiceKey..............%s\n"
Packit 13e616
			"\t\t\t\tServiceName.............%s\n"
Packit 13e616
			"\t\t\t\tServiceData8.1..........0x%X\n"
Packit 13e616
			"\t\t\t\tServiceData8.2..........0x%X\n"
Packit 13e616
			"\t\t\t\tServiceData8.3..........0x%X\n"
Packit 13e616
			"\t\t\t\tServiceData8.4..........0x%X\n"
Packit 13e616
			"\t\t\t\tServiceData8.5..........0x%X\n"
Packit 13e616
			"\t\t\t\tServiceData8.6..........0x%X\n"
Packit 13e616
			"\t\t\t\tServiceData8.7..........0x%X\n"
Packit 13e616
			"\t\t\t\tServiceData8.8..........0x%X\n"
Packit 13e616
			"\t\t\t\tServiceData8.9..........0x%X\n"
Packit 13e616
			"\t\t\t\tServiceData8.10.........0x%X\n"
Packit 13e616
			"\t\t\t\tServiceData8.11.........0x%X\n"
Packit 13e616
			"\t\t\t\tServiceData8.12.........0x%X\n"
Packit 13e616
			"\t\t\t\tServiceData8.13.........0x%X\n"
Packit 13e616
			"\t\t\t\tServiceData8.14.........0x%X\n"
Packit 13e616
			"\t\t\t\tServiceData8.15.........0x%X\n"
Packit 13e616
			"\t\t\t\tServiceData8.16.........0x%X\n"
Packit 13e616
			"\t\t\t\tServiceData16.1.........0x%X\n"
Packit 13e616
			"\t\t\t\tServiceData16.2.........0x%X\n"
Packit 13e616
			"\t\t\t\tServiceData16.3.........0x%X\n"
Packit 13e616
			"\t\t\t\tServiceData16.4.........0x%X\n"
Packit 13e616
			"\t\t\t\tServiceData16.5.........0x%X\n"
Packit 13e616
			"\t\t\t\tServiceData16.6.........0x%X\n"
Packit 13e616
			"\t\t\t\tServiceData16.7.........0x%X\n"
Packit 13e616
			"\t\t\t\tServiceData16.8.........0x%X\n"
Packit 13e616
			"\t\t\t\tServiceData32.1.........0x%X\n"
Packit 13e616
			"\t\t\t\tServiceData32.2.........0x%X\n"
Packit 13e616
			"\t\t\t\tServiceData32.3.........0x%X\n"
Packit 13e616
			"\t\t\t\tServiceData32.4.........0x%X\n"
Packit 13e616
			"\t\t\t\tServiceData64.1.........0x%016" PRIx64 "\n"
Packit 13e616
			"\t\t\t\tServiceData64.2.........0x%016" PRIx64 "\n",
Packit 13e616
			cl_ntoh64(p_sr->service_id),
Packit 13e616
			inet_ntop(AF_INET6, p_sr->service_gid.raw, gid_str,
Packit 13e616
				  sizeof gid_str),
Packit 13e616
			cl_ntoh16(p_sr->service_pkey),
Packit 13e616
			cl_ntoh32(p_sr->service_lease),
Packit 13e616
			buf_service_key, buf_service_name,
Packit 13e616
			p_sr->service_data8[0], p_sr->service_data8[1],
Packit 13e616
			p_sr->service_data8[2], p_sr->service_data8[3],
Packit 13e616
			p_sr->service_data8[4], p_sr->service_data8[5],
Packit 13e616
			p_sr->service_data8[6], p_sr->service_data8[7],
Packit 13e616
			p_sr->service_data8[8], p_sr->service_data8[9],
Packit 13e616
			p_sr->service_data8[10], p_sr->service_data8[11],
Packit 13e616
			p_sr->service_data8[12], p_sr->service_data8[13],
Packit 13e616
			p_sr->service_data8[14], p_sr->service_data8[15],
Packit 13e616
			cl_ntoh16(p_sr->service_data16[0]),
Packit 13e616
			cl_ntoh16(p_sr->service_data16[1]),
Packit 13e616
			cl_ntoh16(p_sr->service_data16[2]),
Packit 13e616
			cl_ntoh16(p_sr->service_data16[3]),
Packit 13e616
			cl_ntoh16(p_sr->service_data16[4]),
Packit 13e616
			cl_ntoh16(p_sr->service_data16[5]),
Packit 13e616
			cl_ntoh16(p_sr->service_data16[6]),
Packit 13e616
			cl_ntoh16(p_sr->service_data16[7]),
Packit 13e616
			cl_ntoh32(p_sr->service_data32[0]),
Packit 13e616
			cl_ntoh32(p_sr->service_data32[1]),
Packit 13e616
			cl_ntoh32(p_sr->service_data32[2]),
Packit 13e616
			cl_ntoh32(p_sr->service_data32[3]),
Packit 13e616
			cl_ntoh64(p_sr->service_data64[0]),
Packit 13e616
			cl_ntoh64(p_sr->service_data64[1]));
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_service_record(IN osm_log_t * p_log,
Packit 13e616
			     IN const ib_service_record_t * p_sr,
Packit 13e616
			     IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active(p_log, log_level)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_service_record_to_buf(p_sr, buf);
Packit 13e616
Packit 13e616
		osm_log(p_log, log_level, "%s", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_service_record_v2(IN osm_log_t * p_log,
Packit 13e616
				IN const ib_service_record_t * p_sr,
Packit 13e616
				IN const int file_id,
Packit 13e616
				IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active_v2(p_log, log_level, file_id)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_service_record_to_buf(p_sr, buf);
Packit 13e616
Packit 13e616
		osm_log_v2(p_log, log_level, file_id, "%s", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
static void osm_dump_inform_info_to_buf_generic(IN const ib_inform_info_t * p_ii,
Packit 13e616
						OUT char * buf)
Packit 13e616
{
Packit 13e616
	if (!buf || !p_ii)
Packit 13e616
		return;
Packit 13e616
	else {
Packit 13e616
		uint32_t qpn;
Packit 13e616
		uint8_t resp_time_val;
Packit 13e616
		char gid_str[INET6_ADDRSTRLEN];
Packit 13e616
Packit 13e616
		ib_inform_info_get_qpn_resp_time(p_ii->g_or_v.generic.
Packit 13e616
						 qpn_resp_time_val, &qpn,
Packit 13e616
						 &resp_time_val);
Packit 13e616
		sprintf(buf,
Packit 13e616
			"InformInfo dump:\n"
Packit 13e616
			"\t\t\t\tgid.....................%s\n"
Packit 13e616
			"\t\t\t\tlid_range_begin.........%u\n"
Packit 13e616
			"\t\t\t\tlid_range_end...........%u\n"
Packit 13e616
			"\t\t\t\tis_generic..............0x%X\n"
Packit 13e616
			"\t\t\t\tsubscribe...............0x%X\n"
Packit 13e616
			"\t\t\t\ttrap_type...............0x%X\n"
Packit 13e616
			"\t\t\t\ttrap_num................%u\n"
Packit 13e616
			"\t\t\t\tqpn.....................0x%06X\n"
Packit 13e616
			"\t\t\t\tresp_time_val...........0x%X\n"
Packit 13e616
			"\t\t\t\tnode_type...............0x%06X\n" "",
Packit 13e616
			inet_ntop(AF_INET6, p_ii->gid.raw, gid_str,
Packit 13e616
				  sizeof gid_str),
Packit 13e616
			cl_ntoh16(p_ii->lid_range_begin),
Packit 13e616
			cl_ntoh16(p_ii->lid_range_end),
Packit 13e616
			p_ii->is_generic, p_ii->subscribe,
Packit 13e616
			cl_ntoh16(p_ii->trap_type),
Packit 13e616
			cl_ntoh16(p_ii->g_or_v.generic.trap_num),
Packit 13e616
			cl_ntoh32(qpn), resp_time_val,
Packit 13e616
			cl_ntoh32(ib_inform_info_get_prod_type(p_ii)));
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
static void osm_dump_inform_info_to_buf(IN const ib_inform_info_t * p_ii,
Packit 13e616
					OUT char * buf)
Packit 13e616
{
Packit 13e616
	if (!buf || !p_ii)
Packit 13e616
		return;
Packit 13e616
	else {
Packit 13e616
		uint32_t qpn;
Packit 13e616
		uint8_t resp_time_val;
Packit 13e616
		char gid_str[INET6_ADDRSTRLEN];
Packit 13e616
Packit 13e616
		ib_inform_info_get_qpn_resp_time(p_ii->g_or_v.generic.
Packit 13e616
						 qpn_resp_time_val, &qpn,
Packit 13e616
						 &resp_time_val);
Packit 13e616
		sprintf(buf,
Packit 13e616
			"InformInfo dump:\n"
Packit 13e616
			"\t\t\t\tgid.....................%s\n"
Packit 13e616
			"\t\t\t\tlid_range_begin.........%u\n"
Packit 13e616
			"\t\t\t\tlid_range_end...........%u\n"
Packit 13e616
			"\t\t\t\tis_generic..............0x%X\n"
Packit 13e616
			"\t\t\t\tsubscribe...............0x%X\n"
Packit 13e616
			"\t\t\t\ttrap_type...............0x%X\n"
Packit 13e616
			"\t\t\t\tdev_id..................0x%X\n"
Packit 13e616
			"\t\t\t\tqpn.....................0x%06X\n"
Packit 13e616
			"\t\t\t\tresp_time_val...........0x%X\n"
Packit 13e616
			"\t\t\t\tvendor_id...............0x%06X\n" "",
Packit 13e616
			inet_ntop(AF_INET6, p_ii->gid.raw, gid_str,
Packit 13e616
				  sizeof gid_str),
Packit 13e616
			cl_ntoh16(p_ii->lid_range_begin),
Packit 13e616
			cl_ntoh16(p_ii->lid_range_end),
Packit 13e616
			p_ii->is_generic, p_ii->subscribe,
Packit 13e616
			cl_ntoh16(p_ii->trap_type),
Packit 13e616
			cl_ntoh16(p_ii->g_or_v.vend.dev_id),
Packit 13e616
			cl_ntoh32(qpn), resp_time_val,
Packit 13e616
			cl_ntoh32(ib_inform_info_get_prod_type(p_ii)));
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_inform_info(IN osm_log_t * p_log,
Packit 13e616
			  IN const ib_inform_info_t * p_ii,
Packit 13e616
			  IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active(p_log, log_level)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		if (p_ii->is_generic)
Packit 13e616
			osm_dump_inform_info_to_buf_generic(p_ii, buf);
Packit 13e616
		else
Packit 13e616
			osm_dump_inform_info_to_buf(p_ii, buf);
Packit 13e616
Packit 13e616
		osm_log(p_log, log_level, "%s", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_inform_info_v2(IN osm_log_t * p_log,
Packit 13e616
			     IN const ib_inform_info_t * p_ii,
Packit 13e616
			     IN const int file_id,
Packit 13e616
			     IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active_v2(p_log, log_level, file_id)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		if (p_ii->is_generic)
Packit 13e616
			osm_dump_inform_info_to_buf_generic(p_ii, buf);
Packit 13e616
		else
Packit 13e616
			osm_dump_inform_info_to_buf(p_ii, buf);
Packit 13e616
Packit 13e616
		osm_log_v2(p_log, log_level, file_id, "%s", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
static void osm_dump_inform_info_record_to_buf_generic(IN const ib_inform_info_record_t * p_iir,
Packit 13e616
						       OUT char * buf)
Packit 13e616
{
Packit 13e616
	if (!buf || p_iir)
Packit 13e616
		return;
Packit 13e616
	else {
Packit 13e616
		char gid_str[INET6_ADDRSTRLEN];
Packit 13e616
		char gid_str2[INET6_ADDRSTRLEN];
Packit 13e616
		uint32_t qpn;
Packit 13e616
		uint8_t resp_time_val;
Packit 13e616
Packit 13e616
		ib_inform_info_get_qpn_resp_time(p_iir->inform_info.g_or_v.
Packit 13e616
						 generic.qpn_resp_time_val,
Packit 13e616
						 &qpn, &resp_time_val);
Packit 13e616
		sprintf(buf,
Packit 13e616
			"InformInfo Record dump:\n"
Packit 13e616
			"\t\t\t\tRID\n"
Packit 13e616
			"\t\t\t\tSubscriberGID...........%s\n"
Packit 13e616
			"\t\t\t\tSubscriberEnum..........0x%X\n"
Packit 13e616
			"\t\t\t\tInformInfo dump:\n"
Packit 13e616
			"\t\t\t\tgid.....................%s\n"
Packit 13e616
			"\t\t\t\tlid_range_begin.........%u\n"
Packit 13e616
			"\t\t\t\tlid_range_end...........%u\n"
Packit 13e616
			"\t\t\t\tis_generic..............0x%X\n"
Packit 13e616
			"\t\t\t\tsubscribe...............0x%X\n"
Packit 13e616
			"\t\t\t\ttrap_type...............0x%X\n"
Packit 13e616
			"\t\t\t\ttrap_num................%u\n"
Packit 13e616
			"\t\t\t\tqpn.....................0x%06X\n"
Packit 13e616
			"\t\t\t\tresp_time_val...........0x%X\n"
Packit 13e616
			"\t\t\t\tnode_type...............0x%06X\n" "",
Packit 13e616
			inet_ntop(AF_INET6, p_iir->subscriber_gid.raw,
Packit 13e616
				  gid_str, sizeof gid_str),
Packit 13e616
			cl_ntoh16(p_iir->subscriber_enum),
Packit 13e616
			inet_ntop(AF_INET6, p_iir->inform_info.gid.raw,
Packit 13e616
				  gid_str2, sizeof gid_str2),
Packit 13e616
			cl_ntoh16(p_iir->inform_info.lid_range_begin),
Packit 13e616
			cl_ntoh16(p_iir->inform_info.lid_range_end),
Packit 13e616
			p_iir->inform_info.is_generic,
Packit 13e616
			p_iir->inform_info.subscribe,
Packit 13e616
			cl_ntoh16(p_iir->inform_info.trap_type),
Packit 13e616
			cl_ntoh16(p_iir->inform_info.g_or_v.generic.
Packit 13e616
				  trap_num), cl_ntoh32(qpn),
Packit 13e616
			resp_time_val,
Packit 13e616
			cl_ntoh32(ib_inform_info_get_prod_type
Packit 13e616
				  (&p_iir->inform_info)));
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
static void osm_dump_inform_info_record_to_buf(IN const ib_inform_info_record_t * p_iir,
Packit 13e616
					       OUT char * buf)
Packit 13e616
{
Packit 13e616
	if(!buf || p_iir)
Packit 13e616
		return;
Packit 13e616
	else {
Packit 13e616
		char gid_str[INET6_ADDRSTRLEN];
Packit 13e616
		char gid_str2[INET6_ADDRSTRLEN];
Packit 13e616
		uint32_t qpn;
Packit 13e616
		uint8_t resp_time_val;
Packit 13e616
Packit 13e616
		ib_inform_info_get_qpn_resp_time(p_iir->inform_info.g_or_v.
Packit 13e616
						 generic.qpn_resp_time_val,
Packit 13e616
						 &qpn, &resp_time_val);
Packit 13e616
		sprintf(buf,
Packit 13e616
			"InformInfo Record dump:\n"
Packit 13e616
			"\t\t\t\tRID\n"
Packit 13e616
			"\t\t\t\tSubscriberGID...........%s\n"
Packit 13e616
			"\t\t\t\tSubscriberEnum..........0x%X\n"
Packit 13e616
			"\t\t\t\tInformInfo dump:\n"
Packit 13e616
			"\t\t\t\tgid.....................%s\n"
Packit 13e616
			"\t\t\t\tlid_range_begin.........%u\n"
Packit 13e616
			"\t\t\t\tlid_range_end...........%u\n"
Packit 13e616
			"\t\t\t\tis_generic..............0x%X\n"
Packit 13e616
			"\t\t\t\tsubscribe...............0x%X\n"
Packit 13e616
			"\t\t\t\ttrap_type...............0x%X\n"
Packit 13e616
			"\t\t\t\tdev_id..................0x%X\n"
Packit 13e616
			"\t\t\t\tqpn.....................0x%06X\n"
Packit 13e616
			"\t\t\t\tresp_time_val...........0x%X\n"
Packit 13e616
			"\t\t\t\tvendor_id...............0x%06X\n" "",
Packit 13e616
			inet_ntop(AF_INET6, p_iir->subscriber_gid.raw,
Packit 13e616
				  gid_str, sizeof gid_str),
Packit 13e616
			cl_ntoh16(p_iir->subscriber_enum),
Packit 13e616
			inet_ntop(AF_INET6, p_iir->inform_info.gid.raw,
Packit 13e616
				  gid_str2, sizeof gid_str2),
Packit 13e616
			cl_ntoh16(p_iir->inform_info.lid_range_begin),
Packit 13e616
			cl_ntoh16(p_iir->inform_info.lid_range_end),
Packit 13e616
			p_iir->inform_info.is_generic,
Packit 13e616
			p_iir->inform_info.subscribe,
Packit 13e616
			cl_ntoh16(p_iir->inform_info.trap_type),
Packit 13e616
			cl_ntoh16(p_iir->inform_info.g_or_v.vend.
Packit 13e616
				  dev_id), cl_ntoh32(qpn),
Packit 13e616
			resp_time_val,
Packit 13e616
			cl_ntoh32(ib_inform_info_get_prod_type
Packit 13e616
				  (&p_iir->inform_info)));
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_inform_info_record(IN osm_log_t * p_log,
Packit 13e616
				 IN const ib_inform_info_record_t * p_iir,
Packit 13e616
				 IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active(p_log, log_level)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		if (p_iir->inform_info.is_generic)
Packit 13e616
			osm_dump_inform_info_record_to_buf_generic(p_iir, buf);
Packit 13e616
		else
Packit 13e616
			osm_dump_inform_info_record_to_buf(p_iir, buf);
Packit 13e616
Packit 13e616
		osm_log(p_log, log_level, "%s", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_inform_info_record_v2(IN osm_log_t * p_log,
Packit 13e616
				    IN const ib_inform_info_record_t * p_iir,
Packit 13e616
				    IN const int file_id,
Packit 13e616
				    IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active_v2(p_log, log_level, file_id)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		if (p_iir->inform_info.is_generic)
Packit 13e616
			osm_dump_inform_info_record_to_buf_generic(p_iir, buf);
Packit 13e616
		else
Packit 13e616
			osm_dump_inform_info_record_to_buf(p_iir, buf);
Packit 13e616
Packit 13e616
		osm_log_v2(p_log, log_level, file_id, "%s", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
static void osm_dump_link_record_to_buf(IN const ib_link_record_t * p_lr,
Packit 13e616
					OUT char * buf)
Packit 13e616
{
Packit 13e616
	if (!buf || !p_lr)
Packit 13e616
		return;
Packit 13e616
	else {
Packit 13e616
		sprintf(buf,
Packit 13e616
			"Link Record dump:\n"
Packit 13e616
			"\t\t\t\tfrom_lid................%u\n"
Packit 13e616
			"\t\t\t\tfrom_port_num...........%u\n"
Packit 13e616
			"\t\t\t\tto_port_num.............%u\n"
Packit 13e616
			"\t\t\t\tto_lid..................%u\n",
Packit 13e616
			cl_ntoh16(p_lr->from_lid),
Packit 13e616
			p_lr->from_port_num,
Packit 13e616
			p_lr->to_port_num, cl_ntoh16(p_lr->to_lid));
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_link_record(IN osm_log_t * p_log,
Packit 13e616
			  IN const ib_link_record_t * p_lr,
Packit 13e616
			  IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active(p_log, log_level)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_link_record_to_buf(p_lr, buf);
Packit 13e616
Packit 13e616
		osm_log(p_log, log_level, "%s", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_link_record_v2(IN osm_log_t * p_log,
Packit 13e616
			     IN const ib_link_record_t * p_lr,
Packit 13e616
			     IN const int file_id,
Packit 13e616
			     IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active_v2(p_log, log_level, file_id)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_link_record_to_buf(p_lr, buf);
Packit 13e616
Packit 13e616
		osm_log_v2(p_log, log_level, file_id, "%s", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
static void osm_dump_switch_info_to_buf(IN const ib_switch_info_t * p_si,
Packit 13e616
					OUT char * buf)
Packit 13e616
{
Packit 13e616
	if (!buf || !p_si)
Packit 13e616
		return;
Packit 13e616
	else {
Packit 13e616
		sprintf(buf,
Packit 13e616
			"SwitchInfo dump:\n"
Packit 13e616
			"\t\t\t\tlin_cap.................0x%X\n"
Packit 13e616
			"\t\t\t\trand_cap................0x%X\n"
Packit 13e616
			"\t\t\t\tmcast_cap...............0x%X\n"
Packit 13e616
			"\t\t\t\tlin_top.................0x%X\n"
Packit 13e616
			"\t\t\t\tdef_port................%u\n"
Packit 13e616
			"\t\t\t\tdef_mcast_pri_port......%u\n"
Packit 13e616
			"\t\t\t\tdef_mcast_not_port......%u\n"
Packit 13e616
			"\t\t\t\tlife_state..............0x%X\n"
Packit 13e616
			"\t\t\t\tlids_per_port...........%u\n"
Packit 13e616
			"\t\t\t\tpartition_enf_cap.......0x%X\n"
Packit 13e616
			"\t\t\t\tflags...................0x%X\n"
Packit 13e616
			"\t\t\t\tmcast_top...............0x%X\n",
Packit 13e616
			cl_ntoh16(p_si->lin_cap), cl_ntoh16(p_si->rand_cap),
Packit 13e616
			cl_ntoh16(p_si->mcast_cap), cl_ntoh16(p_si->lin_top),
Packit 13e616
			p_si->def_port, p_si->def_mcast_pri_port,
Packit 13e616
			p_si->def_mcast_not_port, p_si->life_state,
Packit 13e616
			cl_ntoh16(p_si->lids_per_port),
Packit 13e616
			cl_ntoh16(p_si->enforce_cap), p_si->flags,
Packit 13e616
			cl_ntoh16(p_si->mcast_top));
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_switch_info(IN osm_log_t * p_log,
Packit 13e616
			  IN const ib_switch_info_t * p_si,
Packit 13e616
			  IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active(p_log, log_level)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_switch_info_to_buf(p_si, buf);
Packit 13e616
Packit 13e616
		osm_log(p_log, OSM_LOG_VERBOSE, "%s", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_switch_info_v2(IN osm_log_t * p_log,
Packit 13e616
			     IN const ib_switch_info_t * p_si,
Packit 13e616
			     IN const int file_id,
Packit 13e616
			     IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active_v2(p_log, log_level, file_id)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_switch_info_to_buf(p_si, buf);
Packit 13e616
Packit 13e616
		osm_log_v2(p_log, OSM_LOG_VERBOSE, file_id, "%s", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
static void osm_dump_switch_info_record_to_buf(IN const ib_switch_info_record_t * p_sir,
Packit 13e616
					       OUT char * buf)
Packit 13e616
{
Packit 13e616
	if (!buf || !p_sir)
Packit 13e616
		return;
Packit 13e616
	else {
Packit 13e616
		sprintf(buf,
Packit 13e616
			"SwitchInfo Record dump:\n"
Packit 13e616
			"\t\t\t\tRID\n"
Packit 13e616
			"\t\t\t\tlid.....................%u\n"
Packit 13e616
			"\t\t\t\tSwitchInfo dump:\n"
Packit 13e616
			"\t\t\t\tlin_cap.................0x%X\n"
Packit 13e616
			"\t\t\t\trand_cap................0x%X\n"
Packit 13e616
			"\t\t\t\tmcast_cap...............0x%X\n"
Packit 13e616
			"\t\t\t\tlin_top.................0x%X\n"
Packit 13e616
			"\t\t\t\tdef_port................%u\n"
Packit 13e616
			"\t\t\t\tdef_mcast_pri_port......%u\n"
Packit 13e616
			"\t\t\t\tdef_mcast_not_port......%u\n"
Packit 13e616
			"\t\t\t\tlife_state..............0x%X\n"
Packit 13e616
			"\t\t\t\tlids_per_port...........%u\n"
Packit 13e616
			"\t\t\t\tpartition_enf_cap.......0x%X\n"
Packit 13e616
			"\t\t\t\tflags...................0x%X\n",
Packit 13e616
			cl_ntoh16(p_sir->lid),
Packit 13e616
			cl_ntoh16(p_sir->switch_info.lin_cap),
Packit 13e616
			cl_ntoh16(p_sir->switch_info.rand_cap),
Packit 13e616
			cl_ntoh16(p_sir->switch_info.mcast_cap),
Packit 13e616
			cl_ntoh16(p_sir->switch_info.lin_top),
Packit 13e616
			p_sir->switch_info.def_port,
Packit 13e616
			p_sir->switch_info.def_mcast_pri_port,
Packit 13e616
			p_sir->switch_info.def_mcast_not_port,
Packit 13e616
			p_sir->switch_info.life_state,
Packit 13e616
			cl_ntoh16(p_sir->switch_info.lids_per_port),
Packit 13e616
			cl_ntoh16(p_sir->switch_info.enforce_cap),
Packit 13e616
			p_sir->switch_info.flags);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_switch_info_record(IN osm_log_t * p_log,
Packit 13e616
				 IN const ib_switch_info_record_t * p_sir,
Packit 13e616
				 IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active(p_log, log_level)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_switch_info_record_to_buf(p_sir, buf);
Packit 13e616
Packit 13e616
		osm_log(p_log, log_level, "%s", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_switch_info_record_v2(IN osm_log_t * p_log,
Packit 13e616
				    IN const ib_switch_info_record_t * p_sir,
Packit 13e616
				    IN const int file_id,
Packit 13e616
				    IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active_v2(p_log, log_level, file_id)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_switch_info_record_to_buf(p_sir, buf);
Packit 13e616
Packit 13e616
		osm_log_v2(p_log, log_level, file_id, "%s", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
static void osm_dump_pkey_block_to_buf(IN uint64_t port_guid,
Packit 13e616
				       IN uint16_t block_num,
Packit 13e616
				       IN uint8_t port_num,
Packit 13e616
				       IN const ib_pkey_table_t * p_pkey_tbl,
Packit 13e616
				       OUT char * buf)
Packit 13e616
{
Packit 13e616
	if (!buf || !p_pkey_tbl)
Packit 13e616
		return;
Packit 13e616
	else {
Packit 13e616
		char buf_line[1024];
Packit 13e616
		int i, n;
Packit 13e616
Packit 13e616
		for (i = 0, n = 0; i < 32; i++)
Packit 13e616
			n += sprintf(buf_line + n, " 0x%04x |",
Packit 13e616
				     cl_ntoh16(p_pkey_tbl->pkey_entry[i]));
Packit 13e616
Packit 13e616
		sprintf(buf,
Packit 13e616
			"P_Key table dump:\n"
Packit 13e616
			"\t\t\tport_guid...........0x%016" PRIx64 "\n"
Packit 13e616
			"\t\t\tblock_num...........0x%X\n"
Packit 13e616
			"\t\t\tport_num............%u\n\tP_Key Table: %s\n",
Packit 13e616
			cl_ntoh64(port_guid), block_num, port_num, buf_line);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_pkey_block(IN osm_log_t * p_log, IN uint64_t port_guid,
Packit 13e616
			 IN uint16_t block_num, IN uint8_t port_num,
Packit 13e616
			 IN const ib_pkey_table_t * p_pkey_tbl,
Packit 13e616
			 IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active(p_log, log_level)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_pkey_block_to_buf(port_guid, block_num, port_num,
Packit 13e616
					   p_pkey_tbl, buf);
Packit 13e616
Packit 13e616
		osm_log(p_log, log_level, "%s", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_pkey_block_v2(IN osm_log_t * p_log, IN uint64_t port_guid,
Packit 13e616
			    IN uint16_t block_num, IN uint8_t port_num,
Packit 13e616
			    IN const ib_pkey_table_t * p_pkey_tbl,
Packit 13e616
			    IN const int file_id,
Packit 13e616
			    IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active_v2(p_log, log_level, file_id)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_pkey_block_to_buf(port_guid, block_num,
Packit 13e616
					   port_num, p_pkey_tbl, buf);
Packit 13e616
Packit 13e616
		osm_log_v2(p_log, log_level, file_id, "%s", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
static void osm_dump_slvl_map_table_to_buf(IN uint64_t port_guid,
Packit 13e616
					   IN uint8_t in_port_num,
Packit 13e616
					   IN uint8_t out_port_num,
Packit 13e616
					   IN const ib_slvl_table_t * p_slvl_tbl,
Packit 13e616
					   OUT char * buf)
Packit 13e616
{
Packit 13e616
	if (!buf || !p_slvl_tbl)
Packit 13e616
		return;
Packit 13e616
	else {
Packit 13e616
		char buf_line1[1024], buf_line2[1024];
Packit 13e616
		int n;
Packit 13e616
		uint8_t i;
Packit 13e616
Packit 13e616
		for (i = 0, n = 0; i < 16; i++)
Packit 13e616
			n += sprintf(buf_line1 + n, " %-2u |", i);
Packit 13e616
		for (i = 0, n = 0; i < 16; i++)
Packit 13e616
			n += sprintf(buf_line2 + n, "0x%01X |",
Packit 13e616
				     ib_slvl_table_get(p_slvl_tbl, i));
Packit 13e616
		sprintf(buf,
Packit 13e616
			"SLtoVL dump:\n"
Packit 13e616
			"\t\t\tport_guid............0x%016" PRIx64 "\n"
Packit 13e616
			"\t\t\tin_port_num..........%u\n"
Packit 13e616
			"\t\t\tout_port_num.........%u\n\tSL: | %s\n\tVL: | %s\n",
Packit 13e616
			cl_ntoh64(port_guid), in_port_num, out_port_num,
Packit 13e616
			buf_line1, buf_line2);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_slvl_map_table(IN osm_log_t * p_log, IN uint64_t port_guid,
Packit 13e616
			     IN uint8_t in_port_num, IN uint8_t out_port_num,
Packit 13e616
			     IN const ib_slvl_table_t * p_slvl_tbl,
Packit 13e616
			     IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active(p_log, log_level)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_slvl_map_table_to_buf(port_guid, in_port_num,
Packit 13e616
					       out_port_num, p_slvl_tbl, buf);
Packit 13e616
Packit 13e616
		osm_log(p_log, log_level, "%s", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_slvl_map_table_v2(IN osm_log_t * p_log, IN uint64_t port_guid,
Packit 13e616
				IN uint8_t in_port_num, IN uint8_t out_port_num,
Packit 13e616
				IN const ib_slvl_table_t * p_slvl_tbl,
Packit 13e616
				IN const int file_id,
Packit 13e616
				IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active_v2(p_log, log_level, file_id)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_slvl_map_table_to_buf(port_guid, in_port_num,
Packit 13e616
					       out_port_num, p_slvl_tbl, buf);
Packit 13e616
Packit 13e616
		osm_log_v2(p_log, log_level, file_id, "%s", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
static void osm_dump_vl_arb_table_to_buf(IN uint64_t port_guid,
Packit 13e616
					 IN uint8_t block_num,
Packit 13e616
					 IN uint8_t port_num,
Packit 13e616
					 IN const ib_vl_arb_table_t * p_vla_tbl,
Packit 13e616
					 OUT char * buf)
Packit 13e616
{
Packit 13e616
	if (!buf || !p_vla_tbl)
Packit 13e616
		return;
Packit 13e616
	else {
Packit 13e616
		char buf_line1[1024], buf_line2[1024];
Packit 13e616
		int i, n;
Packit 13e616
Packit 13e616
		for (i = 0, n = 0; i < 32; i++)
Packit 13e616
			n += sprintf(buf_line1 + n, " 0x%01X |",
Packit 13e616
				     p_vla_tbl->vl_entry[i].vl);
Packit 13e616
		for (i = 0, n = 0; i < 32; i++)
Packit 13e616
			n += sprintf(buf_line2 + n, " 0x%01X |",
Packit 13e616
				     p_vla_tbl->vl_entry[i].weight);
Packit 13e616
		sprintf(buf,
Packit 13e616
			"VLArb dump:\n" "\t\t\tport_guid...........0x%016"
Packit 13e616
			PRIx64 "\n" "\t\t\tblock_num...........0x%X\n"
Packit 13e616
			"\t\t\tport_num............%u\n\tVL    : | %s\n\tWEIGHT:| %s\n",
Packit 13e616
			cl_ntoh64(port_guid), block_num, port_num, buf_line1,
Packit 13e616
			buf_line2);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_vl_arb_table(IN osm_log_t * p_log, IN uint64_t port_guid,
Packit 13e616
			   IN uint8_t block_num, IN uint8_t port_num,
Packit 13e616
			   IN const ib_vl_arb_table_t * p_vla_tbl,
Packit 13e616
			   IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active(p_log, log_level)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_vl_arb_table_to_buf(port_guid, block_num,
Packit 13e616
					     port_num, p_vla_tbl, buf);
Packit 13e616
Packit 13e616
		osm_log(p_log, log_level, "%s", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_vl_arb_table_v2(IN osm_log_t * p_log, IN uint64_t port_guid,
Packit 13e616
			      IN uint8_t block_num, IN uint8_t port_num,
Packit 13e616
			      IN const ib_vl_arb_table_t * p_vla_tbl,
Packit 13e616
			      IN const int file_id,
Packit 13e616
			      IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active_v2(p_log, log_level, file_id)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_vl_arb_table_to_buf(port_guid, block_num,
Packit 13e616
					     port_num, p_vla_tbl, buf);
Packit 13e616
Packit 13e616
		osm_log_v2(p_log, log_level, file_id, "%s", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
static void osm_dump_sm_info_to_buf(IN const ib_sm_info_t * p_smi,
Packit 13e616
				    OUT char * buf)
Packit 13e616
{
Packit 13e616
	if (!buf || !p_smi)
Packit 13e616
		return;
Packit 13e616
	else {
Packit 13e616
		sprintf(buf,
Packit 13e616
			"SMInfo dump:\n"
Packit 13e616
			"\t\t\t\tguid....................0x%016" PRIx64 "\n"
Packit 13e616
			"\t\t\t\tsm_key..................0x%016" PRIx64 "\n"
Packit 13e616
			"\t\t\t\tact_count...............%u\n"
Packit 13e616
			"\t\t\t\tpriority................%u\n"
Packit 13e616
			"\t\t\t\tsm_state................%u\n",
Packit 13e616
			cl_ntoh64(p_smi->guid), cl_ntoh64(p_smi->sm_key),
Packit 13e616
			cl_ntoh32(p_smi->act_count),
Packit 13e616
			ib_sminfo_get_priority(p_smi),
Packit 13e616
			ib_sminfo_get_state(p_smi));
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_sm_info(IN osm_log_t * p_log, IN const ib_sm_info_t * p_smi,
Packit 13e616
		      IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active(p_log, log_level)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_sm_info_to_buf(p_smi, buf);
Packit 13e616
Packit 13e616
		osm_log(p_log, OSM_LOG_DEBUG, "%s", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_sm_info_v2(IN osm_log_t * p_log, IN const ib_sm_info_t * p_smi,
Packit 13e616
			 IN const int file_id, IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active_v2(p_log, log_level, file_id)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_sm_info_to_buf(p_smi, buf);
Packit 13e616
Packit 13e616
		osm_log_v2(p_log, OSM_LOG_DEBUG, file_id, "%s", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
static void osm_dump_sm_info_record_to_buf(IN const ib_sminfo_record_t * p_smir,
Packit 13e616
					   OUT char * buf)
Packit 13e616
{
Packit 13e616
	if (!buf || !p_smir)
Packit 13e616
		return;
Packit 13e616
	else {
Packit 13e616
		sprintf(buf,
Packit 13e616
			"SMInfo Record dump:\n"
Packit 13e616
			"\t\t\t\tRID\n"
Packit 13e616
			"\t\t\t\tLid.....................%u\n"
Packit 13e616
			"\t\t\t\tReserved................0x%X\n"
Packit 13e616
			"\t\t\t\tSMInfo dump:\n"
Packit 13e616
			"\t\t\t\tguid....................0x%016" PRIx64 "\n"
Packit 13e616
			"\t\t\t\tsm_key..................0x%016" PRIx64 "\n"
Packit 13e616
			"\t\t\t\tact_count...............%u\n"
Packit 13e616
			"\t\t\t\tpriority................%u\n"
Packit 13e616
			"\t\t\t\tsm_state................%u\n",
Packit 13e616
			cl_ntoh16(p_smir->lid), cl_ntoh16(p_smir->resv0),
Packit 13e616
			cl_ntoh64(p_smir->sm_info.guid),
Packit 13e616
			cl_ntoh64(p_smir->sm_info.sm_key),
Packit 13e616
			cl_ntoh32(p_smir->sm_info.act_count),
Packit 13e616
			ib_sminfo_get_priority(&p_smir->sm_info),
Packit 13e616
			ib_sminfo_get_state(&p_smir->sm_info));
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_sm_info_record(IN osm_log_t * p_log,
Packit 13e616
			     IN const ib_sminfo_record_t * p_smir,
Packit 13e616
			     IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active(p_log, log_level)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_sm_info_record_to_buf(p_smir, buf);
Packit 13e616
Packit 13e616
		osm_log(p_log, OSM_LOG_DEBUG, "%s", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_sm_info_record_v2(IN osm_log_t * p_log,
Packit 13e616
				IN const ib_sminfo_record_t * p_smir,
Packit 13e616
				IN const int file_id,
Packit 13e616
				IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active_v2(p_log, log_level, file_id)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_sm_info_record_to_buf(p_smir, buf);
Packit 13e616
Packit 13e616
		osm_log_v2(p_log, OSM_LOG_DEBUG, file_id, "%s", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
static void osm_dump_notice_to_buf_generic(IN const ib_mad_notice_attr_t * p_ntci,
Packit 13e616
					   OUT char * log_buf)
Packit 13e616
{
Packit 13e616
	if (!log_buf || !p_ntci)
Packit 13e616
		return;
Packit 13e616
	else {
Packit 13e616
		char gid_str[INET6_ADDRSTRLEN];
Packit 13e616
		char gid_str2[INET6_ADDRSTRLEN];
Packit 13e616
		char buff[1024];
Packit 13e616
		int n;
Packit 13e616
Packit 13e616
		buff[0] = '\0';
Packit 13e616
Packit 13e616
		/* immediate data based on the trap */
Packit 13e616
		switch (cl_ntoh16(p_ntci->g_or_v.generic.trap_num)) {
Packit 13e616
		case SM_GID_IN_SERVICE_TRAP:	/* 64 */
Packit 13e616
		case SM_GID_OUT_OF_SERVICE_TRAP: /* 65 */
Packit 13e616
		case SM_MGID_CREATED_TRAP:	/* 66 */
Packit 13e616
		case SM_MGID_DESTROYED_TRAP:	/* 67 */
Packit 13e616
			sprintf(buff,
Packit 13e616
				"\t\t\t\tsrc_gid..................%s\n",
Packit 13e616
				inet_ntop(AF_INET6, p_ntci->data_details.
Packit 13e616
					  ntc_64_67.gid.raw, gid_str,
Packit 13e616
					  sizeof gid_str));
Packit 13e616
			break;
Packit 13e616
		case SM_LINK_STATE_CHANGED_TRAP: /* 128 */
Packit 13e616
			sprintf(buff,
Packit 13e616
				"\t\t\t\tsw_lid...................%u\n",
Packit 13e616
				cl_ntoh16(p_ntci->data_details.ntc_128.sw_lid));
Packit 13e616
			break;
Packit 13e616
		case SM_LINK_INTEGRITY_THRESHOLD_TRAP: /* 129 */
Packit 13e616
		case SM_BUFFER_OVERRUN_THRESHOLD_TRAP: /* 130 */
Packit 13e616
		case SM_WATCHDOG_TIMER_EXPIRED_TRAP:   /* 131 */
Packit 13e616
			sprintf(buff,
Packit 13e616
				"\t\t\t\tlid......................%u\n"
Packit 13e616
				"\t\t\t\tport_num.................%u\n",
Packit 13e616
				cl_ntoh16(p_ntci->data_details.
Packit 13e616
					  ntc_129_131.lid),
Packit 13e616
				p_ntci->data_details.ntc_129_131.port_num);
Packit 13e616
			break;
Packit 13e616
		case SM_LOCAL_CHANGES_TRAP:	/* 144 */
Packit 13e616
			sprintf(buff,
Packit 13e616
				"\t\t\t\tlid......................%u\n"
Packit 13e616
				"\t\t\t\tlocal_changes............%u\n"
Packit 13e616
				"\t\t\t\tnew_cap_mask.............0x%08x\n"
Packit 13e616
				"\t\t\t\tchange_flags.............0x%x\n"
Packit 13e616
				"\t\t\t\tcap_mask2................0x%x\n",
Packit 13e616
				cl_ntoh16(p_ntci->data_details.ntc_144.lid),
Packit 13e616
				p_ntci->data_details.ntc_144.local_changes,
Packit 13e616
				cl_ntoh32(p_ntci->data_details.ntc_144.
Packit 13e616
					  new_cap_mask),
Packit 13e616
				cl_ntoh16(p_ntci->data_details.ntc_144.
Packit 13e616
					  change_flgs),
Packit 13e616
				cl_ntoh16(p_ntci->data_details.ntc_144.
Packit 13e616
					  cap_mask2));
Packit 13e616
			break;
Packit 13e616
		case SM_SYS_IMG_GUID_CHANGED_TRAP: /* 145 */
Packit 13e616
			sprintf(buff,
Packit 13e616
				"\t\t\t\tlid......................%u\n"
Packit 13e616
				"\t\t\t\tnew_sys_guid.............0x%016"
Packit 13e616
				PRIx64 "\n",
Packit 13e616
				cl_ntoh16(p_ntci->data_details.ntc_145.
Packit 13e616
					  lid),
Packit 13e616
				cl_ntoh64(p_ntci->data_details.ntc_145.
Packit 13e616
					  new_sys_guid));
Packit 13e616
			break;
Packit 13e616
		case SM_BAD_MKEY_TRAP:	/* 256 */
Packit 13e616
			n = sprintf(buff,
Packit 13e616
				    "\t\t\t\tlid......................%u\n"
Packit 13e616
				    "\t\t\t\tdrslid...................%u\n"
Packit 13e616
				    "\t\t\t\tmethod...................0x%x\n"
Packit 13e616
				    "\t\t\t\tattr_id..................0x%x\n"
Packit 13e616
				    "\t\t\t\tattr_mod.................0x%x\n"
Packit 13e616
				    "\t\t\t\tm_key....................0x%016"
Packit 13e616
				    PRIx64 "\n"
Packit 13e616
				    "\t\t\t\tdr_notice................%d\n"
Packit 13e616
				    "\t\t\t\tdr_path_truncated........%d\n"
Packit 13e616
				    "\t\t\t\tdr_hop_count.............%u\n",
Packit 13e616
				    cl_ntoh16(p_ntci->data_details.ntc_256.lid),
Packit 13e616
				    cl_ntoh16(p_ntci->data_details.ntc_256.
Packit 13e616
					      dr_slid),
Packit 13e616
				    p_ntci->data_details.ntc_256.method,
Packit 13e616
				    cl_ntoh16(p_ntci->data_details.ntc_256.
Packit 13e616
					      attr_id),
Packit 13e616
				    cl_ntoh32(p_ntci->data_details.ntc_256.
Packit 13e616
					      attr_mod),
Packit 13e616
				    cl_ntoh64(p_ntci->data_details.ntc_256.
Packit 13e616
					      mkey),
Packit 13e616
				    p_ntci->data_details.ntc_256.
Packit 13e616
				    dr_trunc_hop >> 7,
Packit 13e616
				    p_ntci->data_details.ntc_256.
Packit 13e616
				    dr_trunc_hop >> 6,
Packit 13e616
				    p_ntci->data_details.ntc_256.
Packit 13e616
				    dr_trunc_hop & 0x3f);
Packit 13e616
			n += snprintf(buff + n, sizeof(buff) - n,
Packit 13e616
				      "Directed Path Dump of %u hop path:"
Packit 13e616
				      "\n\t\t\t\tPath = ",
Packit 13e616
				      p_ntci->data_details.ntc_256.
Packit 13e616
				      dr_trunc_hop & 0x3f);
Packit 13e616
			n += sprint_uint8_arr(buff + n, sizeof(buff) - n,
Packit 13e616
					      p_ntci->data_details.ntc_256.
Packit 13e616
					      dr_rtn_path,
Packit 13e616
					      (p_ntci->data_details.ntc_256.
Packit 13e616
					       dr_trunc_hop & 0x3f) + 1);
Packit 13e616
			if (n >= sizeof(buff)) {
Packit 13e616
				n = sizeof(buff) - 2;
Packit 13e616
				break;
Packit 13e616
			}
Packit 13e616
			snprintf(buff + n, sizeof(buff) - n, "\n");
Packit 13e616
			break;
Packit 13e616
		case SM_BAD_PKEY_TRAP:	/* 257 */
Packit 13e616
		case SM_BAD_QKEY_TRAP:	/* 258 */
Packit 13e616
			sprintf(buff,
Packit 13e616
				"\t\t\t\tlid1.....................%u\n"
Packit 13e616
				"\t\t\t\tlid2.....................%u\n"
Packit 13e616
				"\t\t\t\tkey......................0x%x\n"
Packit 13e616
				"\t\t\t\tsl.......................%d\n"
Packit 13e616
				"\t\t\t\tqp1......................0x%x\n"
Packit 13e616
				"\t\t\t\tqp2......................0x%x\n"
Packit 13e616
				"\t\t\t\tgid1.....................%s\n"
Packit 13e616
				"\t\t\t\tgid2.....................%s\n",
Packit 13e616
				cl_ntoh16(p_ntci->data_details.ntc_257_258.
Packit 13e616
					  lid1),
Packit 13e616
				cl_ntoh16(p_ntci->data_details.ntc_257_258.
Packit 13e616
					  lid2),
Packit 13e616
				cl_ntoh32(p_ntci->data_details.ntc_257_258.key),
Packit 13e616
				cl_ntoh32(p_ntci->data_details.ntc_257_258.
Packit 13e616
					  qp1) >> 28,
Packit 13e616
				cl_ntoh32(p_ntci->data_details.ntc_257_258.
Packit 13e616
					  qp1) & 0xffffff,
Packit 13e616
				cl_ntoh32(p_ntci->data_details.ntc_257_258.
Packit 13e616
					  qp2) & 0xffffff,
Packit 13e616
				inet_ntop(AF_INET6, p_ntci->data_details.
Packit 13e616
					  ntc_257_258.gid1.raw, gid_str,
Packit 13e616
					  sizeof gid_str),
Packit 13e616
				inet_ntop(AF_INET6, p_ntci->data_details.
Packit 13e616
					  ntc_257_258.gid2.raw, gid_str2,
Packit 13e616
					  sizeof gid_str2));
Packit 13e616
			break;
Packit 13e616
		case SM_BAD_SWITCH_PKEY_TRAP:	/* 259 */
Packit 13e616
			sprintf(buff,
Packit 13e616
				"\t\t\t\tdata_valid...............0x%x\n"
Packit 13e616
				"\t\t\t\tlid1.....................%u\n"
Packit 13e616
				"\t\t\t\tlid2.....................%u\n"
Packit 13e616
				"\t\t\t\tpkey.....................0x%x\n"
Packit 13e616
				"\t\t\t\tsl.......................%d\n"
Packit 13e616
				"\t\t\t\tqp1......................0x%x\n"
Packit 13e616
				"\t\t\t\tqp2......................0x%x\n"
Packit 13e616
				"\t\t\t\tgid1.....................%s\n"
Packit 13e616
				"\t\t\t\tgid2.....................%s\n"
Packit 13e616
				"\t\t\t\tsw_lid...................%u\n"
Packit 13e616
				"\t\t\t\tport_no..................%u\n",
Packit 13e616
				cl_ntoh16(p_ntci->data_details.ntc_259.
Packit 13e616
					  data_valid),
Packit 13e616
				cl_ntoh16(p_ntci->data_details.ntc_259.lid1),
Packit 13e616
				cl_ntoh16(p_ntci->data_details.ntc_259.lid2),
Packit 13e616
				cl_ntoh16(p_ntci->data_details.ntc_259.pkey),
Packit 13e616
				cl_ntoh32(p_ntci->data_details.ntc_259.
Packit 13e616
					  sl_qp1) >> 24,
Packit 13e616
				cl_ntoh32(p_ntci->data_details.ntc_259.
Packit 13e616
					  sl_qp1) & 0xffffff,
Packit 13e616
				cl_ntoh32(p_ntci->data_details.ntc_259.qp2),
Packit 13e616
				inet_ntop(AF_INET6, p_ntci->data_details.
Packit 13e616
					  ntc_259.gid1.raw, gid_str,
Packit 13e616
					  sizeof gid_str),
Packit 13e616
				inet_ntop(AF_INET6, p_ntci->data_details.
Packit 13e616
					  ntc_259.gid2.raw, gid_str2,
Packit 13e616
					  sizeof gid_str2),
Packit 13e616
				cl_ntoh16(p_ntci->data_details.ntc_259.sw_lid),
Packit 13e616
				p_ntci->data_details.ntc_259.port_no);
Packit 13e616
			break;
Packit 13e616
		}
Packit 13e616
Packit 13e616
		sprintf(log_buf,
Packit 13e616
			"Generic Notice dump:\n"
Packit 13e616
			"\t\t\t\ttype.....................%u\n"
Packit 13e616
			"\t\t\t\tprod_type................%u (%s)\n"
Packit 13e616
			"\t\t\t\ttrap_num.................%u\n%s",
Packit 13e616
			ib_notice_get_type(p_ntci),
Packit 13e616
			cl_ntoh32(ib_notice_get_prod_type(p_ntci)),
Packit 13e616
			ib_get_producer_type_str(ib_notice_get_prod_type
Packit 13e616
						 (p_ntci)),
Packit 13e616
			cl_ntoh16(p_ntci->g_or_v.generic.trap_num), buff);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
static void osm_dump_notice_to_buf(IN const ib_mad_notice_attr_t * p_ntci,
Packit 13e616
				   OUT char * buf)
Packit 13e616
{
Packit 13e616
	if (!buf || !p_ntci)
Packit 13e616
		return;
Packit 13e616
	else {
Packit 13e616
		sprintf(buf,
Packit 13e616
			"Vendor Notice dump:\n"
Packit 13e616
			"\t\t\t\ttype.....................%u\n"
Packit 13e616
			"\t\t\t\tvendor...................%u\n"
Packit 13e616
			"\t\t\t\tdevice_id................%u\n",
Packit 13e616
			cl_ntoh16(ib_notice_get_type(p_ntci)),
Packit 13e616
			cl_ntoh32(ib_notice_get_vend_id(p_ntci)),
Packit 13e616
			cl_ntoh16(p_ntci->g_or_v.vend.dev_id));
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_notice(IN osm_log_t * p_log,
Packit 13e616
		     IN const ib_mad_notice_attr_t * p_ntci,
Packit 13e616
		     IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active(p_log, log_level)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		if (ib_notice_is_generic(p_ntci))
Packit 13e616
			osm_dump_notice_to_buf_generic(p_ntci, buf);
Packit 13e616
		else
Packit 13e616
			osm_dump_notice_to_buf(p_ntci, buf);
Packit 13e616
Packit 13e616
		osm_log(p_log, log_level, "%s", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_notice_v2(IN osm_log_t * p_log,
Packit 13e616
			IN const ib_mad_notice_attr_t * p_ntci,
Packit 13e616
			IN const int file_id, IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active_v2(p_log, log_level, file_id)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		if (ib_notice_is_generic(p_ntci))
Packit 13e616
			osm_dump_notice_to_buf_generic(p_ntci, buf);
Packit 13e616
		else
Packit 13e616
			osm_dump_notice_to_buf(p_ntci, buf);
Packit 13e616
Packit 13e616
		osm_log_v2(p_log, log_level, file_id, "%s", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
static void osm_dump_dr_smp_to_buf(IN const ib_smp_t * p_smp, OUT char * buf,
Packit 13e616
				   IN size_t buf_size)
Packit 13e616
{
Packit 13e616
	if (!buf || !p_smp)
Packit 13e616
		return;
Packit 13e616
	else {
Packit 13e616
		unsigned n;
Packit 13e616
Packit 13e616
		n = sprintf(buf,
Packit 13e616
			    "SMP dump:\n"
Packit 13e616
			    "\t\t\t\tbase_ver................0x%X\n"
Packit 13e616
			    "\t\t\t\tmgmt_class..............0x%X\n"
Packit 13e616
			    "\t\t\t\tclass_ver...............0x%X\n"
Packit 13e616
			    "\t\t\t\tmethod..................0x%X (%s)\n",
Packit 13e616
			    p_smp->base_ver, p_smp->mgmt_class,
Packit 13e616
			    p_smp->class_ver, p_smp->method,
Packit 13e616
			    ib_get_sm_method_str(p_smp->method));
Packit 13e616
Packit 13e616
		if (p_smp->mgmt_class == IB_MCLASS_SUBN_DIR) {
Packit 13e616
			n += snprintf(buf + n, buf_size - n,
Packit 13e616
				      "\t\t\t\tD bit...................0x%X\n"
Packit 13e616
				      "\t\t\t\tstatus..................0x%X\n",
Packit 13e616
				      ib_smp_is_d(p_smp),
Packit 13e616
				      cl_ntoh16(ib_smp_get_status(p_smp)));
Packit 13e616
		} else {
Packit 13e616
			n += snprintf(buf + n, buf_size - n,
Packit 13e616
				      "\t\t\t\tstatus..................0x%X\n",
Packit 13e616
				      cl_ntoh16(p_smp->status));
Packit 13e616
		}
Packit 13e616
Packit 13e616
		n += snprintf(buf + n, buf_size - n,
Packit 13e616
			      "\t\t\t\thop_ptr.................0x%X\n"
Packit 13e616
			      "\t\t\t\thop_count...............0x%X\n"
Packit 13e616
			      "\t\t\t\ttrans_id................0x%" PRIx64 "\n"
Packit 13e616
			      "\t\t\t\tattr_id.................0x%X (%s)\n"
Packit 13e616
			      "\t\t\t\tresv....................0x%X\n"
Packit 13e616
			      "\t\t\t\tattr_mod................0x%X\n"
Packit 13e616
			      "\t\t\t\tm_key...................0x%016" PRIx64
Packit 13e616
			      "\n", p_smp->hop_ptr, p_smp->hop_count,
Packit 13e616
			      cl_ntoh64(p_smp->trans_id),
Packit 13e616
			      cl_ntoh16(p_smp->attr_id),
Packit 13e616
			      ib_get_sm_attr_str(p_smp->attr_id),
Packit 13e616
			      cl_ntoh16(p_smp->resv),
Packit 13e616
			      cl_ntoh32(p_smp->attr_mod),
Packit 13e616
			      cl_ntoh64(p_smp->m_key));
Packit 13e616
Packit 13e616
		if (p_smp->mgmt_class == IB_MCLASS_SUBN_DIR) {
Packit 13e616
			uint32_t i;
Packit 13e616
			n += snprintf(buf + n, buf_size - n,
Packit 13e616
				      "\t\t\t\tdr_slid.................%u\n"
Packit 13e616
				      "\t\t\t\tdr_dlid.................%u\n",
Packit 13e616
				      cl_ntoh16(p_smp->dr_slid),
Packit 13e616
				      cl_ntoh16(p_smp->dr_dlid));
Packit 13e616
Packit 13e616
			n += snprintf(buf + n, buf_size - n,
Packit 13e616
				      "\n\t\t\t\tInitial path: ");
Packit 13e616
			n += sprint_uint8_arr(buf + n, buf_size - n,
Packit 13e616
					      p_smp->initial_path,
Packit 13e616
					      p_smp->hop_count + 1);
Packit 13e616
Packit 13e616
			n += snprintf(buf + n, buf_size - n,
Packit 13e616
				      "\n\t\t\t\tReturn path:  ");
Packit 13e616
			n += sprint_uint8_arr(buf + n, buf_size - n,
Packit 13e616
					      p_smp->return_path,
Packit 13e616
					      p_smp->hop_count + 1);
Packit 13e616
Packit 13e616
			n += snprintf(buf + n, buf_size - n,
Packit 13e616
				      "\n\t\t\t\tReserved:     ");
Packit 13e616
			for (i = 0; i < 7; i++) {
Packit 13e616
				n += snprintf(buf + n, buf_size - n,
Packit 13e616
					      "[%0X]", p_smp->resv1[i]);
Packit 13e616
			}
Packit 13e616
			n += snprintf(buf + n, buf_size - n, "\n");
Packit 13e616
Packit 13e616
			for (i = 0; i < 64; i += 16) {
Packit 13e616
				n += snprintf(buf + n, buf_size - n,
Packit 13e616
					      "\n\t\t\t\t%02X %02X %02X %02X "
Packit 13e616
					      "%02X %02X %02X %02X"
Packit 13e616
					      "   %02X %02X %02X %02X %02X %02X %02X %02X\n",
Packit 13e616
					      p_smp->data[i],
Packit 13e616
					      p_smp->data[i + 1],
Packit 13e616
					      p_smp->data[i + 2],
Packit 13e616
					      p_smp->data[i + 3],
Packit 13e616
					      p_smp->data[i + 4],
Packit 13e616
					      p_smp->data[i + 5],
Packit 13e616
					      p_smp->data[i + 6],
Packit 13e616
					      p_smp->data[i + 7],
Packit 13e616
					      p_smp->data[i + 8],
Packit 13e616
					      p_smp->data[i + 9],
Packit 13e616
					      p_smp->data[i + 10],
Packit 13e616
					      p_smp->data[i + 11],
Packit 13e616
					      p_smp->data[i + 12],
Packit 13e616
					      p_smp->data[i + 13],
Packit 13e616
					      p_smp->data[i + 14],
Packit 13e616
					      p_smp->data[i + 15]);
Packit 13e616
			}
Packit 13e616
		} else {
Packit 13e616
			/* not a Direct Route so provide source and destination lids */
Packit 13e616
			n += snprintf(buf + n, buf_size - n,
Packit 13e616
				      "\t\t\t\tMAD IS LID ROUTED\n");
Packit 13e616
		}
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_dr_smp(IN osm_log_t * p_log, IN const ib_smp_t * p_smp,
Packit 13e616
		     IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active(p_log, log_level)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_dr_smp_to_buf(p_smp, buf, BUF_SIZE);
Packit 13e616
Packit 13e616
		osm_log(p_log, log_level, "%s", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_dr_smp_v2(IN osm_log_t * p_log, IN const ib_smp_t * p_smp,
Packit 13e616
			IN const int file_id, IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active_v2(p_log, log_level, file_id)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_dr_smp_to_buf(p_smp, buf, BUF_SIZE);
Packit 13e616
Packit 13e616
		osm_log_v2(p_log, log_level, file_id, "%s", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
static void osm_dump_sa_mad_to_buf(IN const ib_sa_mad_t * p_mad, OUT char * buf)
Packit 13e616
{
Packit 13e616
	if (!buf || !p_mad)
Packit 13e616
		return;
Packit 13e616
	else {
Packit 13e616
		/* make sure the mad is valid */
Packit 13e616
		if (p_mad == NULL) {
Packit 13e616
			sprintf(buf, "NULL MAD POINTER\n");
Packit 13e616
			return;
Packit 13e616
		}
Packit 13e616
Packit 13e616
		sprintf(buf,
Packit 13e616
			"SA MAD dump:\n"
Packit 13e616
			"\t\t\t\tbase_ver................0x%X\n"
Packit 13e616
			"\t\t\t\tmgmt_class..............0x%X\n"
Packit 13e616
			"\t\t\t\tclass_ver...............0x%X\n"
Packit 13e616
			"\t\t\t\tmethod..................0x%X (%s)\n"
Packit 13e616
			"\t\t\t\tstatus..................0x%X\n"
Packit 13e616
			"\t\t\t\tresv....................0x%X\n"
Packit 13e616
			"\t\t\t\ttrans_id................0x%" PRIx64 "\n"
Packit 13e616
			"\t\t\t\tattr_id.................0x%X (%s)\n"
Packit 13e616
			"\t\t\t\tresv1...................0x%X\n"
Packit 13e616
			"\t\t\t\tattr_mod................0x%X\n"
Packit 13e616
			"\t\t\t\trmpp_version............0x%X\n"
Packit 13e616
			"\t\t\t\trmpp_type...............0x%X\n"
Packit 13e616
			"\t\t\t\trmpp_flags..............0x%X\n"
Packit 13e616
			"\t\t\t\trmpp_status.............0x%X\n"
Packit 13e616
			"\t\t\t\tseg_num.................0x%X\n"
Packit 13e616
			"\t\t\t\tpayload_len/new_win.....0x%X\n"
Packit 13e616
			"\t\t\t\tsm_key..................0x%016" PRIx64 "\n"
Packit 13e616
			"\t\t\t\tattr_offset.............0x%X\n"
Packit 13e616
			"\t\t\t\tresv2...................0x%X\n"
Packit 13e616
			"\t\t\t\tcomp_mask...............0x%016" PRIx64 "\n",
Packit 13e616
			p_mad->base_ver, p_mad->mgmt_class, p_mad->class_ver,
Packit 13e616
			p_mad->method, ib_get_sa_method_str(p_mad->method),
Packit 13e616
			cl_ntoh16(p_mad->status), cl_ntoh16(p_mad->resv),
Packit 13e616
			cl_ntoh64(p_mad->trans_id), cl_ntoh16(p_mad->attr_id),
Packit 13e616
			ib_get_sa_attr_str(p_mad->attr_id),
Packit 13e616
			cl_ntoh16(p_mad->resv1), cl_ntoh32(p_mad->attr_mod),
Packit 13e616
			p_mad->rmpp_version, p_mad->rmpp_type,
Packit 13e616
			p_mad->rmpp_flags, p_mad->rmpp_status,
Packit 13e616
			cl_ntoh32(p_mad->seg_num),
Packit 13e616
			cl_ntoh32(p_mad->paylen_newwin),
Packit 13e616
			cl_ntoh64(p_mad->sm_key), cl_ntoh16(p_mad->attr_offset),
Packit 13e616
			cl_ntoh16(p_mad->resv3), cl_ntoh64(p_mad->comp_mask));
Packit 13e616
Packit 13e616
		strcat(buf, "\n");
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_sa_mad(IN osm_log_t * p_log, IN const ib_sa_mad_t * p_mad,
Packit 13e616
		     IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active(p_log, log_level)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_sa_mad_to_buf(p_mad, buf);
Packit 13e616
Packit 13e616
		osm_log(p_log, log_level, "%s\n", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_sa_mad_v2(IN osm_log_t * p_log, IN const ib_sa_mad_t * p_mad,
Packit 13e616
			IN const int file_id, IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active_v2(p_log, log_level, file_id)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_sa_mad_to_buf(p_mad, buf);
Packit 13e616
Packit 13e616
		osm_log_v2(p_log, log_level, file_id, "%s", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
static void osm_dump_dr_path_to_buf(IN const osm_dr_path_t * p_path,
Packit 13e616
				    OUT char * buf, IN size_t buf_size)
Packit 13e616
{
Packit 13e616
	if (!buf || !p_path)
Packit 13e616
		return;
Packit 13e616
	else {
Packit 13e616
		unsigned n = 0;
Packit 13e616
Packit 13e616
		n = sprintf(buf, "Directed Path Dump of %u hop path: "
Packit 13e616
			    "Path = ", p_path->hop_count);
Packit 13e616
Packit 13e616
		sprint_uint8_arr(buf + n, buf_size - n, p_path->path,
Packit 13e616
				 p_path->hop_count + 1);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_dr_path(IN osm_log_t * p_log, IN const osm_dr_path_t * p_path,
Packit 13e616
		      IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active(p_log, log_level)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_dr_path_to_buf(p_path, buf, BUF_SIZE);
Packit 13e616
Packit 13e616
		osm_log(p_log, log_level, "%s\n", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_dr_path_v2(IN osm_log_t * p_log, IN const osm_dr_path_t * p_path,
Packit 13e616
			 IN const int file_id, IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active_v2(p_log, log_level, file_id)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_dr_path_to_buf(p_path, buf, BUF_SIZE);
Packit 13e616
Packit 13e616
		osm_log_v2(p_log, log_level, file_id, "%s\n", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
static void osm_dump_smp_dr_path_to_buf(IN const ib_smp_t * p_smp,
Packit 13e616
					OUT char * buf, IN size_t buf_size)
Packit 13e616
{
Packit 13e616
	if (!buf || !p_smp)
Packit 13e616
		return;
Packit 13e616
	else {
Packit 13e616
		unsigned n;
Packit 13e616
Packit 13e616
		n = sprintf(buf, "Received SMP on a %u hop path: "
Packit 13e616
			    "Initial path = ", p_smp->hop_count);
Packit 13e616
		n += sprint_uint8_arr(buf + n, buf_size - n,
Packit 13e616
				      p_smp->initial_path,
Packit 13e616
				      p_smp->hop_count + 1);
Packit 13e616
Packit 13e616
		n += snprintf(buf + n, buf_size - n, ", Return path  = ");
Packit 13e616
		n += sprint_uint8_arr(buf + n, buf_size - n,
Packit 13e616
				      p_smp->return_path, p_smp->hop_count + 1);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_smp_dr_path(IN osm_log_t * p_log, IN const ib_smp_t * p_smp,
Packit 13e616
			  IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active(p_log, log_level)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_smp_dr_path_to_buf(p_smp, buf, BUF_SIZE);
Packit 13e616
Packit 13e616
		osm_log(p_log, log_level, "%s\n", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_smp_dr_path_v2(IN osm_log_t * p_log, IN const ib_smp_t * p_smp,
Packit 13e616
			     IN const int file_id, IN osm_log_level_t log_level)
Packit 13e616
{
Packit 13e616
	if (osm_log_is_active_v2(p_log, log_level, file_id)) {
Packit 13e616
		char buf[BUF_SIZE];
Packit 13e616
Packit 13e616
		osm_dump_smp_dr_path_to_buf(p_smp, buf, BUF_SIZE);
Packit 13e616
Packit 13e616
		osm_log_v2(p_log, log_level, file_id, "%s\n", buf);
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
void osm_dump_dr_path_as_buf(IN size_t max_len,
Packit 13e616
			     IN const osm_dr_path_t * p_path,
Packit 13e616
			     OUT char* buf)
Packit 13e616
{
Packit 13e616
	sprint_uint8_arr(buf, max_len, p_path->path, p_path->hop_count + 1);
Packit 13e616
}
Packit 13e616
Packit 13e616
static const char *sm_signal_str[] = {
Packit 13e616
	"OSM_SIGNAL_NONE",	/* 0 */
Packit 13e616
	"OSM_SIGNAL_SWEEP",	/* 1 */
Packit 13e616
	"OSM_SIGNAL_IDLE_TIME_PROCESS_REQUEST",	/* 2 */
Packit 13e616
	"OSM_SIGNAL_PERFMGR_SWEEP",	/* 3 */
Packit 13e616
	"OSM_SIGNAL_GUID_PROCESS_REQUEST",	/* 4 */
Packit 13e616
	"UNKNOWN SIGNAL!!"	/* 5 */
Packit 13e616
};
Packit 13e616
Packit 13e616
const char *osm_get_sm_signal_str(IN osm_signal_t signal)
Packit 13e616
{
Packit 13e616
	if (signal > OSM_SIGNAL_MAX)
Packit 13e616
		signal = OSM_SIGNAL_MAX;
Packit 13e616
	return sm_signal_str[signal];
Packit 13e616
}
Packit 13e616
Packit 13e616
static const char *disp_msg_str[] = {
Packit 13e616
	"OSM_MSG_NONE",
Packit 13e616
	"OSM_MSG_MAD_NODE_INFO",
Packit 13e616
	"OSM_MSG_MAD_PORT_INFO",
Packit 13e616
	"OSM_MSG_MAD_SWITCH_INFO",
Packit 13e616
	"OSM_MSG_MAD_GUID_INFO",
Packit 13e616
	"OSM_MSG_MAD_NODE_DESC",
Packit 13e616
	"OSM_MSG_MAD_NODE_RECORD",
Packit 13e616
	"OSM_MSG_MAD_PORTINFO_RECORD",
Packit 13e616
	"OSM_MSG_MAD_SERVICE_RECORD",
Packit 13e616
	"OSM_MSG_MAD_PATH_RECORD",
Packit 13e616
	"OSM_MSG_MAD_MCMEMBER_RECORD",
Packit 13e616
	"OSM_MSG_MAD_LINK_RECORD",
Packit 13e616
	"OSM_MSG_MAD_SMINFO_RECORD",
Packit 13e616
	"OSM_MSG_MAD_CLASS_PORT_INFO",
Packit 13e616
	"OSM_MSG_MAD_INFORM_INFO",
Packit 13e616
	"OSM_MSG_MAD_LFT_RECORD",
Packit 13e616
	"OSM_MSG_MAD_LFT",
Packit 13e616
	"OSM_MSG_MAD_SM_INFO",
Packit 13e616
	"OSM_MSG_MAD_NOTICE",
Packit 13e616
	"OSM_MSG_LIGHT_SWEEP_FAIL",
Packit 13e616
	"OSM_MSG_MAD_MFT",
Packit 13e616
	"OSM_MSG_MAD_PKEY_TBL_RECORD",
Packit 13e616
	"OSM_MSG_MAD_VL_ARB_RECORD",
Packit 13e616
	"OSM_MSG_MAD_SLVL_TBL_RECORD",
Packit 13e616
	"OSM_MSG_MAD_PKEY",
Packit 13e616
	"OSM_MSG_MAD_VL_ARB",
Packit 13e616
	"OSM_MSG_MAD_SLVL",
Packit 13e616
	"OSM_MSG_MAD_GUIDINFO_RECORD",
Packit 13e616
	"OSM_MSG_MAD_INFORM_INFO_RECORD",
Packit 13e616
	"OSM_MSG_MAD_SWITCH_INFO_RECORD",
Packit 13e616
	"OSM_MSG_MAD_MFT_RECORD",
Packit 13e616
#if defined (VENDOR_RMPP_SUPPORT) && defined (DUAL_SIDED_RMPP)
Packit 13e616
	"OSM_MSG_MAD_MULTIPATH_RECORD",
Packit 13e616
#endif
Packit 13e616
	"OSM_MSG_MAD_PORT_COUNTERS",
Packit 13e616
	"OSM_MSG_MAD_MLNX_EXT_PORT_INFO",
Packit 13e616
	"UNKNOWN!!"
Packit 13e616
};
Packit 13e616
Packit 13e616
const char *osm_get_disp_msg_str(IN cl_disp_msgid_t msg)
Packit 13e616
{
Packit 13e616
	if (msg >= OSM_MSG_MAX)
Packit 13e616
		msg = OSM_MSG_MAX-1;
Packit 13e616
	return disp_msg_str[msg];
Packit 13e616
}
Packit 13e616
Packit 13e616
static const char *port_state_str_fixed_width[] = {
Packit 13e616
	"NOC",
Packit 13e616
	"DWN",
Packit 13e616
	"INI",
Packit 13e616
	"ARM",
Packit 13e616
	"ACT",
Packit 13e616
	"???"
Packit 13e616
};
Packit 13e616
Packit 13e616
const char *osm_get_port_state_str_fixed_width(IN uint8_t port_state)
Packit 13e616
{
Packit 13e616
	if (port_state > IB_LINK_ACTIVE)
Packit 13e616
		port_state = IB_LINK_ACTIVE + 1;
Packit 13e616
	return port_state_str_fixed_width[port_state];
Packit 13e616
}
Packit 13e616
Packit 13e616
static const char *node_type_str_fixed_width[] = {
Packit 13e616
	"??",
Packit 13e616
	"CA",
Packit 13e616
	"SW",
Packit 13e616
	"RT",
Packit 13e616
};
Packit 13e616
Packit 13e616
const char *osm_get_node_type_str_fixed_width(IN uint8_t node_type)
Packit 13e616
{
Packit 13e616
	if (node_type > IB_NODE_TYPE_ROUTER)
Packit 13e616
		node_type = 0;
Packit 13e616
	return node_type_str_fixed_width[node_type];
Packit 13e616
}
Packit 13e616
Packit 13e616
const char *osm_get_manufacturer_str(IN uint64_t guid_ho)
Packit 13e616
{
Packit 13e616
	/* note that the max vendor string length is 11 */
Packit 13e616
	static const char *intel_str = "Intel";
Packit 13e616
	static const char *mellanox_str = "Mellanox";
Packit 13e616
	static const char *redswitch_str = "Redswitch";
Packit 13e616
	static const char *silverstorm_str = "SilverStorm";
Packit 13e616
	static const char *topspin_str = "Topspin";
Packit 13e616
	static const char *fujitsu_str = "Fujitsu";
Packit 13e616
	static const char *voltaire_str = "Voltaire";
Packit 13e616
	static const char *yotta_str = "YottaYotta";
Packit 13e616
	static const char *pathscale_str = "PathScale";
Packit 13e616
	static const char *ibm_str = "IBM";
Packit 13e616
	static const char *divergenet_str = "DivergeNet";
Packit 13e616
	static const char *flextronics_str = "Flextronics";
Packit 13e616
	static const char *agilent_str = "Agilent";
Packit 13e616
	static const char *obsidian_str = "Obsidian";
Packit 13e616
	static const char *baymicro_str = "BayMicro";
Packit 13e616
	static const char *lsilogic_str = "LSILogic";
Packit 13e616
	static const char *ddn_str = "DataDirect";
Packit 13e616
	static const char *panta_str = "Panta";
Packit 13e616
	static const char *hp_str = "HP";
Packit 13e616
	static const char *rioworks_str = "Rioworks";
Packit 13e616
	static const char *sun_str = "Sun";
Packit 13e616
	static const char *leafntwks_str = "3LeafNtwks";
Packit 13e616
	static const char *xsigo_str = "Xsigo";
Packit 13e616
	static const char *dell_str = "Dell";
Packit 13e616
	static const char *supermicro_str = "SuperMicro";
Packit 13e616
	static const char *openib_str = "OpenIB";
Packit 13e616
	static const char *unknown_str = "Unknown";
Packit 13e616
	static const char *bull_str = "Bull";
Packit 13e616
Packit 13e616
	switch ((uint32_t) (guid_ho >> (5 * 8))) {
Packit 13e616
	case OSM_VENDOR_ID_INTEL:
Packit 13e616
		return intel_str;
Packit 13e616
	case OSM_VENDOR_ID_MELLANOX:
Packit 13e616
	case OSM_VENDOR_ID_MELLANOX2:
Packit 13e616
	case OSM_VENDOR_ID_MELLANOX3:
Packit 13e616
	case OSM_VENDOR_ID_MELLANOX4:
Packit 13e616
	case OSM_VENDOR_ID_MELLANOX5:
Packit 13e616
	case OSM_VENDOR_ID_MELLANOX6:
Packit 13e616
	case OSM_VENDOR_ID_MELLANOX7:
Packit 13e616
	case OSM_VENDOR_ID_MELLANOX8:
Packit 13e616
	case OSM_VENDOR_ID_MELLANOX9:
Packit 13e616
		return mellanox_str;
Packit 13e616
	case OSM_VENDOR_ID_REDSWITCH:
Packit 13e616
		return redswitch_str;
Packit 13e616
	case OSM_VENDOR_ID_SILVERSTORM:
Packit 13e616
		return silverstorm_str;
Packit 13e616
	case OSM_VENDOR_ID_TOPSPIN:
Packit 13e616
		return topspin_str;
Packit 13e616
	case OSM_VENDOR_ID_FUJITSU:
Packit 13e616
	case OSM_VENDOR_ID_FUJITSU2:
Packit 13e616
		return fujitsu_str;
Packit 13e616
	case OSM_VENDOR_ID_VOLTAIRE:
Packit 13e616
		return voltaire_str;
Packit 13e616
	case OSM_VENDOR_ID_YOTTAYOTTA:
Packit 13e616
		return yotta_str;
Packit 13e616
	case OSM_VENDOR_ID_PATHSCALE:
Packit 13e616
		return pathscale_str;
Packit 13e616
	case OSM_VENDOR_ID_IBM:
Packit 13e616
	case OSM_VENDOR_ID_IBM2:
Packit 13e616
		return ibm_str;
Packit 13e616
	case OSM_VENDOR_ID_DIVERGENET:
Packit 13e616
		return divergenet_str;
Packit 13e616
	case OSM_VENDOR_ID_FLEXTRONICS:
Packit 13e616
		return flextronics_str;
Packit 13e616
	case OSM_VENDOR_ID_AGILENT:
Packit 13e616
		return agilent_str;
Packit 13e616
	case OSM_VENDOR_ID_OBSIDIAN:
Packit 13e616
		return obsidian_str;
Packit 13e616
	case OSM_VENDOR_ID_BAYMICRO:
Packit 13e616
		return baymicro_str;
Packit 13e616
	case OSM_VENDOR_ID_LSILOGIC:
Packit 13e616
		return lsilogic_str;
Packit 13e616
	case OSM_VENDOR_ID_DDN:
Packit 13e616
		return ddn_str;
Packit 13e616
	case OSM_VENDOR_ID_PANTA:
Packit 13e616
		return panta_str;
Packit 13e616
	case OSM_VENDOR_ID_HP:
Packit 13e616
	case OSM_VENDOR_ID_HP2:
Packit 13e616
	case OSM_VENDOR_ID_HP3:
Packit 13e616
	case OSM_VENDOR_ID_HP4:
Packit 13e616
		return hp_str;
Packit 13e616
	case OSM_VENDOR_ID_RIOWORKS:
Packit 13e616
		return rioworks_str;
Packit 13e616
	case OSM_VENDOR_ID_SUN:
Packit 13e616
	case OSM_VENDOR_ID_SUN2:
Packit 13e616
		return sun_str;
Packit 13e616
	case OSM_VENDOR_ID_3LEAFNTWKS:
Packit 13e616
		return leafntwks_str;
Packit 13e616
	case OSM_VENDOR_ID_XSIGO:
Packit 13e616
		return xsigo_str;
Packit 13e616
	case OSM_VENDOR_ID_DELL:
Packit 13e616
		return dell_str;
Packit 13e616
	case OSM_VENDOR_ID_SUPERMICRO:
Packit 13e616
		return supermicro_str;
Packit 13e616
	case OSM_VENDOR_ID_OPENIB:
Packit 13e616
		return openib_str;
Packit 13e616
	case OSM_VENDOR_ID_BULL:
Packit 13e616
		return bull_str;
Packit 13e616
	default:
Packit 13e616
		return unknown_str;
Packit 13e616
	}
Packit 13e616
}
Packit 13e616
Packit 13e616
static const char *mtu_str_fixed_width[] = {
Packit 13e616
	"??? ",
Packit 13e616
	"256 ",
Packit 13e616
	"512 ",
Packit 13e616
	"1024",
Packit 13e616
	"2048",
Packit 13e616
	"4096"
Packit 13e616
};
Packit 13e616
Packit 13e616
const char *osm_get_mtu_str(IN uint8_t mtu)
Packit 13e616
{
Packit 13e616
	if (mtu > IB_MTU_LEN_4096)
Packit 13e616
		return mtu_str_fixed_width[0];
Packit 13e616
	else
Packit 13e616
		return mtu_str_fixed_width[mtu];
Packit 13e616
}
Packit 13e616
Packit 13e616
static const char *lwa_str_fixed_width[] = {
Packit 13e616
	"???",
Packit 13e616
	"1x ",
Packit 13e616
	"4x ",
Packit 13e616
	"???",
Packit 13e616
	"8x ",
Packit 13e616
	"???",
Packit 13e616
	"???",
Packit 13e616
	"???",
Packit 13e616
	"12x",
Packit 13e616
	"???",
Packit 13e616
	"???",
Packit 13e616
	"???",
Packit 13e616
	"???",
Packit 13e616
	"???",
Packit 13e616
	"???",
Packit 13e616
	"???",
Packit 13e616
	"2x "
Packit 13e616
};
Packit 13e616
Packit 13e616
const char *osm_get_lwa_str(IN uint8_t lwa)
Packit 13e616
{
Packit 13e616
	if (lwa > 16)
Packit 13e616
		return lwa_str_fixed_width[0];
Packit 13e616
	else
Packit 13e616
		return lwa_str_fixed_width[lwa];
Packit 13e616
}
Packit 13e616
Packit 13e616
static const char *lsa_str_fixed_width[] = {
Packit 13e616
	"Ext ",
Packit 13e616
	"2.5 ",
Packit 13e616
	"5   ",
Packit 13e616
	"????",
Packit 13e616
	"10  "
Packit 13e616
};
Packit 13e616
Packit 13e616
static const char *lsea_str_fixed_width[] = {
Packit 13e616
	"Std ",
Packit 13e616
	"14  ",
Packit 13e616
	"25  ",
Packit 13e616
	"????",
Packit 13e616
	"50  "
Packit 13e616
};
Packit 13e616
Packit 13e616
const char *osm_get_lsa_str(IN uint8_t lsa, IN uint8_t lsea, IN uint8_t state,
Packit 13e616
			    IN uint8_t fdr10)
Packit 13e616
{
Packit 13e616
	if (lsa > IB_LINK_SPEED_ACTIVE_10 || state == IB_LINK_DOWN)
Packit 13e616
		return lsa_str_fixed_width[3];
Packit 13e616
	if (lsea == IB_LINK_SPEED_EXT_ACTIVE_NONE) {
Packit 13e616
		if (fdr10)
Packit 13e616
			return "FDR10";
Packit 13e616
		else
Packit 13e616
			return lsa_str_fixed_width[lsa];
Packit 13e616
	}
Packit 13e616
	if (lsea > IB_LINK_SPEED_EXT_ACTIVE_50)
Packit 13e616
		return lsa_str_fixed_width[3];
Packit 13e616
	return lsea_str_fixed_width[lsea];
Packit 13e616
}
Packit 13e616
Packit 13e616
static const char *sm_mgr_signal_str[] = {
Packit 13e616
	"OSM_SM_SIGNAL_NONE",	/* 0 */
Packit 13e616
	"OSM_SM_SIGNAL_DISCOVERY_COMPLETED",	/* 1 */
Packit 13e616
	"OSM_SM_SIGNAL_POLLING_TIMEOUT",	/* 2 */
Packit 13e616
	"OSM_SM_SIGNAL_DISCOVER",	/* 3 */
Packit 13e616
	"OSM_SM_SIGNAL_DISABLE",	/* 4 */
Packit 13e616
	"OSM_SM_SIGNAL_HANDOVER",	/* 5 */
Packit 13e616
	"OSM_SM_SIGNAL_HANDOVER_SENT",	/* 6 */
Packit 13e616
	"OSM_SM_SIGNAL_ACKNOWLEDGE",	/* 7 */
Packit 13e616
	"OSM_SM_SIGNAL_STANDBY",	/* 8 */
Packit 13e616
	"OSM_SM_SIGNAL_MASTER_OR_HIGHER_SM_DETECTED",	/* 9 */
Packit 13e616
	"OSM_SM_SIGNAL_WAIT_FOR_HANDOVER",	/* 10 */
Packit 13e616
	"UNKNOWN STATE!!"	/* 11 */
Packit 13e616
};
Packit 13e616
Packit 13e616
const char *osm_get_sm_mgr_signal_str(IN osm_sm_signal_t signal)
Packit 13e616
{
Packit 13e616
	if (signal > OSM_SM_SIGNAL_MAX)
Packit 13e616
		signal = OSM_SM_SIGNAL_MAX;
Packit 13e616
	return sm_mgr_signal_str[signal];
Packit 13e616
}
Packit 13e616
Packit 13e616
static const char *sm_mgr_state_str[] = {
Packit 13e616
	"NOTACTIVE",		/* 0 */
Packit 13e616
	"DISCOVERING",		/* 1 */
Packit 13e616
	"STANDBY",		/* 2 */
Packit 13e616
	"MASTER",		/* 3 */
Packit 13e616
	"UNKNOWN STATE!!"	/* 4 */
Packit 13e616
};
Packit 13e616
Packit 13e616
const char *osm_get_sm_mgr_state_str(IN uint16_t state)
Packit 13e616
{
Packit 13e616
	return state < ARR_SIZE(sm_mgr_state_str) ?
Packit 13e616
	    sm_mgr_state_str[state] :
Packit 13e616
	    sm_mgr_state_str[ARR_SIZE(sm_mgr_state_str) - 1];
Packit 13e616
}
Packit 13e616
Packit 13e616
int ib_mtu_is_valid(IN const int mtu)
Packit 13e616
{
Packit 13e616
	if (mtu < IB_MIN_MTU || mtu > IB_MAX_MTU)
Packit 13e616
		return 0;
Packit 13e616
	return 1;
Packit 13e616
}
Packit 13e616
Packit 13e616
int ib_rate_is_valid(IN const int rate)
Packit 13e616
{
Packit 13e616
	if (rate < IB_MIN_RATE || rate > IB_MAX_RATE)
Packit 13e616
		return 0;
Packit 13e616
	return 1;
Packit 13e616
}
Packit 13e616
Packit 13e616
int ib_path_compare_rates(IN const int rate1, IN const int rate2)
Packit 13e616
{
Packit 13e616
	int orate1 = 0, orate2 = 0;
Packit 13e616
Packit 13e616
	CL_ASSERT(rate1 >= IB_MIN_RATE && rate1 <= IB_MAX_RATE);
Packit 13e616
	CL_ASSERT(rate2 >= IB_MIN_RATE && rate2 <= IB_MAX_RATE);
Packit 13e616
Packit 13e616
	if (rate1 <= IB_MAX_RATE)
Packit 13e616
		orate1 = ordered_rates[rate1];
Packit 13e616
	if (rate2 <= IB_MAX_RATE)
Packit 13e616
		orate2 = ordered_rates[rate2];
Packit 13e616
	if (orate1 < orate2)
Packit 13e616
		return -1;
Packit 13e616
	if (orate1 == orate2)
Packit 13e616
		return 0;
Packit 13e616
	return 1;
Packit 13e616
}
Packit 13e616
Packit 13e616
static int find_ordered_rate(IN const int rate)
Packit 13e616
{
Packit 13e616
	int i;
Packit 13e616
Packit 13e616
	for (i = IB_MIN_RATE; i <= IB_MAX_RATE; i++) {
Packit 13e616
		if (ordered_rates[i] == rate)
Packit 13e616
			return i;
Packit 13e616
	}
Packit 13e616
	return 0;
Packit 13e616
}
Packit 13e616
Packit 13e616
int ib_path_rate_get_prev(IN const int rate)
Packit 13e616
{
Packit 13e616
	int orate;
Packit 13e616
Packit 13e616
	CL_ASSERT(rate >= IB_MIN_RATE && rate <= IB_MAX_RATE);
Packit 13e616
Packit 13e616
	if (rate <= IB_MIN_RATE)
Packit 13e616
		return 0;
Packit 13e616
	if (rate > IB_MAX_RATE)
Packit 13e616
		return 0;
Packit 13e616
	orate = ordered_rates[rate];
Packit 13e616
	orate--;
Packit 13e616
	return find_ordered_rate(orate);
Packit 13e616
}
Packit 13e616
Packit 13e616
int ib_path_rate_get_next(IN const int rate)
Packit 13e616
{
Packit 13e616
	int orate;
Packit 13e616
Packit 13e616
	CL_ASSERT(rate >= IB_MIN_RATE && rate <= IB_MAX_RATE);
Packit 13e616
Packit 13e616
	if (rate < IB_MIN_RATE)
Packit 13e616
		return 0;
Packit 13e616
	if (rate >= IB_MAX_RATE)
Packit 13e616
		return 0;
Packit 13e616
	orate = ordered_rates[rate];
Packit 13e616
	orate++;
Packit 13e616
	return find_ordered_rate(orate);
Packit 13e616
}
Packit 13e616
Packit 13e616
int ib_path_rate_max_12xedr(IN const int rate)
Packit 13e616
{
Packit 13e616
	CL_ASSERT(rate >= IB_MIN_RATE && rate <= IB_MAX_RATE);
Packit 13e616
Packit 13e616
	if (rate <= IB_PATH_RECORD_RATE_300_GBS)
Packit 13e616
		return rate;
Packit 13e616
Packit 13e616
	switch (rate) {
Packit 13e616
	case IB_PATH_RECORD_RATE_28_GBS:
Packit 13e616
		return IB_PATH_RECORD_RATE_25_GBS;
Packit 13e616
	case IB_PATH_RECORD_RATE_50_GBS:
Packit 13e616
		return IB_PATH_RECORD_RATE_40_GBS;
Packit 13e616
	case IB_PATH_RECORD_RATE_400_GBS:
Packit 13e616
	case IB_PATH_RECORD_RATE_600_GBS:
Packit 13e616
		return IB_PATH_RECORD_RATE_300_GBS;
Packit 13e616
	default:
Packit 13e616
		break;
Packit 13e616
	}
Packit 13e616
Packit 13e616
	return 0;
Packit 13e616
}
Packit 13e616
Packit 13e616
int ib_path_rate_2x_hdr_fixups(IN const ib_port_info_t * p_pi,
Packit 13e616
			       IN const int rate)
Packit 13e616
{
Packit 13e616
	int new_rate = rate;
Packit 13e616
Packit 13e616
	CL_ASSERT(rate >= IB_MIN_RATE && rate <= IB_MAX_RATE);
Packit 13e616
Packit 13e616
	switch (rate) {
Packit 13e616
	case IB_PATH_RECORD_RATE_28_GBS:
Packit 13e616
		/* 2x not supported but 2x only rate */
Packit 13e616
		if (!(p_pi->capability_mask & IB_PORT_CAP_HAS_CAP_MASK2) ||
Packit 13e616
		    (p_pi->capability_mask & IB_PORT_CAP_HAS_CAP_MASK2 &&
Packit 13e616
		    !(p_pi->capability_mask2 & IB_PORT_CAP2_IS_LINK_WIDTH_2X_SUPPORTED))) {
Packit 13e616
			if (p_pi->capability_mask & IB_PORT_CAP_HAS_EXT_SPEEDS)
Packit 13e616
				new_rate = IB_PATH_RECORD_RATE_25_GBS;
Packit 13e616
			else
Packit 13e616
				new_rate = IB_PATH_RECORD_RATE_20_GBS;
Packit 13e616
		}
Packit 13e616
		break;
Packit 13e616
	case IB_PATH_RECORD_RATE_50_GBS:
Packit 13e616
		/* neither 2x or HDR supported */
Packit 13e616
		if (!(p_pi->capability_mask & IB_PORT_CAP_HAS_CAP_MASK2) ||
Packit 13e616
		    (p_pi->capability_mask & IB_PORT_CAP_HAS_CAP_MASK2 &&
Packit 13e616
		    !(p_pi->capability_mask2 & IB_PORT_CAP2_IS_LINK_WIDTH_2X_SUPPORTED) &&
Packit 13e616
		    !(p_pi->capability_mask2 & IB_PORT_CAP2_IS_LINK_SPEED_HDR_SUPPORTED)))
Packit 13e616
			new_rate = IB_PATH_RECORD_RATE_40_GBS;
Packit 13e616
		break;
Packit 13e616
	case IB_PATH_RECORD_RATE_400_GBS:
Packit 13e616
	case IB_PATH_RECORD_RATE_600_GBS:
Packit 13e616
		/* HDR not supported but HDR only rate */
Packit 13e616
		if (!(p_pi->capability_mask & IB_PORT_CAP_HAS_CAP_MASK2) ||
Packit 13e616
		    (p_pi->capability_mask & IB_PORT_CAP_HAS_CAP_MASK2 &&
Packit 13e616
		    !(p_pi->capability_mask2 & IB_PORT_CAP2_IS_LINK_SPEED_HDR_SUPPORTED)))
Packit 13e616
			new_rate = IB_PATH_RECORD_RATE_300_GBS;
Packit 13e616
		break;
Packit 13e616
	default:
Packit 13e616
		break;
Packit 13e616
	}
Packit 13e616
Packit 13e616
	return new_rate;
Packit 13e616
}