From a114ff980c1399c0c728d83d4de2d91bb3653f61 Mon Sep 17 00:00:00 2001 From: gscalamera <graziano.scalamera@elettra.eu> Date: Mon, 31 Jan 2022 16:03:49 +0100 Subject: [PATCH] First commit --- src/rnm_dpdk_watch.c | 181 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 181 insertions(+) create mode 100644 src/rnm_dpdk_watch.c diff --git a/src/rnm_dpdk_watch.c b/src/rnm_dpdk_watch.c new file mode 100644 index 0000000..e5cd47f --- /dev/null +++ b/src/rnm_dpdk_watch.c @@ -0,0 +1,181 @@ +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <sys/mman.h> +#include <fcntl.h> +#include <sys/ioctl.h> +#include <sys/time.h> + +#include "rnm.h" +#include "rnm_mq.h" +#include "rnm_shm.h" + +/* structure to mantain internal device driver variables */ +typedef struct { + struct rnm_t *rnm; + char thread_flag; + char idx; + int32_t eth_id, timer_number, ping_pong; + uint64_t thread_counter; + int32_t thread_timeout; + int32_t lock_flag, lock_counter; + int32_t num_frame_events[RNM_MAX_CLIENT_NODES]; +} nrnm_Dev, *rnm_Dev; + +nrnm_Dev dev_rnm; + +#define RNM_LEN 10000 + +uint64_t rnm_index = 0; + +static void +print_stats(void) +{ + unsigned i; + +#if 0 + RTE_LCORE_FOREACH(i) { + printf("Core %6u Received %16"PRIu64" Sent %16"PRIu64" - DIFF: %16"PRIu64" - %16"PRIu64"\n", + i, lcore_stats[0].rx, lcore_stats[0].tx, lcore_stats[0].rx-lcore_stats[0].old_rx, lcore_stats[0].tx-lcore_stats[0].old_tx); + lcore_stats[0].old_rx = lcore_stats[0].rx; + lcore_stats[0].old_tx = lcore_stats[0].tx; + } +#else + printf("\n ---- RNM Driver ver.XXX ----\n"); + printf(" Node ID: %d\n",(int32_t) dev_rnm.rnm->rnm_client.client_id); + printf(" Node MAC address"); + for (i = 0; i < 6; i++) { + printf(":%02x",dev_rnm.rnm->rnm_client.mac_client[i]); + } + printf("\n"); + printf(" Shared memory size: %d bytes\n",(int32_t)dev_rnm.rnm->rnm_client.rnm_size_bytes); +#if 0 + printf(" Monitor thread counter: %d\n",(int32_t)dev->thread_counter); + printf(" Monitor thread timeout: %d us.\n",(int32_t)dev->thread_timeout); +#endif + printf(" Kernel TX circular buffer: free_idx=%d, tx_buf_idx=%d\n", + (int32_t)dev_rnm.rnm->rnm_tx_circ_buf[0].free_buf_idx, + (int32_t)dev_rnm.rnm->rnm_tx_circ_buf[0].tx_buf_idx); + printf(" User TX circular buffer: free_idx=%d, tx_buf_idx=%d\n", + (int32_t)dev_rnm.rnm->rnm_tx_circ_buf[1].free_buf_idx, + (int32_t)dev_rnm.rnm->rnm_tx_circ_buf[1].tx_buf_idx); + + /* if master interface actived */ + if (dev_rnm.rnm->rnm_master.stat & RNM_MASTER_ON_STAT) { + printf(" ---- Master interface ----\n"); + } + else { + printf(" ---- Client interface ----\n"); + printf(" Master node ID: %d\n",(int32_t)dev_rnm.rnm->rnm_client.master_id); + printf(" Master MAC address"); + for (i = 0; i < 6; i++) { + printf(":%02x",dev_rnm.rnm->rnm_client.mac_master[i]); + } + printf("\n"); + printf(" Backup MAC address"); + for (i = 0; i < 6; i++) { + printf(":%02x",dev_rnm.rnm->rnm_client.mac_backup_master[i]); + } + printf("\n"); + printf(" Max TX size: %d bytes\n",(int32_t)dev_rnm.rnm->rnm_master.tx_max_bytes); + /* status */ + printf(" Status:"); + if (dev_rnm.rnm->rnm_client.stat & RNM_CLIENT_MASTERFOUND_STAT) + printf(" MASTER_ON"); + else + printf(" MASTER_OFF"); + if (dev_rnm.rnm->rnm_client.stat & RNM_CLIENT_MASTERRXOVER_STAT) + printf(" RX_OVER"); + if (dev_rnm.rnm->rnm_client.stat & RNM_CLIENT_MASTERHWERR_STAT) + printf(" MASTER_HW_FAULT"); + if (dev_rnm.rnm->rnm_client.stat & RNM_CLIENT_RESYNC_STAT) + printf(" RESYNC"); + if (dev_rnm.rnm->rnm_client.stat & RNM_CLIENT_TXOVER_STAT) + printf(" TX_OVER"); + if (dev_rnm.rnm->rnm_client.stat & RNM_CLIENT_MASTER_ENABLED_STAT) + printf(" BACKUP_ENAB"); + if (dev_rnm.rnm->rnm_client.stat & RNM_CLIENT_BACKUP_STAT) + printf(" BACKUP_ON"); + if (dev_rnm.rnm->rnm_client.stat & RNM_CLIENT_HWERR_STAT) + printf(" HW_FAULT"); + if (dev_rnm.rnm->rnm_client.stat & RNM_CLIENT_RD_ENABLED_STAT) + printf(" LOCAL_COPY_ON"); + else + printf(" LOCAL_COPY_OFF"); +printf(" (stat=0x%x)",dev_rnm.rnm->rnm_client.stat); + printf("\n"); + + /* errors*/ + printf(" ---- Errors ----\n"); + printf(" TX overflow: %d\n",(int32_t)dev_rnm.rnm->rnm_client.tx_ring_over_err_cnt); + printf(" RX crc: %d\n",(int32_t)dev_rnm.rnm->rnm_client.rx_crc_err_cnt); + printf(" HW: %d\n",(int32_t)dev_rnm.rnm->rnm_client.hw_err_cnt); + printf(" Address overflow: %d\n",(int32_t)dev_rnm.rnm->rnm_client.addr_over_err_cnt); + printf(" RX invalid: %d\n",(int32_t)dev_rnm.rnm->rnm_client.rx_notvalid_err_cnt); + printf(" Sync: %d\n",(int32_t)dev_rnm.rnm->rnm_client.sync_err_cnt); + printf(" Master packet missed: %d\n",(int32_t)dev_rnm.rnm->rnm_client.rep_mastercnt_err_cnt); + /* general, tx/rx stats */ + printf(" ---- Stats ----\n"); + printf(" Master counter: %d\n",(int32_t)dev_rnm.rnm->rnm_client.master_cnt); + printf(" TX packets: %d\n",(int32_t)dev_rnm.rnm->rnm_client.tx_packet_cnt); + printf(" RX packets: %d\n",(int32_t)dev_rnm.rnm->rnm_client.rx_packet_cnt); + printf(" Segment instructions: %d\n",(int32_t)dev_rnm.rnm->rnm_client.segment_packet_cnt); + printf(" Master id change: %d\n",(int32_t)dev_rnm.rnm->rnm_client.master_switch_cnt); + + } +#if 1 + printf(" ---- Frame events ----\n"); + for (i = 0; i < RNM_MAX_CLIENT_NODES; i++) { + if (dev_rnm.rnm->num_frame_events[i] > 0) + printf("Event %d: %d\n",i,(int32_t)dev_rnm.rnm->num_frame_events[i]); + } +#endif + printf(" ---- Data ----\n"); + for (i = 0; i < 8; i++) { + printf(" addr = 0x%x, data = 0x%x\n",i*4, *(uint32_t *)(dev_rnm.rnm->rnm_shm+i*4)); + } + + printf("\n"); +#endif +} + +int main(int argc, char *argv[] ) +{ + int i, k = 0, fd, mapsize, shm_addr; + int *shm; + struct rnm_t *rnm; + int err_cnt = 0; + struct timeval tv_start, tv_end; + int time_worst = 0, time_now; + int timer_count = 0, err_flag = 0; + int32_t data_long; + int num_chan, buf_size, store_size; + int incr = 100; + /* + int seme = atoi(argv[1]), offset=atoi(argv[2]), sizea=atoi(argv[3]); + */ + + if ((rnm = rnm_init(rnm_index)) == NULL) { + printf("Error in rnm_init\n"); + return -1; + } + dev_rnm.rnm = rnm; + printf("OK rnm_init\n"); + + while (1) { + print_stats(); + + usleep(1000000); + } + + + if (rnm_deinit(rnm) < 0) { + printf("Error in vrnm_deinit\n"); + return -1; + } + + return 0; + +} -- GitLab