From 0bf5f4c0bf46a03e20bb12feeb1426c81bcc6f5f Mon Sep 17 00:00:00 2001
From: Adam Wujek <adam.wujek@cern.ch>
Date: Tue, 19 Jul 2016 11:48:12 +0200
Subject: [PATCH] userspace/snmpd: add verbosity to wrsSoftPLLStatus in
 wrsTimingStatusGroup

Signed-off-by: Adam Wujek <adam.wujek@cern.ch>
---
 userspace/snmpd/wrsTimingStatusGroup.c | 124 +++++++++++++++++--------
 1 file changed, 84 insertions(+), 40 deletions(-)

diff --git a/userspace/snmpd/wrsTimingStatusGroup.c b/userspace/snmpd/wrsTimingStatusGroup.c
index 035a2e8df..082e4690f 100644
--- a/userspace/snmpd/wrsTimingStatusGroup.c
+++ b/userspace/snmpd/wrsTimingStatusGroup.c
@@ -213,53 +213,97 @@ static void get_wrsSoftPLLStatus(void)
 	*/
 	s = &wrsSpllStatus_s;
 	t = &wrsTimingStatus_s;
-	if ( /* check if error */
-		s->wrsSpllSeqState != WRS_SPLL_SEQ_STATE_READY
-		|| (s->wrsSpllMode == WRS_SPLL_MODE_GRAND_MASTER && s->wrsSpllAlignState != WRS_SPLL_ALIGN_STATE_LOCKED)
-		|| ((s->wrsSpllMode != WRS_SPLL_MODE_GRAND_MASTER)
+	slog_obj_name = wrsSoftPLLStatus_str;
+
+	t->wrsSoftPLLStatus = 0;
+	/* check if error */
+	if (s->wrsSpllSeqState != WRS_SPLL_SEQ_STATE_READY) {
+  		t->wrsSoftPLLStatus = WRS_SOFTPLL_STATUS_ERROR;
+		snmp_log(LOG_ERR, "SNMP: " SL_ER " %s: "
+			 "Sequencing FSM state of SoftPLL is not READY. "
+			 "SoftPLL is not yet ready or has unlocked.\n",
+			 slog_obj_name);
+	}
+	if (s->wrsSpllMode == WRS_SPLL_MODE_GRAND_MASTER
+	    && s->wrsSpllAlignState != WRS_SPLL_ALIGN_STATE_LOCKED) {
+		t->wrsSoftPLLStatus = WRS_SOFTPLL_STATUS_ERROR;
+		snmp_log(LOG_ERR, "SNMP: " SL_ER " %s: "
+			 "Allignment FSM state of SoftPLL is not LOCKED. "
+			 "SoftPLL is not yet ready or has unlocked.\n",
+			 slog_obj_name);
+	}
+	if ((s->wrsSpllMode != WRS_SPLL_MODE_GRAND_MASTER)
 		    && (s->wrsSpllMode != WRS_SPLL_MODE_MASTER)
-		    && (s->wrsSpllMode != WRS_SPLL_MODE_SLAVE))
-		|| ((s->wrsSpllMode == WRS_SPLL_MODE_SLAVE) && ((s->wrsSpllHlock == 0) || (s->wrsSpllMlock == 0)))
-	) {
-		t->wrsSoftPLLStatus =
-						WRS_SOFTPLL_STATUS_ERROR;
-		/*snmp_log(LOG_ERR, "SNMP: wrsSoftPLLStatus"
-				"%d %d %d %d\n",
-				s->wrsSpllSeqState != WRS_SPLL_SEQ_STATE_READY,
-				s->wrsSpllMode == WRS_SPLL_MODE_GRAND_MASTER && s->wrsSpllAlignState != WRS_SPLL_ALIGN_STATE_LOCKED,
-				((s->wrsSpllMode != WRS_SPLL_MODE_GRAND_MASTER)
-					&& (s->wrsSpllMode != WRS_SPLL_MODE_MASTER)
-					&& (s->wrsSpllMode != WRS_SPLL_MODE_SLAVE)),
-				((s->wrsSpllMode == WRS_SPLL_MODE_SLAVE) && ((s->wrsSpllHlock == 0) || (s->wrsSpllMlock == 0)))
-			);*/
-	} else if ( /* check if warning */
-		(s->wrsSpllMode == WRS_SPLL_MODE_GRAND_MASTER && s->wrsSpllDelCnt > 0)
-		|| (s->wrsSpllDelCnt != spll_DelCnt_prev)
-	) { /* warning */
-		t->wrsSoftPLLStatus =
-						WRS_SOFTPLL_STATUS_WARNING;
-
-	} else if ( /* check if any of fields equal to 0 or WARNING_NA */
-		s->wrsSpllMode == 0
-	) { /* warning NA */
-		t->wrsSoftPLLStatus =
-					      WRS_SOFTPLL_STATUS_WARNING_NA;
-
-	} else if ( /* check if OK */
+		    && (s->wrsSpllMode != WRS_SPLL_MODE_SLAVE)) {
+		t->wrsSoftPLLStatus = WRS_SOFTPLL_STATUS_ERROR;
+		snmp_log(LOG_ERR, "SNMP: " SL_ER " %s: "
+			 "SoftPLL in mode %d which is neither of the supported "
+			 "modes: GrandMaster, Master, Slave\n",
+			 slog_obj_name, s->wrsSpllMode);
+	}
+	if ((s->wrsSpllMode == WRS_SPLL_MODE_SLAVE) && (s->wrsSpllHlock == 0)){
+		t->wrsSoftPLLStatus = WRS_SOFTPLL_STATUS_ERROR;
+		snmp_log(LOG_ERR, "SNMP: " SL_ER " %s: "
+			 "SoftPLL is in Slave mode and Helper PLL is not locked\n",
+			 slog_obj_name);
+	}
+	if ((s->wrsSpllMode == WRS_SPLL_MODE_SLAVE) && (s->wrsSpllMlock == 0)){
+		t->wrsSoftPLLStatus = WRS_SOFTPLL_STATUS_ERROR;
+		snmp_log(LOG_ERR, "SNMP: " SL_ER " %s: "
+			 "SoftPLL is in Slave mode and Main PLL is not locked\n",
+			 slog_obj_name);
+	}
+
+	/* check if warning */
+	if (!t->wrsSoftPLLStatus) {
+		if (s->wrsSpllMode == WRS_SPLL_MODE_GRAND_MASTER && s->wrsSpllDelCnt > 0) {
+			t->wrsSoftPLLStatus = WRS_SOFTPLL_STATUS_WARNING;
+			snmp_log(LOG_ERR, "SNMP: " SL_W " %s: "
+					  "SoftPLL in GrandMaster mode has unlocked from "
+					  "the external reference. Delock counter is %d\n",
+					  slog_obj_name, s->wrsSpllDelCnt);
+		}
+		if (s->wrsSpllMode == WRS_SPLL_MODE_MASTER && s->wrsSpllDelCnt != spll_DelCnt_prev) {
+			t->wrsSoftPLLStatus = WRS_SOFTPLL_STATUS_WARNING;
+			snmp_log(LOG_ERR, "SNMP: " SL_W " %s: "
+					  "SoftPLL in Master mode has unlocked. Delock "
+					  "counter insceased by %d\n",
+					  slog_obj_name,
+					  s->wrsSpllDelCnt - spll_DelCnt_prev);
+		}
+		if (s->wrsSpllMode == WRS_SPLL_MODE_SLAVE && s->wrsSpllDelCnt != spll_DelCnt_prev) {
+			t->wrsSoftPLLStatus = WRS_SOFTPLL_STATUS_WARNING;
+			snmp_log(LOG_ERR, "SNMP: " SL_W " %s: "
+					  "SoftPLL in Slave mode has unlocked. Delock "
+					  "counter insceased by %d\n",
+					  slog_obj_name,
+					  s->wrsSpllDelCnt - spll_DelCnt_prev);
+		}
+	}
+	/* check if any of fields equal to 0 or WARNING_NA */
+	if (!t->wrsSoftPLLStatus) {
+		if (s->wrsSpllMode == 0) {
+			t->wrsSoftPLLStatus = WRS_SOFTPLL_STATUS_WARNING_NA;
+			snmp_log(LOG_ERR, "SNMP: " SL_NA " %s: "
+					  "SoftPLL mode not set\n",
+					  slog_obj_name);
+		}
+	}
+	 /* check if OK */
+	if ((!t->wrsSoftPLLStatus) && (
 		((s->wrsSpllMode == WRS_SPLL_MODE_GRAND_MASTER && s->wrsSpllDelCnt == 0)
 		    || (s->wrsSpllDelCnt == spll_DelCnt_prev))
 		&& s->wrsSpllSeqState == WRS_SPLL_SEQ_STATE_READY
 		&& ((s->wrsSpllMode == WRS_SPLL_MODE_GRAND_MASTER && s->wrsSpllAlignState == WRS_SPLL_ALIGN_STATE_LOCKED)
 		    || (s->wrsSpllMode == WRS_SPLL_MODE_MASTER)
-		    || (s->wrsSpllMode == WRS_SPLL_MODE_SLAVE))
+		    || (s->wrsSpllMode == WRS_SPLL_MODE_SLAVE)))
 	) { /* OK */
-		t->wrsSoftPLLStatus =
-						WRS_SOFTPLL_STATUS_OK;
-
-	} else { /* probably bug in previous conditions,
-		  * this should never happen */
-		t->wrsSoftPLLStatus =
-						WRS_SOFTPLL_STATUS_BUG;
+		t->wrsSoftPLLStatus = WRS_SOFTPLL_STATUS_OK;
+	}
+	/* probably bug in previous conditions, this should never happen */
+	if (!t->wrsSoftPLLStatus) {
+		t->wrsSoftPLLStatus = WRS_SOFTPLL_STATUS_BUG;
+		SLOG(SL_BUG);
 	}
 
 	spll_DelCnt_prev = s->wrsSpllDelCnt;
-- 
GitLab