From da0b7f9fc0175b7623201728c02fefa2a1d62892 Mon Sep 17 00:00:00 2001 From: Grzegorz Daniluk <grzegorz.daniluk@cern.ch> Date: Fri, 27 Mar 2020 16:40:39 +0100 Subject: [PATCH] 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 --- userspace/snmpd/WR-SWITCH-MIB.txt | 61 ++--------- userspace/snmpd/wrsGeneralStatusGroup.c | 16 +-- userspace/snmpd/wrsTimingStatusGroup.c | 130 ++++++++++-------------- userspace/snmpd/wrsTimingStatusGroup.h | 15 +-- 4 files changed, 72 insertions(+), 150 deletions(-) diff --git a/userspace/snmpd/WR-SWITCH-MIB.txt b/userspace/snmpd/WR-SWITCH-MIB.txt index afd345fd5..5c5f4bf9c 100644 --- a/userspace/snmpd/WR-SWITCH-MIB.txt +++ b/userspace/snmpd/WR-SWITCH-MIB.txt @@ -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 } diff --git a/userspace/snmpd/wrsGeneralStatusGroup.c b/userspace/snmpd/wrsGeneralStatusGroup.c index a1402f373..4a4030644 100644 --- a/userspace/snmpd/wrsGeneralStatusGroup.c +++ b/userspace/snmpd/wrsGeneralStatusGroup.c @@ -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 = diff --git a/userspace/snmpd/wrsTimingStatusGroup.c b/userspace/snmpd/wrsTimingStatusGroup.c index 964f18c02..6097fbd6d 100644 --- a/userspace/snmpd/wrsTimingStatusGroup.c +++ b/userspace/snmpd/wrsTimingStatusGroup.c @@ -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) diff --git a/userspace/snmpd/wrsTimingStatusGroup.h b/userspace/snmpd/wrsTimingStatusGroup.h index ff75720e0..2c7a6cff9 100644 --- a/userspace/snmpd/wrsTimingStatusGroup.h +++ b/userspace/snmpd/wrsTimingStatusGroup.h @@ -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; -- GitLab