From afcb81927e773c6a44d038352f1592a54b7d4101 Mon Sep 17 00:00:00 2001 From: Dirk Zimoch Date: Thu, 29 Mar 2018 13:32:27 +0200 Subject: [PATCH] catch tNTP time jumps in vxWorks --- src/libCom/osi/osiNTPTime.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/libCom/osi/osiNTPTime.c b/src/libCom/osi/osiNTPTime.c index 909e6f121..0997cc42e 100644 --- a/src/libCom/osi/osiNTPTime.c +++ b/src/libCom/osi/osiNTPTime.c @@ -177,6 +177,19 @@ static void NTPTimeSync(void *dummy) continue; } + if (ntpDelta > 3600 && NTPTimePvt.synchronized) { + char nowTimeText[32]; + char ntpTimeText[32]; + epicsTimeToStrftime(ntpTimeText,sizeof(nowTimeText),"%Y-%m-%d %H:%M:%S.%09f", + &NTPTimePvt.syncTime); + epicsTimeToStrftime(ntpTimeText,sizeof(ntpTimeText),"%Y-%m-%d %H:%M:%S.%09f", + &timeNow); + errlogPrintf("NTPTimeSync: refuse to jump from %s to future %s (timespec: %li.%09li)\n", + nowTimeText, ntpTimeText, timespecNow.tv_sec, timespecNow.tv_nsec); + NTPTimePvt.synchronized = 0; + continue; + } + NTPTimePvt.syncsFailed = 0; if (!NTPTimePvt.synchronized) { errlogPrintf("NTPTimeSync: Sync recovered.\n"); @@ -274,6 +287,8 @@ int NTPTime_Report(int level) osdTickRateGet()); printf("Measured tick rate = %.3f Hz\n", NTPTimePvt.tickRate); + printf("Ticks to skip = %d ticks\n", + NTPTimePvt.ticksToSkip); osdNTPReport(); } } else {