From 915e2ca244ac223603ad2a4b3530ea7666780959 Mon Sep 17 00:00:00 2001
From: Adam Wujek <adam.wujek@cern.ch>
Date: Mon, 30 Mar 2015 14:51:28 +0200
Subject: [PATCH] userspace/snmpd: change order of branches in MIB

No technical change.

Change location of branch wrSwitchMIB.wrsStatus from high number (256) to
low (6), then move wrSwitchMIB.wrsEpertStatus to (7).
At the beginning wrsStatus branch was placed at high number because objects
from that branch might use several other objects to calculate their own value.
For example, there was a risk that query of wrsMainSystemStatus triggers
cascade of time consuming cache fills and snmpget timeouts. However, practice
shown that cache filling is significantly shorter that SNMP transfers.
Additionally, such risk was possible in case of snmpwalk or other method
querying objects in order.

Signed-off-by: Adam Wujek <adam.wujek@cern.ch>
---
 userspace/snmpd/WR-SWITCH-MIB.txt       | 282 ++++++++++++------------
 userspace/snmpd/wrsCurrentTimeGroup.h   |   2 +-
 userspace/snmpd/wrsGeneralStatusGroup.h |   2 +-
 userspace/snmpd/wrsOSStatusGroup.h      |   2 +-
 userspace/snmpd/wrsPortStatusTable.h    |   2 +-
 userspace/snmpd/wrsPstatsTable.h        |   2 +-
 userspace/snmpd/wrsPtpDataTable.h       |   2 +-
 userspace/snmpd/wrsSpllStatusGroup.h    |   2 +-
 userspace/snmpd/wrsStartCntGroup.h      |   2 +-
 userspace/snmpd/wrsTemperatureGroup.h   |   2 +-
 userspace/snmpd/wrsVersionGroup.h       |   2 +-
 11 files changed, 151 insertions(+), 151 deletions(-)

diff --git a/userspace/snmpd/WR-SWITCH-MIB.txt b/userspace/snmpd/WR-SWITCH-MIB.txt
index 799bbcf2d..fa271f712 100644
--- a/userspace/snmpd/WR-SWITCH-MIB.txt
+++ b/userspace/snmpd/WR-SWITCH-MIB.txt
@@ -36,8 +36,9 @@ wrsScalar      OBJECT IDENTIFIER ::= { wrSwitchMIB 1 }
 --wrsPpsi        OBJECT IDENTIFIER ::= { wrSwitchMIB 3 }  == obsolete
 --wrsVersion     OBJECT IDENTIFIER ::= { wrSwitchMIB 4 }  == obsolete
 --wrsDate        OBJECT IDENTIFIER ::= { wrSwitchMIB 5 }  == obsolete
-wrsExpertStatus       OBJECT IDENTIFIER ::= { wrSwitchMIB 6 }
-wrsStatus            OBJECT IDENTIFIER ::= { wrSwitchMIB 254 }
+wrsStatus             OBJECT IDENTIFIER ::= { wrSwitchMIB 6 }
+wrsExpertStatus       OBJECT IDENTIFIER ::= { wrSwitchMIB 7 }
+
 
 -- define one stupid object for a start
 
@@ -49,9 +50,140 @@ wrsScalarOne   OBJECT-TYPE
         "Integer incremented at every GET"
     ::= { wrsScalar 1 }
 
