Commit 273f7a9b authored by Adam Wujek's avatar Adam Wujek 💬

userspace/snmpd: add new wrsTimingStatusGroup with wrsSoftPLLStatus

Update:
--Makefile
--init
--MIB
create wrsTimingStatusGroup.c and wrsTimingStatusGroup.h
Signed-off-by: Adam Wujek's avatarAdam Wujek <adam.wujek@cern.ch>
parent d83a8bf6
......@@ -32,6 +32,7 @@ SOURCES = \
wrsScalar.c \
wrsGeneralStatusGroup.c \
wrsOSStatusGroup.c \
wrsTimingStatusGroup.c \
wrsNetworkingStatusGroup.c \
wrsVersionGroup.c \
wrsCurrentTimeGroup.c \
......
......@@ -152,7 +152,28 @@ wrsTemperatureWarning OBJECT-TYPE
::= { wrsOSStatusGroup 2 }
--wrsTimingStatusGroup OBJECT IDENTIFIER ::= { wrsDetailedStatusesGroup 2 }
-- wrsTimingStatusGroup (.6.1.2)
wrsTimingStatusGroup OBJECT IDENTIFIER ::= { wrsDetailedStatusesGroup 2 }
wrsSoftPLLStatus OBJECT-TYPE
SYNTAX INTEGER {
na(0),
ok(1),
error(2),
warning(3),
warningNA(4),
bug(5)
}
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Grouped status of wrsSpllState
ok - values in wrsSpllState are correct
error - there is an error in wrsSpllState
warning - there is a warning in wrsSpllState
warningNA - there is N/A field in wrsSpllState
bug - bug in checking conditions of wrsSpllState, please report"
::= { wrsTimingStatusGroup 2 }
-- wrsNetworkingStatusGroup (.6.1.3)
wrsNetworkingStatusGroup OBJECT IDENTIFIER ::= { wrsDetailedStatusesGroup 3 }
......
......@@ -11,6 +11,7 @@
#include "libwr/config.h"
#include "wrsGeneralStatusGroup.h"
#include "wrsOSStatusGroup.h"
#include "wrsTimingStatusGroup.h"
#include "wrsNetworkingStatusGroup.h"
#include "wrsVersionGroup.h"
#include "wrsCurrentTimeGroup.h"
......@@ -38,6 +39,7 @@ void init_wrsSnmp(void)
init_wrsScalar();
init_wrsGeneralStatusGroup();
init_wrsOSStatusGroup();
init_wrsTimingStatusGroup();
init_wrsNetworkingStatusGroup();
init_wrsVersionGroup();
init_wrsCurrentTimeGroup();
......
#include "wrsSnmp.h"
#include "wrsSpllStatusGroup.h"
#include "wrsTimingStatusGroup.h"
static struct pickinfo wrsTimingStatus_pickinfo[] = {
FIELD(wrsTimingStatus_s, ASN_INTEGER, wrsPTPStatus),
FIELD(wrsTimingStatus_s, ASN_INTEGER, wrsSoftPLLStatus),
FIELD(wrsTimingStatus_s, ASN_INTEGER, wrsSlaveLinksStatus),
FIELD(wrsTimingStatus_s, ASN_INTEGER, wrsPTPFramesFlowing),
};
struct wrsTimingStatus_s wrsTimingStatus_s;
time_t wrsTimingStatus_data_fill(void)
{
static time_t time_update; /* time of last update */
time_t time_spll; /* time when softPLL data was updated */
struct wrsSpllStatus_s *s;
time_spll = wrsSpllStatus_data_fill();
if (time_spll <= time_update) {
/* cache not updated, return last update time */
return time_update;
}
time_update = time(NULL);
memset(&wrsTimingStatus_s, 0, sizeof(wrsTimingStatus_s));
/*********************************************************************\
|************************* wrsSoftPLLStatus *************************|
\*********************************************************************/
/*
* DelCnt - warning if > 0
* seqstate has to be 8 (ready)
* mode = 1 (grand master) aligin state must be 6 (LOCKED)
* mode = 2 (free running master)
* mode = 3 (slave)
*/
s = &wrsSpllStatus_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)
&& (s->wrsSpllMode != WRS_SPLL_MODE_MASTER)
&& (s->wrsSpllMode != WRS_SPLL_MODE_SLAVE))
) {
wrsTimingStatus_s.wrsSoftPLLStatus =
WRS_SOFTPLL_STATUS_ERROR;
} else if ( /* check if warning */
s->wrsSpllDelCnt > 0
) { /* warning */
wrsTimingStatus_s.wrsSoftPLLStatus =
WRS_SOFTPLL_STATUS_WARNING;
} else if ( /* check if any of fields equal to 0 or WARNING_NA */
s->wrsSpllMode == 0
) { /* warning NA */
wrsTimingStatus_s.wrsSoftPLLStatus =
WRS_SOFTPLL_STATUS_WARNING_NA;
} else if ( /* check if OK */
s->wrsSpllDelCnt == 0
&& 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))
) { /* OK */
wrsTimingStatus_s.wrsSoftPLLStatus =
WRS_SOFTPLL_STATUS_OK;
} else { /* probably bug in previous conditions,
* this should never happen */
wrsTimingStatus_s.wrsSoftPLLStatus =
WRS_SOFTPLL_STATUS_BUG;
}
/* there was an update, return current time */
return time_update;
}
#define GT_OID WRSTIMINGSTATUS_OID
#define GT_PICKINFO wrsTimingStatus_pickinfo
#define GT_DATA_FILL_FUNC wrsTimingStatus_data_fill
#define GT_DATA_STRUCT wrsTimingStatus_s
#define GT_GROUP_NAME "wrsTimingStatusGroup"
#define GT_INIT_FUNC init_wrsTimingStatusGroup
#include "wrsGroupTemplate.h"
#ifndef WRS_TIMING_STATUS_GROUP_H
#define WRS_TIMING_STATUS_GROUP_H
#define WRSTIMINGSTATUS_OID WRS_OID, 6, 2, 2
#define WRS_SOFTPLL_STATUS_OK 1 /* ok */
#define WRS_SOFTPLL_STATUS_ERROR 2 /* error */
#define WRS_SOFTPLL_STATUS_WARNING 3 /* warning */
#define WRS_SOFTPLL_STATUS_WARNING_NA 4 /* warning, at least one field is
* equal to 0 (NA),shouldn't happen in
* normal operation */
#define WRS_SOFTPLL_STATUS_BUG 5 /* warning */
struct wrsTimingStatus_s {
int wrsPTPStatus;
int wrsSoftPLLStatus;
int wrsSlaveLinksStatus;
int wrsPTPFramesFlowing;
};
extern struct wrsTimingStatus_s wrsTimingStatus_s;
time_t wrsTimingStatus_data_fill(void);
void init_wrsTimingStatusGroup(void);
#endif /* WRS_TIMING_STATUS_GROUP_H */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment