From 40b0c7b182c64e472054edab2212f62bea4629e0 Mon Sep 17 00:00:00 2001
From: Grzegorz Daniluk <grzegorz.daniluk@cern.ch>
Date: Mon, 4 Nov 2019 15:26:59 +0100
Subject: [PATCH] snmp: update PTP instances table when TimingStatus is
 calculated

---
 userspace/snmpd/wrsTimingStatusGroup.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/userspace/snmpd/wrsTimingStatusGroup.c b/userspace/snmpd/wrsTimingStatusGroup.c
index f795a824d..be4d36fc5 100644
--- a/userspace/snmpd/wrsTimingStatusGroup.c
+++ b/userspace/snmpd/wrsTimingStatusGroup.c
@@ -31,14 +31,17 @@ time_t wrsTimingStatus_data_fill(void)
 	time_t time_ptp_data; /* time when wrsPtpDataTable was updated */
 	time_t time_spll; /* time when softPLL data was updated */
 	time_t time_port_status; /* time when port status table was updated */
+	time_t time_ptp_instance; /* time when wrsPtpInstanceTable was updated */
 	static time_t time_ptp_data_prev; /* time when previous wrsPtpDataTable
 					   * table was updated */
 	unsigned int ptp_data_nrows; /* number of rows in wrsPtpDataTable */
 	unsigned int port_status_nrows; /* number of rows in PortStatusTable */
+	unsigned int ptp_instance_nrows;
 
 	time_ptp_data = wrsPtpDataTable_data_fill(&ptp_data_nrows);
 	time_spll = wrsSpllStatus_data_fill();
 	time_port_status = wrsPortStatusTable_data_fill(&port_status_nrows);
+	time_ptp_instance = wrsPtpInstanceTable_data_fill(&ptp_instance_nrows);
 
 	if (ptp_data_nrows > WRS_MAX_N_SERVO_INSTANCES) {
 		snmp_log(LOG_ERR, "SNMP: wrsTimingStatusGroup too many PTP "
@@ -56,7 +59,8 @@ time_t wrsTimingStatus_data_fill(void)
 
 	if (time_ptp_data <= time_update
 	    && time_spll <= time_update
-	    && time_port_status <= time_update) {
+	    && time_port_status <= time_update
+	    && time_ptp_instance <= time_update) {
 		/* cache not updated, return last update time */
 		return time_update;
 	}
@@ -75,9 +79,9 @@ time_t wrsTimingStatus_data_fill(void)
 		get_wrsSoftPLLStatus();
 	}
 
-	/* update only when the port_status was updated
+	/* update when port_status and ptp instances were updated
 	 * otherwise there may be comparison between the same data */
-	if (time_port_status > time_update) {
+	if (time_port_status > time_update && time_ptp_instance > time_update) {
 		get_wrsSlaveLinksStatus(port_status_nrows);
 		get_wrsPTPFramesFlowing(port_status_nrows);
 	}
-- 
GitLab