Blame include/opensm/osm_perfmgr_db.h

Packit 13e616
/*
Packit 13e616
 * Copyright (c) 2008 Voltaire, Inc. All rights reserved.
Packit 13e616
 * Copyright (c) 2007 The Regents of the University of California.
Packit 13e616
 * Copyright (c) 2009 HNR Consulting. 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
#ifndef _PERFMGR_EVENT_DB_H_
Packit 13e616
#define _PERFMGR_EVENT_DB_H_
Packit 13e616
Packit 13e616
#ifdef ENABLE_OSM_PERF_MGR
Packit 13e616
Packit 13e616
#include <stdio.h>
Packit 13e616
#include <time.h>
Packit 13e616
#include <iba/ib_types.h>
Packit 13e616
#include <complib/cl_qmap.h>
Packit 13e616
#include <complib/cl_passivelock.h>
Packit 13e616
Packit 13e616
#ifdef __cplusplus
Packit 13e616
#  define BEGIN_C_DECLS extern "C" {
Packit 13e616
#  define END_C_DECLS   }
Packit 13e616
#else				/* !__cplusplus */
Packit 13e616
#  define BEGIN_C_DECLS
Packit 13e616
#  define END_C_DECLS
Packit 13e616
#endif				/* __cplusplus */
Packit 13e616
Packit 13e616
BEGIN_C_DECLS
Packit 13e616
Packit 13e616
struct osm_perfmgr;
Packit 13e616
/****h* OpenSM/PerfMgr Event Database
Packit 13e616
* DESCRIPTION
Packit 13e616
*       Database interface to record subnet events
Packit 13e616
*
Packit 13e616
*       Implementations of this object _MUST_ be thread safe.
Packit 13e616
*
Packit 13e616
* AUTHOR
Packit 13e616
*	Ira Weiny, LLNL
Packit 13e616
*
Packit 13e616
*********/
Packit 13e616
typedef enum {
Packit 13e616
	PERFMGR_EVENT_DB_SUCCESS = 0,
Packit 13e616
	PERFMGR_EVENT_DB_FAIL,
Packit 13e616
	PERFMGR_EVENT_DB_NOMEM,
Packit 13e616
	PERFMGR_EVENT_DB_GUIDNOTFOUND,
Packit 13e616
	PERFMGR_EVENT_DB_PORTNOTFOUND,
Packit 13e616
	PERFMGR_EVENT_DB_NOT_IMPL
Packit 13e616
} perfmgr_db_err_t;
Packit 13e616
Packit 13e616
/** =========================================================================
Packit 13e616
 * Port error reading
Packit 13e616
 */
Packit 13e616
typedef struct {
Packit 13e616
	uint64_t symbol_err_cnt;
Packit 13e616
	uint64_t link_err_recover;
Packit 13e616
	uint64_t link_downed;
Packit 13e616
	uint64_t rcv_err;
Packit 13e616
	uint64_t rcv_rem_phys_err;
Packit 13e616
	uint64_t rcv_switch_relay_err;
Packit 13e616
	uint64_t xmit_discards;
Packit 13e616
	uint64_t xmit_constraint_err;
Packit 13e616
	uint64_t rcv_constraint_err;
Packit 13e616
	uint64_t link_integrity;
Packit 13e616
	uint64_t buffer_overrun;
Packit 13e616
	uint64_t vl15_dropped;
Packit 13e616
	uint64_t xmit_wait;
Packit 13e616
	time_t time;
Packit 13e616
} perfmgr_db_err_reading_t;
Packit 13e616
Packit 13e616
/** =========================================================================
Packit 13e616
 * Port data count reading
Packit 13e616
 */
Packit 13e616
typedef struct {
Packit 13e616
	uint64_t xmit_data;	/* can be used for std or extended */
Packit 13e616
	uint64_t rcv_data;	/* can be used for std or extended */
Packit 13e616
	uint64_t xmit_pkts;	/* can be used for std or extended */
Packit 13e616
	uint64_t rcv_pkts;	/* can be used for std or extended */
Packit 13e616
	uint64_t unicast_xmit_pkts;
Packit 13e616
	uint64_t unicast_rcv_pkts;
Packit 13e616
	uint64_t multicast_xmit_pkts;
Packit 13e616
	uint64_t multicast_rcv_pkts;
Packit 13e616
	time_t time;
Packit 13e616
} perfmgr_db_data_cnt_reading_t;
Packit 13e616
Packit 13e616
/** =========================================================================
Packit 13e616
 * Dump output options
Packit 13e616
 */
Packit 13e616
typedef enum {
Packit 13e616
	PERFMGR_EVENT_DB_DUMP_HR = 0,	/* Human readable */
Packit 13e616
	PERFMGR_EVENT_DB_DUMP_MR	/* Machine readable */
Packit 13e616
} perfmgr_db_dump_t;
Packit 13e616
Packit 13e616
/** =========================================================================
Packit 13e616
 * Port counter object.
Packit 13e616
 * Store all the port counters for a single port.
Packit 13e616
 */
Packit 13e616
typedef struct db_port {
Packit 13e616
	perfmgr_db_err_reading_t err_total;
Packit 13e616
	perfmgr_db_err_reading_t err_previous;
Packit 13e616
	perfmgr_db_data_cnt_reading_t dc_total;
Packit 13e616
	perfmgr_db_data_cnt_reading_t dc_previous;
Packit 13e616
	time_t last_reset;
Packit 13e616
	boolean_t valid;
Packit 13e616
} db_port_t;
Packit 13e616
Packit 13e616
/** =========================================================================
Packit 13e616
 * group port counters for ports into the nodes
Packit 13e616
 */