+
+--wrsGeneralStatusGroup      OBJECT IDENTIFIER ::= { wrsStatus 1 }
+wrsDetailedStatusesGroup   OBJECT IDENTIFIER ::= { wrsStatus 2 }
+
+-- wrsOSStatusGroup (.6.2.1)
+wrsOSStatusGroup           OBJECT IDENTIFIER ::= { wrsDetailedStatusesGroup 1 }
+
+wrsTemperatureWarning OBJECT-TYPE
+    SYNTAX         INTEGER {
+                        na(0),
+                        thresholdNotSet(1),
+                        temperatureOK(2),
+                        temperatureTooHigh(3)
+    }
+    MAX-ACCESS     read-only
+    STATUS         current
+    DESCRIPTION
+            "Warning if temperature exceed threshold levels"
+    ::= { wrsOSStatusGroup 2 }
+
+
+--wrsTimingStatusGroup       OBJECT IDENTIFIER ::= { wrsDetailedStatusesGroup 2 }
+--wrsNetworkingStatusGroup   OBJECT IDENTIFIER ::= { wrsDetailedStatusesGroup 3 }
+
+-- wrsVersionGroup (.6.3)
+wrsVersionGroup            OBJECT IDENTIFIER ::= { wrsStatus 3 }
+
+wrsVersionSwVersion            OBJECT-TYPE
+    SYNTAX                     DisplayString (SIZE (0..32))
+    MAX-ACCESS                 read-only
+    STATUS                     current
+    DESCRIPTION
+        "The software version, as returned from 'git describe' at build time"
+    ::= { wrsVersionGroup 1 }
+
+wrsVersionSwBuildBy            OBJECT-TYPE
+    SYNTAX                     DisplayString (SIZE (0..32))
+    MAX-ACCESS                 read-only
+    STATUS                     current
+    DESCRIPTION
+        "The software build by, as returned from 'git config --get-all user.name' at build time"
+    ::= { wrsVersionGroup 2 }
+
+wrsVersionSwBuildDate          OBJECT-TYPE
+    SYNTAX                     DisplayString (SIZE (0..32))
+    MAX-ACCESS                 read-only
+    STATUS                     current
+    DESCRIPTION
+        "The build date of the software, '__DATE__' at build time"
+    ::= { wrsVersionGroup 3 }
+
+wrsVersionBackplaneVersion     OBJECT-TYPE
+    SYNTAX                     DisplayString (SIZE (0..32))
+    MAX-ACCESS                 read-only
+    STATUS                     current
+    DESCRIPTION
+        "The hardware version of minibackplane PCB"
+    ::= { wrsVersionGroup 4 }
+
+wrsVersionFpgaType             OBJECT-TYPE
+    SYNTAX                     DisplayString (SIZE (0..32))
+    MAX-ACCESS                 read-only
+    STATUS                     current
+    DESCRIPTION
+        "The hardware version of FPGA"
+    ::= { wrsVersionGroup 5 }
+
+wrsVersionManufacturer         OBJECT-TYPE
+    SYNTAX                     DisplayString (SIZE (0..32))
+    MAX-ACCESS                 read-only
+    STATUS                     current
+    DESCRIPTION
+        "The name of the manufacturing company of a switch"
+    ::= { wrsVersionGroup 6 }
+
+wrsVersionSwitchSerialNumber   OBJECT-TYPE
+    SYNTAX                     DisplayString (SIZE (0..32))
+    MAX-ACCESS                 read-only
+    STATUS                     current
+    DESCRIPTION
+        "The serial number (or string) of the switch"
+    ::= { wrsVersionGroup 7 }
+
+wrsVersionScbVersion           OBJECT-TYPE
+    SYNTAX                     DisplayString (SIZE (0..32))
+    MAX-ACCESS                 read-only
+    STATUS                     current
+    DESCRIPTION
+        "The version of the SCB (switch's motherboard)"
+    ::= { wrsVersionGroup 8 }
+
+wrsVersionGwVersion            OBJECT-TYPE
+    SYNTAX                     DisplayString (SIZE (0..32))
+    MAX-ACCESS                 read-only
+    STATUS                     current
+    DESCRIPTION
+        "The version of gateware (FPGA bitstream)"
+    ::= { wrsVersionGroup 9 }
+
+wrsVersionGwBuild              OBJECT-TYPE
+    SYNTAX                     DisplayString (SIZE (0..32))
+    MAX-ACCESS                 read-only
+    STATUS                     current
+    DESCRIPTION
+        "The build of gateware (FPGA bitstream)"
+    ::= { wrsVersionGroup 10 }
+
+wrsVersionSwitchHdlCommitId    OBJECT-TYPE
+    SYNTAX                     DisplayString (SIZE (0..32))
+    MAX-ACCESS                 read-only
+    STATUS                     current
+    DESCRIPTION
+        "The gateware version: commit of wr_switch_hdl"
+    ::= { wrsVersionGroup 11 }
+
+wrsVersionGeneralCoresCommitId OBJECT-TYPE
+    SYNTAX                     DisplayString (SIZE (0..32))
+    MAX-ACCESS                 read-only
+    STATUS                     current
+    DESCRIPTION
+        "The gateware version: commit of general-cores"
+    ::= { wrsVersionGroup 12 }
+
+wrsVersionWrCoresCommitId      OBJECT-TYPE
+    SYNTAX                     DisplayString (SIZE (0..32))
+    MAX-ACCESS                 read-only
+    STATUS                     current
+    DESCRIPTION
+        "The gateware version: commit of wr-cores"
+    ::= { wrsVersionGroup 13 }
+
 wrsOperationStatus      OBJECT IDENTIFIER ::= { wrsExpertStatus 1 }
 
