diff --git a/userspace/snmpd/WR-SWITCH-MIB.txt b/userspace/snmpd/WR-SWITCH-MIB.txt index 814186411b4ea395920062d46189b8c4c09094b8..87b49974764633570faab8d65ad16153eb39b23a 100644 --- a/userspace/snmpd/WR-SWITCH-MIB.txt +++ b/userspace/snmpd/WR-SWITCH-MIB.txt @@ -412,135 +412,6 @@ ptpDeltaRxSX OBJECT-TYPE "Fixed Rx latency on Slave side" ::= { wrsPpsiGlobalsX 17 } --- per-port (.4) -wrsPortsTableX OBJECT-TYPE - SYNTAX SEQUENCE OF wrsPortsEntryX - MAX-ACCESS not-accessible - STATUS current - DESCRIPTION - "Information for each port" - ::= { wrsPpsi 4 } - -wrsPortsEntryX OBJECT-TYPE - SYNTAX WrsPortsEntryX - MAX-ACCESS not-accessible - STATUS current - DESCRIPTION - "An entry containing ports statuses" - INDEX { wrsPortIndex } - ::= { wrsPortsTableX 1 } - -WrsPortsEntryX ::= - SEQUENCE { - portLink INTEGER, - portMode INTEGER, - portLocked INTEGER, - portPeer OCTET STRING, - portSfpVN DisplayString, - portSfpPN DisplayString, - portSfpVS DisplayString, - portSfpInDB INTEGER, - portSfpGbE INTEGER, - portSfpError INTEGER - } - -portLinkX OBJECT-TYPE - SYNTAX INTEGER { - NA(0), - down(1), - up(2) - } - MAX-ACCESS read-only - STATUS current - DESCRIPTION - "Whether the link is up or down" - ::= { wrsPortsEntryX 1 } - -portModeX OBJECT-TYPE - SYNTAX INTEGER { - unknown(0), - master(1), - slave(2), - non-wr(3), - auto(4) - } - MAX-ACCESS read-only - STATUS current - DESCRIPTION - "Whether the port is master or slave" - ::= { wrsPortsEntryX 2 } - -portLockedX OBJECT-TYPE - SYNTAX INTEGER { - NA(0), - not-locked(1), - locked(2) - } - MAX-ACCESS read-only - STATUS current - DESCRIPTION - "Whether the peers are locked or not" - ::= { wrsPortsEntryX 3 } - -portPeerX OBJECT-TYPE - SYNTAX OCTET STRING (SIZE(8)) - MAX-ACCESS read-only - STATUS current - DESCRIPTION - "the ClockID of the peer, if available. Or 0" - ::= { wrsPortsEntryX 4 } - -portSfpVNX OBJECT-TYPE - SYNTAX DisplayString (SIZE (0..32)) - MAX-ACCESS read-only - STATUS current - DESCRIPTION - "Vendor Name of SFP" - ::= { wrsPortsEntryX 5 } - -portSfpPNX OBJECT-TYPE - SYNTAX DisplayString (SIZE (0..32)) - MAX-ACCESS read-only - STATUS current - DESCRIPTION - "Part Number of SFP" - ::= { wrsPortsEntryX 6 } - -portSfpVSX OBJECT-TYPE - SYNTAX DisplayString (SIZE (0..32)) - MAX-ACCESS read-only - STATUS current - DESCRIPTION - "Vendor serial number of SFP" - ::= { wrsPortsEntryX 7 } - -portSfpInDBX OBJECT-TYPE - SYNTAX INTEGER {NA(0), not-in-Data-Base(1), in-Data-Base(2)} - MAX-ACCESS read-only - STATUS current - DESCRIPTION - "Whether the SFP is in data base or not" - ::= { wrsPortsEntryX 8 } - -portSfpGbEX OBJECT-TYPE - SYNTAX INTEGER {NA(0), not-GbE(1), GbE(2)} - MAX-ACCESS read-only - STATUS current - DESCRIPTION - "Whether the SFP is 1 GbE" - ::= { wrsPortsEntryX 9 } - -portSfpErrorX OBJECT-TYPE - SYNTAX INTEGER { - NA(0), - SFP-ok(1), - SFP-Error(2) - } - 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." - ::= { wrsPortsEntryX 10 } -- Versions (4) are all just strings, several of them @@ -709,7 +580,155 @@ wrsTempThresholdPSR OBJECT-TYPE --wrsSpllState OBJECT IDENTIFIER ::= { wrsExpertStatus 3 } --wrsPstatsTable OBJECT IDENTIFIER ::= { wrsExpertStatus 4 } --wrsPtpDataTable OBJECT IDENTIFIER ::= { wrsExpertStatus 5 } ---wrsPortStatusTable OBJECT IDENTIFIER ::= { wrsExpertStatus 6 } +-- per-port (.6.1.6) +wrsPortStatusTable OBJECT-TYPE + SYNTAX SEQUENCE OF WrsPortStatusEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Information for each port" + ::= { wrsExpertStatus 6 } + +wrsPortStatusEntry OBJECT-TYPE + SYNTAX WrsPortStatusEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "An entry containing ports statuses" + INDEX { wrsPortStatusIndex } + ::= { wrsPortStatusTable 1 } + +WrsPortStatusEntry ::= + SEQUENCE { + wrsPortStatusIndex Unsigned32, + wrsPortStatusPortName DisplayString, + wrsPortStatusLink INTEGER, + wrsPortStatusMode INTEGER, + wrsPortStatusLocked INTEGER, + wrsPortStatusPeer OCTET STRING, + wrsPortStatusSfpVN DisplayString, + wrsPortStatusSfpPN DisplayString, + wrsPortStatusSfpVS DisplayString, + wrsPortStatusSfpInDB INTEGER, + wrsPortStatusSfpGbE INTEGER, + wrsPortStatusSfpError INTEGER + } + +wrsPortStatusIndex OBJECT-TYPE + SYNTAX Unsigned32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Index for wrsPortStatusTable" + ::= { wrsPortStatusEntry 1 } + +wrsPortStatusPortName OBJECT-TYPE + SYNTAX DisplayString (SIZE (0..12)) + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Name of port" + ::= { wrsPortStatusEntry 2 } + +wrsPortStatusLink OBJECT-TYPE + SYNTAX INTEGER { + na(0), + down(1), + up(2) + } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Whether the link is up or down" + ::= { wrsPortStatusEntry 3 } + +wrsPortStatusMode OBJECT-TYPE + SYNTAX INTEGER { + unknown(0), + master(1), + slave(2), + nonWr(3), + auto(4) + } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Whether the port is master or slave" + ::= { wrsPortStatusEntry 4 } + +wrsPortStatusLocked OBJECT-TYPE + SYNTAX INTEGER { + na(0), + notLocked(1), + locked(2) + } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Whether the peers are locked or not" + ::= { wrsPortStatusEntry 5 } + +wrsPortStatusPeer OBJECT-TYPE + SYNTAX OCTET STRING (SIZE(8)) + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "the ClockID of the peer, if available. Or 0" + ::= { wrsPortStatusEntry 6 } + +wrsPortStatusSfpVN OBJECT-TYPE + SYNTAX DisplayString (SIZE (0..32)) + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Vendor Name of SFP" + ::= { wrsPortStatusEntry 7 } + +wrsPortStatusSfpPN OBJECT-TYPE + SYNTAX DisplayString (SIZE (0..32)) + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Part Number of SFP" + ::= { wrsPortStatusEntry 8 } + +wrsPortStatusSfpVS OBJECT-TYPE + SYNTAX DisplayString (SIZE (0..32)) + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Vendor serial number of SFP" + ::= { wrsPortStatusEntry 9 } + +wrsPortStatusSfpInDB OBJECT-TYPE + SYNTAX INTEGER {na(0), notInDataBase(1), inDataBase(2)} + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Whether the SFP is in data base or not" + ::= { wrsPortStatusEntry 10 } + +wrsPortStatusSfpGbE OBJECT-TYPE + SYNTAX INTEGER {na(0), linkNotGbE(1), linkGbE(2)} + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Whether the SFP is 1 GbE" + ::= { wrsPortStatusEntry 11 } + +wrsPortStatusSfpError OBJECT-TYPE + SYNTAX INTEGER { + na(0), + sfpOk(1), + sfpError(2), + portDown(3) + } + 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." + ::= { wrsPortStatusEntry 12 } + --wrsNetworking --Configuration diff --git a/userspace/snmpd/wrsPortStatusTable.c b/userspace/snmpd/wrsPortStatusTable.c index e03dda44703bf21669d06864239b41a6f1b154a0..4a55b5cf7743330a84ec3009c5bcb658f6c22b63 100644 --- a/userspace/snmpd/wrsPortStatusTable.c +++ b/userspace/snmpd/wrsPortStatusTable.c @@ -5,6 +5,8 @@ struct wrsPortStatusTable_s wrsPortStatusTable_array[WRS_N_PORTS]; static struct pickinfo wrsPortStatusTable_pickinfo[] = { + FIELD(wrsPortStatusTable_s, ASN_UNSIGNED, index), /* not reported */ + FIELD(wrsPortStatusTable_s, ASN_OCTET_STR, port_name), FIELD(wrsPortStatusTable_s, ASN_INTEGER, link_up), FIELD(wrsPortStatusTable_s, ASN_INTEGER, port_mode), FIELD(wrsPortStatusTable_s, ASN_INTEGER, port_locked), @@ -45,11 +47,11 @@ time_t wrsPortStatusTable_data_fill(unsigned int *n_rows) for (i = 0; i < hal_nports_local; ++i) { /* Assume that number of ports does not change between * reads */ - char if_name[10]; - - snprintf(if_name, 10, "wr%d", i); + snprintf(wrsPortStatusTable_array[i].port_name, 10, + "wr%d", i); port_state = hal_lookup_port(hal_ports, - hal_nports_local, if_name); + hal_nports_local, + wrsPortStatusTable_array[i].port_name); /* No need to copy all ports structures, only what * we're interested in. * Keep value 0 for Not available */ @@ -117,7 +119,7 @@ time_t wrsPortStatusTable_data_fill(unsigned int *n_rows) return time_cur; } -#define TT_OID WRS_OID, 6, 4 +#define TT_OID WRSPORTSTATUSTABLE_OID #define TT_PICKINFO wrsPortStatusTable_pickinfo #define TT_DATA_FILL_FUNC wrsPortStatusTable_data_fill #define TT_DATA_ARRAY wrsPortStatusTable_array diff --git a/userspace/snmpd/wrsPortStatusTable.h b/userspace/snmpd/wrsPortStatusTable.h index 9ad5a9ab86658f756a6e563cb1174bc1badfb892..a992bcbb11fd28c0f11e6cea357bee3a927376c2 100644 --- a/userspace/snmpd/wrsPortStatusTable.h +++ b/userspace/snmpd/wrsPortStatusTable.h @@ -2,12 +2,16 @@ #define WRS_PORT_STATUS_TABLE_H #define WRSPORTSTATUSTABLE_CACHE_TIMEOUT 5 +#define WRSPORTSTATUSTABLE_OID WRS_OID, 6, 6 #define WRS_PORT_STATUS_SFP_ERROR_SFP_OK 1 /* ok */ #define WRS_PORT_STATUS_SFP_ERROR_SFP_ERROR 2 /* error */ #define WRS_PORT_STATUS_SFP_ERROR_PORT_DOWN 3 /* ok */ struct wrsPortStatusTable_s { + uint32_t index; /* not reported, index fields has to be marked + * as not-accessible in MIB */ + char port_name[12]; /* port name */ ClockIdentity peer_id; /* These can't be "unsigned char" because we scanf a %i in there */ unsigned link_up;