| /* |
| * Copyright (c) 2008 Lawrence Livermore National Laboratory |
| * |
| * 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 <infiniband/verbs.h> |
| |
| const char *ibv_node_type_str(enum ibv_node_type node_type) |
| { |
| static const char *const node_type_str[] = { |
| [IBV_NODE_CA] = "InfiniBand channel adapter", |
| [IBV_NODE_SWITCH] = "InfiniBand switch", |
| [IBV_NODE_ROUTER] = "InfiniBand router", |
| [IBV_NODE_RNIC] = "iWARP NIC", |
| [IBV_NODE_USNIC] = "usNIC", |
| [IBV_NODE_USNIC_UDP] = "usNIC UDP", |
| }; |
| |
| if (node_type < IBV_NODE_CA || node_type > IBV_NODE_USNIC_UDP) |
| return "unknown"; |
| |
| return node_type_str[node_type]; |
| } |
| |
| const char *ibv_port_state_str(enum ibv_port_state port_state) |
| { |
| static const char *const port_state_str[] = { |
| [IBV_PORT_NOP] = "no state change (NOP)", |
| [IBV_PORT_DOWN] = "down", |
| [IBV_PORT_INIT] = "init", |
| [IBV_PORT_ARMED] = "armed", |
| [IBV_PORT_ACTIVE] = "active", |
| [IBV_PORT_ACTIVE_DEFER] = "active defer" |
| }; |
| |
| if (port_state < IBV_PORT_NOP || port_state > IBV_PORT_ACTIVE_DEFER) |
| return "unknown"; |
| |
| return port_state_str[port_state]; |
| } |
| |
| const char *ibv_event_type_str(enum ibv_event_type event) |
| { |
| static const char *const event_type_str[] = { |
| [IBV_EVENT_CQ_ERR] = "CQ error", |
| [IBV_EVENT_QP_FATAL] = "local work queue catastrophic error", |
| [IBV_EVENT_QP_REQ_ERR] = "invalid request local work queue error", |
| [IBV_EVENT_QP_ACCESS_ERR] = "local access violation work queue error", |
| [IBV_EVENT_COMM_EST] = "communication established", |
| [IBV_EVENT_SQ_DRAINED] = "send queue drained", |
| [IBV_EVENT_PATH_MIG] = "path migrated", |
| [IBV_EVENT_PATH_MIG_ERR] = "path migration request error", |
| [IBV_EVENT_DEVICE_FATAL] = "local catastrophic error", |
| [IBV_EVENT_PORT_ACTIVE] = "port active", |
| [IBV_EVENT_PORT_ERR] = "port error", |
| [IBV_EVENT_LID_CHANGE] = "LID change", |
| [IBV_EVENT_PKEY_CHANGE] = "P_Key change", |
| [IBV_EVENT_SM_CHANGE] = "SM change", |
| [IBV_EVENT_SRQ_ERR] = "SRQ catastrophic error", |
| [IBV_EVENT_SRQ_LIMIT_REACHED] = "SRQ limit reached", |
| [IBV_EVENT_QP_LAST_WQE_REACHED] = "last WQE reached", |
| [IBV_EVENT_CLIENT_REREGISTER] = "client reregistration", |
| [IBV_EVENT_GID_CHANGE] = "GID table change" |
| }; |
| |
| if (event < IBV_EVENT_CQ_ERR || event > IBV_EVENT_GID_CHANGE) |
| return "unknown"; |
| |
| return event_type_str[event]; |
| } |
| |
| const char *ibv_wc_status_str(enum ibv_wc_status status) |
| { |
| static const char *const wc_status_str[] = { |
| [IBV_WC_SUCCESS] = "success", |
| [IBV_WC_LOC_LEN_ERR] = "local length error", |
| [IBV_WC_LOC_QP_OP_ERR] = "local QP operation error", |
| [IBV_WC_LOC_EEC_OP_ERR] = "local EE context operation error", |
| [IBV_WC_LOC_PROT_ERR] = "local protection error", |
| [IBV_WC_WR_FLUSH_ERR] = "Work Request Flushed Error", |
| [IBV_WC_MW_BIND_ERR] = "memory management operation error", |
| [IBV_WC_BAD_RESP_ERR] = "bad response error", |
| [IBV_WC_LOC_ACCESS_ERR] = "local access error", |
| [IBV_WC_REM_INV_REQ_ERR] = "remote invalid request error", |
| [IBV_WC_REM_ACCESS_ERR] = "remote access error", |
| [IBV_WC_REM_OP_ERR] = "remote operation error", |
| [IBV_WC_RETRY_EXC_ERR] = "transport retry counter exceeded", |
| [IBV_WC_RNR_RETRY_EXC_ERR] = "RNR retry counter exceeded", |
| [IBV_WC_LOC_RDD_VIOL_ERR] = "local RDD violation error", |
| [IBV_WC_REM_INV_RD_REQ_ERR] = "remote invalid RD request", |
| [IBV_WC_REM_ABORT_ERR] = "aborted error", |
| [IBV_WC_INV_EECN_ERR] = "invalid EE context number", |
| [IBV_WC_INV_EEC_STATE_ERR] = "invalid EE context state", |
| [IBV_WC_FATAL_ERR] = "fatal error", |
| [IBV_WC_RESP_TIMEOUT_ERR] = "response timeout error", |
| [IBV_WC_GENERAL_ERR] = "general error" |
| }; |
| |
| if (status < IBV_WC_SUCCESS || status > IBV_WC_GENERAL_ERR) |
| return "unknown"; |
| |
| return wc_status_str[status]; |
| } |