|
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_ */
|