--- wrsCurrentTimeGroup (.6.1.1)
+-- wrsCurrentTimeGroup (.7.1.1)
 wrsCurrentTimeGroup     OBJECT IDENTIFIER ::= { wrsOperationStatus 1 }
 
 wrsDateTAI      OBJECT-TYPE
@@ -73,7 +205,7 @@ wrsDateTAIString   OBJECT-TYPE
 --wrsBootStatusGroup      OBJECT IDENTIFIER ::= { wrsOperationStatus 2 }
 wrsTemperatureGroup     OBJECT IDENTIFIER ::= { wrsOperationStatus 3 }
 
--- wrsTemperatureGroup (.6.1.3)
+-- wrsTemperatureGroup (.7.1.3)
 wrsTempFPGA OBJECT-TYPE
     SYNTAX         Integer32
     MAX-ACCESS     read-only
@@ -140,7 +272,7 @@ wrsTempThresholdPSR OBJECT-TYPE
 
 wrsStartCntGroup      OBJECT IDENTIFIER ::= { wrsExpertStatus 2 }
 
--- wrsStartCntGroup (.6.2)
+-- wrsStartCntGroup (.7.2)
 wrsStartCntHAL OBJECT-TYPE
     SYNTAX         Counter32
     MAX-ACCESS     read-only
@@ -166,7 +298,7 @@ wrsStartCntRTUd OBJECT-TYPE
     ::= { wrsStartCntGroup 3 }
 
 wrsSpllState            OBJECT IDENTIFIER ::= { wrsExpertStatus 3 }
--- wrsSpllStatusGroup (.6.3.2)
+-- wrsSpllStatusGroup (.7.3.2)
 wrsSpllStatusGroup      OBJECT IDENTIFIER ::= { wrsSpllState 2 }
 
 wrsSpllMode        OBJECT-TYPE
@@ -241,7 +373,7 @@ wrsSpllDelCnt      OBJECT-TYPE
             "Del counter at Soft PLL"
     ::= { wrsSpllStatusGroup 9 }
 
--- wrsPstatsTable (.6.1.4)
+-- wrsPstatsTable (.7.1.4)
 wrsPstatsTable OBJECT-TYPE
     SYNTAX      SEQUENCE OF WrsPstatsEntry
     MAX-ACCESS  not-accessible
@@ -642,7 +774,7 @@ wrsPstatsTRURespValid OBJECT-TYPE
             "Number of TRU decisions"
     ::= { wrsPstatsEntry 41 }
 
--- wrsPtpDataTable (.6.1.5)
+-- wrsPtpDataTable (.7.1.5)
 wrsPtpDataTable OBJECT-TYPE
     SYNTAX      SEQUENCE OF WrsPtpDataEntry
     MAX-ACCESS  not-accessible
@@ -852,7 +984,7 @@ wrsPtpDeltaRxS OBJECT-TYPE
             "Fixed Rx latency on Slave side"
     ::= { wrsPtpDataEntry 19 }
 
--- per-port (.6.1.6)
+-- per-port (.7.1.6)
 wrsPortStatusTable OBJECT-TYPE
     SYNTAX      SEQUENCE OF WrsPortStatusEntry
     MAX-ACCESS  not-accessible
@@ -1004,136 +1136,4 @@ wrsPortStatusSfpError OBJECT-TYPE
 --wrsNetworking
 --Configuration
 
