The Precision Time Protocol (PTP) service is an implementation of PTPv2 (IEEE 1588-2008). PTP is used to synchronize when clocks advance (tick) on a LAN computer network. It was designed primarily for instrumentation and control systems. On a local area network PTP is capable of synchronizing the clocks to an accuracy in the sub-microsecond range. In contrast, NTP is capable of accuracy in the tens of microseconds range. This higher degree of accuracy is achieved by using the time that the packet is received by the IP stack as part of the calculation to determine the difference between clocks. This means that the time between when the packet is received and when it is processed by the user mode application (PTP) can be included in the calculations when making adjustments to the skew between clocks. PTP is available for Alpha and Integrity systems running OpenVMS V7 and later.
When a PTP implementation starts up it is in the LISTEN state and it waits for an announcement from other systems. If no announcement happens within the ptpengine:Announce_Receipt_Timeout, then the system may move to MASTER state if it is configured to allow this. When in MASTER state it will announce its clock and the quality for other systems to observe. A system operating in LISTEN or SLAVE state will use the announced clock quality to choose the best master clock (BMC) from the announcements received. A system that is announcing a clock will also listen for other announcements and will stop making announcements and use another system as its master clock if a better one is detected. The quality of the clock is determined by the time source, how far it is removed from the source and the configuration parameters. The system with the reference clock is referred to as the Grand Master (GM). A potential master that has stopped making announcements will resume announcements when it stops receiving announcements from better masters.
UDP multicast is generally used on the local network to find other clocks, determine the best source and synchronize clocks. Currently PTP uses IPv4 only.
It is reasonable to run both NTP and PTP on a system, with NTP set as the ptpengine:ptp_timesource. This is reflected in the time source portion of the packets to let other systems know the quality of the clock. If the PTP configuration has ntpengine:enabled = Y, and the NTP configuration has enable mode7 in the configuration PTP will attempt to disable NTP. NTP can also be set to be a failover mechanism for when a PTP master cannot be found.
PTP determines the offset from UTC on startup
from the VMS system logical
SYS$TIMEZONE_DIFFERENTIAL and
uses a VMS system lock to synchronize with NTP for when the TDF changes due to
entering or leaving day light saving time. The PTP implementation does NOT have
any code to change the VMS system logicals or offset when the system changes
between standard time and day light saving time. Systems that observe day light
saving time should use NTP to control that.
Comparing PTP and NTP
PTP uses a significantly higher amount of CPU time
and does a lot more I/O than NTP. The goal of PTP is to keep the clock
synchronized with the selected grand master. The goal of NTP is to keep the
time accurate based upon the time that the configured servers report. NTP uses
UTC as its time standard, PTP uses TAI (International Atomic Time), there is a
file (TCPWARE:LEAP-SECONDS.LIST) that contains the leap seconds necessary to convert one to the other.
NTP uses all configured clocks that respond with reasonable time and delay
characteristics to determine what the correct time should be. PTP chooses a
single master clock based upon the following reported information:
1. Priority One Field (ptpengine:priority1) This is a configuration file item and lowest wins. Normally set to 128 for a potential master and 255 for slave only.
2. Clock Class. This is based upon configured value (ptpengine:clock_class) and modified based upon actual operating state.
3. Clock Accuracy. This is based upon configuration (ptpengine:ptp_clock_accuracy) and computed accuracy scaled to an enumerated value.
4. Clock Variance. This is based upon configuration (ptpengine:ptp_allan_variance) and computed variance scaled to an enumerated value.
5. Priority 2 field (ptpengine:priority2) Configuration file item which can be used to identify primary and backup clocks among otherwise identical, redundant Grandmaster clocks.
6. Source Port ID. A unique value, generally the Ethernet MAC address.
PTP is not available on VAX systems or AXP V6.
1. Enable the PTP server in TCPware’s network configuration utility:
$ NETCU
CONFIGURE/SERVER
TCPware Server Configuration Utility V6.1
[Reading in configuration from TCPWARE:SERVICES.MASTER_SERVER]
SERVER-CONFIG>ENABLE PTP
SERVER-CONFIG>EXIT
[Writing configuration to TCPWARE_COMMON_ROOT:[TCPWARE]SERVICES.MASTER_SERVER]
$
2. Create TCPWARE:PTPD2.CONF with information from the Configuration section of this chapter.
3. Create TCPWARE:ETHER. with ethernet (MAC) addresses and names of possible masters. Each line has the format ethernet-address nodename
aa:00:04:00:01:01 ptp-master.example.com
4. Restart the TCPware master server:
$ @TCPWARE:START_SERVER RESTART
;
==============================================================================
; This is a minimal configuration for a PTPv2 slave
; ==============================================================================
; interface has to be specified
ptpengine:interface=se0
; PTP domain
ptpengine:domain=0
; available presets are slaveonly, masteronly and masterslave (IEEE 1588) ptpengine:preset=slaveonly
; multicast for both sync and delay requests - use hybrid for unicast delay
; requests
ptpengine:ip_mode=multicast
; status file providing an overview of ptpd's
operation and statistics
global:log_status=y
; required if ip_mode is set to hybrid
;ptpengine:log_delayreq_interval=0
; uncomment this to log a timing log
;global:statistics_file=tcpware:ptpd2.stats
; always keep a new line at the end
ptpengine:interface = interface
Network interface to use - se0, se1 etc. (required).
ptpengine:backup_interface = interface
Backup network interface to use - se0, se1 etc. When no grandmaster is available, slave will keep alternating between primary and secondary until a grandmaster is found.
ptpengine:preset = slaveonly
PTP engine preset. Possible values are:
none |
Defaults, no clock class restrictions |
masteronly |
Master, passive when not best master (clock class 0..127) |
masterslave |
Full IEEE 1588 implementation: Master, slave when not best master (clock class 128..254) |
slaveonly |
Slave only (clock class 255 only). Default setting. |
ptpengine:ip_mode = multicast
IP transmission mode. Possible values are:
multicast |
uses multicast for all messages (the default) |
hybrid |
uses multicast for sync and announce, and unicast for delay request and response |
unicast |
uses unicast for all transmission. |
When unicast mode is selected, destination IP(s) need to be configured using ptpengine:unicast_destinations.
ptpengine:unicast_negotiation = N
Enable unicast negotiation support using signaling messages.
ptpengine:disable_bmca = N
Disable Best Master Clock Algorithm for unicast masters: Only effective for masteronly preset - all Announce messages will be ignored and the clock will transition directly into MASTER state.
ptpengine:unicast_negotiation_listening = N
When unicast negotiation enabled on a master clock, reply to transmission requests also in LISTENING state.
ptpengine:delay_mechanism = E2E
Delay detection mode used - use DELAY_DISABLED for synchronization only (no
full synchronization).
Options: E2E P2P DELAY_DISABLED
ptpengine:domain = 0
PTP domain number.
ptpengine:port_number = 1
PTP port number (part of PTP Port Identity - not UDP port). For ordinary clocks (single port), the default should be used, but when running multiple instances to simulate a boundary clock, the port number can be changed.
ptpengine:any_domain = N
Usability extension: if enabled, a slave-only clock will accept masters from any domain, while preferring the configured domain, and preferring lower domain number.
NOTE: this behavior is not part of the standard.
ptpengine:slave_only = Y
Slave only mode (sets clock class to 255, overriding value from preset).
ptpengine:inbound_latency = 0
Specify latency correction (nanoseconds) for incoming packets.
ptpengine:outbound_latency = 0
Specify latency correction (nanoseconds) for outgoing packets.
ptpengine:offset_shift = 0
Apply an arbitrary shift (nanoseconds) to offset from master when in slave state. Value can be positive or negative - useful for correcting for antenna latencies, delay asymmetry and IP stack latencies. This will not be visible in the offset from master value - only in the resulting clock correction.
ptpengine:always_respect_utc_offset = N
Compatibility option: In slave state, always respect UTC offset announced by best master, even if the currrentUtcOffsetValid flag is announced FALSE.
NOTE: this behavior is not part of the standard.
ptpengine:prefer_utc_offset_valid = N
Compatibility extension to BMC algorithm: when enabled, BMC for both master and save clocks will prefer masters announcing currrentUtcOffsetValid as TRUE.
NOTE: this behavior is not part of the standard.
ptpengine:require_utc_offset_valid = N
Compatibility option: when enabled, ptpd2 will ignore Announce messages from masters announcing currentUtcOffsetValid as FALSE.
NOTE: this behavior is not part of the standard.
ptpengine:unicast_grant_duration = 300
Time (seconds) unicast messages are requested for by slaves when using unicast negotiation, and maximum time unicast message transmission is granted to slaves by masters
ptpengine:log_announce_interval = 1
PTP announce message interval in master state. When using unicast negotiation, for slaves this is the minimum interval requested, and for masters this is the only interval granted. (expressed as log 2 i.e. -1=0.5s, 0=1s, 1=2s etc.)
ptpengine:log_announce_interval_max = 5
Maximum Announce message interval requested by
slaves when using unicast negotiation,
(expressed as log 2 i.e. -1=0.5s, 0=1s, 1=2s etc.)
ptpengine:announce_receipt_timeout = 6
PTP announce receipt timeout announced in master state.
ptpengine:announce_receipt_grace_period = 0
PTP announce receipt timeout grace period in slave state: when announce receipt timeout occurs, disqualify current best GM, then wait n times announce receipt timeout before resetting. Allows for a seamless GM failover when standby GMs are slow to react. When set to 0, this option is not used.
ptpengine:log_sync_interval = 0
PTP sync message interval in master state. When using unicast negotiation, for slaves this is the minimum interval requested, and for masters this is the only interval granted. (expressed as log 2 i.e. -1=0.5s, 0=1s, 1=2s etc.)
ptpengine:log_sync_interval_max = 5
Maximum Sync message interval requested by slaves when using unicast negotiation, (expressed as log 2 i.e. -1=0.5s, 0=1s, 1=2s etc.)
ptpengine:log_delayreq_override = N
Override the Delay Request interval announced by best master.
ptpengine:log_delayreq_auto = Y
Automatically override the Delay Request
interval if the announced value is 127 (0X7F), such as in
unicast messages (unless using unicast negotiation).
ptpengine:log_delayreq_interval_initial = 0
Delay request interval used before receiving first delay response (expressed as log 2 i.e. -1=0.5s, 0=1s, 1=2s etc.)
ptpengine:log_delayreq_interval = 0
Minimum delay request interval announced when in master state, in slave state overrides the master interval, required in hybrid mode. When using unicast negotiation, for slaves this is the minimum interval requested, and for masters this is the minimum interval granted. (expressed as log 2 i.e. -1=0.5s, 0=1s, 1=2s etc.)
ptpengine:log_delayreq_interval_max = 5
Maximum Delay Response interval requested by slaves when using unicast negotiation, (expressed as log 2 i.e. -1=0.5s, 0=1s, 1=2s etc.)
ptpengine:log_peer_delayreq_interval = 1
Minimum peer delay request message interval in peer to peer delay mode. When using unicast negotiation, this is the minimum interval requested, and the only interval granted. (expressed as log 2 i.e. -1=0.5s, 0=1s, 1=2s etc.)
ptpengine:log_peer_delayreq_interval_max = 5
Maximum Peer Delay Response interval requested by slaves when using unicast negotiation (expressed as log 2 i.e. -1=0.5s, 0=1s, 1=2s etc.)
ptpengine:foreignrecord_capacity = 5
Foreign master record size (Maximum number of foreign masters).
ptpengine:ptp_allan_variance = 65535
Specify Allan variance announced in master state.
ptpengine:ptp_clock_accuracy = ACC_UNKNOWN
Clock accuracy range announced in master
state.
Options: ACC_25NS ACC_100NS ACC_250NS ACC_1US
ACC_2.5US ACC_10US ACC_25US ACC_100US ACC_250US ACC_1MS ACC_2.5MS ACC_10MS
ACC_25MS ACC_100MS ACC_250MS ACC_1S ACC_10S ACC_10SPLUS ACC_UNKNOWN
ptpengine:utc_offset = 0
Underlying time source UTC offset announced in master state.
ptpengine:utc_offset_valid = N
Underlying time source UTC offset validity announced in master state.
ptpengine:time_traceable = N
Underlying time source time traceability announced in master state.
ptpengine:frequency_traceable = N
Underlying time source frequency traceability announced in master state.
ptpengine:ptp_timescale = PTP
Time scale announced in master state (with
ARB, UTC properties are ignored by slaves). When clock class is set to 13
(application specific), this value is ignored and ARB is used.
Options: PTP ARB
ptpengine:ptp_timesource = INTERNAL_OSCILLATOR
Time source announced in master state.
Options: ATOMIC_CLOCK GPS TERRESTRIAL_RADIO PTP NTP
HAND_SET OTHER INTERNAL_OSCILLATOR
Note that case matters.
ptpengine:clock_class = 255
Clock class - announced in master state. Always 255 for slave-only. Minimum, maximum and default values are controlled by presets. If set to 13 (application specific time source), announced time scale is always set to ARB. This setting controls the states a PTP port can be in. If below 128, port will only be in MASTER or PASSIVE states (master only). If above 127, port will be in MASTER or SLAVE states.
ptpengine:priority1 = 128
Priority 1 announced in master state, used for Best Master Clock selection.
ptpengine:priority2 = 128
Priority 2 announced in master state, used for Best Master Clock selection.
ptpengine:max_listen = 5
Number of consecutive resets to LISTENING before full network reset
ptpengine:unicast_destinations =
Specify unicast slave addresses for unicast master operation, or unicast master addresses for slave operation. Format is: comma, tab or space-separated IPv4 unicast addresses, one or more. For a slave, when unicast negotiation is used, setting this is mandatory.
ptpengine:unicast_domains =
This is only used by slave-only clocks using unicast destinations to allow for each master to be in a separate domain, such as with Telecom Profile. The number of entries should match the number of unicast destinations, otherwise unconfigured domains or domains set to 0 are set to domain configured in ptpengine:domain. The format is a comma, tab, or space-separated list of 8-bit unsigned integers (0 … 255)
ptpengine:unicast_local_preference =
Specify a local preference for each configured unicast destination (ptpengine:unicast_destinations). This is only used by slave-only clocks using unicast destinations to allow for each master's BMC selection to be influenced by the slave, such as with Telecom Profile. The number of entries should match the number of unicast destinations, otherwise unconfigured preference is set to 0 (highest). The format is a comma, tab or space-separated list of 8-bit unsigned integers (0 ... 255).
ptpengine:unicast_peer_destination =
Specify peer unicast address for P2P unicast. Mandatory when running unicast mode and P2P delay mode.
ptpengine:management_set_enable = N
Enable handling of PTP management messages.
ptpengine:management_enable = Y
Accept SET and COMMAND management messages.
ptpengine:igmp_refresh = Y
Send explicit IGMP joins between engine resets and periodically in master state.
ptpengine:master_igmp_refresh_interval = 60
Periodic IGMP join interval (seconds) in master state when running IPv4 multicast: when set below 10 or when ptpengine:igmp_refresh is disabled, this setting has no effect.
ptpengine:multicast_ttl = 64
Multicast time to live for multicast PTP packets (ignored and set to 1 for peer to peer messages).
ptpengine:ip_dscp = 0
DiffServ CodepPoint for packet prioritization (decimal). When set to zero, this option is not used. Use 46 for Expedited Forwarding (0x2e).
ptpengine:sync_stat_filter_enable = N
Enable statistical filter for Sync messages.
ptpengine:sync_stat_filter_type = min
Type of filter used for Sync message filtering. Options: none mean min max absmin absmax median
ptpengine:sync_stat_filter_window = 4
Number of samples used for the Sync statistical filter
ptpengine:sync_stat_filter_window_type = sliding
Sample window type used for Sync message statistical filter. Delay Response outlier filter action. Sliding window is continuous, interval passes every n-th sample only. Options: sliding interval
ptpengine:delay_stat_filter_enable = N
Enable statistical filter for Delay messages.
ptpengine:delay_stat_filter_type = min
Type of filter used for Delay message statistical filter. Options: none mean min max absmin absmax median
ptpengine:delay_stat_filter_window = 4
Number of samples used for the Delay statistical filter
ptpengine:delay_stat_filter_window_type = sliding
Sample window type used for Delay message statistical filter. Sliding window is continuous, interval passes every n-th sample only. Options: sliding interval
ptpengine:delay_outlier_filter_enable = N
Enable outlier filter for the Delay Response component in slave state.
ptpengine:delay_outlier_filter_action = discard
Delay Response outlier filter action. If set
to 'filter', outliers are replaced with moving average.
Options: discard filter
ptpengine:delay_outlier_filter_capacity = 20
Number of samples in the Delay Response outlier filter buffer.
ptpengine:delay_outlier_filter_threshold = 1.000000
Delay Response outlier filter threshold (multiplier for Peirce's maximum standard deviation). When set below 1.0, filter is tighter, when set above 1.0, filter is looser than standard Peirce's test. When autotune is enabled, this is the starting threshold.
ptpengine:delay_outlier_filter_always_filter = N
Always run the Delay Response outlier filter, even if clock is being slewed at maximum rate
ptpengine:delay_outlier_filter_autotune_enable = Y
Enable automatic threshold control for Delay Response outlier filter.
ptpengine:delay_outlier_filter_autotune_minpercent = 20
Delay Response outlier filter autotune low watermark - minimum percentage of discarded samples in the update period before filter is tightened by the autotune step value.
ptpengine:delay_outlier_filter_autotune_maxpercent = 95
Delay Response outlier filter autotune high watermark - maximum percentage of discarded samples in the update period before filter is loosened by the autotune step value.
ptpengine:delay_outlier_autotune_step = 0.100000
The value the Delay Response outlier filter threshold is increased or decreased by when auto-tuning.
ptpengine:delay_outlier_filter_autotune_minthreshold = 0.100000
Minimum Delay Response filter threshold value used when auto-tuning.
ptpengine:delay_outlier_filter_autotune_maxthreshold = 5.000000
Maximum Delay Response filter threshold value used when auto-tuning.
ptpengine:delay_outlier_filter_stepdetect_enable = N
Enable Delay filter step detection (delaySM) to block when certain level exceeded.
ptpengine:delay_outlier_filter_stepdetect_threshold = 1000000
Delay Response step detection threshold. Step detection is performed only when delaySM is below this threshold (nanoseconds).
ptpengine:delay_outlier_filter_stepdetect_level = 500000
Delay Response step level. When step detection enabled and operational, delaySM above this level (nanosecond) is considered a clock step and updates are paused.
ptpengine:delay_outlier_filter_stepdetect_credit = 200
Initial credit (number of samples) the Delay step detection filter can block for. When credit is exhausted, filter stops blocking. Credit is gradually restored.
ptpengine:delay_outlier_filter_stepdetect_credit_increment = 10
Amount of credit for the Delay step detection filter restored every full sample window
ptpengine:delay_outlier_weight = 1.000000
Delay Response outlier weight: if an outlier is detected, determines the amount of its deviation from mean that is used to build the standard deviation statistics and influence further outlier detection. When set to 1.0, the outlier is used as is.
ptpengine:sync_outlier_filter_enable = N
Enable outlier filter for the Sync component in slave state.
ptpengine:sync_outlier_filter_action = discard
Sync outlier filter action. If set to 'filter', outliers are replaced with moving average. Options: discard filter
ptpengine:sync_outlier_filter_capacity = 20
Number of samples in the Sync outlier filter buffer.
ptpengine:sync_outlier_filter_threshold = 1.000000
Sync outlier filter threshold: multiplier for the Peirce's maximum standard deviation. When set below 1.0, filter is tighter, when set above 1.0, filter is looser than standard Peirce's test.
ptpengine:sync_outlier_filter_always_filter = N
Always run the Sync outlier filter, even if clock is being slewed at maximum rate
ptpengine:sync_outlier_filter_autotune_enable = Y
Enable automatic threshold control for Sync outlier filter.
ptpengine:sync_outlier_filter_autotune_minpercent = 20
Sync outlier filter autotune low watermark - minimum percentage of discarded samples in the update period before filter is tightened by the autotune step value.
ptpengine:sync_outlier_filter_autotune_maxpercent = 95
Sync outlier filter autotune high watermark - maximum percentage of discarded samples in the update period before filter is loosened by the autotune step value.
ptpengine:sync_outlier_autotune_step = 0.100000
Value the Sync outlier filter threshold is increased or decreased by when auto-tuning.
ptpengine:sync_outlier_filter_autotune_minthreshold = 0.100000
Minimum Sync outlier filter threshold value used when auto-tuning
ptpengine:sync_outlier_filter_autotune_maxthreshold = 5.000000
Maximum Sync outlier filter threshold value used when auto-tuning
ptpengine:sync_outlier_filter_stepdetect_enable = N
Enable Sync filter step detection (delayMS) to block when certain level exceeded.
ptpengine:sync_outlier_filter_stepdetect_threshold = 1000000
Sync step detection threshold. Step detection is performed only when delayMS is below this threshold (nanoseconds)
ptpengine:sync_outlier_filter_stepdetect_level = 500000
Sync step level. When step detection enabled and operational, delayMS above this level (nanosecond) is considered a clock step and updates are paused
ptpengine:sync_outlier_filter_stepdetect_credit = 200
Initial credit (number of samples) the Sync step detection filter can block for. When credit is exhausted, filter stops blocking. Credit is gradually restored
ptpengine:sync_outlier_filter_stepdetect_credit_increment = 10
Amount of credit for the Sync step detection filter restored every full sample window
ptpengine:sync_outlier_weight = 1.000000
Sync outlier weight: if an outlier is detected, this value determines the amount of its deviation from mean that is used to build the standard deviation statistics and influence further outlier detection. When set to 1.0, the outlier is used as is.
ptpengine:calibration_delay = 0
Delay between moving to slave state and enabling clock updates (seconds). This allows one-way delay to stabilize before starting clock updates. Activated when going into slave state and during slave's GM failover.
ptpengine:idle_timeout = 120
PTP idle timeout: if PTPd is in SLAVE state and there have been no clock updates for this amount of time, PTPd releases clock control. Measured in seconds.
ptpengine:panic_mode = N
Enable panic mode: when offset from master is above 1 second, stop updating the clock for a period of time and then step the clock if offset remains above 1 second.
ptpengine:panic_mode_duration = 2
Duration (minutes) of the panic mode period (no clock updates) when offset above 1 second detected.
ptpengine:panic_mode_release_clock = N
When entering panic mode, release clock control while panic mode lasts. If ntpengine:* configured, this will fail over to NTP, if not set, PTP will hold clock control during panic mode.
ptpengine:panic_mode_exit_threshold = 0
Do not exit panic mode until offset drops below this value (nanoseconds).
0 = not used.
ptpengine:pid_as_clock_identity = N
Use PTPd's process ID as the middle part of the PTP clock ID - useful for running multiple instances.
ptpengine:ntp_failover = N
Fail over to NTP when PTP time sync not available – requires ntpengine:enabled, but does not require the rest of NTP configuration: will warn instead of failing over if cannot control ntpd.
ptpengine:ntp_failover_timeout = 120
NTP failover timeout in seconds: time between PTP slave going into LISTENING state and releasing clock control.
0 = fail over immediately.
ptpengine:prefer_ntp = N
Prefer NTP time synchronization. Only use PTP when NTP not available, could be used when NTP runs with a local GPS receiver or another reference
ptpengine:panic_mode_ntp = N
Same as ptpengine:panic_mode_release_clock
ptpengine:timing_acl_permit =
Permit access control list for timing packets. Format is a series of comma, space or tab separated network prefixes: IPv4 addresses or full CIDR notation a.b.c.d/x, where a.b.c.d is the subnet and x is the decimal mask, or a.b.c.d/v.x.y.z where a.b.c.d is the subnet and v.x.y.z is the 4-octet mask. The match is performed on the source IP address of the incoming messages. No addresses are allowed unless an ACL is defined.
ptpengine:timing_acl_deny =
Deny access control list for timing packets. Format is a series of comma, space or tab separated network prefixes: IPv4 addresses or full CIDR notation a.b.c.d/x, where a.b.c.d is the subnet and x is the decimal mask, or a.b.c.d/v.x.y.z where a.b.c.d is the subnet and v.x.y.z is the 4-octet mask. The match is performed on the source IP address of the incoming messages. No addresses are allowed unless an acl is defined.
ptpengine:management_acl_permit =
Permit access control list for management messages. Format is a series of comma, space or tab separated network prefixes: IPv4 addresses or full CIDR notation a.b.c.d/x, where a.b.c.d is the subnet and x is the decimal mask, or a.b.c.d/v.x.y.z where a.b.c.d is the subnet and v.x.y.z is the 4-octet mask. The match is performed on the source IP address of the incoming messages. No addresses are allowed unless an acl is defined.
ptpengine:management_acl_deny =
Deny access control list for management messages. Format is a series of comma, space or tab separated network prefixes: IPv4 addresses or full CIDR notation a.b.c.d/x, where a.b.c.d is the subnet and x is the decimal mask, or a.b.c.d/v.x.y.z where a.b.c.d is the subnet and v.x.y.z is the 4-octet mask. The match is performed on the source IP address of the incoming messages. No addresses are allowed unless an acl is defined.
ptpengine:timing_acl_order = permit-deny
Order in which permit and deny access lists are evaluated for timing packets. The IP address that the packet came from is checked for a match in the permit list and deny list. When the order is permit-deny (default) the address is only permitted if it is in the permit list and is not in the deny list. For deny-permit the address is allowed if it is not in the deny list or if it is in the permit list, otherwise it is rejected.
Options: permit-deny deny-permit
ptpengine:management_acl_order = permit-deny
Order in which permit and deny access lists are evaluated for management messages. The IP address that the packet came from is checked for a match in the permit list and deny list. When the order is permit-deny (default) the address is only permitted if it is in the permit list and is not in the deny list. For deny-permit the address is allowed if it is not in the deny list or if it is in the permit list, otherwise it is rejected.
Options: permit-deny deny-permit
ptpengine:sync_sequence_checking = N
When enabled, Sync messages will only be accepted if sequence ID is increasing. This is limited to 50 dropped messages.
ptpengine:clock_update_timeout = 0
If set to non-zero, timeout in seconds, after which the slave resets if no clock updates made.
clock:no_adjust = N
Do not adjust the clock.
clock:no_reset = N
Do not step the clock - only slew.
clock:step_startup_force = N
Force clock step on first sync after startup regardless of offset and clock:no_reset
clock:step_startup = N
Step clock on startup if offset >= 1 second, ignoring panic mode and clock:no_reset
clock:drift_handling = preserve
Observed drift handling method between servo restarts:
reset: set to zero (not recommended)
preserve: use kernel value,
file: load/save to drift file on startup/shutdown, use kernel value in between. To specify drift file, use the clock:drift_file setting.
Options: reset preserve file
clock:drift_file = TCPWARE:ptpd2_kernelclock.drift
Specify drift file.
clock:leap_second_pause_period = 5
Time (seconds) before and after midnight that clock updates should be suspended for during a leap second event. The total duration of the pause is twice the configured duration.
clock:leap_second_notice_period = 43200
Time (seconds) before midnight that PTPd starts announcing the leap second if it's running as master
clock:leap_seconds_file =
Specify leap second file location - up to date version can be downloaded from:
http://www.ietf.org/timezones/data/leap-seconds.list
clock:leap_second_handling = accept
Behavior during a leap second event:
accept: inform the OS kernel of the event
ignore: do nothing - ends up with a 1-second offset which is then slewed
step: similar to ignore, but steps the clock immediately after the leap second event
smear: do not inform kernel, gradually introduce the leap second before the event by modifying clock offset (see clock:leap_second_smear_period)
Options: accept ignore step smear
clock:leap_second_smear_period = 86400
Time period (Seconds) over which the leap second is introduced before the event.
Example: when set to 86400 (24 hours), an extra 11.5 microseconds is added every second
clock:max_offset_ppm = 500
Maximum absolute frequency shift which can be applied to the clock servo when slewing the clock. Expressed in parts per million (1 ppm = shift of 1 ms per second). Values above 512 will use the tick duration correction to allow even faster slewing. Default maximum is 512 without using tick.
servo:dt_method = constant
How servo update interval (delta t) is calculated:
none: servo not corrected for update interval (dt always 1),
constant: constant value (target servo update rate - sync interval for PTP,
measured: servo measures how often it's updated and uses this interval.
Options: none constant measured
servo:delayfilter_stiffness = 6
One-way delay filter stiffness.
servo:kp = 0.100000
Clock servo PI controller proportional component gain (kP).
servo:ki = 0.001000
Clock servo PI controller integral component gain (kI).
servo:dt_max = 5.000000
Maximum servo update interval (delta t) when using measured servo update interval (servo:dt_method = measured), specified as sync interval multiplier.
servo:stability_detection = N
Enable clock synchronization servo stability detection (based on standard deviation of the observed drift value) - drift will be saved to drift file / cached when considered stable, also clock stability status will be logged.
servo:stability_threshold = 10.000000
Specify the observed drift standard deviation threshold in parts per billion (ppb) - if standard deviation is within the threshold, servo is considered stable.
servo:stability_period = 1
Specify for how many statistics update intervals the observed drift standard deviation has to stay within threshold to be considered stable.
servo:stability_timeout = 10
Specify after how many minutes without stabilization servo is considered unstable. Assists with logging servo stability information and allows to preserve observed drift if servo cannot stabilize.
servo:max_delay = 0
Do accept master to slave delay (delayMS - from Sync message) or slave to master delay (delaySM - from Delay messages) if greater than this value (nanoseconds). 0 = not used.
servo:max_delay_max_rejected = 0
Maximum number of consecutive delay measurements exceeding maxDelay threshold, before slave is reset.
servo:max_delay_stable_only = N
If servo:max_delay is set, perform the check only if clock servo has stabilized.
servo:max_offset = 0
Do not reset the clock if offset from master is greater than this value (nanoseconds). 0 = not used.
global:lock_file =TCPWARE:PTPD2.LOCK
Lock file location.
global:auto_lockfile = N
Use mode specific and interface specific lock file (overrides global:lock_file).
global:lock_directory = TCPWARE:
Lock file directory: used with automatic mode-specific lock files, also used when no lock file is specified. When lock file is specified, it's expected to be an absolute path.
global:ignore_lock = N
Skip lock file checking and locking.
global:quality_file =
File used to record data about sync packets. Enables recording when set.
global:quality_file_max_size = 0
Maximum sync packet record file size (in kB) - file will be truncated if size exceeds the limit. 0 - no limit.
global:quality_file_max_files = 0
Enable log rotation of the sync packet record file up to n files.
0 - do not rotate.
global:quality_file_truncate = N
Truncate the sync packet record file every time it is (re) opened (on startup or restart).
global:status_file = TCPWARE:ptpd2.status
File used to log ptpd2 status information.
global:log_status = N
Enable / disable writing status information to file.
global:status_update_interval = 1
Status file update interval in seconds.
global:log_level = LOG_ALL
Specify log level (only messages at this priority or higher will be logged). The minimal level is LOG_ERR.
Options: LOG_ERR LOG_WARNING LOG_NOTICE LOG_INFO LOG_ALL
global:statistics_file =
Specify statistics log file path. Setting this enables logging of statistics but can be overridden with global:log_statistics.
global:statistics_log_interval = 0
Log timing statistics every n seconds for Sync and Delay messages
(0 - log all).
global:statistics_file_max_size = 0
Maximum statistics log file size (in kB) - log file will be truncated if size exceeds the limit. 0 - no limit.
global:statistics_file_max_files = 0
Enable log rotation of the statistics file up to n files.
0 - do not rotate.
global:statistics_file_truncate = N
Truncate the statistics file every time it is (re) opened (startup and restart).
global:dump_packets = N
Dump the contents of every PTP packet
global:log_statistics = N
Log timing statistics for every PTP packet received
global:statistics_timestamp_format = datetime
Timestamp format used when logging timing statistics
(when global:log_statistics is enabled):
datetime - formatted date and time: YYYY-MM-DD hh:mm:ss.uuuuuu
unix - Unix timestamp with nanoseconds: s.ns
both - Formatted date and time, followed by UNIX timestamp (adds one extra field to the log)
Options: datetime unix both
global:statistics_update_interval = 30
Clock synchronization statistics update interval in seconds.
global:periodic_updates = N
Log a status update every time statistics are updated (global:statistics_update_interval). The updates are logged even when ptpd is configured without statistics support.
global:timingdomain_election_delay = 15
Delay (seconds) before releasing a time service (NTP or PTP) and electing a new one to control a clock. 0 = elect immediately
global:enable_snmp=N/Y
Use the AgentX protocol to connect to the SNMP agent on the system to provide information about the server.
ntpengine:enabled = N
Enable NTPd integration.
ntpengine:control_enabled = N
Enable control over local NTPd daemon.
ntpengine:check_interval = 15
NTP control check interval in seconds.
ntpengine:key_id = 0
NTP key number - must be configured as a trusted control key in ntp.conf, and be non-zero for the ntpengine:control_enabled setting to take effect.
ntpengine:key =
NTP key (plain text, max. 20 characters) - must match the key configured in ntpd's keys file, and must be non-zero for the ntpengine:control_enabled setting to take effect.
The following commands are available in TCPware’s NETCONTROL utility to manage the PTP server.
Set debugging level
$ mult netc
ptp debug 0
Connected to NETCONTROL server on "LOCALHOST"
bigboote.example.com Network Control V6.1 at Fri 16-Aug-2019 1:36PM-EDT
Debug level now set to 0
List of PTP control commands
$ mult netc
ptp help
Connected to NETCONTROL server on "LOCALHOST"
bigboote.example.com Network Control V6.1 at Fri 16-Aug-2019 1:41PM-EDT
debug - set debugging level
help - this help information
noop - no operation
ptp-control-version - version of netcontrol control
reload - restart PTP
restart - restart PTP
show - show operating information about PTP
shutdown - shutdown PTP
start - start PTP
version - version of PTP
Restart/reload PTP
$ mult netc
ptp reload
Connected to NETCONTROL server on "LOCALHOST"
bigboote.example.com Network Control V6.1 at Fri 16-Aug-2019 1:37PM-EDT
PTP server restarting
PTP server restart requested
Show operating information about PTP
$ mult netc
ptp show
Connected to NETCONTROL server on "LOCALHOST"
bigboote.example.com Network Control V6.1 at Fri 16-Aug-2019 1:40PM-EDT
Offset From Master 0 0
Mean Path Delay 0 0
observed parent clock phase change rate 0
Grand Master Identity aa 0 4 ff fe 0 ae 8 (sys1.example.com)
Grand Master clock quality 248 254 65535
Steps Removed 0
Clock Class 248
Clock Accuracy 254
Offset Scaled Log Variance 0
Domain Number 0
End of Show PTP
Shutdown PTP
$ mult netc
ptp shutdown
Connected to NETCONTROL server on "LOCALHOST"
sys1.example.com Network Control V6.1 at Fri 16-Aug-2019 1:40PM-EDT
Starting shutdown of PTP server
PTP server shutdown
Start PTP
$ mult netc
ptp shutdown
Connected to NETCONTROL server on "LOCALHOST"
bigboote.example.com Network Control V6.1 at Fri 16-Aug-2019 1:40PM-EDT
Starting shutdown of PTP server
PTP server shutdown
Version of TCPware PTP and PTP
$ mult netc
ptp version
Connected to NETCONTROL server on "LOCALHOST"
bigboote.example.com Network Control V6.1 at Fri 16-Aug-2019 1:36PM-EDT
PTP for TCPware V1.0
PTP server version = 2.0(1)
Files
TCPWARE:PTPD2.CONF
System specific configuration
TCPWARE:ETHER.
Optional file containing a list of ethernet mac addresses and host names for displaying. One line per host name in the format
XX:XX:XX:XX:XX:XX name_to_be_displayed
TCPWARE:LEAP-SECONDS.LIST
List of dates in which a leap second has been added to adjust from Coordinated Universal Time (UTC) to International Atomic Time (TAI).