package ntp import "time" // ntpLeapVersionClientMode does the mathematics to configure the leap/version/mode value of an NTP client packet. func ntpLeapVersionClientMode(leap bool, version ntpVersion) (lvm uint8) { lvm = ntpClientModeValue if leap { lvm += ntpLeapEnabledValue } switch version { case ntpV3: lvm += ntpVersion3Value case ntpV4: lvm += ntpVersion4Value } return lvm } // ntpPacketToTime converts a NTP server response into a time.Time. func ntpPacketToTime(packet *ntpPacket) time.Time { seconds := float64(packet.TxTimeSeconds) - ntpEpochOffset nanoseconds := (int64(packet.TxTimeFraction) * 1e9) >> 32 return time.Unix(int64(seconds), nanoseconds) } // ntpIsOffsetTooLarge return true if there is offset of "offset" between two times. func ntpIsOffsetTooLarge(maxOffset time.Duration, first, second time.Time) (tooLarge bool) { var offset time.Duration if first.After(second) { offset = first.Sub(second) } else { offset = second.Sub(first) } return offset > maxOffset }