-wrsDetailedStatusesGroup   OBJECT IDENTIFIER ::= { wrsStatus 1 }
-
-wrsOSStatusGroup           OBJECT IDENTIFIER ::= { wrsDetailedStatusesGroup 1 }
-
--- wrsOSStatusGroup (.254.1.1)
-
-wrsTemperatureWarning OBJECT-TYPE
-    SYNTAX         INTEGER {
-                        na(0),
-                        thresholdNotSet(1),
-                        temperatureOK(2),
-                        temperatureTooHigh(3)
-    }
-    MAX-ACCESS     read-only
-    STATUS         current
-    DESCRIPTION
-            "Warning if temperature exceed threshold levels"
-    ::= { wrsOSStatusGroup 2 }
-
-
---wrsTimingStatusGroup       OBJECT IDENTIFIER ::= { wrsDetailedStatusesGroup 2 }
---wrsNetworkingStatusGroup   OBJECT IDENTIFIER ::= { wrsDetailedStatusesGroup 3 }
-
--- wrsVersionGroup (.254.2)
-wrsVersionGroup            OBJECT IDENTIFIER ::= { wrsStatus 2 }
-
-wrsVersionSwVersion            OBJECT-TYPE
-    SYNTAX                     DisplayString (SIZE (0..32))
-    MAX-ACCESS                 read-only
-    STATUS                     current
-    DESCRIPTION
-        "The software version, as returned from 'git describe' at build time"
-    ::= { wrsVersionGroup 1 }
-
-wrsVersionSwBuildBy            OBJECT-TYPE
-    SYNTAX                     DisplayString (SIZE (0..32))
-    MAX-ACCESS                 read-only
-    STATUS                     current
-    DESCRIPTION
-        "The software build by, as returned from 'git config --get-all user.name' at build time"
-    ::= { wrsVersionGroup 2 }
-
-wrsVersionSwBuildDate          OBJECT-TYPE
-    SYNTAX                     DisplayString (SIZE (0..32))
-    MAX-ACCESS                 read-only
-    STATUS                     current
-    DESCRIPTION
-        "The build date of the software, '__DATE__' at build time"
-    ::= { wrsVersionGroup 3 }
-
-wrsVersionBackplaneVersion     OBJECT-TYPE
-    SYNTAX                     DisplayString (SIZE (0..32))
-    MAX-ACCESS                 read-only
-    STATUS                     current
-    DESCRIPTION
-        "The hardware version of minibackplane PCB"
-    ::= { wrsVersionGroup 4 }
-
-wrsVersionFpgaType             OBJECT-TYPE
-    SYNTAX                     DisplayString (SIZE (0..32))
-    MAX-ACCESS                 read-only
-    STATUS                     current
-    DESCRIPTION
-        "The hardware version of FPGA"
-    ::= { wrsVersionGroup 5 }
-
-wrsVersionManufacturer         OBJECT-TYPE
-    SYNTAX                     DisplayString (SIZE (0..32))
-    MAX-ACCESS                 read-only
-    STATUS                     current
-    DESCRIPTION
-        "The name of the manufacturing company of a switch"
-    ::= { wrsVersionGroup 6 }
-
-wrsVersionSwitchSerialNumber   OBJECT-TYPE
-    SYNTAX                     DisplayString (SIZE (0..32))
-    MAX-ACCESS                 read-only
-    STATUS                     current
-    DESCRIPTION
-        "The serial number (or string) of the switch"
-    ::= { wrsVersionGroup 7 }
-
-wrsVersionScbVersion           OBJECT-TYPE
-    SYNTAX                     DisplayString (SIZE (0..32))
-    MAX-ACCESS                 read-only
-    STATUS                     current
-    DESCRIPTION
-        "The version of the SCB (switch's motherboard)"
-    ::= { wrsVersionGroup 8 }
-
-wrsVersionGwVersion            OBJECT-TYPE
-    SYNTAX                     DisplayString (SIZE (0..32))
-    MAX-ACCESS                 read-only
-    STATUS                     current
-    DESCRIPTION
-        "The version of gateware (FPGA bitstream)"
-    ::= { wrsVersionGroup 9 }
-
-wrsVersionGwBuild              OBJECT-TYPE
-    SYNTAX                     DisplayString (SIZE (0..32))
-    MAX-ACCESS                 read-only
-    STATUS                     current
-    DESCRIPTION
-        "The build of gateware (FPGA bitstream)"
-    ::= { wrsVersionGroup 10 }
-
-wrsVersionSwitchHdlCommitId    OBJECT-TYPE
-    SYNTAX                     DisplayString (SIZE (0..32))
-    MAX-ACCESS                 read-only
-    STATUS                     current
-    DESCRIPTION
-        "The gateware version: commit of wr_switch_hdl"
-    ::= { wrsVersionGroup 11 }
-
-wrsVersionGeneralCoresCommitId OBJECT-TYPE
-    SYNTAX                     DisplayString (SIZE (0..32))
-    MAX-ACCESS                 read-only
-    STATUS                     current
-    DESCRIPTION
-        "The gateware version: commit of general-cores"
-    ::= { wrsVersionGroup 12 }
-
-wrsVersionWrCoresCommitId      OBJECT-TYPE
-    SYNTAX                     DisplayString (SIZE (0..32))
-    MAX-ACCESS                 read-only
-    STATUS                     current
-    DESCRIPTION
-        "The gateware version: commit of wr-cores"
-    ::= { wrsVersionGroup 13 }
-
---wrsGeneralStatusGroup      OBJECT IDENTIFIER ::= { wrsStatus 254 }
-
 END
