#
# For a description of the syntax of this configuration file,
# see the file kconfig-language.txt in the NuttX tools repository.
#

config NETUTILS_PTPD
	bool "PTPD client/server"
	default n
	depends on NET_IPv4
	depends on NET_IGMP
	depends on NET_UDP
	---help---
		Build a minimal implementation of IEEE-1588 precision time protocol.
		Uses system gettimeofday() and adjtime() calls to synchronize clock
		with a master clock through network, or to provide a master clock to
		other systems.

if NETUTILS_PTPD

config NETUTILS_PTPD_DEBUG
	bool "Enable PTP debug messages"
	default n
	depends on DEBUG_INFO
	---help---
		Enable PTP debug messages even if CONFIG_DEBUG_NET_INFO is not enabled.

config NETUTILS_PTPD_CLIENT
	bool "Enable client support"
	default y
	---help---
		Act as a PTP client, synchronizing the NuttX clock to a remote master
		clock.

config NETUTILS_PTPD_SERVER
	bool "Enable server support"
	default n
	---help---
		Act as a PTP server, providing NuttX clock time to other systems.

		Both server and client can be simultaneously enabled. NuttX will then
		synchronize to a higher priority master clock, or act as a master
		clock itself if it has the highest priority.
		Refer to Best Master Clock algorithm in IEEE-1588 for details.

config NETUTILS_PTPD_STACKSIZE
	int "PTP daemon stack stack size"
	default DEFAULT_TASK_STACKSIZE

config NETUTILS_PTPD_SERVERPRIO
	int "PTP daemon priority"
	default 100

config NETUTILS_PTPD_DOMAIN
	int	"PTP domain selection"
	default 0
	range 0 127
	---help---
		Set PTP domain to participate in. Default domain is 0, other domains
		can be used to isolate reference clocks from each other.

if NETUTILS_PTPD_SERVER

config NETUTILS_PTPD_PRIORITY1
	int "PTP server priority1"
	default 128
	range 0 255
	---help---
		Set clock priority to announce when acting as a PTP server.
		Lower value is higher priority.

		A higher priority1 clock will be selected without regard to announced
		clock quality fields.
		Refer to Best Master Clock algorithm in IEEE-1588 for details.

config NETUTILS_PTPD_PRIORITY2
	int "PTP server priority2"
	default 128
	range 0 255
	---help---
		Set clock subpriority to announce when acting as a PTP server.
		This will distinguish between two clocks that are equivalent in
		priority1, class and accuracy values.
		Lower value is higher priority.

config NETUTILS_PTPD_CLASS
	int "PTP server class"
	default 248
	range 0 255
	---help---
		Set master clock class to announce when acting as a PTP server.
		Lower value means higher quality clock source.
		248 is the default for unknown class.

config NETUTILS_PTPD_ACCURACY
	int "PTP server accuracy"
	default 254
	range 0 255
	---help---
		Set master clock accuracy to announce when acting as a PTP server.
		Logarithmic scale is defined in IEEE-1588:
		32: +-  25 ns
		33: +- 100 ns
		34: +- 250 ns
		35: +-   1 us
		36: +-   2.5 us
		37: +-  10 us
		38: +-  25 us
		39: +- 100 us
		40: +- 250 us
		41: +-   1 ms
		42: +-   2.5 ms
		43: +-  10 ms
		44: +-  25 ms
		45: +- 100 ms
		46: +- 250 ms
		47: +-   1 s
		48: +-  10 s
		49: +-  more than 10 s
		254: Unknown

config NETUTILS_PTPD_CLOCKSOURCE
	int "PTP server clock source type"
	default 160
	range 0 255
	---help---
		Set clock source type to announce when acting as a PTP server.
		Common values:
		 32: GPS
		 64: PTP
		 80: NTP
		144: Other
		160: Internal oscillator

config NETUTILS_PTPD_SYNC_INTERVAL_MSEC
	int "PTP server sync transmit interval (ms)"
	default 1000
	---help---
		How often to transmit sync packets in server mode.

config NETUTILS_PTPD_ANNOUNCE_INTERVAL_MSEC
	int "PTP server announce transmit interval (ms)"
	default 10000
	---help---
		How often to transmit announce packets in server mode.

config NETUTILS_PTPD_TWOSTEP_SYNC
	bool "PTP server sends two-step synchronization packets"
	default y
	---help---
		If enabled, sends a follow-up packet after every sync packet.
		This helps compensate for the time taken to initiate the transmission.

config NETUTILS_PTPD_DELAYRESP_INTERVAL
	int "PTP server suggested interval of delay requests"
	range 0 255
	default 4
	---help---
		When responding to a delay request, the server can inform the client
		how often it should test path delay. This is done using header field
		logMessageInterval. The delay will be 2^N seconds.

		Default value 4 results in 16 second interval.

endif # NETUTILS_PTPD_SERVER

if NETUTILS_PTPD_CLIENT

config NETUTILS_PTPD_TIMEOUT_MS
	int "PTP client timeout for changing clock source (ms)"
	default 60000
	---help---
		If no packets are being received from currently chosen clock source,
		fall back to next best clock source after this many seconds.

config NETUTILS_PTPD_SETTIME_THRESHOLD_MS
	int "PTP client threshold for changing system time (ms)"
	default 1000
	---help---
		If difference between local and remote clock exceeds this threshold,
		time is reset with settimeofday() instead of changing the rate with
		adjtime().

config NETUTILS_PTPD_MULTICAST_TIMEOUT_MS
	int "PTP client timeout to rejoin multicast group (ms)"
	default 30000
	---help---
		If no PTP multicast packets are being received, attempt to rejoin the
		multicast group. This can be necessary if network topology changes, or
		depending on hardware, after some error recovery events.
		Set to 0 to disable.

config NETUTILS_PTPD_DRIFT_AVERAGE_S
	int "PTP client clock drift rate averaging time (s)"
	default 600
	range 10 86400
	---help---
		Clock drift rate is averaged over this time pediod. Larger value
		gives more stable estimate but reacts slower to crystal oscillator speed
		changes (such as caused by temperature changes).

config NETUTILS_PTPD_SEND_DELAYREQ
	bool "PTP client enable delay requests"
	default n
	---help---
		If enabled, sends delay request messages to measure the network delay
		to server. If disabled, assumes zero delay.

if NETUTILS_PTPD_SEND_DELAYREQ

config NETUTILS_PTPD_MAX_PATH_DELAY_NS
	int "PTP client maximum path delay (ns)"
	default 100000
	range 1 1000000000
	---help---
		Measured path delay longer than this is ignored. Delay requests are
		also not transmitted until clock synchronization is better than this.

config NETUTILS_PTPD_DELAYREQ_AVGCOUNT
	int "PTP client path delay averaging count"
	default 100
	---help---
		Measured path delay is averaged over this many samples.

endif # NETUTILS_PTPD_SEND_DELAYREQ

endif # NETUTILS_PTPD_CLIENT

endif # NETUTILS_PTPD
