Commit da0b7f9f authored by Grzegorz Daniluk's avatar Grzegorz Daniluk

snmp: unify wrsSystemClockStatus with the rest of the statuses

Now it represents the overall status of system clock:
- verification with NTP time
- leap seconds file
parent 9c8412e3
......@@ -323,62 +323,23 @@ wrsSystemClockStatus OBJECT-TYPE
na(0),
ok(1),
error(2),
errorMinor(3),
thresholdExceeded(4)
warning(3),
warningNA(4)
}
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The system clock is compared to NTP time
ok - system clock is under the threshold value
thresholdExceeded - system clock has exceeded the threshold value
error - Unexpected status
warningNA - there is N/A in one of object used to calculate this value"
"Grouped status of system clock
ok - system clock is withing threshold (set in WRS configuration)
to NTP time and correct leap seconds file was loaded
error - system clock problem, either it diverged or incorrect leap
seconds file is used
warning - leapseconds file is not valid anymore and should be
updated
warningNA - some information could not be retrieved to calculate the
value of this object"
::= { wrsTimingStatusGroup 5 }
wrsLeapSecStatus OBJECT-TYPE
SYNTAX INTEGER {
na(0),
ok(1),
error(2),
errorMinor(3),
warning(4)
}
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Leap second status
ok - Everything ok
leapSecFileExpired - The current leap second file is out-dated
internalErrorDetected - Internal error detected (system,...)
taiReadError - Cannot read the TAI time
leaSecInserted - A leap second will be inserted at 00:00
leapSecDeleted - A leap second will be deleted at 00:00
errorMinor - cannot read the status file, problem is probably somewhere else"
::= { wrsTimingStatusGroup 6 }
wrsLeapSecSourceStatus OBJECT-TYPE
SYNTAX INTEGER {
na(0),
ok(1),
error(2),
errorMinor(3)
}
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Download status of the leap seconds file
ok - Everything is OK
updated - Local leap seconds file has been updated
dhcpError - DHCP error detected
invalidUrl - The URL is not reachable or invalid
invalidFile - The download file is invalid
downloadError - Error detected during the download
errorMinor - cannot read the status file, problem is probably somewhere
else"
::= { wrsTimingStatusGroup 7 }
-- wrsNetworkingStatusGroup (.6.2.3)
wrsNetworkingStatusGroup OBJECT IDENTIFIER ::= { wrsDetailedStatusesGroup 3 }
......
......@@ -98,20 +98,13 @@ time_t wrsGeneralStatus_data_fill(void)
|| t->wrsSlaveLinksStatus == WRS_SLAVE_LINK_STATUS_ERROR
|| t->wrsPTPFramesFlowing == WRS_PTP_FRAMES_FLOWING_ERROR
|| t->wrsSystemClockStatus == WRS_SYSTEM_CLOCK_STATUS_ERROR
|| t->wrsSystemClockStatus == WRS_SYSTEM_CLOCK_STATUS_THRESHOLD_EXCEEDED
|| t->wrsLeapSecStatus == WRS_LEAP_SEC_STATUS_ERROR
|| t->wrsLeapSecSourceStatus==WRS_LEAP_SEC_SRC_STATUS_ERROR
) {
wrsGeneralStatus_s.wrsTimingStatus =
WRS_TIMING_STATUS_ERROR;
} else if ( /* check if warning */
t->wrsSoftPLLStatus == WRS_SOFTPLL_STATUS_WARNING
|| t->wrsLeapSecStatus == WRS_LEAP_SEC_STATUS_ERROR_MINOR
|| t->wrsLeapSecSourceStatus == WRS_LEAP_SEC_SRC_STATUS_ERROR_MINOR
|| t->wrsLeapSecStatus == WRS_LEAP_SEC_STATUS_ERROR_MINOR
|| t->wrsLeapSecStatus == WRS_LEAP_SEC_STATUS_WARNING
|| t->wrsSystemClockStatus == WRS_SYSTEM_CLOCK_STATUS_ERROR_MINOR
|| t->wrsSystemClockStatus == WRS_SYSTEM_CLOCK_STATUS_WARNING
) { /* warning */
wrsGeneralStatus_s.wrsTimingStatus =
WRS_TIMING_STATUS_WARNING;
......@@ -124,9 +117,8 @@ time_t wrsGeneralStatus_data_fill(void)
|| t->wrsSlaveLinksStatus == WRS_SLAVE_LINK_STATUS_WARNING_NA
|| t->wrsPTPFramesFlowing == 0
|| t->wrsPTPFramesFlowing == WRS_PTP_FRAMES_FLOWING_WARNING_NA
|| t->wrsLeapSecStatus == 0
|| t->wrsSystemClockStatus == 0
|| t->wrsLeapSecSourceStatus == 0
|| t->wrsSystemClockStatus == WRS_SYSTEM_CLOCK_STATUS_WARNING_NA
) { /* warning NA */
wrsGeneralStatus_s.wrsTimingStatus =
WRS_TIMING_STATUS_WARNING_NA;
......@@ -138,9 +130,7 @@ time_t wrsGeneralStatus_data_fill(void)
&& t->wrsSlaveLinksStatus == WRS_SLAVE_LINK_STATUS_OK
&& (t->wrsPTPFramesFlowing == WRS_PTP_FRAMES_FLOWING_OK
|| t->wrsPTPFramesFlowing == WRS_PTP_FRAMES_FLOWING_FR) /* FR */
&& (t->wrsSystemClockStatus==WRS_SYSTEM_CLOCK_STATUS_OK)
&& t->wrsLeapSecStatus == WRS_LEAP_SEC_STATUS_OK
&& t->wrsLeapSecSourceStatus == WRS_LEAP_SEC_SRC_STATUS_OK
&& t->wrsSystemClockStatus == WRS_SYSTEM_CLOCK_STATUS_OK
) { /* OK */
wrsGeneralStatus_s.wrsTimingStatus =
......
......@@ -24,8 +24,6 @@ static struct pickinfo wrsTimingStatus_pickinfo[] = {
FIELD(wrsTimingStatus_s, ASN_INTEGER, wrsSlaveLinksStatus),
FIELD(wrsTimingStatus_s, ASN_INTEGER, wrsPTPFramesFlowing),
FIELD(wrsTimingStatus_s, ASN_INTEGER, wrsSystemClockStatus),
FIELD(wrsTimingStatus_s, ASN_INTEGER, wrsLeapSecStatus),
FIELD(wrsTimingStatus_s, ASN_INTEGER, wrsLeapSecSourceStatus),
};
struct wrsTimingStatus_s wrsTimingStatus_s;
......@@ -40,8 +38,6 @@ static void get_wrsSoftPLLStatus();
static void get_wrsSlaveLinksStatus(unsigned int port_status_nrows);
static void get_wrsPTPFramesFlowing(unsigned int port_status_nrows);
static void get_wrsSystemClockStatus(void);
static void get_wrsLeapSecondStatus(void);
static void get_wrsLeapSecondSourceStatus(void);
time_t wrsTimingStatus_data_fill(void)
{
......@@ -109,9 +105,7 @@ time_t wrsTimingStatus_data_fill(void)
}
if ( time_current_time > time_update) {
get_wrsLeapSecondStatus();
get_wrsSystemClockStatus();
get_wrsLeapSecondSourceStatus();
}
/* save the time of the last ptp_data copy */
......@@ -344,78 +338,66 @@ static void get_wrsSoftPLLStatus(void)
static void get_wrsSystemClockStatus(void){
struct wrsCurrentTime_s *t=&wrsCurrentTime_s;
struct wrsSpllStatus_s *s=&wrsSpllStatus_s;
int status=0;
switch (t->wrsSystemClockStatusDetails) {
case WRS_SYSTEM_CLOCK_STATUS_DETAILS_OK :
status=WRS_SYSTEM_CLOCK_STATUS_OK;
break;
case WRS_SYSTEM_CLOCK_STATUS_DETAILS_IO_ERROR :
status=WRS_SYSTEM_CLOCK_STATUS_ERROR_MINOR;
break;
case WRS_SYSTEM_CLOCK_STATUS_DETAILS_UNKNOWN :
case WRS_SYSTEM_CLOCK_STATUS_DETAILS_ERROR :
case WRS_SYSTEM_CLOCK_STATUS_DETAILS_NTP_ERROR :
status=WRS_SYSTEM_CLOCK_STATUS_ERROR;
break;
case WRS_SYSTEM_CLOCK_STATUS_DETAILS_THRESHOLD_EXCEEDED :
status=WRS_SYSTEM_CLOCK_STATUS_THRESHOLD_EXCEEDED;
break;
}
wrsTimingStatus_s.wrsSystemClockStatus = status;
}
static void get_wrsLeapSecondStatus(void){
status = WRS_SYSTEM_CLOCK_STATUS_OK;
/* systemClockStatus is OK when everything is ok with with SystemClock
* monitoring */
if ( t->wrsSystemClockStatusDetails == WRS_SYSTEM_CLOCK_STATUS_DETAILS_OK &&
/* and LeapSec file has correct syntax */
(t->wrsLeapSecStatusDetails == WRS_LEAP_SEC_STATUS_DETAILS_OK ||
t->wrsLeapSecStatusDetails == WRS_LEAP_SEC_STATUS_DETAILS_SEC_INSERTED ||
t->wrsLeapSecStatusDetails == WRS_LEAP_SEC_STATUS_DETAILS_SEC_DELETED ||
/* if LeapSec file is expired it matters only for GM or FreeRunning
* Master */
(t->wrsLeapSecStatusDetails == WRS_LEAP_SEC_STATUS_DETAILS_FILE_EXPIRED
&& s->wrsSpllMode != WRS_SPLL_MODE_GRAND_MASTER
&& s->wrsSpllMode != WRS_SPLL_MODE_MASTER)
) &&
/* and LeapSec file was retrieved successfully */
(t->wrsLeapSecSourceStatusDetails == WRS_LEAP_SEC_SRC_STATUS_DETAILS_OK ||
t->wrsLeapSecSourceStatusDetails == WRS_LEAP_SEC_SRC_STATUS_DETAILS_UPDATED)
)
status = WRS_SYSTEM_CLOCK_STATUS_OK;
/* ERROR */
else if (
t->wrsSystemClockStatusDetails == WRS_SYSTEM_CLOCK_STATUS_DETAILS_NTP_ERROR ||
t->wrsSystemClockStatusDetails == WRS_SYSTEM_CLOCK_STATUS_DETAILS_THRESHOLD_EXCEEDED ||
t->wrsLeapSecStatusDetails == WRS_LEAP_SEC_STATUS_DETAILS_INTERNAL_ERROR ||
t->wrsLeapSecStatusDetails == WRS_LEAP_SEC_STATUS_DETAILS_TAI_READ_ERROR ||
t->wrsLeapSecSourceStatusDetails == WRS_LEAP_SEC_SRC_STATUS_DETAILS_INVALID_URL ||
t->wrsLeapSecSourceStatusDetails == WRS_LEAP_SEC_SRC_STATUS_DETAILS_INVALID_FILE ||
/* download error only for configured "force remote" */
(t->wrsLeapSecSourceStatusDetails == WRS_LEAP_SEC_SRC_STATUS_DETAILS_DOWNLOAD_ERROR &&
t->wrsLeapSecSource == WRS_LEAP_SEC_SOURCE_FORCE_REMOTE) ||
/* dhcp error only for configured "force remote" */
(t->wrsLeapSecSourceStatusDetails == WRS_LEAP_SEC_SRC_STATUS_DETAILS_DHCP_ERROR &&
t->wrsLeapSecSource == WRS_LEAP_SEC_SOURCE_FORCE_REMOTE)
)
status = WRS_SYSTEM_CLOCK_STATUS_ERROR;
/* Warning */
else if (
/* Leapsecond file expired counts for GM or FM modes */
(t->wrsLeapSecStatusDetails == WRS_LEAP_SEC_STATUS_DETAILS_FILE_EXPIRED
&& s->wrsSpllMode == WRS_SPLL_MODE_GRAND_MASTER) ||
(t->wrsLeapSecStatusDetails == WRS_LEAP_SEC_STATUS_DETAILS_FILE_EXPIRED
&& s->wrsSpllMode == WRS_SPLL_MODE_MASTER)
)
status = WRS_SYSTEM_CLOCK_STATUS_WARNING;
/* WarningNA */
else if (
t->wrsSystemClockStatusDetails == WRS_SYSTEM_CLOCK_STATUS_DETAILS_IO_ERROR ||
t->wrsSystemClockStatusDetails == WRS_SYSTEM_CLOCK_STATUS_DETAILS_UNKNOWN ||
t->wrsLeapSecStatusDetails == WRS_LEAP_SEC_STATUS_DETAILS_IO_ERROR ||
t->wrsLeapSecStatusDetails == WRS_LEAP_SEC_STATUS_DETAILS_UNKNOWN ||
t->wrsLeapSecSourceStatusDetails == WRS_LEAP_SEC_SRC_STATUS_DETAILS_IO_ERROR ||
t->wrsLeapSecSourceStatusDetails == WRS_LEAP_SEC_SRC_STATUS_DETAILS_UNKNOWN
)
status = WRS_SYSTEM_CLOCK_STATUS_WARNING_NA;
struct wrsCurrentTime_s *t=&wrsCurrentTime_s;
struct wrsSpllStatus_s *s=&wrsSpllStatus_s;
int status=0;
switch (t->wrsLeapSecStatusDetails ) {
case WRS_LEAP_SEC_STATUS_DETAILS_OK :
case WRS_LEAP_SEC_STATUS_DETAILS_SEC_INSERTED:
case WRS_LEAP_SEC_STATUS_DETAILS_SEC_DELETED:
status=WRS_LEAP_SEC_STATUS_OK;
break;
case WRS_LEAP_SEC_STATUS_DETAILS_IO_ERROR:
status=WRS_LEAP_SEC_STATUS_ERROR_MINOR;
break;
case WRS_LEAP_SEC_STATUS_DETAILS_UNKNOWN:
case WRS_LEAP_SEC_STATUS_DETAILS_INTERNAL_ERROR:
case WRS_LEAP_SEC_STATUS_DETAILS_TAI_READ_ERROR:
status=WRS_LEAP_SEC_STATUS_ERROR;
break;
case WRS_LEAP_SEC_STATUS_DETAILS_FILE_EXPIRED:
status = ( s->wrsSpllMode == WRS_SPLL_MODE_GRAND_MASTER
|| s->wrsSpllMode == WRS_SPLL_MODE_MASTER)
? WRS_LEAP_SEC_STATUS_WARNING : WRS_LEAP_SEC_STATUS_DETAILS_OK;
break;
}
wrsTimingStatus_s.wrsLeapSecStatus = status;
}
static void get_wrsLeapSecondSourceStatus(void){
struct wrsCurrentTime_s *t=&wrsCurrentTime_s;
int status=0;
switch (t->wrsLeapSecSourceStatusDetails ) {
case WRS_LEAP_SEC_SRC_STATUS_DETAILS_OK :
case WRS_LEAP_SEC_SRC_STATUS_DETAILS_UPDATED:
status = WRS_LEAP_SEC_SRC_STATUS_OK;
break;
case WRS_LEAP_SEC_SRC_STATUS_DETAILS_IO_ERROR:
status = WRS_LEAP_SEC_SRC_STATUS_ERROR_MINOR;
break;
case WRS_LEAP_SEC_SRC_STATUS_DETAILS_UNKNOWN:
case WRS_LEAP_SEC_SRC_STATUS_DETAILS_DHCP_ERROR:
case WRS_LEAP_SEC_SRC_STATUS_DETAILS_INVALID_URL:
case WRS_LEAP_SEC_SRC_STATUS_DETAILS_INVALID_FILE:
case WRS_LEAP_SEC_SRC_STATUS_DETAILS_DOWNLOAD_ERROR:
status = WRS_LEAP_SEC_SRC_STATUS_ERROR;
break;
}
wrsTimingStatus_s.wrsLeapSecSourceStatus = status;
wrsTimingStatus_s.wrsSystemClockStatus = status;
}
static void get_wrsSlaveLinksStatus(unsigned int port_status_nrows)
......
......@@ -30,17 +30,8 @@
#define WRS_SYSTEM_CLOCK_STATUS_OK 1 /* ok */
#define WRS_SYSTEM_CLOCK_STATUS_ERROR 2 /* error */
#define WRS_SYSTEM_CLOCK_STATUS_ERROR_MINOR 3 /* error minor */
#define WRS_SYSTEM_CLOCK_STATUS_THRESHOLD_EXCEEDED 4 /* Threshold exceeded */
#define WRS_LEAP_SEC_STATUS_OK 1 /* Everything ok */
#define WRS_LEAP_SEC_STATUS_ERROR 2 /* Error detected */
#define WRS_LEAP_SEC_STATUS_ERROR_MINOR 3 /* Minor error detected */
#define WRS_LEAP_SEC_STATUS_WARNING 4 /* The current leap second file is out-dated */
#define WRS_LEAP_SEC_SRC_STATUS_OK 1 /* Everything ok */
#define WRS_LEAP_SEC_SRC_STATUS_ERROR 2 /* Error detected */
#define WRS_LEAP_SEC_SRC_STATUS_ERROR_MINOR 3 /* Minor error detected */
#define WRS_SYSTEM_CLOCK_STATUS_WARNING 3 /* warning */
#define WRS_SYSTEM_CLOCK_STATUS_WARNING_NA 4 /* not all data is available to calculate status*/
struct wrsTimingStatus_s {
int wrsPTPStatus;
......@@ -48,8 +39,6 @@ struct wrsTimingStatus_s {
int wrsSlaveLinksStatus;
int wrsPTPFramesFlowing;
int wrsSystemClockStatus;
int wrsLeapSecSourceStatus;
int wrsLeapSecStatus;
};
extern struct wrsTimingStatus_s wrsTimingStatus_s;
......
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