Blame include/ibdiag_common.h

Packit db064d
/*
Packit db064d
 * Copyright (c) 2006-2007 The Regents of the University of California.
Packit db064d
 * Copyright (c) 2004-2009 Voltaire Inc.  All rights reserved.
Packit db064d
 * Copyright (c) 2002-2010 Mellanox Technologies LTD. All rights reserved.
Packit db064d
 * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
Packit db064d
 * Copyright (c) 2009 HNR Consulting. All rights reserved.
Packit db064d
 * Copyright (c) 2011 Lawrence Livermore National Security. All rights reserved.
Packit db064d
 *
Packit db064d
 * This software is available to you under a choice of one of two
Packit db064d
 * licenses.  You may choose to be licensed under the terms of the GNU
Packit db064d
 * General Public License (GPL) Version 2, available from the file
Packit db064d
 * COPYING in the main directory of this source tree, or the
Packit db064d
 * OpenIB.org BSD license below:
Packit db064d
 *
Packit db064d
 *     Redistribution and use in source and binary forms, with or
Packit db064d
 *     without modification, are permitted provided that the following
Packit db064d
 *     conditions are met:
Packit db064d
 *
Packit db064d
 *      - Redistributions of source code must retain the above
Packit db064d
 *        copyright notice, this list of conditions and the following
Packit db064d
 *        disclaimer.
Packit db064d
 *
Packit db064d
 *      - Redistributions in binary form must reproduce the above
Packit db064d
 *        copyright notice, this list of conditions and the following
Packit db064d
 *        disclaimer in the documentation and/or other materials
Packit db064d
 *        provided with the distribution.
Packit db064d
 *
Packit db064d
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
Packit db064d
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
Packit db064d
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
Packit db064d
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
Packit db064d
 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
Packit db064d
 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
Packit db064d
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
Packit db064d
 * SOFTWARE.
Packit db064d
 *
Packit db064d
 */
Packit db064d
Packit db064d
#ifndef _IBDIAG_COMMON_H_
Packit db064d
#define _IBDIAG_COMMON_H_
Packit db064d
Packit db064d
#include <endian.h>
Packit db064d
Packit db064d
#include <stdarg.h>
Packit db064d
#include <infiniband/mad.h>
Packit db064d
#include <infiniband/iba/ib_types.h>
Packit db064d
#include <infiniband/ibnetdisc.h>
Packit db064d
#include <linux/types.h>
Packit db064d
Packit db064d
extern int ibverbose;
Packit db064d
extern char *ibd_ca;
Packit db064d
extern int ibd_ca_port;
Packit db064d
extern enum MAD_DEST ibd_dest_type;
Packit db064d
extern ib_portid_t *ibd_sm_id;
Packit db064d
extern int ibd_timeout;
Packit db064d
extern uint32_t ibd_ibnetdisc_flags;
Packit db064d
extern uint64_t ibd_mkey;
Packit db064d
extern uint64_t ibd_sakey;
Packit db064d
extern int show_keys;
Packit db064d
extern char *ibd_nd_format;
Packit db064d
Packit db064d
/*========================================================*/
Packit db064d
/*                External interface                      */
Packit db064d
/*========================================================*/
Packit db064d
Packit db064d
#undef DEBUG
Packit db064d
#define DEBUG(fmt, ...) do { \
Packit db064d
	if (ibdebug) IBDEBUG(fmt, ## __VA_ARGS__); \
Packit db064d
} while (0)
Packit db064d
#define VERBOSE(fmt, ...) do { \
Packit db064d
	if (ibverbose) IBVERBOSE(fmt, ## __VA_ARGS__); \
Packit db064d
} while (0)
Packit db064d
#define IBEXIT(fmt, ...) ibexit(__FUNCTION__, fmt, ## __VA_ARGS__)
Packit db064d
Packit db064d
#define NOT_DISPLAYED_STR "<not displayed>"
Packit db064d
Packit db064d
/* not all versions of ib_types.h will have this define */
Packit db064d
#ifndef IB_PM_PC_XMIT_WAIT_SUP
Packit db064d
#define IB_PM_PC_XMIT_WAIT_SUP (htobe16(((uint16_t)1)<<12))
Packit db064d
#endif
Packit db064d
Packit db064d
/* PM ClassPortInfo CapabilityMask Bits */
Packit db064d
#ifndef IS_PM_RSFEC_COUNTERS_SUP
Packit db064d
#define IS_PM_RSFEC_COUNTERS_SUP (htobe16(((uint16_t)1)<<14))
Packit db064d
#endif
Packit db064d
Packit db064d
#ifndef IB_PM_IS_QP1_DROP_SUP
Packit db064d
#define IB_PM_IS_QP1_DROP_SUP (htobe16(((uint16_t)1)<<15))
Packit db064d
#endif
Packit db064d
Packit db064d
/* PM ClassPortInfo CapabilityMask2 Bits */
Packit db064d
#ifndef IB_PM_IS_ADDL_PORT_CTRS_EXT_SUP
Packit db064d
#define IB_PM_IS_ADDL_PORT_CTRS_EXT_SUP (htobe32(((uint32_t)1)<<1))
Packit db064d
#endif
Packit db064d
Packit db064d
/* SM PortInfo CapabilityMask2 Bits */
Packit db064d
#ifndef IB_PORT_CAP2_IS_PORT_INFO_EXT_SUPPORTED
Packit db064d
#define IB_PORT_CAP2_IS_PORT_INFO_EXT_SUPPORTED (htobe16(0x0002))
Packit db064d
#endif
Packit db064d
Packit db064d
/* SM PortInfoExtended Fec Mode Bits */
Packit db064d
#ifndef IB_PORT_EXT_NO_FEC_MODE_ACTIVE
Packit db064d
#define IB_PORT_EXT_NO_FEC_MODE_ACTIVE 0
Packit db064d
#endif
Packit db064d
Packit db064d
#ifndef IB_PORT_EXT_FIRE_CODE_FEC_MODE_ACTIVE
Packit db064d
#define IB_PORT_EXT_FIRE_CODE_FEC_MODE_ACTIVE (htobe16(0x0001))
Packit db064d
#endif
Packit db064d
Packit db064d
#ifndef IB_PORT_EXT_RS_FEC_MODE_ACTIVE
Packit db064d
#define IB_PORT_EXT_RS_FEC_MODE_ACTIVE (htobe16(0x0002))
Packit db064d
#endif
Packit db064d
Packit db064d
#ifndef IB_PORT_EXT_LOW_LATENCY_RS_FEC_MODE_ACTIVE
Packit db064d
#define IB_PORT_EXT_LOW_LATENCY_RS_FEC_MODE_ACTIVE (htobe16(0x0003))
Packit db064d
#endif
Packit db064d
Packit db064d
#ifndef IB_PORT_EXT_RS_FEC2_MODE_ACTIVE
Packit db064d
#define IB_PORT_EXT_RS_FEC2_MODE_ACTIVE (htobe16(0x0004))
Packit db064d
#endif
Packit db064d
Packit db064d
/* SM PortInfoExtended CapabilityMask Bits */
Packit db064d
#ifndef IB_PORT_EXT_CAP_IS_FEC_MODE_SUPPORTED
Packit db064d
#define IB_PORT_EXT_CAP_IS_FEC_MODE_SUPPORTED (htobe32(0x00000001))
Packit db064d
#endif
Packit db064d
Packit db064d
struct ibdiag_opt {
Packit db064d
	const char *name;
Packit db064d
	char letter;
Packit db064d
	unsigned has_arg;
Packit db064d
	const char *arg_tmpl;
Packit db064d
	const char *description;
Packit db064d
};
Packit db064d
Packit db064d
extern int ibdiag_process_opts(int argc, char *const argv[], void *context,
Packit db064d
			       const char *exclude_common_str,
Packit db064d
			       const struct ibdiag_opt custom_opts[],
Packit db064d
			       int (*custom_handler) (void *cxt, int val),
Packit db064d
			       const char *usage_args,
Packit db064d
			       const char *usage_examples[]);
