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