Packit 13e616
#define NODE_NAME_SIZE (IB_NODE_DESCRIPTION_SIZE + 1)
Packit 13e616
typedef struct db_node {
Packit 13e616
	cl_map_item_t map_item;	/* must be first */
Packit 13e616
	uint64_t node_guid;
Packit 13e616
	boolean_t active;       /* activly being monitored */
Packit 13e616
	boolean_t esp0;
Packit 13e616
	db_port_t *ports;
Packit 13e616
	uint8_t num_ports;
Packit 13e616
	char node_name[NODE_NAME_SIZE];
Packit 13e616
} db_node_t;
Packit 13e616
Packit 13e616
/** =========================================================================
Packit 13e616
 * all nodes in the subnet.
Packit 13e616
 */
Packit 13e616
typedef struct perfmgr_db {
Packit 13e616
	cl_qmap_t pc_data;	/* stores type (db_node_t *) */
Packit 13e616
	cl_plock_t lock;
Packit 13e616
	struct osm_perfmgr *perfmgr;
Packit 13e616
} perfmgr_db_t;
Packit 13e616
Packit 13e616
/**
Packit 13e616
 * functions
Packit 13e616
 */
Packit 13e616
perfmgr_db_t *perfmgr_db_construct(struct osm_perfmgr *perfmgr);
Packit 13e616
void perfmgr_db_destroy(perfmgr_db_t * db);
Packit 13e616
Packit 13e616
perfmgr_db_err_t perfmgr_db_create_entry(perfmgr_db_t * db, uint64_t guid,
Packit 13e616
					 boolean_t esp0, uint8_t num_ports,
Packit 13e616
					 char *node_name);
Packit 13e616
perfmgr_db_err_t perfmgr_db_delete_entry(perfmgr_db_t * db, uint64_t guid);
Packit 13e616
perfmgr_db_err_t perfmgr_db_delete_inactive(perfmgr_db_t * db, unsigned *cnt);
Packit 13e616
Packit 13e616
perfmgr_db_err_t perfmgr_db_update_name(perfmgr_db_t * db, uint64_t node_guid,
Packit 13e616
					char *name);
Packit 13e616
Packit 13e616
perfmgr_db_err_t perfmgr_db_add_err_reading(perfmgr_db_t * db, uint64_t guid,
Packit 13e616
					    uint8_t port,
Packit 13e616
					    perfmgr_db_err_reading_t * reading);
Packit 13e616
perfmgr_db_err_t perfmgr_db_get_prev_err(perfmgr_db_t * db, uint64_t guid,
Packit 13e616
					 uint8_t port,
Packit 13e616
					 perfmgr_db_err_reading_t * reading);
Packit 13e616
perfmgr_db_err_t perfmgr_db_clear_prev_err(perfmgr_db_t * db, uint64_t guid,
Packit 13e616
					   uint8_t port);
Packit 13e616
Packit 13e616
perfmgr_db_err_t perfmgr_db_add_dc_reading(perfmgr_db_t * db, uint64_t guid,
Packit 13e616
					   uint8_t port,
Packit 13e616
					   perfmgr_db_data_cnt_reading_t *
Packit 13e616
					   reading,
Packit 13e616
					   int ietf_sup);
Packit 13e616
perfmgr_db_err_t perfmgr_db_get_prev_dc(perfmgr_db_t * db, uint64_t guid,
Packit 13e616
					uint8_t port,
Packit 13e616
					perfmgr_db_data_cnt_reading_t *
Packit 13e616
					reading);
Packit 13e616
perfmgr_db_err_t perfmgr_db_clear_prev_dc(perfmgr_db_t * db, uint64_t guid,
Packit 13e616
					  uint8_t port);
Packit 13e616
Packit 13e616
perfmgr_db_err_t perfmgr_db_mark_active(perfmgr_db_t *db, uint64_t guid,
Packit 13e616
					boolean_t active);
Packit 13e616
Packit 13e616
void perfmgr_db_clear_counters(perfmgr_db_t * db);
Packit 13e616
perfmgr_db_err_t perfmgr_db_dump(perfmgr_db_t * db, char *file,
Packit 13e616
				 perfmgr_db_dump_t dump_type);
Packit 13e616
void perfmgr_db_print_all(perfmgr_db_t * db, FILE *fp, int err_only);
Packit 13e616
void perfmgr_db_print_by_name(perfmgr_db_t * db, char *nodename, FILE *fp,
Packit 13e616
			      char *port, int err_only);
Packit 13e616
void perfmgr_db_print_by_guid(perfmgr_db_t * db, uint64_t guid, FILE *fp,
Packit 13e616
			      char *port, int err_only);
Packit 13e616
Packit 13e616
/** =========================================================================
Packit 13e616
 * helper functions to fill in the various db objects from wire objects
Packit 13e616
 */
Packit 13e616
Packit 13e616
void perfmgr_db_fill_err_read(ib_port_counters_t * wire_read,
Packit 13e616
			      perfmgr_db_err_reading_t * reading,
Packit 13e616
			      boolean_t xmit_wait_sup);
Packit 13e616
void perfmgr_db_fill_data_cnt_read_pc(ib_port_counters_t * wire_read,
Packit 13e616
				      perfmgr_db_data_cnt_reading_t * reading);
Packit 13e616
void perfmgr_db_fill_data_cnt_read_pce(ib_port_counters_ext_t * wire_read,
Packit 13e616
				       perfmgr_db_data_cnt_reading_t * reading,
Packit 13e616
				       int ietf_sup);
Packit 13e616
Packit 13e616
END_C_DECLS
Packit 13e616
Packit 13e616
#endif				/* ENABLE_OSM_PERF_MGR */
Packit 13e616
Packit 13e616
#endif				/* _PERFMGR_PM_DB_H_ */