Packit db064d
extern void ibdiag_show_usage(void);
Packit db064d
extern void ibexit(const char *fn, const char *msg, ...)
Packit db064d
	__attribute__((format(printf, 2, 3)));
Packit db064d
Packit db064d
/* convert counter values to a float with a unit specifier returned (using
Packit db064d
 * binary prefix)
Packit db064d
 * "data" is a flag indicating this counter is a byte counter multiplied by 4
Packit db064d
 * as per PortCounters[Extended]
Packit db064d
 */
Packit db064d
const char *conv_cnt_human_readable(uint64_t val64, float *val, int data);
Packit db064d
Packit db064d
int is_mlnx_ext_port_info_supported(uint32_t vendorid, uint16_t devid);
Packit db064d
Packit db064d
int is_port_info_extended_supported(ib_portid_t * dest, int port,
Packit db064d
				    struct ibmad_port *srcport);
Packit db064d
void get_max_msg(char *width_msg, char *speed_msg, int msg_size,
Packit db064d
		 ibnd_port_t * port);
Packit db064d
Packit db064d
int resolve_sm_portid(char *ca_name, uint8_t portnum, ib_portid_t *sm_id);
Packit db064d
int resolve_self(char *ca_name, uint8_t ca_port, ib_portid_t *portid,
Packit db064d
                 int *port, ibmad_gid_t *gid);
Packit db064d
int resolve_portid_str(char *ca_name, uint8_t ca_port, ib_portid_t * portid,
Packit db064d
		       char *addr_str, enum MAD_DEST dest_type,
Packit db064d
		       ib_portid_t *sm_id, const struct ibmad_port *srcport);
Packit db064d
int vsnprint_field(char *buf, size_t n, enum MAD_FIELDS f, int spacing,
Packit db064d
		   const char *format, va_list va_args)
Packit db064d
	__attribute__((format(printf, 5, 0)));
Packit db064d
int snprint_field(char *buf, size_t n, enum MAD_FIELDS f, int spacing,
Packit db064d
		  const char *format, ...)
Packit db064d
	__attribute__((format(printf, 5, 6)));
Packit db064d
void dump_portinfo(void *pi, int tabs);
Packit db064d
Packit db064d
/**
Packit db064d
 * Some common command line parsing
Packit db064d
 */
Packit db064d
typedef const char *(op_fn_t)(ib_portid_t *dest, char **argv, int argc);
Packit db064d
Packit db064d
typedef struct match_rec {
Packit db064d
	const char *name, *alias;
Packit db064d
	op_fn_t *fn;
Packit db064d
	unsigned opt_portnum;
Packit db064d
	const char *ops_extra;
Packit db064d
} match_rec_t;
Packit db064d
Packit db064d
op_fn_t *match_op(const match_rec_t match_tbl[], char *name);
Packit db064d
Packit db064d
#endif				/* _IBDIAG_COMMON_H_ */