ptp4l(8): PTP Boundary/Ordinary/Transparent Clock
SYNOPSIS
ptp4l [ -AEP246HSLmqsv ] [ -f config ] [ -p phc-device ] [ -l print-level ] [ -i interface ] [ long-options ] …
DESCRIPTION
ptp4l
is an implementation of the Precision Time Protocol (PTP) according to IEEE standard 1588 for Linux. It implements Boundary Clock (BC), Ordinary Clock (OC), and Transparent Clock (TC).
OPTIONS
-A
Select the delay mechanism automatically. Start with E2E and switch to P2P when a peer delay request is received.
-E
Select the delay request-response (E2E) mechanism. This is the default mechanism. All clocks on single PTP communication path must use the same mechanism. A warning will be printed when a peer delay request is received on port using the E2E mechanism.
-P
Select the peer delay (P2P) mechanism. A warning will be printed when a delay request is received on port using the P2P mechanism.
-2
Select the IEEE 802.3 network transport.
-4
Select the UDP IPv4 network transport. This is the default transport.
-6
Select the UDP IPv6 network transport.
-H
Select the hardware time stamping. All ports specified by the -i
option and in the configuration file must be attached to the same PTP hardware clock (PHC). This is the default time stamping.
-S
Select the software time stamping.
-L
Select the legacy hardware time stamping.
-f config
Read configuration from the specified file. No configuration file is read by default.
-i interface
Specify a PTP port, it may be used multiple times. At least one port must be specified by this option or in the configuration file.
-p phc-device
(This option is deprecated.) Before Linux kernel v3.5 there was no way to discover the PHC device associated with a network interface. This option specifies the PHC device (e.g. /dev/ptp0
) to be used when running on legacy kernels.
-s
Enable the clientOnly
mode.
-l print-level
Set the maximum syslog
level of messages which should be printed or sent to the system logger. The default is 6 (LOG_INFO
).
-m
Print messages to the standard output.
-q
Don’t send messages to the system logger.
-v
Prints the software version and exits.
-h
Display a help message.
LONG OPTIONS
Each and every configuration file option (see below) may also appear as a “long” style command line argument. For example, the clientOnly
option may be set using either of these two forms.
--clientOnly 1
--clientOnly=1
Option values given on the command line override values in the global section of the configuration file.
CONFIGURATION FILE
The configuration file is divided into sections. Each section starts with a line containing its name enclosed in brackets and it follows with settings. Each setting is placed on a separate line, it contains the name of the option and the value separated by whitespace characters. Empty lines and lines starting with #
are ignored.
There are three different section types.
The global section (indicated as [global]
) sets the program options, clock options and default port options. Other sections are port specific sections and they override the default port options.
Port sections give the name of the configured port (e.g. [eth0]
). Ports specified in the configuration file don’t need to be specified by the -i
option. An empty port section can be used to replace the command line option.
Tables for configuring unicast discovery begin with %[unicast_master_table]
. See UNICAST DISCOVERY OPTIONS, below.
PORT OPTIONS
active_key_id
Used in conjunction with spp
and sa_file
directives to specify which key from the spp
defined Security Association should be used for outbound icv calculations. All Security Assocations are read from the file specified by sa_file
. Requires spp
and sa_file
directives. Must be in the range of 1 to 2^32-1, inclusive. The default is 0 (disabled).
allowedLostResponses
The number of missed peer delay responses before the asCapable
variable is reset. The default is 3.
announceReceiptTimeout
The number of missed Announce messages before the last Announce messages expires. The default is 3.
boundary_clock_jbod
When running as a boundary clock (that is, when more than one network interface is configured), ptp4l
performs a sanity check to make sure that all of the ports share the same hardware clock device. This option allows ptp4l
to work as a boundary clock using “just a bunch of devices” that are not synchronized to each other. For this mode, the collection of clocks must be synchronized by an external program, for example phc2sys(8) in automatic
mode. The default is 0 (disabled).
cmlds.client_address
Specifies the source address for the UNIX domain socket that receives peer delay measurement when using the COMMON_P2P
delay mechanism. The default is /var/run/cmlds_client
.
cmlds.domainNumber
Specifies the domainNumber message field for communications with the local Common Mean Link Delay Service, used with the COMMON_P2P
delay mechanism. The default is 0.
cmlds.majorSdoId
Specifies the transportSpecific message field for communications with the local Common Mean Link Delay Service, used with the COMMON_P2P
delay mechanism. The default is 2.
cmlds.port
Specifies the port number of local Common Mean Link Delay Service from which to accept delay measurements. The range of valid port numbers
is one to 65535, but the special value zero configures the port number of the port requesting the measurements. The default is 0, meaning the requesting port number.
cmlds.server_address
Specifies the UNIX domain socket address of the local Common Mean Link Delay Service, for use with the COMMON_P2P
delay mechanism. The default is /var/run/cmlds_server
.
delayAsymmetry
The time difference in nanoseconds of the transmit and receive paths. This value should be positive when the server-to-client propagation time is longer and negative when the client-to-server time is longer. The default is 0 nanoseconds.
delay_filter
Select the algorithm used to filter the measured delay and peer delay. Possible values are moving_average
and moving_median
. The default is moving_median
.
delay_filter_length
The length of the delay filter in samples. The default is 10.
delay_mechanism
Select the delay mechanism. Possible values are E2E
, P2P
, NONE
, and Auto
. The default is E2E
.
delay_response_timeout
The number of delay response messages that may go missing before triggering a synchronization fault. Setting this option to zero will disable the delay response timeout. The default is 0 or disabled.
egressLatency
Specifies the difference in nanoseconds between the actual transmission time at the reference plane and the reported transmit time stamp. This value will be added to egress time stamps obtained from the hardware. The default is 0.
fault_badpeernet_interval
The time in seconds between the detection of a peer network misconfiguration and the fault being reset. The port is disabled for the duration of the interval. The value is in seconds and the special key word ASAP
will let the fault be reset immediately. The default is 16 seconds.
fault_reset_interval
The time in seconds between the detection of a port’s fault and the fault being reset. This value is expressed as a power of two. Setting this value to -128
or to the special key word ASAP
will let the fault be reset immediately. The default is 4 (16 seconds).
follow_up_info
Include the 802.1AS data in the Follow_Up
messages if enabled. The default is 0 (disabled).
G.8275.portDS.localPriority
The Telecom Profiles (ITU-T G.8275.1 and G.8275.2) specify an alternate Best Master Clock Algorithm (BMCA) with a unique data set comparison algorithm. The value of this option is associated with Announce messages arriving on a particular port and is used as a tie breaker whenever clockClass
, clockAccuracy
, offsetScaledLogVariance
, and priority2
are equal. This option is only used when dataset_comparison
is set to G.8275.x
. The default value is 128.
Warning: the BMCA is guaranteed to produce a spanning tree (that is, a timing network without loops) only when using the default values of G.8275.defaultDS.localPriority
and G.8275.portDS.localPriority
. Careful network engineering is needed when using non-default values.
hybrid_e2e
Enables the hybrid
delay mechanism from the draft Enterprise Profile. When enabled, ports in the client state send their delay request messages to the unicast address taken from the server’s announce message. Ports in the server state will reply to unicast delay requests using unicast delay responses. This option has no effect if the delay_mechanism is set to P2P
. The default is 0 (disabled).
ignore_transport_specific
By default, incoming messages are dropped if their transportSpecific
field does not match the configured value. However, many transports specified in the 1588 standard mandate ignoring this field. Moreover, some equipment is known to set the reserved bits. Configuring this option as 1 causes this field to be ignored completely on receive. The default is 0.
ingressLatency
Specifies the difference in nanoseconds between the reported receive time stamp and the actual reception time at reference plane. This value will be subtracted from ingress time stamps obtained from the hardware. The default is 0.
inhibit_delay_req
Don’t send any delay requests. This will need the asCapable
config option to be set to true
. This is useful when running as a designated server who does not need to calculate offset from client. The default is 0 (disabled).
inhibit_multicast_service
Some unicast mode profiles insist that no multicast message are ever transmitted. Setting this option inhibits multicast transmission. The default is 0 (mutlicast enabled).
logAnnounceInterval
The mean time interval between Announce messages. A shorter interval makes ptp4l
react faster to the changes in the client/server hierarchy. The interval should be the same in the whole domain. It’s specified as a power of two in seconds. The default is 1 (2 seconds).
logMinDelayReqInterval
The minimum permitted mean time interval between Delay_Req
messages. A shorter interval makes ptp4l
react faster to the changes in the path delay. It’s specified as a power of two in seconds. The default is 0 (1 second).
logMinPdelayReqInterval
The minimum permitted mean time interval between Pdelay_Req
messages. It’s specified as a power of two in seconds. The default is 0 (1 second).
logSyncInterval
The mean time interval between Sync messages. A shorter interval may improve accuracy of the local clock. It’s specified as a power of two in seconds. The default is 0 (1 second).
masterOnly
This option is deprecated and will be removed in a future release. Use serverOnly
instead.
min_neighbor_prop_delay
Lower limit for peer delay in nanoseconds. If the estimated peer delay is smaller than this value the port is marked as not 802.1AS capable.
neighborPropDelayThresh
Upper limit for peer delay in nanoseconds. If the estimated peer delay is greater than this value the port is marked as not 802.1AS capable.
network_transport
Select the network transport. Possible values are UDPv4
, UDPv6
, and L2
. The default is UDPv4
.
net_sync_monitor
Enables the NetSync Monitor (NSM) protocol. The NSM protocol allows a station to measure how well another node is synchronized. The monitor sends a unicast delay request to the node, which replies unconditionally with unicast delay response, sync, and follow up messages. If the monitor is synchronized to the GM, it can use the time stamps in the message to estimate the node’s offset. This option requires that the hybrid_e2e
option be enabled as well. The default is 0 (disabled).
operLogPdelayReqInterval
The Pdelay Request messages interval to be used once the clock enters the SERVO_LOCKED_STABLE
state. If the msg_interval_request
option is set, then the local client port will adopt this rate when the local clock enters the “locked stable” state. This option is specified as a power of two in seconds, and the default value is 0 (1 second).
operLogSyncInterval
The Sync message interval to be requested once the clock enters the SERVO_LOCKED_STABLE
state. If the msg_interval_request
option is set, then the local client port will request the remote server to switch to the given message rate via a signaling message containing a Message interval request TLV. This option is specified as a power of two in seconds, and default value is 0 (1 second).
path_trace_enabled
Enable the mechanism used to trace the route of the Announce messages. The default is 0 (disabled).
phc_index
Specifies the index of the PHC to be used for synchronization with hardware timestamping. This option is useful with virtual clocks running on top of a free-running physical clock (created by writing to /sys/class/ptp/ptp*/n_vclocks
). The default is -1, which means the index will be set to the PHC associated with the interface, or the device specified by the -p
option.
power_profile.2011.grandmasterTimeInaccuracy
Specifies the time inaccuracy of the GM in nanoseconds. Relevant only when power_profile.version is 2011. This value may be changed
dynamically using the POWER_PROFILE_SETTINGS_NP
management message. The default is -1 meaning unknown inaccuracy.
power_profile.2011.networkTimeInaccuracy
Specifies the time inaccuracy of the network in nanoseconds. Relevant only when power_profile.version
is 2011. This value may be changed
dynamically using the POWER_PROFILE_SETTINGS_NP
management message. The default is -1 meaning unknown inaccuracy.
power_profile.2017.totalTimeInaccuracy
Specifies the sum of the GM, network, and local node inaccuracies in nanoseconds. Relevant only when power_profile.version
is 2017. This
value may be changed dynamically using the POWER_PROFILE_SETTINGS_NP
management message. The default is -1 meaning unknown inaccuracy.
power_profile.grandmasterID
Specifies an optional, non-zero identification code for the GM. Note that the code is an arbitrary, power profile specific integer, not
necessarily related to the clockIdentity in any way. This value may be changed dynamically using the POWER_PROFILE_SETTINGS_NP
management
message. The default is 0 meaning unused.
power_profile.version
Specifies the power profile version to be used. Valid values are none
, 2011
, or 2017
. This value may be changed dynamically using the
POWER_PROFILE_SETTINGS_NP
management message. The default is none
.
ptp_dst_ipv4
- The IPv4 address to which PTP messages should be sent. Relevant only with UDPv4 transport. The default is 224.0.1.129.
p2p_dst_ipv4
The IPv4 address to which peer delay messages should be sent. Relevant only with UDPv4 transport. The default is 224.0.0.107.
ptp_dst_ipv6
The IPv6 address to which PTP messages should be sent. The second byte of the address is substituted with udp6_scope
. Relevant only with UDPv6 transport. The default is FF0E:0:0:0:0:0:0:181.
p2p_dst_ipv6
The IPv6 address to which peer delay messages should be sent. Relevant only with UDPv6 transport. The default is FF02:0:0:0:0:0:0:6B.
ptp_dst_mac
The MAC address to which PTP messages should be sent. Relevant only with L2
transport. The default is 01:1B:19:00:00:00
.
p2p_dst_mac
The MAC address to which peer delay messages should be sent. Relevant only with L2
transport. The default is 01:80:C2:00:00:0E
.
serverOnly
Setting this option to 1
prevents the port from entering the client state. In addition, the local clock will ignore Announce messages received on this port. This option’s intended use is to support the Telecom Profiles according to ITU-T G.8265.1, G.8275.1, and G.8275.2. The default value is 0
or false.
spp
Specifies the Security Parameters Pointer of the desired Security Association to be used for Authentication TLV support for a given port. Any port with an assigned spp will attach Authentication TLVs to all outbound messages and check for Authentication TLVs on all inbound messages in accordance to the corresponding security association sourced via the sa_file
directive. Outbound Authentication TLVs are generated using the key specified by active_key_id
. Not compatible with one step ports or advertised versions less then PTPv2.1. Requires sa_file
and active_key_id
directives. Must be in the range of 0 to 255, inclusive. The default is -1 (disabled).
syncReceiptTimeout
The number of sync/follow up messages that may go missing before triggering a Best Master Clock election. This option is used for running in gPTP
mode according to the 802.1AS-2011 standard. Setting this option to zero will disable the sync message timeout. The default is 0 or disabled.
transportSpecific
The transport specific field. Must be in the range 0 to 255. The default is 0.
tsproc_mode
Select the time stamp processing mode used to calculate offset and delay. Possible values are filter
, raw
, filter_weight
, raw_weight
. Raw modes perform well when the rate of sync messages (logSyncInterval
) is similar to the rate of delay messages (logMinDelayReqInterval
or logMinPdelayReqInterval
). Weighting is useful with larger network jitters (e.g. software time stamping). The default is filter
.
udp_ttl
Specifies the Time to live (TTL) value for IPv4 multicast messages and the hop limit for IPv6 multicast messages. This option is only relevant with the IPv4 and IPv6 UDP transports. The default is 1 to restrict the messages sent by ptp4l
to the same subnet.
unicast_listen
When enabled, this option allows the port to grant unicast message contracts. Incoming requests will be granted, limited only by the amount of memory available. The default is 0 (disabled).
unicast_master_table
When set to a positive integer, this option specifies the table id to be used for unicast discovery. Each table lives in its own section and has a unique, positive numerical ID. Entries in the table are a pair of transport type and protocol address. The default is 0 (unicast discovery disabled).
unicast_req_duration
The service time in seconds to be requested during unicast discovery. Note that the remote node is free to grant a different duration. The default is 3600 seconds or one hour.
PROGRAM AND CLOCK OPTIONS
asCapable
If set to true
, all the checks which can unset the asCapable
variable (as described in Section 10.2.4.1 of 802.1AS) are skipped. If set to auto
, asCapable
is initialized to false
and will be set to true
after the relevant checks have passed. The default value is auto
.
assume_two_step
Treat one-step responses as two-step if enabled. It is used to work around buggy 802.1AS switches. The default is 0 (disabled).
BMCA
This option enables use of static roles for server and client devices instead of running the best master clock algorithm (BMCA) described in the 1588 profile. This can be used to speed up the start time for servers and clients when you know the roles of the devices in advance. When set to noop
, the traditional BMCA algorithm used by 1588 is skipped. masterOnly
and clientOnly
will be used to determine the server or client role for the device. In a bridge, clientOnly
(which is a global option) can be set to make all ports assume the client role. masterOnly
(which is a per-port config option) can then be used to set individual ports to take on the server role. The default value is ptp
which runs the BMCA related state machines.
check_fup_sync
Because of packet reordering that can occur in the network, in the hardware, or in the networking stack, a follow up message can appear to arrive in the application before the matching sync message. As this is a normal occurrence, and the sequenceID message field ensures proper matching, the ptp4l
program accepts out of order packets. This option adds an additional check using the software time stamps from the networking stack to verify that the sync message did arrive first. This option is only useful if you do not trust the sequence IDs generated by the server. The default is 0 (disabled).
clientOnly
The local clock is a client-only clock if enabled. The default is 0 (disabled).
clockAccuracy
The clockAccuracy
attribute of the local clock. It is used in the PTP server selection algorithm. The default is 0xFE
.
clockClass
The clockClass
attribute of the local clock. It denotes the traceability of the time distributed by the grandmaster clock. The default is 248.
clock_class_threshold
The maximum clock class value from master, acceptible to sub-ordinate clock beyond which it moves out of lock state. The default value is 248.
clockIdentity
The clockIdentity
attribute of the local clock. The clockIdentity is an 8-octet array and should in this configuration be written in textual form, see default. It should be unique since it is used to identify the specific clock. If default is used or if not set at all, the clockIdentity
will be automtically generated. The default is 000000.0000.000000
.
clock_servo
The servo which is used to synchronize the local clock. Valid values are pi
for a PI controller, linreg
for an adaptive controller using linear regression, ntpshm
and refclock_sock
for the NTP SHM and chrony SOCK reference clocks respectively to allow another process to synchronize the local clock, and nullf
for a servo that always dials frequency offset zero (for use in SyncE nodes). The default is pi
.
clock_type
Specifies the kind of PTP clock. Valid values are OC
for ordinary clock, BC
for boundary clock, P2P_TC
for peer to peer transparent clock, and E2E_TC
for end to end transparent clock. A multi-port ordinary clock will automatically be configured as a boundary clock. The default is OC
.
dataset_comparison
Specifies the method to be used when comparing data sets during the Best Master Clock Algorithm. The possible values are ieee1588
and G.8275.x
. The default is ieee1588
.
domainNumber
The domain attribute of the local clock. The default is 0.
dscp_event
Defines the Differentiated Services Codepoint (DSCP) to be used for PTP event messages. Must be a value between 0 and 63. There are several media streaming standards out there that require specific values for this option. For example 46 (EF PHB) in AES67 or 48 (CS6 PHB) in RAVENNA. The default is 0.
dscp_general
Defines the Differentiated Services Codepoint (DSCP) to be used for PTP general messages. Must be a value between 0 and 63. There are several media streaming standards out there that recommend specific values for this option. For example 34 (AF41 PHB) in AES67 or 46 (EF PHB) in RAVENNA. The default is 0.
first_step_threshold
The maximum offset the servo will correct by changing the clock frequency (phase when using nullf
servo) instead of stepping the clock. This is only applied on the first update. It’s specified in seconds. When set to 0.0, the servo won’t step the clock on start. The default is 0.00002 (20 microseconds). This option used to be called pi_f_offset_const
.
free_running
Don’t adjust the local clock if enabled. The default is 0 (disabled).
freq_est_interval
The time interval over which is estimated the ratio of the local and peer clock frequencies. It is specified as a power of two in seconds. The default is 1 (2 seconds).
G.8275.defaultDS.localPriority
The Telecom Profiles (ITU-T G.8275.1 and G.8275.2) specify an alternate Best Master Clock Algorithm (BMCA) with a unique data set comparison algorithm. The value of this option is associated with the local clock and is used as a tie breaker whenever clockClass
, clockAccuracy
, offsetScaledLogVariance
, and priority2
are equal. This option is only used when dataset_comparison
is set to G.8275.x
. The default value is 128.
Warning: the BMCA is guaranteed to produce a spanning tree (that is, a timing network without loops) only when using the default values of G.8275.defaultDS.localPriority
and G.8275.portDS.localPriority
. Careful network engineering is needed when using non-default values.
gmCapable
If this option is enabled, then the local clock is able to become grand master. This is only for use with 802.1AS clocks and has no effect on 1588 clocks. The default is 1 (enabled).
hwts_filter
Select the hardware time stamp filter setting mode. Possible values are normal
, check
, and full
. Normal mode sets the filters as needed. Check mode only checks but does not set. Full mode sets the receive filter to mark all packets with hardware time stamp, so all applications can get them. The default is normal
.
ignore_source_id
This will disable source port identity checking for Sync and Follow_Up messages. This is useful when the announce messages are disabled in the server and the client does not have any way to know the server’s identity. The default is 0 (disabled).
inhibit_announce
This will disable the timer for announce messages (i.e. FD_MANNO_TIMER
) and also the announce message timeout timer (i.e. FD_ANNOUNCE_TIMER
). This is used by the Automotive profile as part of switching over to a static BMCA. If this option is enabled, ignore_source_id
has to be enabled in the client because it has no way to identify the server in the Sync and Follow_Up messages. The default is 0 (disabled).
initial_delay
The initial path delay of the clock in nanoseconds used for synchronization of the clock before the delay is measured using the E2E
or P2P
delay mechanism. If set to 0, the clock will not be updated until the delay is measured. The default is 0.
interface_rate_tlv
When the client and server are operating are operating at different interface rate, delay asymmetry caused due to different interface rate needs to be compensated. The server sends its interface rate using interface rate TLV as per G.8275.2 Annex D. The default is 0 (does not support interface rate tlv).
kernel_leap
When a leap second is announced, let the kernel apply it by stepping the clock instead of correcting the one-second offset with servo, which would correct the one-second offset slowly by changing the clock frequency (unless the step_threshold
option is set to correct such offset by stepping). Relevant only with software time stamping. The default is 1 (enabled).
logging_level
The maximum logging level of messages which should be printed. The default is 6 (LOG_INFO
).
manufacturerIdentity
The manufacturer id which should be an OUI owned by the manufacturer. The default is 00:00:00
.
max_frequency
The maximum allowed frequency adjustment of the clock in parts per billion (ppb). This is an additional limit to the maximum allowed by the hardware. When set to 0, the hardware limit will be used. The default is 900000000 (90%). This option used to be called pi_max_frequency
.
maxStepsRemoved
When using this option, if the value of stepsRemoved
of an Announce message is greater than or equal to the value of maxStepsRemoved
, the Announce message is not considered in the operation of the BMCA. The default value is 255.
message_tag
The tag which is added to all messages printed to the standard output or system log. If the tag contains the string "{level}"
, it will be replaced with the log level of the message as a number. The default is an empty string (which cannot be set in the configuration file as the option requires an argument).
msg_interval_request
This option, when set, will trigger an adjustment to the Sync and peer delay request message intervals when the clock servo transitions into the SERVO_LOCKED_STABLE
state. The Sync interval will be adjusted via the signaling mechanism while the pdelay
request interval is simply adjusted locally. The values to use for the new Sync and peer delay request intervals are specified by the operLogSyncInterval
and operLogPdelayReqInterval
options, respectively.
The default value of msg_interval_request
is 0 (disabled).
ntpshm_segment
The number of the SHM segment used by ntpshm
servo. The default is 0.
offsetScaledLogVariance
The offsetScaledLogVariance
attribute of the local clock. It characterizes the stability of the clock. The default is 0xFFFF
.
pi_integral_const
The integral constant of the PI controller. When set to 0.0, the integral constant will be set by the following formula from the current sync interval. The default is 0.0.
ki = min(ki_scale * sync^ki_exponent, ki_norm_max / sync)
pi_integral_exponent
The ki_exponent
constant in the formula used to set the integral constant of the PI controller from the sync interval. The default is 0.4.
pi_integral_norm_max
The ki_norm_max
constant in the formula used to set the integral constant of the PI controller from the sync interval. The default is 0.3.
pi_integral_scale
The ki_scale
constant in the formula used to set the integral constant of the PI controller from the sync interval. When set to 0.0, the value will be selected from 0.3 and 0.001 for the hardware and software time stamping respectively. The default is 0.0.
pi_proportional_const
The proportional constant of the PI controller. When set to 0.0, the proportional constant will be set by the following formula from the current sync interval. The default is 0.0.
kp = min(kp_scale * sync^kp_exponent, kp_norm_max / sync)
pi_proportional_exponent
The kp_exponent
constant in the formula used to set the proportional constant of the PI controller from the sync interval. The default is -0.3.
pi_proportional_norm_max
The kp_norm_max
constant in the formula used to set the proportional constant of the PI controller from the sync interval. The default is 0.7
pi_proportional_scale
The kp_scale
constant in the formula used to set the proportional constant of the PI controller from the sync interval. When set to 0.0, the value will be selected from 0.7 and 0.1 for the hardware and software time stamping respectively. The default is 0.0.
priority1
The priority1
attribute of the local clock. It is used in the PTP server selection algorithm, lower values take precedence. Must be in the range 0 to 255. The default is 128.
priority2
The priority2
attribute of the local clock. It is used in the PTP server selection algorithm, lower values take precedence. Must be in the range 0 to 255. The default is 128.
productDescription
The product description string. Allowed values must be of the form manufacturerName;modelNumber;instanceIdentifier
and contain at most 64 utf8 symbols. The default is ;;
.
ptp_minor_version
This option sets the minorVersionPTP
in the common PTP message header. The default is 1
.
refclock_sock_address
The address of the UNIX domain socket to be used by the refclock_sock
servo. The default is /var/run/refclock.ptp.sock
.
revisionData
The revision description string which contains the revisions for node hardware (HW), firmware (FW), and software (SW). Allowed values are of the form HW;FW;SW
and contain at most 32 utf8 symbols. The default is ;;
.
sa_file
Specifies the location of the file containing Security Associations used for immediate security processing of the Authentication TLV in
support of the optional security mechanism defined in ieee1588-2019 ch 14.16. See SECURITY ASSOCIATION OPTIONS for information on how this file should be formatted. spp
and active_key_id
should be specifed for each port to indicate which Security Association from the sa_file
should be used. The default is an empty string.
sanity_freq_limit
The maximum allowed frequency offset between uncorrected clock and the system monotonic clock in parts per billion (ppb). This is used as a sanity check of the synchronized clock. When a larger offset is measured, a warning message will be printed and the servo will be reset. If the frequency correction set by ptp4l
changes unexpectedly between updates of the clock (e.g. due to another process trying to control the clock), a warning message will be printed. When set to 0, the sanity check is disabled. The default is 200000000 (20%).
servo_num_offset_values
The number of offset values considered in order to transition from the SERVO_LOCKED
to the SERVO_LOCKED_STABLE
state. The transition occurs once the last servo_num_offset_values
offsets are all below the servo_offset_threshold
value. The default value is 10.
servo_offset_threshold
The offset threshold used in order to transition from the SERVO_LOCKED
to the SERVO_LOCKED_STABLE
state. The transition occurs once the last servo_num_offset_values
offsets are all below the threshold value. The default value of offset_threshold
is 0 (disabled).
slave_event_monitor
Specifies the address of a UNIX domain socket for event monitoring. A local monitoring client bound to this address will receive SLAVE_RX_SYNC_TIMING_DATA
and SLAVE_DELAY_TIMING_DATA_NP
TLVs. The default is the empty string (disabled).
slaveOnly
This option is deprecated and will be removed in a future release. Use clientOnly
instead.
socket_priority
Configure the SO_PRIORITY
of sockets. This is to support cases where a user
wants to route ptp4l
traffic using Linux qdiscs
for the purpose of traffic
shaping. This option is only available with the IEEE 802.3 transport (the -2
option) and is silently ignored when using the UDP IPv4/6 network transports. Must be in the range of 0 to 15, inclusive. The default is 0.
step_threshold
The maximum offset the servo will correct by changing the clock frequency (phase when using nullf
servo) instead of stepping the clock. When set to 0.0, the servo will never step the clock except on start. It’s specified in seconds. The default is 0.0. This option used to be called pi_offset_const
.
step_window
When set, indicates the number of Sync events after a clock step that the clock will not do any frequency or step adjustments. This is used in situations where clock stepping is unable to happen instantaneously so there is a lag before the timestamps can settle properly to reflect the clock step. The default is 0 (disabled).
summary_interval
The time interval in which are printed summary statistics of the clock. It is specified as a power of two in seconds. The statistics include offset root mean square (RMS), maximum absolute offset, frequency offset mean and standard deviation, and path delay mean and standard deviation. The units are nanoseconds and parts per billion (ppb). If there is only one clock update in the interval, the sample will be printed instead of the statistics. The messages are printed at the LOG_INFO
level. The default is 0 (1 second).
tc_spanning_tree
When running as a Transparent Clock, increment the stepsRemoved
field of Announce messages that pass through the switch. Enabling this option ensures that PTP message loops never form, provided the switches all implement this option together with the BMCA.
timeSource
The time source is a single byte code that gives an idea of the kind of local clock in use. The value is purely informational, having no effect on the outcome of the Best Master Clock algorithm, and is advertised when the clock becomes grand master.
time_stamping
The time stamping method to be used. The allowed values are hardware
, software
, legacy
, onestep
, and p2p1step
. The default is hardware
.
twoStepFlag
Enable two-step mode for sync messages. One-step mode can be used only with hardware time stamping. The default is 1 (enabled).
tx_timestamp_timeout
The number of milliseconds to poll waiting for the tx time stamp from the kernel when a message has recently been sent. The default is 10.
udp6_scope
Specifies the desired scope for the IPv6 multicast messages. This will be used as the second byte of the primary address. This option is only relevant with IPv6 transport. See RFC 4291. The default is 0x0E
for the global scope.
uds_address
Specifies the address of the UNIX domain socket for receiving local management messages. The default is /var/run/ptp4l
.
uds_file_mode
File mode of the UNIX domain socket used for receiving local management messages. The mode should be specified as an octal number, i.e. it should start with a 0 literal. The default mode is 0660
.
uds_ro_address
Specifies the address of the second UNIX domain socket for receiving local management messages, which is restricted to GET
actions and does not forward messages to other ports. Access to this socket can be given to untrusted applications for monitoring purposes. The default is /var/run/ptp4lro
.
uds_ro_file_mode
File mode of the second (read-only) UNIX domain socket used for receiving local management messages. The mode should be specified as an octal number, i.e. it should start with a 0 literal. The default mode is 0666
.
use_syslog
Print messages to the system log if enabled. The default is 1 (enabled).
userDescription
The user description string. Allowed values are of the form name;location
and contain at most 128 utf8 symbols. The default is an empty string.
utc_offset
The current offset between TAI and UTC. The default is 37.
verbose
Print messages to the standard output if enabled. The default is 0 (disabled).
write_phase_mode
This option enables using the “write phase” feature of a PTP Hardware Clock. If supported by the device, this mode uses the hardware’s built in phase offset control instead of frequency offset control. The default value is 0 (disabled).
UNICAST DISCOVERY OPTIONS
L2|UDPv4|UDPv6
Each table entry specifies the transport type and network address of a potential remote server. If multiple servers are specified, then unicast negotiation will be performed with each of them.
logQueryInterval
This option configures the time to wait between unicast negotiation attempts. It is specified as a power of two in seconds. The default is 0 (1 second).
peer_address
This option specifies the unicast address of the peer for use with the peer to peer delay mechanism. If specified, the port owning the table will negotiate unicast peer delay responses from the machine at the given remote address, otherwise the port will send multicast peer delay requests.
table_id
Each table must begin with a unique, positive table ID. The port that claims a given table does so by including the ID as the value of its unicast_master_table
option.
SECURITY ASSOCIATION OPTIONS
Each security association must begin with a unique spp. The port that claims a given security association does so by including the spp as the
value of its spp
option. Must be in the range of 0 to 255, inclusive.
seqid_window
This option defines how far sequence id of an incoming sync/follow_up message can advance from the last successfully processed sync/follow_up
before being considered a replayed message. Sync/follow_up seqid tracking is reset on port state change and updated upon successful processing. When set to zero, no seqid checking will be performed. Must be in the range of 0 to 32767 (0x7FFF) inclusive. The default value is 3.
allow_mutable
This option allows for mutable correction fields if on path authentication tlv support is not possible. This option is NOT recommended as it leaves the correction field unprotected. The default value is 0 (disabled).
key (format: id type length value)
Each security association must have at least one key entry. These entries should use the format id type length value
.
Key id
: Must be in the range of 1 to 2^32-1, inclusive.Key type
: Allowed are SHA256-128, SHA256, AES128, AES256.Key length
: Optional verification key length in octets. Used to verify the key value is of the length specified.Key value
: Can be read as ASCII characters with the ASCII:
prefix, as a hexadecimal number with the “HEX:” prefix or as a Base64 encoded string with the B64:
prefix. If no prefix is included, ASCII is assumed. Key values should be randomally generated if possible. Ciphers (AES) require the key length to match the cipher length (ie AES-128 requires key of 128 bits or 16 bytes).
Example
The following is an example of a security associations file:
[security_association]
spp 0
allow_mutable 1
1 SHA256-128 HEX:F8ADC6B8B8E9AA709106BA42481EC9E29607334DE2C3C737A11A12931DB27F8C
2 SHA256 32 HEX:EE91D469B3A8ADC6AC8EB28E21794C706E08FDE48863828A7B0281AFCA81B17D
[security_association]
spp 1
seqid_window 20
1 AES128 HEX:FAF48EBA01E7C5966A76CB787AED4E7B
2 AES256 B64:PKTF9VQz94qPaoAzW4eE3JtFoQ8Ov1OTQSojalWyMbs=
3 SHA256 26 abcdefghijklmnopqrstuvwxyz
TIME SCALE USAGE
When ptp4l
acts as the domain server, it either uses the PTP or the UTC time scale depending on time stamping mode. In software and legacy time stamping modes it announces Arbitrary time scale mode, which is effectively UTC here. In hardware time stamping mode it announces use of PTP time scale.
When ptp4l
is the domain server using hardware time stamping, it is up to phc2sys
to maintain the correct offset between UTC and PTP times. See the
phc2sys(8) manual page for more details.
KTHREAD PRIORITY
In case of following log,
timed out while polling for tx timestamp increasing tx_timestamp_timeout or increasing kworker priority may correct this issue, but a driver bug likely causes it
one possible cause is that the kworker which processes timestamps is being starved. The system admin might try manually increasing the priority of the kworker.
Many device drivers use kworker threads created by the PTP stack. Such kworkers are named:
ptp<decimal number of clock>
The system admin can manually bump the priority of the kworker process using chrt
.
Example:
pgrep -f "ptp[0-9]+" | xargs -I {} sudo chrt -f --pid 75 {}
Intel ice driver may create multiple kworkers for one physical NIC and names those processes differently.
Example for Intel E810 card:
pgrep -f ice-ptp | xargs -I {} sudo chrt -f --pid 75 {}
Assigning priority needs careful consideration as assigning too high priority to any task might make system unstable.
SEE ALSO
pmc(8), phc2sys(8)