diff --git a/userspace/snmpd/wrsCurrentTimeGroup.h b/userspace/snmpd/wrsCurrentTimeGroup.h
index a2a3337f8..f66c2adc5 100644
--- a/userspace/snmpd/wrsCurrentTimeGroup.h
+++ b/userspace/snmpd/wrsCurrentTimeGroup.h
@@ -2,7 +2,7 @@
 #define WRS_CURRENT_TIME_GROUP_H
 
 #define WRSCURRENTTIME_CACHE_TIMEOUT 5
-#define WRSCURRENTTIME_OID WRS_OID, 6, 1, 1
+#define WRSCURRENTTIME_OID WRS_OID, 7, 1, 1
 
 struct wrsCurrentTime_s {
 	uint64_t wrsDateTAI;		/* current time in TAI */
diff --git a/userspace/snmpd/wrsGeneralStatusGroup.h b/userspace/snmpd/wrsGeneralStatusGroup.h
index aed4bc0ac..b535f231b 100644
--- a/userspace/snmpd/wrsGeneralStatusGroup.h
+++ b/userspace/snmpd/wrsGeneralStatusGroup.h
@@ -1,7 +1,7 @@
 #ifndef WRS_GENERAL_STATUS_GROUP_H
 #define WRS_GENERAL_STATUS_GROUP_H
 
-#define WRSGENERALSTATUS_OID WRS_OID, 254, 254
+#define WRSGENERALSTATUS_OID WRS_OID, 6, 1
 struct wrsGeneralStatus_s {
 	int wrsMainSystemStatus;
 };
diff --git a/userspace/snmpd/wrsOSStatusGroup.h b/userspace/snmpd/wrsOSStatusGroup.h
index cfe7ad4fa..6ba7ab65d 100644
--- a/userspace/snmpd/wrsOSStatusGroup.h
+++ b/userspace/snmpd/wrsOSStatusGroup.h
@@ -1,7 +1,7 @@
 #ifndef WRS_OSSTATUS_GROUP_H
 #define WRS_OSSTATUS_GROUP_H
 
-#define WRSOSSTATUS_OID WRS_OID, 254, 1, 1
+#define WRSOSSTATUS_OID WRS_OID, 6, 2, 1
 
 #define WRS_TEMPERATURE_WARNING_THOLD_NOT_SET 1		/* warning */
 #define WRS_TEMPERATURE_WARNING_OK 2			/* ok */
diff --git a/userspace/snmpd/wrsPortStatusTable.h b/userspace/snmpd/wrsPortStatusTable.h
index a992bcbb1..17020a56f 100644
--- a/userspace/snmpd/wrsPortStatusTable.h
+++ b/userspace/snmpd/wrsPortStatusTable.h
@@ -2,7 +2,7 @@
 #define WRS_PORT_STATUS_TABLE_H
 
 #define WRSPORTSTATUSTABLE_CACHE_TIMEOUT 5
-#define WRSPORTSTATUSTABLE_OID WRS_OID, 6, 6
+#define WRSPORTSTATUSTABLE_OID WRS_OID, 7, 6
 
 #define WRS_PORT_STATUS_SFP_ERROR_SFP_OK 1	/* ok */
 #define WRS_PORT_STATUS_SFP_ERROR_SFP_ERROR 2	/* error */
diff --git a/userspace/snmpd/wrsPstatsTable.h b/userspace/snmpd/wrsPstatsTable.h
index 4be30c018..e1bf56237 100644
--- a/userspace/snmpd/wrsPstatsTable.h
+++ b/userspace/snmpd/wrsPstatsTable.h
@@ -2,7 +2,7 @@
 #define WRS_PSTATS_TABLE_H
 
 #define WRSPSTATSTABLE_CACHE_TIMEOUT 5
-#define WRSPSTATSTABLE_OID WRS_OID, 6, 4
+#define WRSPSTATSTABLE_OID WRS_OID, 7, 4
 
 #define PSTATS_MAX_N_COUNTERS 39 /* maximum number of counters */
 #define PSTATS_SYSCTL_PATH "/proc/sys/pstats/" /* Path to sysclt entries */
diff --git a/userspace/snmpd/wrsPtpDataTable.h b/userspace/snmpd/wrsPtpDataTable.h
index d82331702..5f18c103d 100644
--- a/userspace/snmpd/wrsPtpDataTable.h
+++ b/userspace/snmpd/wrsPtpDataTable.h
@@ -2,7 +2,7 @@
 #define WRS_PTP_DATA_TABLE_H
 
 #define WRSPTPDATATABLE_CACHE_TIMEOUT 5
-#define WRSPTPDATATABLE_OID WRS_OID, 6, 5
+#define WRSPTPDATATABLE_OID WRS_OID, 7, 5
 /* Right now we allow only one servo instance, it will change in the future
  * when switchover is implemented */
 #define WRS_MAX_N_SERVO_INSTANCES 1
diff --git a/userspace/snmpd/wrsSpllStatusGroup.h b/userspace/snmpd/wrsSpllStatusGroup.h
index f7ade2244..3339f68cb 100644
--- a/userspace/snmpd/wrsSpllStatusGroup.h
+++ b/userspace/snmpd/wrsSpllStatusGroup.h
@@ -2,7 +2,7 @@
 #define WRS_SPLL_STATUS_GROUP_H
 
 #define WRSSPLLSTATUS_CACHE_TIMEOUT 5
-#define WRSSPLLSTATUS_OID WRS_OID, 6, 3, 2
+#define WRSSPLLSTATUS_OID WRS_OID, 7, 3, 2
 
 struct wrsSpllStatus_s {
 	int32_t wrsSpllMode;
diff --git a/userspace/snmpd/wrsStartCntGroup.h b/userspace/snmpd/wrsStartCntGroup.h
index 1bb5e095b..6f9ee78ac 100644
--- a/userspace/snmpd/wrsStartCntGroup.h
+++ b/userspace/snmpd/wrsStartCntGroup.h
@@ -2,7 +2,7 @@
 #define WRS_START_CNT_GROUP_H
 
 #define WRSSTARTCNT_CACHE_TIMEOUT 5
-#define WRSSTARTCNT_OID WRS_OID, 6, 2
+#define WRSSTARTCNT_OID WRS_OID, 7, 2
 
 struct wrsStartCnt_s {
 	uint32_t wrsStartCntHAL;
diff --git a/userspace/snmpd/wrsTemperatureGroup.h b/userspace/snmpd/wrsTemperatureGroup.h
index 3a42a8953..f84a1f750 100644
--- a/userspace/snmpd/wrsTemperatureGroup.h
+++ b/userspace/snmpd/wrsTemperatureGroup.h
@@ -2,7 +2,7 @@
 #define WRS_TEMPERATURE_GROUP_H
 
 #define WRSTEMPERATURE_CACHE_TIMEOUT 5
-#define WRSTEMPERATURE_OID WRS_OID, 6, 1, 3
+#define WRSTEMPERATURE_OID WRS_OID, 7, 1, 3
 
 struct wrsTemperature_s {
 	int temp_fpga;		/* FPGA temperature */
diff --git a/userspace/snmpd/wrsVersionGroup.h b/userspace/snmpd/wrsVersionGroup.h
index c1fa6c891..690d6505f 100644
--- a/userspace/snmpd/wrsVersionGroup.h
+++ b/userspace/snmpd/wrsVersionGroup.h
@@ -1,7 +1,7 @@
 #ifndef WRS_VERSION_GROUP_H
 #define WRS_VERSION_GROUP_H
 
-#define WRSVERSION_OID WRS_OID, 254, 2
+#define WRSVERSION_OID WRS_OID, 6, 3
 
 struct wrsVersion_s {
 	char wrsVersions[13][32];	/* array of version strings */
-- 
GitLab