Codebase list ibutils / upstream/1.5.7+0.2.gbd7e502 ibmgtsim / src / simmsg.cpp
upstream/1.5.7+0.2.gbd7e502

Tree @upstream/1.5.7+0.2.gbd7e502 (Download .tar.gz)

simmsg.cpp @upstream/1.5.7+0.2.gbd7e502

c3ebda3
687b2d8
c3ebda3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
687b2d8
c3ebda3
 
 
 
 
 
 
 
 
 
 
687b2d8
c3ebda3
687b2d8
c3ebda3
687b2d8
 
 
 
 
 
 
 
 
 
 
 
c3ebda3
 
687b2d8
c3ebda3
687b2d8
c3ebda3
687b2d8
 
 
 
 
 
 
 
 
 
c3ebda3
 
687b2d8
c3ebda3
687b2d8
c3ebda3
687b2d8
 
 
c3ebda3
 
687b2d8
c3ebda3
687b2d8
c3ebda3
687b2d8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c3ebda3
 
687b2d8
c3ebda3
687b2d8
c3ebda3
687b2d8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c3ebda3
 
687b2d8
c3ebda3
687b2d8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c3ebda3
687b2d8
 
 
 
c3ebda3
 
687b2d8
c3ebda3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
687b2d8
c3ebda3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
687b2d8
c3ebda3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
/*
 * Copyright (c) 2004-2010 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 <inttypes.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>
#include <unistd.h>
#include <string>
#include "simmsg.h"
#include <inttypes.h>


#ifndef PRIx64
# if __WORDSIZE == 64
#  define __PRI64_PREFIX   "l"
#  define __PRIPTR_PREFIX  "l"
# else
#  define __PRI64_PREFIX   "ll"
#  define __PRIPTR_PREFIX
# endif
# define PRIx64 __PRI64_PREFIX "x"
#endif


std::string
__ibms_dump_conn_msg(IN const ibms_client_msg_t *p_msg)
{
    char buff[32];
    char msg[512];
    strncpy(buff,p_msg->msg.conn.host,31);
    buff[31] = '\0';

    sprintf(msg,"MSG: CONN"
            " Port:%u Guid:0x%016" PRIx64 " Host:%s InPort:%u",
            p_msg->msg.conn.port_num,
            p_msg->msg.conn.port_guid,
            p_msg->msg.conn.host,
            p_msg->msg.conn.in_msg_port);
    return msg;
}


std::string
__ibms_dump_disconn_msg(IN const ibms_client_msg_t *p_msg)
{
    char buff[32];
    char msg[512];
    strncpy(buff,p_msg->msg.conn.host,31);
    buff[31] = '\0';

    sprintf(msg,"MSG: DISCONNECT "
            " Port:%u Guid:0x%016" PRIx64 "",
            p_msg->msg.disc.port_num,
            p_msg->msg.disc.port_guid);
    return msg;
}


std::string
__ibms_dump_cap_msg(IN const ibms_client_msg_t *p_msg)
{
    char msg[512];
    sprintf(msg, "MSG: CAP");
    return msg;
}


std::string
__ibms_dump_bind_msg(IN const ibms_client_msg_t *p_msg)
{
    char msg[512];
    sprintf(msg, "MSG: BIND");
    if (p_msg->msg.bind.mask & IBMS_BIND_MASK_PORT)
        sprintf(msg,"%s Port:%u ",msg, p_msg->msg.bind.port);
    if (p_msg->msg.bind.mask & IBMS_BIND_MASK_QP)
        sprintf(msg, "%s QP:%u ", msg, p_msg->msg.bind.qpn);
    if (p_msg->msg.bind.mask & IBMS_BIND_MASK_CLASS)
        sprintf(msg, "%s Class:0x%X ", msg, p_msg->msg.bind.mgt_class);
    if (p_msg->msg.bind.mask & IBMS_BIND_MASK_METH)
        sprintf(msg, "%s Method:0x%X ", msg, p_msg->msg.bind.method);
    if (p_msg->msg.bind.mask & IBMS_BIND_MASK_ATTR)
        sprintf(msg, "%s Attribute:0x%X ", msg, p_msg->msg.bind.attribute);
    if (p_msg->msg.bind.mask & IBMS_BIND_MASK_INPUT) {
        if (p_msg->msg.bind.only_input)
            sprintf(msg, "%s Direction:IN",msg);
        else
            sprintf(msg, "%s Direction:IN/OUT", msg);
    }
    return msg;
}


std::string
__ibms_dump_mad_msg(IN const ibms_client_msg_t *p_msg)
{
    char msg[1024];
    sprintf(msg,
            "MSG: MAD"
            " ADDRESS:"
            " SLID:0x%04X"
            " DLID:0x%04X"
            " SQPN:%u"
            " DQPN:%u"
            " PKEY:%u"
            " SL:%u"
            " CLASS:0x%02X"
            " METHOD:0x%02X"
            " STATUS:0x%04X"
            " TID:0x%016"PRIx64"",
            p_msg->msg.mad.addr.slid,
            p_msg->msg.mad.addr.dlid,
            p_msg->msg.mad.addr.sqpn,
            p_msg->msg.mad.addr.dqpn,
            p_msg->msg.mad.addr.pkey_index,
            p_msg->msg.mad.addr.sl,
            p_msg->msg.mad.header.mgmt_class,
            p_msg->msg.mad.header.method,
            p_msg->msg.mad.header.status,
            p_msg->msg.mad.header.trans_id);
    return msg;
}


std::string
ibms_get_msg_str(IN const ibms_client_msg_t *p_msg)
{
    std::string msgStr;

    switch (p_msg->msg_type) {
    case IBMS_CLI_MSG_CONN:
        msgStr = __ibms_dump_conn_msg(p_msg);
        break;
    case IBMS_CLI_MSG_DISCONN:
        msgStr = __ibms_dump_disconn_msg(p_msg);
        break;
    case IBMS_CLI_MSG_BIND:
        msgStr = __ibms_dump_bind_msg(p_msg);
        break;
    case IBMS_CLI_MSG_CAP:
        msgStr = __ibms_dump_cap_msg(p_msg);
        break;
    case IBMS_CLI_MSG_MAD:
        msgStr = __ibms_dump_mad_msg(p_msg);
        break;
    default:
        msgStr = std::string("MSG: UNDEFINED");
    }
    return msgStr;
}


void
ibms_dump_msg(IN const ibms_client_msg_t *p_msg)
{
    printf("%s", ibms_get_msg_str(p_msg).c_str());
}


const char *
ibms_get_resp_str(IN const ibms_response_t *p_response)
{
    if (p_response->status)
        return "REMOTE_ERROR";
    else
        return "SUCCESS";
}


std::string
ibms_get_mad_header_str(ib_mad_t madHeader)
{
    char msg[1024];

    sprintf(msg,
            "--------------------------------------------------------\n"
            "  base_ver                 0x%x\n"
            "  mgmt_class               0x%x\n"
            "  class_ver                0x%x\n"
            "  method                   0x%x\n"
            "  status                   0x%x\n"
            "  class_spec               0x%x\n"
            "  trans_id                 0x%016"PRIx64"\n"
            "  attr_id                  0x%x\n"
            "  attr_mod                 0x%x\n"
            "--------------------------------------------------------\n",
            madHeader.base_ver,
            madHeader.mgmt_class,
            madHeader.class_ver,
            madHeader.method,
            CL_NTOH16(madHeader.status),
            CL_NTOH16(madHeader.class_spec),
            CL_NTOH64(madHeader.trans_id),
            CL_NTOH16(madHeader.attr_id),
            CL_NTOH32(madHeader.attr_mod));
    return (std::string)msg;
};


std::string
ibms_get_node_info_str(ib_node_info_t*     pNodeInfo)
{
    char msg[1024];

    sprintf(msg,
            "--------------------------------------------------------\n"
            "  node_type                0x%x\n"
            "  num_ports                0x%x\n"
            "  local port number        0x%x\n"
            "--------------------------------------------------------\n",
            pNodeInfo->node_type,
            pNodeInfo->num_ports,
            ib_node_info_get_local_port_num(pNodeInfo));
    return (std::string)msg;
}


std::string
ibms_get_port_info_str(ib_port_info_t*     pPortInfo)
{
    char msg[1024];

    sprintf(msg,
            "--------------------------------------------------------\n"
            "  lid                      0x%x\n"
            "  Port State               0x%x\n"
            "  Port Phy State           0x%x\n"
            "  nMTU                     0x%x\n"
            "  VL Cap                   0x%x\n"
            "  LMC                      0x%x\n"
            "--------------------------------------------------------\n",
            CL_NTOH16(pPortInfo->base_lid),
            ib_port_info_get_port_state(pPortInfo),
            ib_port_info_get_port_phys_state(pPortInfo),
            ib_port_info_get_neighbor_mtu(pPortInfo),
            ib_port_info_get_vl_cap(pPortInfo),
            ib_port_info_get_lmc(pPortInfo)
            );
    return (std::string)msg;
};