|
Packit Service |
aa3af4 |
/*
|
|
Packit Service |
aa3af4 |
* Copyright (c) 2001-2020 Mellanox Technologies, Ltd. All rights reserved.
|
|
Packit Service |
aa3af4 |
*
|
|
Packit Service |
aa3af4 |
* This software is available to you under a choice of one of two
|
|
Packit Service |
aa3af4 |
* licenses. You may choose to be licensed under the terms of the GNU
|
|
Packit Service |
aa3af4 |
* General Public License (GPL) Version 2, available from the file
|
|
Packit Service |
aa3af4 |
* COPYING in the main directory of this source tree, or the
|
|
Packit Service |
aa3af4 |
* BSD license below:
|
|
Packit Service |
aa3af4 |
*
|
|
Packit Service |
aa3af4 |
* Redistribution and use in source and binary forms, with or
|
|
Packit Service |
aa3af4 |
* without modification, are permitted provided that the following
|
|
Packit Service |
aa3af4 |
* conditions are met:
|
|
Packit Service |
aa3af4 |
*
|
|
Packit Service |
aa3af4 |
* - Redistributions of source code must retain the above
|
|
Packit Service |
aa3af4 |
* copyright notice, this list of conditions and the following
|
|
Packit Service |
aa3af4 |
* disclaimer.
|
|
Packit Service |
aa3af4 |
*
|
|
Packit Service |
aa3af4 |
* - Redistributions in binary form must reproduce the above
|
|
Packit Service |
aa3af4 |
* copyright notice, this list of conditions and the following
|
|
Packit Service |
aa3af4 |
* disclaimer in the documentation and/or other materials
|
|
Packit Service |
aa3af4 |
* provided with the distribution.
|
|
Packit Service |
aa3af4 |
*
|
|
Packit Service |
aa3af4 |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
Packit Service |
aa3af4 |
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
Packit Service |
aa3af4 |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
Packit Service |
aa3af4 |
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
|
Packit Service |
aa3af4 |
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
|
Packit Service |
aa3af4 |
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
Packit Service |
aa3af4 |
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
Packit Service |
aa3af4 |
* SOFTWARE.
|
|
Packit Service |
aa3af4 |
*/
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
#ifndef VMA_STATS_H
|
|
Packit Service |
aa3af4 |
#define VMA_STATS_H
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
#include <stddef.h>
|
|
Packit Service |
aa3af4 |
#include <string.h>
|
|
Packit Service |
aa3af4 |
#include <bitset>
|
|
Packit Service |
aa3af4 |
#include <netinet/in.h>
|
|
Packit Service |
aa3af4 |
#include <linux/if.h>
|
|
Packit Service |
aa3af4 |
#include <sys/types.h>
|
|
Packit Service |
aa3af4 |
#include <sys/stat.h>
|
|
Packit Service |
aa3af4 |
#include <vlogger/vlogger.h>
|
|
Packit Service |
aa3af4 |
#include <vma/vma_extra.h>
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
#define NUM_OF_SUPPORTED_CQS 16
|
|
Packit Service |
aa3af4 |
#define NUM_OF_SUPPORTED_RINGS 16
|
|
Packit Service |
aa3af4 |
#define NUM_OF_SUPPORTED_BPOOLS 2
|
|
Packit Service |
aa3af4 |
#define NUM_OF_SUPPORTED_EPFDS 32
|
|
Packit Service |
aa3af4 |
#define SHMEM_STATS_SIZE(fds_num) sizeof(sh_mem_t) + (fds_num * sizeof(socket_instance_block_t))
|
|
Packit Service |
aa3af4 |
#define FILE_NAME_MAX_SIZE (NAME_MAX + 1)
|
|
Packit Service |
aa3af4 |
#define MC_TABLE_SIZE 1024
|
|
Packit Service |
aa3af4 |
#define MAP_SH_MEM(var,sh_stats) var = (sh_mem_t*)sh_stats
|
|
Packit Service |
aa3af4 |
#define STATS_PUBLISHER_TIMER_PERIOD 10 // publisher will check for stats request every 10 msec
|
|
Packit Service |
aa3af4 |
#define STATS_READER_DELAY STATS_PUBLISHER_TIMER_PERIOD + 5 // reader will wait for vma to wakeup and write statistics to shmem (with extra 5 msec overhead)
|
|
Packit Service |
aa3af4 |
#define STATS_FD_STATISTICS_DISABLED -1
|
|
Packit Service |
aa3af4 |
#define STATS_FD_STATISTICS_LOG_LEVEL_DEFAULT VLOG_DEFAULT
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
//statistic file
|
|
Packit Service |
aa3af4 |
extern FILE* g_stats_file;
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
// Common iomux stats
|
|
Packit Service |
aa3af4 |
typedef struct {
|
|
Packit Service |
aa3af4 |
pid_t threadid_last;
|
|
Packit Service |
aa3af4 |
uint32_t n_iomux_poll_hit;
|
|
Packit Service |
aa3af4 |
uint32_t n_iomux_poll_miss;
|
|
Packit Service |
aa3af4 |
uint32_t n_iomux_timeouts;
|
|
Packit Service |
aa3af4 |
uint32_t n_iomux_errors;
|
|
Packit Service |
aa3af4 |
uint32_t n_iomux_rx_ready;
|
|
Packit Service |
aa3af4 |
uint32_t n_iomux_os_rx_ready;
|
|
Packit Service |
aa3af4 |
uint32_t n_iomux_polling_time;
|
|
Packit Service |
aa3af4 |
} iomux_func_stats_t;
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
typedef enum {
|
|
Packit Service |
aa3af4 |
e_totals = 1,
|
|
Packit Service |
aa3af4 |
e_deltas
|
|
Packit Service |
aa3af4 |
} print_details_mode_t;
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
typedef enum {
|
|
Packit Service |
aa3af4 |
e_basic = 1,
|
|
Packit Service |
aa3af4 |
e_medium,
|
|
Packit Service |
aa3af4 |
e_full,
|
|
Packit Service |
aa3af4 |
e_mc_groups,
|
|
Packit Service |
aa3af4 |
e_netstat_like
|
|
Packit Service |
aa3af4 |
} view_mode_t;
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
typedef enum {
|
|
Packit Service |
aa3af4 |
e_by_pid_str,
|
|
Packit Service |
aa3af4 |
e_by_app_name,
|
|
Packit Service |
aa3af4 |
e_by_runn_proccess
|
|
Packit Service |
aa3af4 |
} proc_ident_mode_t;
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
struct user_params_t {
|
|
Packit Service |
aa3af4 |
int interval;
|
|
Packit Service |
aa3af4 |
print_details_mode_t print_details_mode;
|
|
Packit Service |
aa3af4 |
view_mode_t view_mode;
|
|
Packit Service |
aa3af4 |
bool forbid_cleaning;
|
|
Packit Service |
aa3af4 |
vlog_levels_t vma_log_level;
|
|
Packit Service |
aa3af4 |
int vma_details_level;
|
|
Packit Service |
aa3af4 |
bool zero_counters;
|
|
Packit Service |
aa3af4 |
proc_ident_mode_t proc_ident_mode;
|
|
Packit Service |
aa3af4 |
bool write_auth;
|
|
Packit Service |
aa3af4 |
int cycles;
|
|
Packit Service |
aa3af4 |
int fd_dump;
|
|
Packit Service |
aa3af4 |
vlog_levels_t fd_dump_log_level;
|
|
Packit Service |
aa3af4 |
std::string vma_stats_path;
|
|
Packit Service |
aa3af4 |
};
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
extern user_params_t user_params;
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
// Epoll group stats
|
|
Packit Service |
aa3af4 |
typedef struct {
|
|
Packit Service |
aa3af4 |
bool enabled;
|
|
Packit Service |
aa3af4 |
int epfd;
|
|
Packit Service |
aa3af4 |
iomux_func_stats_t stats;
|
|
Packit Service |
aa3af4 |
} epoll_stats_t;
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
// iomux function stat info
|
|
Packit Service |
aa3af4 |
typedef struct {
|
|
Packit Service |
aa3af4 |
iomux_func_stats_t poll;
|
|
Packit Service |
aa3af4 |
iomux_func_stats_t select;
|
|
Packit Service |
aa3af4 |
epoll_stats_t epoll[NUM_OF_SUPPORTED_EPFDS];
|
|
Packit Service |
aa3af4 |
} iomux_stats_t;
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
// multicast stat info
|
|
Packit Service |
aa3af4 |
typedef struct {
|
|
Packit Service |
aa3af4 |
uint32_t sock_num;
|
|
Packit Service |
aa3af4 |
in_addr_t mc_grp;
|
|
Packit Service |
aa3af4 |
} mc_tbl_entry_t;
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
typedef struct {
|
|
Packit Service |
aa3af4 |
uint16_t max_grp_num;
|
|
Packit Service |
aa3af4 |
mc_tbl_entry_t mc_grp_tbl[MC_TABLE_SIZE];
|
|
Packit Service |
aa3af4 |
} mc_grp_info_t;
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
// socket stat info
|
|
Packit Service |
aa3af4 |
typedef struct {
|
|
Packit Service |
aa3af4 |
uint32_t n_rx_packets;
|
|
Packit Service |
aa3af4 |
uint32_t n_rx_bytes;
|
|
Packit Service |
aa3af4 |
uint32_t n_rx_poll_hit;
|
|
Packit Service |
aa3af4 |
uint32_t n_rx_poll_miss;
|
|
Packit Service |
aa3af4 |
uint32_t n_rx_ready_pkt_max;
|
|
Packit Service |
aa3af4 |
uint32_t n_rx_ready_byte_drop;
|
|
Packit Service |
aa3af4 |
uint32_t n_rx_ready_pkt_drop;
|
|
Packit Service |
aa3af4 |
uint32_t n_rx_ready_byte_max;
|
|
Packit Service |
aa3af4 |
uint32_t n_rx_errors;
|
|
Packit Service |
aa3af4 |
uint32_t n_rx_eagain;
|
|
Packit Service |
aa3af4 |
uint32_t n_rx_os_packets;
|
|
Packit Service |
aa3af4 |
uint32_t n_rx_os_bytes;
|
|
Packit Service |
aa3af4 |
uint32_t n_rx_poll_os_hit;
|
|
Packit Service |
aa3af4 |
uint32_t n_rx_os_errors;
|
|
Packit Service |
aa3af4 |
uint32_t n_rx_os_eagain;
|
|
Packit Service |
aa3af4 |
uint32_t n_rx_migrations;
|
|
Packit Service |
aa3af4 |
uint32_t n_tx_sent_pkt_count;
|
|
Packit Service |
aa3af4 |
uint32_t n_tx_sent_byte_count;
|
|
Packit Service |
aa3af4 |
uint32_t n_tx_errors;
|
|
Packit Service |
aa3af4 |
uint32_t n_tx_drops;
|
|
Packit Service |
aa3af4 |
uint32_t n_tx_retransmits;
|
|
Packit Service |
aa3af4 |
uint32_t n_tx_os_packets;
|
|
Packit Service |
aa3af4 |
uint32_t n_tx_os_bytes;
|
|
Packit Service |
aa3af4 |
uint32_t n_tx_os_errors;
|
|
Packit Service |
aa3af4 |
uint32_t n_tx_os_eagain;
|
|
Packit Service |
aa3af4 |
uint32_t n_tx_migrations;
|
|
Packit Service |
aa3af4 |
uint32_t n_tx_dummy;
|
|
Packit Service |
aa3af4 |
} socket_counters_t;
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
typedef struct {
|
|
Packit Service |
aa3af4 |
int fd;
|
|
Packit Service |
aa3af4 |
uint32_t inode;
|
|
Packit Service |
aa3af4 |
uint32_t tcp_state; // enum tcp_state
|
|
Packit Service |
aa3af4 |
uint8_t socket_type; // SOCK_STREAM, SOCK_DGRAM, ...
|
|
Packit Service |
aa3af4 |
uint8_t padding1[3];
|
|
Packit Service |
aa3af4 |
bool b_is_offloaded;
|
|
Packit Service |
aa3af4 |
bool b_blocking;
|
|
Packit Service |
aa3af4 |
bool b_mc_loop;
|
|
Packit Service |
aa3af4 |
bool padding2;
|
|
Packit Service |
aa3af4 |
in_addr_t bound_if;
|
|
Packit Service |
aa3af4 |
in_addr_t connected_ip;
|
|
Packit Service |
aa3af4 |
in_addr_t mc_tx_if;
|
|
Packit Service |
aa3af4 |
in_port_t bound_port;
|
|
Packit Service |
aa3af4 |
in_port_t connected_port;
|
|
Packit Service |
aa3af4 |
pid_t threadid_last_rx;
|
|
Packit Service |
aa3af4 |
pid_t threadid_last_tx;
|
|
Packit Service |
aa3af4 |
uint32_t n_rx_ready_pkt_count;
|
|
Packit Service |
aa3af4 |
uint32_t n_rx_ready_byte_count;
|
|
Packit Service |
aa3af4 |
uint32_t n_rx_ready_byte_limit;
|
|
Packit Service |
aa3af4 |
uint32_t n_rx_zcopy_pkt_count;
|
|
Packit Service |
aa3af4 |
uint32_t n_tx_ready_byte_count;
|
|
Packit Service |
aa3af4 |
socket_counters_t counters;
|
|
Packit Service |
aa3af4 |
std::bitset<MC_TABLE_SIZE> mc_grp_map;
|
|
Packit Service |
aa3af4 |
ring_logic_t ring_alloc_logic_rx;
|
|
Packit Service |
aa3af4 |
ring_logic_t ring_alloc_logic_tx;
|
|
Packit Service |
aa3af4 |
uint64_t ring_user_id_rx;
|
|
Packit Service |
aa3af4 |
uint64_t ring_user_id_tx;
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
void reset() {
|
|
Packit Service |
aa3af4 |
fd = 0;
|
|
Packit Service |
aa3af4 |
inode = tcp_state = 0;
|
|
Packit Service |
aa3af4 |
socket_type = 0;
|
|
Packit Service |
aa3af4 |
b_is_offloaded = b_blocking = b_mc_loop = false;
|
|
Packit Service |
aa3af4 |
bound_if = connected_ip = mc_tx_if = (in_addr_t)0;
|
|
Packit Service |
aa3af4 |
bound_port = connected_port = (in_port_t)0;
|
|
Packit Service |
aa3af4 |
threadid_last_rx = threadid_last_tx = pid_t(0);
|
|
Packit Service |
aa3af4 |
n_rx_ready_pkt_count = n_rx_ready_byte_count = n_rx_ready_byte_limit = n_rx_zcopy_pkt_count = n_tx_ready_byte_count = 0;
|
|
Packit Service |
aa3af4 |
memset(&counters, 0, sizeof(counters));
|
|
Packit Service |
aa3af4 |
mc_grp_map.reset();
|
|
Packit Service |
aa3af4 |
ring_user_id_rx = ring_user_id_tx = 0;
|
|
Packit Service |
aa3af4 |
ring_alloc_logic_rx = ring_alloc_logic_tx = RING_LOGIC_PER_INTERFACE;
|
|
Packit Service |
aa3af4 |
};
|
|
Packit Service |
aa3af4 |
} socket_stats_t;
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
typedef struct {
|
|
Packit Service |
aa3af4 |
bool b_enabled;
|
|
Packit Service |
aa3af4 |
socket_stats_t skt_stats;
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
void reset() {
|
|
Packit Service |
aa3af4 |
b_enabled = false;
|
|
Packit Service |
aa3af4 |
skt_stats.reset();
|
|
Packit Service |
aa3af4 |
}
|
|
Packit Service |
aa3af4 |
} socket_instance_block_t;
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
// CQ stat info
|
|
Packit Service |
aa3af4 |
typedef struct {
|
|
Packit Service |
aa3af4 |
uint64_t n_rx_pkt_drop;
|
|
Packit Service |
aa3af4 |
uint32_t n_rx_sw_queue_len;
|
|
Packit Service |
aa3af4 |
uint32_t n_rx_drained_at_once_max;
|
|
Packit Service |
aa3af4 |
uint32_t n_buffer_pool_len;
|
|
Packit Service |
aa3af4 |
} cq_stats_t;
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
typedef struct {
|
|
Packit Service |
aa3af4 |
bool b_enabled;
|
|
Packit Service |
aa3af4 |
cq_stats_t cq_stats;
|
|
Packit Service |
aa3af4 |
} cq_instance_block_t;
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
typedef enum {
|
|
Packit Service |
aa3af4 |
RING_ETH = 0,
|
|
Packit Service |
aa3af4 |
RING_ETH_CB,
|
|
Packit Service |
aa3af4 |
RING_ETH_DIRECT,
|
|
Packit Service |
aa3af4 |
RING_TAP,
|
|
Packit Service |
aa3af4 |
RING_IB
|
|
Packit Service |
aa3af4 |
} ring_type_t;
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
static const char * const ring_type_str[] = {
|
|
Packit Service |
aa3af4 |
"RING_ETH",
|
|
Packit Service |
aa3af4 |
"RING_ETH_CB",
|
|
Packit Service |
aa3af4 |
"RING_ETH_DIRECT",
|
|
Packit Service |
aa3af4 |
"RING_TAP",
|
|
Packit Service |
aa3af4 |
"RING_IB"
|
|
Packit Service |
aa3af4 |
};
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
// Ring stat info
|
|
Packit Service |
aa3af4 |
typedef struct {
|
|
Packit Service |
aa3af4 |
uint64_t n_rx_pkt_count;
|
|
Packit Service |
aa3af4 |
uint64_t n_rx_byte_count;
|
|
Packit Service |
aa3af4 |
uint64_t n_tx_pkt_count;
|
|
Packit Service |
aa3af4 |
uint64_t n_tx_byte_count;
|
|
Packit Service |
aa3af4 |
uint64_t n_tx_retransmits;
|
|
Packit Service |
aa3af4 |
void* p_ring_master;
|
|
Packit Service |
aa3af4 |
ring_type_t n_type;
|
|
Packit Service |
aa3af4 |
union {
|
|
Packit Service |
aa3af4 |
struct {
|
|
Packit Service |
aa3af4 |
uint64_t n_rx_interrupt_requests;
|
|
Packit Service |
aa3af4 |
uint64_t n_rx_interrupt_received;
|
|
Packit Service |
aa3af4 |
uint32_t n_rx_cq_moderation_count;
|
|
Packit Service |
aa3af4 |
uint32_t n_rx_cq_moderation_period;
|
|
Packit Service |
aa3af4 |
uint64_t n_tx_dev_mem_pkt_count;
|
|
Packit Service |
aa3af4 |
uint64_t n_tx_dev_mem_byte_count;
|
|
Packit Service |
aa3af4 |
uint64_t n_tx_dev_mem_oob;
|
|
Packit Service |
aa3af4 |
uint32_t n_tx_dev_mem_allocated;
|
|
Packit Service |
aa3af4 |
} simple;
|
|
Packit Service |
aa3af4 |
struct {
|
|
Packit Service |
aa3af4 |
char s_tap_name[IFNAMSIZ];
|
|
Packit Service |
aa3af4 |
uint32_t n_tap_fd;
|
|
Packit Service |
aa3af4 |
uint32_t n_rx_buffers;
|
|
Packit Service |
aa3af4 |
uint32_t n_vf_plugouts;
|
|
Packit Service |
aa3af4 |
} tap;
|
|
Packit Service |
aa3af4 |
};
|
|
Packit Service |
aa3af4 |
} ring_stats_t;
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
typedef struct {
|
|
Packit Service |
aa3af4 |
bool b_enabled;
|
|
Packit Service |
aa3af4 |
ring_stats_t ring_stats;
|
|
Packit Service |
aa3af4 |
} ring_instance_block_t;
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
// Buffer Pool stat info
|
|
Packit Service |
aa3af4 |
typedef struct {
|
|
Packit Service |
aa3af4 |
bool is_rx;
|
|
Packit Service |
aa3af4 |
bool is_tx;
|
|
Packit Service |
aa3af4 |
uint32_t n_buffer_pool_size;
|
|
Packit Service |
aa3af4 |
uint32_t n_buffer_pool_no_bufs;
|
|
Packit Service |
aa3af4 |
} bpool_stats_t;
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
typedef struct {
|
|
Packit Service |
aa3af4 |
bool b_enabled;
|
|
Packit Service |
aa3af4 |
bpool_stats_t bpool_stats;
|
|
Packit Service |
aa3af4 |
} bpool_instance_block_t;
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
// Version info
|
|
Packit Service |
aa3af4 |
typedef struct {
|
|
Packit Service |
aa3af4 |
uint8_t vma_lib_maj;
|
|
Packit Service |
aa3af4 |
uint8_t vma_lib_min;
|
|
Packit Service |
aa3af4 |
uint8_t vma_lib_rev;
|
|
Packit Service |
aa3af4 |
uint8_t vma_lib_rel;
|
|
Packit Service |
aa3af4 |
} version_info_t;
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
typedef struct sh_mem_t {
|
|
Packit Service |
aa3af4 |
int reader_counter; //only copy to shm upon active reader
|
|
Packit Service |
aa3af4 |
version_info_t ver_info;
|
|
Packit Service |
aa3af4 |
char stats_protocol_ver[32];
|
|
Packit Service |
aa3af4 |
vlog_levels_t log_level;
|
|
Packit Service |
aa3af4 |
uint8_t log_details_level;
|
|
Packit Service |
aa3af4 |
int fd_dump;
|
|
Packit Service |
aa3af4 |
vlog_levels_t fd_dump_log_level;
|
|
Packit Service |
aa3af4 |
cq_instance_block_t cq_inst_arr[NUM_OF_SUPPORTED_CQS];
|
|
Packit Service |
aa3af4 |
ring_instance_block_t ring_inst_arr[NUM_OF_SUPPORTED_RINGS];
|
|
Packit Service |
aa3af4 |
bpool_instance_block_t bpool_inst_arr[NUM_OF_SUPPORTED_BPOOLS];
|
|
Packit Service |
aa3af4 |
mc_grp_info_t mc_info;
|
|
Packit Service |
aa3af4 |
iomux_stats_t iomux;
|
|
Packit Service |
aa3af4 |
size_t max_skt_inst_num; // number of elements allocated in 'socket_instance_block_t skt_inst_arr[]'
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
/* IMPORTANT: MUST BE LAST ENTRY in struct: [0] is the allocation start point for all fd's
|
|
Packit Service |
aa3af4 |
*
|
|
Packit Service |
aa3af4 |
* Some compiler can report issue as 'array subscript is above array bounds'
|
|
Packit Service |
aa3af4 |
*
|
|
Packit Service |
aa3af4 |
* In ISO C90, you would have to give contents a length of 1,
|
|
Packit Service |
aa3af4 |
* which means either you waste space or complicate the argument to malloc.
|
|
Packit Service |
aa3af4 |
* Note:
|
|
Packit Service |
aa3af4 |
* - 1 was the portable way to go, though it was rather strange
|
|
Packit Service |
aa3af4 |
* - 0 was better at indicating intent, but not legal as far as
|
|
Packit Service |
aa3af4 |
* the Standard was concerned and supported as an extension by some compilers (including gcc)
|
|
Packit Service |
aa3af4 |
*
|
|
Packit Service |
aa3af4 |
* In ISO C99, you would use a flexible array member, which is slightly different in syntax and semantics:
|
|
Packit Service |
aa3af4 |
* - Flexible array members are written as contents[] without the 0.
|
|
Packit Service |
aa3af4 |
* - Flexible array members have incomplete type, and so the sizeof operator may not be applied.
|
|
Packit Service |
aa3af4 |
* As a quirk of the original implementation of zero-length arrays, sizeof evaluates to zero.
|
|
Packit Service |
aa3af4 |
* - Flexible array members may only appear as the last member of a struct that is otherwise non-empty.
|
|
Packit Service |
aa3af4 |
* - A structure containing a flexible array member, or a union containing such a structure (possibly recursively),
|
|
Packit Service |
aa3af4 |
* may not be a member of a structure or an element of an array. (However, these uses are permitted by GCC as extensions.)
|
|
Packit Service |
aa3af4 |
*/
|
|
Packit Service |
aa3af4 |
socket_instance_block_t skt_inst_arr[1]; //sockets statistics array
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
void reset() {
|
|
Packit Service |
aa3af4 |
reader_counter = 0;
|
|
Packit Service |
aa3af4 |
memset(&ver_info, 0, sizeof(ver_info));
|
|
Packit Service |
aa3af4 |
memset(stats_protocol_ver, 0, sizeof(stats_protocol_ver));
|
|
Packit Service |
aa3af4 |
max_skt_inst_num = 0;
|
|
Packit Service |
aa3af4 |
log_level = (vlog_levels_t)0;
|
|
Packit Service |
aa3af4 |
log_details_level = 0;
|
|
Packit Service |
aa3af4 |
fd_dump = 0;
|
|
Packit Service |
aa3af4 |
fd_dump_log_level = (vlog_levels_t)0;
|
|
Packit Service |
aa3af4 |
memset(cq_inst_arr, 0, sizeof(cq_inst_arr));
|
|
Packit Service |
aa3af4 |
memset(ring_inst_arr, 0, sizeof(ring_inst_arr));
|
|
Packit Service |
aa3af4 |
memset(bpool_inst_arr, 0, sizeof(bpool_inst_arr));
|
|
Packit Service |
aa3af4 |
memset(&mc_info, 0, sizeof(mc_info));
|
|
Packit Service |
aa3af4 |
memset(&iomux, 0, sizeof(iomux));
|
|
Packit Service |
aa3af4 |
for (uint32_t i = 0; i < max_skt_inst_num; i++) {
|
|
Packit Service |
aa3af4 |
skt_inst_arr[i].reset();
|
|
Packit Service |
aa3af4 |
}
|
|
Packit Service |
aa3af4 |
}
|
|
Packit Service |
aa3af4 |
} sh_mem_t;
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
typedef struct sh_mem_info {
|
|
Packit Service |
aa3af4 |
char filename_sh_stats[PATH_MAX];
|
|
Packit Service |
aa3af4 |
size_t shmem_size;
|
|
Packit Service |
aa3af4 |
int fd_sh_stats;
|
|
Packit Service |
aa3af4 |
void* p_sh_stats;
|
|
Packit Service |
aa3af4 |
int pid;
|
|
Packit Service |
aa3af4 |
} sh_mem_info_t;
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
// publisher functions
|
|
Packit Service |
aa3af4 |
void vma_shmem_stats_open(vlog_levels_t** p_p_vma_log_level, uint8_t** p_p_vma_log_details);
|
|
Packit Service |
aa3af4 |
void vma_shmem_stats_close();
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
void vma_stats_instance_create_socket_block(socket_stats_t*);
|
|
Packit Service |
aa3af4 |
void vma_stats_instance_remove_socket_block(socket_stats_t*);
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
void vma_stats_mc_group_add(in_addr_t mc_grp, socket_stats_t* p_socket_stats);
|
|
Packit Service |
aa3af4 |
void vma_stats_mc_group_remove(in_addr_t mc_grp, socket_stats_t* p_socket_stats);
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
void vma_stats_instance_create_ring_block(ring_stats_t*);
|
|
Packit Service |
aa3af4 |
void vma_stats_instance_remove_ring_block(ring_stats_t*);
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
void vma_stats_instance_create_cq_block(cq_stats_t*);
|
|
Packit Service |
aa3af4 |
void vma_stats_instance_remove_cq_block(cq_stats_t*);
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
void vma_stats_instance_create_bpool_block(bpool_stats_t*);
|
|
Packit Service |
aa3af4 |
void vma_stats_instance_remove_bpool_block(bpool_stats_t*);
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
void vma_stats_instance_get_poll_block(iomux_func_stats_t*);
|
|
Packit Service |
aa3af4 |
void vma_stats_instance_get_select_block(iomux_func_stats_t*);
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
void vma_stats_instance_create_epoll_block(int, iomux_func_stats_t*);
|
|
Packit Service |
aa3af4 |
void vma_stats_instance_remove_epoll_block(iomux_func_stats_t* ep_stats);
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
//reader functions
|
|
Packit Service |
aa3af4 |
void print_full_stats(socket_stats_t* p_si_stats, mc_grp_info_t* p_mc_grp_info, FILE* filename);
|
|
Packit Service |
aa3af4 |
void print_netstat_like(socket_stats_t* p_si_stats, mc_grp_info_t* p_mc_grp_info, FILE* file, int pid);
|
|
Packit Service |
aa3af4 |
void print_netstat_like_headers(FILE* file);
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
#endif // VMA_STATS_H
|