| /* |
| * Copyright (c) 2004, 2005, 2010 Intel Corporation. All rights reserved. |
| * Copyright (c) 2013 Lawrence Livermore National Security. All rights reserved. |
| * Copyright (c) 2014 Mellanox Technologies LTD. All rights reserved. |
| * |
| * This software is available to you under a choice of one of two |
| * licenses. You may choose to be licensed under the terms of the GNU |
| * General Public License (GPL) Version 2, available from the file |
| * COPYING in the main directory of this source tree, or the |
| * OpenIB.org BSD license below: |
| * |
| * Redistribution and use in source and binary forms, with or |
| * without modification, are permitted provided that the following |
| * conditions are met: |
| * |
| * - Redistributions of source code must retain the above |
| * copyright notice, this list of conditions and the following |
| * disclaimer. |
| * |
| * - Redistributions in binary form must reproduce the above |
| * copyright notice, this list of conditions and the following |
| * disclaimer in the documentation and/or other materials |
| * provided with the distribution. |
| * |
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
| * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
| * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS |
| * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN |
| * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
| * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
| * SOFTWARE. |
| * |
| */ |
| |
| #include <endian.h> |
| #include <stdio.h> |
| #include <infiniband/umad.h> |
| #include <infiniband/umad_types.h> |
| #include <infiniband/umad_sm.h> |
| #include <infiniband/umad_sa.h> |
| #include <infiniband/umad_cm.h> |
| #include "umad_str.h" |
| |
| const char * umad_class_str(uint8_t mgmt_class) |
| { |
| switch (mgmt_class) { |
| case UMAD_CLASS_SUBN_LID_ROUTED: |
| case UMAD_CLASS_SUBN_DIRECTED_ROUTE: |
| return("Subn"); |
| case UMAD_CLASS_SUBN_ADM: |
| return("SubnAdm"); |
| case UMAD_CLASS_PERF_MGMT: |
| return("Perf"); |
| case UMAD_CLASS_BM: |
| return("BM"); |
| case UMAD_CLASS_DEVICE_MGMT: |
| return("DevMgt"); |
| case UMAD_CLASS_CM: |
| return("ComMgt"); |
| case UMAD_CLASS_SNMP: |
| return("SNMP"); |
| case UMAD_CLASS_DEVICE_ADM: |
| return("DevAdm"); |
| case UMAD_CLASS_BOOT_MGMT: |
| return("BootMgt"); |
| case UMAD_CLASS_BIS: |
| return("BIS"); |
| case UMAD_CLASS_CONG_MGMT: |
| return("CongestionManagment"); |
| default: |
| break; |
| } |
| |
| if ((UMAD_CLASS_VENDOR_RANGE1_START <= mgmt_class |
| && mgmt_class <= UMAD_CLASS_VENDOR_RANGE1_END) |
| || (UMAD_CLASS_VENDOR_RANGE2_START <= mgmt_class |
| && mgmt_class <= UMAD_CLASS_VENDOR_RANGE2_END)) |
| return("Vendor"); |
| |
| if (UMAD_CLASS_APPLICATION_START <= mgmt_class |
| && mgmt_class <= UMAD_CLASS_APPLICATION_END) { |
| return("Application"); |
| } |
| return ("<unknown>"); |
| } |
| |
| static const char * umad_common_method_str(uint8_t method) |
| { |
| switch(method) { |
| case UMAD_METHOD_GET: |
| return ("Get"); |
| case UMAD_METHOD_SET: |
| return ("Set"); |
| case UMAD_METHOD_GET_RESP: |
| return ("GetResp"); |
| case UMAD_METHOD_SEND: |
| return ("Send"); |
| case UMAD_METHOD_TRAP: |
| return ("Trap"); |
| case UMAD_METHOD_REPORT: |
| return ("Report"); |
| case UMAD_METHOD_REPORT_RESP: |
| return ("ReportResp"); |
| case UMAD_METHOD_TRAP_REPRESS: |
| return ("TrapRepress"); |
| default: |
| return ("<unknown"); |
| } |
| } |
| |
| static const char * umad_sa_method_str(uint8_t method) |
| { |
| switch(method) { |
| case UMAD_SA_METHOD_GET_TABLE: |
| return ("GetTable"); |
| case UMAD_SA_METHOD_GET_TABLE_RESP: |
| return ("GetTableResp"); |
| case UMAD_SA_METHOD_DELETE: |
| return ("Delete"); |
| case UMAD_SA_METHOD_DELETE_RESP: |
| return ("DeleteResp"); |
| case UMAD_SA_METHOD_GET_MULTI: |
| return ("GetMulti"); |
| case UMAD_SA_METHOD_GET_MULTI_RESP: |
| return ("GetMultiResp"); |
| case UMAD_SA_METHOD_GET_TRACE_TABLE: |
| return ("GetTraceTable"); |
| default: |
| return (umad_common_method_str(method)); |
| } |
| } |
| |
| const char * umad_method_str(uint8_t mgmt_class, uint8_t method) |
| { |
| if (mgmt_class == UMAD_CLASS_SUBN_ADM) |
| return(umad_sa_method_str(method)); |
| |
| return (umad_common_method_str(method)); |
| } |
| |
| const char * umad_common_mad_status_str(__be16 _status) |
| { |
| uint16_t status = be16toh(_status); |
| |
| if (status & UMAD_STATUS_BUSY) |
| return ("Busy"); |
| |
| if (status & UMAD_STATUS_REDIRECT) |
| return ("Redirection required"); |
| |
| switch(status & UMAD_STATUS_INVALID_FIELD_MASK) { |
| case UMAD_STATUS_BAD_VERSION: |
| return ("Bad Version"); |
| case UMAD_STATUS_METHOD_NOT_SUPPORTED: |
| return ("Method not supported"); |
| case UMAD_STATUS_ATTR_NOT_SUPPORTED: |
| return ("Method/Attribute combo not supported"); |
| case UMAD_STATUS_INVALID_ATTR_VALUE: |
| return ("Invalid attribute/modifier field"); |
| } |
| return ("Success"); |
| } |
| |
| const char * umad_sa_mad_status_str(__be16 _status) |
| { |
| uint16_t status = be16toh(_status); |
| switch((status & UMAD_STATUS_CLASS_MASK) >> 8) { |
| case UMAD_SA_STATUS_SUCCESS: |
| return ("Success"); |
| case UMAD_SA_STATUS_NO_RESOURCES: |
| return ("No Resources"); |
| case UMAD_SA_STATUS_REQ_INVALID: |
| return ("Request Invalid"); |
| case UMAD_SA_STATUS_NO_RECORDS: |
| return ("No Records"); |
| case UMAD_SA_STATUS_TOO_MANY_RECORDS: |
| return ("Too Many Records"); |
| case UMAD_SA_STATUS_INVALID_GID: |
| return ("Invalid GID"); |
| case UMAD_SA_STATUS_INSUF_COMPS: |
| return ("Insufficient Components"); |
| case UMAD_SA_STATUS_REQ_DENIED: |
| return ("Request Denied"); |
| case UMAD_SA_STATUS_PRI_SUGGESTED: |
| return ("Priority Suggested"); |
| } |
| return ("Undefined Error"); |
| } |
| |
| static const char *umad_common_attr_str(__be16 attr_id) |
| { |
| switch(be16toh(attr_id)) { |
| case UMAD_ATTR_CLASS_PORT_INFO: |
| return "Class Port Info"; |
| case UMAD_ATTR_NOTICE: |
| return "Notice"; |
| case UMAD_ATTR_INFORM_INFO: |
| return "Inform Info"; |
| default: |
| return "<unknown>"; |
| } |
| } |
| |
| static const char * umad_sm_attr_str(__be16 attr_id) |
| { |
| switch(be16toh(attr_id)) { |
| case UMAD_SM_ATTR_NODE_DESC: |
| return ("NodeDescription"); |
| case UMAD_SM_ATTR_NODE_INFO: |
| return ("NodeInfo"); |
| case UMAD_SM_ATTR_SWITCH_INFO: |
| return ("SwitchInfo"); |
| case UMAD_SM_ATTR_GUID_INFO: |
| return ("GUIDInfo"); |
| case UMAD_SM_ATTR_PORT_INFO: |
| return ("PortInfo"); |
| case UMAD_SM_ATTR_PKEY_TABLE: |
| return ("P_KeyTable"); |
| case UMAD_SM_ATTR_SLVL_TABLE: |
| return ("SLtoVLMappingTable"); |
| case UMAD_SM_ATTR_VL_ARB_TABLE: |
| return ("VLArbitrationTable"); |
| case UMAD_SM_ATTR_LINEAR_FT: |
| return ("LinearForwardingTable"); |
| case UMAD_SM_ATTR_RANDOM_FT: |
| return ("RandomForwardingTable"); |
| case UMAD_SM_ATTR_MCAST_FT: |
| return ("MulticastForwardingTable"); |
| case UMAD_SM_ATTR_SM_INFO: |
| return ("SMInfo"); |
| case UMAD_SM_ATTR_VENDOR_DIAG: |
| return ("VendorDiag"); |
| case UMAD_SM_ATTR_LED_INFO: |
| return ("LedInfo"); |
| case UMAD_SM_ATTR_LINK_SPD_WIDTH_TABLE: |
| return ("LinkSpeedWidthPairsTable"); |
| case UMAD_SM_ATTR_VENDOR_MADS_TABLE: |
| return ("VendorSpecificMadsTable"); |
| case UMAD_SM_ATTR_HIERARCHY_INFO: |
| return ("HierarchyInfo"); |
| case UMAD_SM_ATTR_CABLE_INFO: |
| return ("CableInfo"); |
| case UMAD_SM_ATTR_PORT_INFO_EXT: |
| return ("PortInfoExtended"); |
| default: |
| return (umad_common_attr_str(attr_id)); |
| } |
| } |
| |
| static const char * umad_sa_attr_str(__be16 attr_id) |
| { |
| switch(be16toh(attr_id)) { |
| case UMAD_SA_ATTR_NODE_REC: |
| return ("NodeRecord"); |
| case UMAD_SA_ATTR_PORT_INFO_REC: |
| return ("PortInfoRecord"); |
| case UMAD_SA_ATTR_SLVL_REC: |
| return ("SLtoVLMappingTableRecord"); |
| case UMAD_SA_ATTR_SWITCH_INFO_REC: |
| return ("SwitchInfoRecord"); |
| case UMAD_SA_ATTR_LINEAR_FT_REC: |
| return ("LinearForwardingTableRecord"); |
| case UMAD_SA_ATTR_RANDOM_FT_REC: |
| return ("RandomForwardingTableRecord"); |
| case UMAD_SA_ATTR_MCAST_FT_REC: |
| return ("MulticastForwardingTableRecord"); |
| case UMAD_SA_ATTR_SM_INFO_REC: |
| return ("SMInfoRecord"); |
| case UMAD_SA_ATTR_INFORM_INFO_REC: |
| return ("InformInfoRecord"); |
| case UMAD_SA_ATTR_LINK_REC: |
| return ("LinkRecord"); |
| case UMAD_SA_ATTR_GUID_INFO_REC: |
| return ("GuidInfoRecord"); |
| case UMAD_SA_ATTR_SERVICE_REC: |
| return ("ServiceRecord"); |
| case UMAD_SA_ATTR_PKEY_TABLE_REC: |
| return ("P_KeyTableRecord"); |
| case UMAD_SA_ATTR_PATH_REC: |
| return ("PathRecord"); |
| case UMAD_SA_ATTR_VL_ARB_REC: |
| return ("VLArbitrationTableRecord"); |
| case UMAD_SA_ATTR_MCMEMBER_REC: |
| return ("MCMemberRecord"); |
| case UMAD_SA_ATTR_TRACE_REC: |
| return ("TraceRecord"); |
| case UMAD_SA_ATTR_MULTI_PATH_REC: |
| return ("MultiPathRecord"); |
| case UMAD_SA_ATTR_SERVICE_ASSOC_REC: |
| return ("ServiceAssociationRecord"); |
| case UMAD_SA_ATTR_LINK_SPD_WIDTH_TABLE_REC: |
| return ("LinkSpeedWidthPairsTableRecord"); |
| case UMAD_SA_ATTR_HIERARCHY_INFO_REC: |
| return ("HierarchyInfoRecord"); |
| case UMAD_SA_ATTR_CABLE_INFO_REC: |
| return ("CableInfoRecord"); |
| case UMAD_SA_ATTR_PORT_INFO_EXT_REC: |
| return ("PortInfoExtendedRecord"); |
| default: |
| return (umad_common_attr_str(attr_id)); |
| } |
| } |
| |
| static const char * umad_cm_attr_str(__be16 attr_id) |
| { |
| switch(be16toh(attr_id)) { |
| case UMAD_CM_ATTR_REQ: |
| return "ConnectRequest"; |
| case UMAD_CM_ATTR_MRA: |
| return "MsgRcptAck"; |
| case UMAD_CM_ATTR_REJ: |
| return "ConnectReject"; |
| case UMAD_CM_ATTR_REP: |
| return "ConnectReply"; |
| case UMAD_CM_ATTR_RTU: |
| return "ReadyToUse"; |
| case UMAD_CM_ATTR_DREQ: |
| return "DisconnectRequest"; |
| case UMAD_CM_ATTR_DREP: |
| return "DisconnectReply"; |
| case UMAD_CM_ATTR_SIDR_REQ: |
| return "ServiceIDResReq"; |
| case UMAD_CM_ATTR_SIDR_REP: |
| return "ServiceIDResReqResp"; |
| case UMAD_CM_ATTR_LAP: |
| return "LoadAlternatePath"; |
| case UMAD_CM_ATTR_APR: |
| return "AlternatePathResponse"; |
| case UMAD_CM_ATTR_SAP: |
| return "SuggestAlternatePath"; |
| case UMAD_CM_ATTR_SPR: |
| return "SuggestPathResponse"; |
| default: |
| return (umad_common_attr_str(attr_id)); |
| } |
| } |
| |
| const char * umad_attribute_str(uint8_t mgmt_class, __be16 attr_id) |
| { |
| switch (mgmt_class) { |
| case UMAD_CLASS_SUBN_LID_ROUTED: |
| case UMAD_CLASS_SUBN_DIRECTED_ROUTE: |
| return(umad_sm_attr_str(attr_id)); |
| case UMAD_CLASS_SUBN_ADM: |
| return(umad_sa_attr_str(attr_id)); |
| case UMAD_CLASS_CM: |
| return(umad_cm_attr_str(attr_id)); |
| } |
| |
| return (umad_common_attr_str(attr_id)); |
| } |