ntp

package
v0.0.0-...-a05d55e Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 22, 2025 License: BSD-3-Clause Imports: 6 Imported by: 0

Documentation

Overview

package ntp implements the NTP protocol as described in RFC 5905.

Index

Constants

View Source
const (
	SizeHeader = 48
	ClientPort = 1023 // Typical Client port number.
	ServerPort = 123  // NTP server port number
	Version4   = 4    // Current NTP Version Number
	MinPoll    = 4    // Minimum poll exponent (16s)
	MaxPoll    = 17   // Maximum poll exponent (~36h)
	MaxDisp    = 16   // Maximum dispersion (16s)
	MaxDist    = 1    // Distance threshold (1s)
	MaxStratum = 16   // Maximum stratum
	MinDispDiv = 200  // Minimum dispersion divisor 1/(200) == 0.005
)

NTP Global Parameters.

View Source
const (
	// If the Stratum field is 0, which implies unspecified or invalid, the
	// Reference Identifier field can be used to convey messages useful for
	// status reporting and access control.  These are called Kiss-o'-Death
	// (KoD) packets and the ASCII messages they convey are called kiss codes.
	StratumUnspecified = 0
	StratumPrimary     = 1
	StratumUnsync      = 16
)

Variables

This section is empty.

Functions

func BaseTime

func BaseTime() time.Time

BaseTime returns the time that corresponds to the NTP base time. The zero value for Timestamp and Date types corresponds to this time.

func IsStratumSecondary

func IsStratumSecondary(stratum uint8) bool

func SystemPrecision

func SystemPrecision() int8

SystemPrecision calculates the Precision field value for the NTP header once and reuses it for all future calls.

Types

type Date

type Date struct {
	// contains filtered or unexported fields
}

The 128-bit date format is used where sufficient storage and word size are available. It includes a 64-bit signed seconds field spanning 584 billion years and a 64-bit fraction field resolving .05 attosecond (i.e., 0.5e-18).

func (Date) Time

func (d Date) Time() (time.Time, error)
type Header struct {
	Stratum uint8
	// Poll is 8-bit signed integer representing the maximum interval between
	// successive messages, in log2 seconds.  Suggested default limits for
	// minimum and maximum poll intervals are 6 and 10, respectively.
	Poll int8 // 2:3
	// 8-bit signed integer representing the precision of the
	// system clock, in log2 seconds.  For instance, a value of -18
	// corresponds to a precision of about one microsecond.  The precision
	// can be determined when the service first starts up as the minimum
	// time of several iterations to read the system clock.
	Precision int8 // 3:4
	// Total round-trip delay to the reference clock, in NTP short format.
	RootDelay Short // 4:8
	// Total dispersion to the reference clock, in NTP short format.
	RootDispersion Short // 8:12
	// 32-bit code identifying the particular server or reference clock.
	// The interpretation depends on the value in the stratum field.
	// For packet stratum 0 (unspecified or invalid), this is a four-character
	// ASCII [RFC1345] string, called the "kiss code", used for debugging and monitoring purposes.
	// For stratum 1 (reference clock), this is a four-octet, left-justified,
	// zero-padded ASCII string assigned to the reference clock.
	// The authoritative list of Reference Identifiers is maintained by IANA; however, any string
	// beginning with the ASCII character "X" is reserved for unregistered
	// experimentation and development.
	ReferenceID [4]byte // 12:16
	// Time when the system clock was last set or corrected, in NTP timestamp format.
	ReferenceTime Timestamp // 16:24
	// Time at the client when the request departed for the server, in NTP timestamp format.
	OriginTime Timestamp // 24:32
	// Time at the server when the request arrived from the client, in NTP timestamp format.
	ReceiveTime Timestamp // 32:40
	// Time at the server when the response left for the client, in NTP timestamp format.
	TransmitTime Timestamp // 40:48
	// contains filtered or unexported fields
}

func DecodeHeader

func DecodeHeader(b []byte) (nhdr Header)

func (*Header) LeapIndicator

func (nhdr *Header) LeapIndicator() LeapIndicator

func (*Header) Mode

func (nhdr *Header) Mode() Mode

Mode 3-bit integer representing the mode.

func (*Header) Put

func (nhdr *Header) Put(b []byte)

func (*Header) SetFlags

func (nhdr *Header) SetFlags(mode Mode, leap LeapIndicator)

SetFlags sets the header's Version, Mode, and LeapIndicator fields. Version is automatically set to 4.

func (*Header) VersionNumber

func (nhdr *Header) VersionNumber() uint8

VersionNumber 3 bit integer representing NTP version number. Currently 4.

type LeapIndicator

type LeapIndicator uint8
const (
	LeapNoWarning LeapIndicator = iota
	LeapLastMinute61
	LeapLastMinute59
)

type Mode

type Mode uint8
const (
	ModeSymmetricActive Mode
	ModeSymmetricPassive
	ModeClient
	ModeServer
	ModeBroadcast
	ModeNTPControlMessage
	ModePrivateUse
)

type Short

type Short uint32

func (Short) Fractions

func (t Short) Fractions() uint16

func (Short) Seconds

func (t Short) Seconds() uint16

type Timestamp

type Timestamp struct {
	// contains filtered or unexported fields
}

Timestamp format is used in packet headers and other places with limited word size. It includes a 32-bit unsigned seconds field spanning 136 years and a 32-bit fraction field resolving 232 picoseconds. The 32-bit short format is used in delay and dispersion header fields where the full resolution and range of the other formats are not justified. It includes a 16-bit unsigned seconds field and a 16-bit fraction field.

func TimestampFromTime

func TimestampFromTime(t time.Time) (Timestamp, error)

func TimestampFromUint64

func TimestampFromUint64(ts uint64) Timestamp

func (Timestamp) Add

func (t Timestamp) Add(d time.Duration) Timestamp

func (Timestamp) Fractions

func (t Timestamp) Fractions() uint32

func (Timestamp) IsZero

func (t Timestamp) IsZero() bool

IsZero reports whether t represents the zero time instant.

func (Timestamp) Put

func (t Timestamp) Put(b []byte)

func (Timestamp) Seconds

func (t Timestamp) Seconds() uint32

func (Timestamp) Sub

func (t Timestamp) Sub(v Timestamp) time.Duration

func (Timestamp) Time

func (t Timestamp) Time() time.Time

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL