From 40ab545a44ea72fffef7ce53832a4ea9df85156d Mon Sep 17 00:00:00 2001
From: Adam Wujek <adam.wujek@cern.ch>
Date: Mon, 16 Feb 2015 17:25:57 +0100
Subject: [PATCH] userspace/snmpd: add portSfpError

To report when invalid SFP configuration is detected and actions has to be taken.

Signed-off-by: Adam Wujek <adam.wujek@cern.ch>
---
 userspace/snmpd/WR-SWITCH-MIB.txt | 11 ++++++++++-
 userspace/snmpd/wrsPpsi.c         | 10 ++++++++++
 2 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/userspace/snmpd/WR-SWITCH-MIB.txt b/userspace/snmpd/WR-SWITCH-MIB.txt
index 72ca01b11..531e35c1d 100644
--- a/userspace/snmpd/WR-SWITCH-MIB.txt
+++ b/userspace/snmpd/WR-SWITCH-MIB.txt
@@ -427,7 +427,8 @@ PpsiPort ::=
         portSfpPN            DisplayString,
         portSfpVS            DisplayString,
         portSfpInDB          INTEGER,
-        portSfpGbE           INTEGER
+        portSfpGbE           INTEGER,
+        portSfpError         INTEGER
     }
 
 portLink OBJECT-TYPE
@@ -508,6 +509,14 @@ portSfpGbE OBJECT-TYPE
             "Whether the SFP is 1 GbE"
     ::= { ppsiPort 9 }
 
+portSfpError OBJECT-TYPE
+    SYNTAX         INTEGER {SFP-ok(0), SFP-Error(1)}
+    MAX-ACCESS     read-only
+    STATUS         current
+    DESCRIPTION
+            "Problem with SFP configuration. Port has to be always 1GbE. Port has to be in data base as long as support WR."
+    ::= { ppsiPort 9 }
+
 -- Versions (4) are all just strings, several of them
 
 wrsVersionSw    OBJECT-TYPE
diff --git a/userspace/snmpd/wrsPpsi.c b/userspace/snmpd/wrsPpsi.c
index 8e0502053..8ec627de2 100644
--- a/userspace/snmpd/wrsPpsi.c
+++ b/userspace/snmpd/wrsPpsi.c
@@ -102,6 +102,7 @@ static struct wrs_p_perport {
 	char sfp_vs[16];	/* vendor serial */
 	int sfp_in_db;
 	int sfp_GbE;
+	int sfp_error;
 } wrs_p_perport, wrs_p_array[WRS_N_PORTS];
 
 static struct ppsi_pickinfo p_pickinfo[] = {
@@ -114,6 +115,7 @@ static struct ppsi_pickinfo p_pickinfo[] = {
 	FIELD(wrs_p_perport, ASN_OCTET_STR, sfp_vs),
 	FIELD(wrs_p_perport, ASN_INTEGER, sfp_in_db),
 	FIELD(wrs_p_perport, ASN_INTEGER, sfp_GbE),
+	FIELD(wrs_p_perport, ASN_INTEGER, sfp_error),
 };
 
 static int32_t int_saturate(int64_t value)
@@ -272,6 +274,14 @@ static void wrs_ppsi_get_per_port(void)
 			strncpy(wrs_p_array[i].sfp_vs,
 				port_state->calib.sfp.vendor_serial,
 				sizeof(wrs_p_array[i].sfp_vs));
+			/* sfp error when SFP is not 1 GbE or
+			 * (port is not wr-non mode and sfp not in data base)
+			 */
+			wrs_p_array[i].sfp_error =
+				(wrs_p_array[i].sfp_GbE == 1) ||
+				((port_state->mode != HEXP_PORT_MODE_NON_WR) &&
+				(wrs_p_array[i].sfp_in_db == 1));
+
 			logmsg("reading ports name %s link %d, mode %d, "
 			 "locked %d\n", port_state->name,
 			 wrs_p_array[i].link_up, wrs_p_array[i].port_mode,
-- 
GitLab