Configure PTP Partial Timing Support¶
Partial Timing Support (PTS) enables a PTP node to receive and distribute time over Layer 3 IPv4/IPv6 networks using unicast PTP. This allows synchronization with grandmaster clocks across networks where not all nodes participate in timing synchronization. PTS corresponds to the G.8275.2 unicast PTP profile defined by the ITU-T.
In a PTS deployment, you can configure a ptp4l instance with one or more
unicast master tables. Each table defines a set of upstream grandmaster
addresses from which the node will request time, along with the transport type
(UDPv4 or UDPv6) and query parameters.
Prerequisites
The host must have L3 IP connectivity to the remote PTP grandmaster. Ensure that routing and addressing are configured appropriately for communication between the host and the external grandmaster.
PTS uses UDP ports 319 and 320 for PTP event and general messages, respectively. Ensure that these ports are accessible between the host and the grandmaster.
At least one
ptp4linstance must be configured. See Configure PTP Service Using the CLI for more information.The
ptp4linstance must use a UDP transport on the interface connecting to the upstream grandmaster. Set thenetwork_transportparameter toUDPv4orUDPv6at the instance level.~(keystone_admin)]$ system ptp-instance-parameter-add <ptp4l-instance> network_transport=UDPv6
About this task
Configure the unicast master tables using the --section option of the
system ptp-instance-parameter-add command. Each table is identified
by a section name with the prefix unicast_master_table_, for example
unicast_master_table_1. You can configure multiple tables on the same
ptp4l instance, each with a unique table_id.
The following parameters are supported within a unicast master table section:
Parameter |
Required |
Description |
|---|---|---|
|
Yes |
Unique integer identifier for this table within the instance. |
|
Yes |
Log2 of the interval between unicast grant requests. |
|
No |
IPv4 or IPv6 address of a peer clock for delay measurement. |
|
Yes (or UDPv6) |
IPv4 address of an upstream grandmaster. Multiple entries of the same transport type are allowed per table. |
|
Yes (or UDPv4) |
IPv6 address of an upstream grandmaster. Multiple entries of the same transport type are allowed per table. |
Note
Do not mix UDPv4 and UDPv6 entries within the same unicast
master table. Each table must use a single transport type.
table_id values must be unique within a single ptp4l instance.
Different instances may reuse the same table_id values.
Configure Unicast Master Tables¶
The following procedure configures a ptp4l instance to receive time from
an upstream grandmaster over unicast IPv6.
Add the required G.8275.2 profile parameters to the instance.
~(keystone_admin)]$ system ptp-instance-parameter-add <ptp4l-instance> \ domainNumber=44 \ dataset_comparison=G.8275.x \ network_transport=UDPv6 \ fault_reset_interval=-2 \ logAnnounceInterval=-3 \ logMinDelayReqInterval=-4 \ logSyncInterval=-4Note
The timing-related interval parameters (
logAnnounceInterval,logSyncInterval,logMinDelayReqInterval,fault_reset_interval) are environment-specific. Adjust them to meet the requirements of your network and synchronization source.Add a unicast master table specifying the upstream grandmaster addresses. You can add multiple grandmaster addresses of the same transport type by repeating the
UDPv4orUDPv6key.~(keystone_admin)]$ system ptp-instance-parameter-add <ptp4l-instance> \ --section unicast_master_table_1 \ table_id=1 \ logQueryInterval=1 \ UDPv6=<grandmaster-ipv6-address-1> \ UDPv6=<grandmaster-ipv6-address-2>Create a PTP interface for the upstream-facing port and assign the unicast master table to it. The
inhibit_announceparameter is required on unicast slave interfaces to suppress announce message transmission on those ports.~(keystone_admin)]$ system ptp-interface-add <upstream-interface> <ptp4l-instance> ~(keystone_admin)]$ system ptp-interface-parameter-add <upstream-interface> \ unicast_master_table=1 \ inhibit_announce=1 ~(keystone_admin)]$ system host-if-ptp-assign controller-0 <port> <upstream-interface>Assign the instance to the host and apply the configuration.
~(keystone_admin)]$ system host-ptp-instance-assign controller-0 <ptp4l-instance> ~(keystone_admin)]$ system ptp-instance-apply
Verify the Configuration¶
After applying, use system ptp-instance-show to confirm that parameters are grouped correctly by section.
~(keystone_admin)]$ system ptp-instance-show <ptp4l-instance>
The parameters field shows parameters grouped by section name, for example:
parameters | {'global': ['domainNumber=44', ...],
'unicast_master_table_1': ['table_id=1', 'logQueryInterval=1', ...],
'unicast_master_table_2': ['table_id=2', 'logQueryInterval=1', ...]}
Also verify that the unicast master table sections appear correctly in the
generated ptp4l configuration file.
~(keystone_admin)]$ cat /etc/linuxptp/ptpinstance/ptp4l-<instance-name>.conf
The output should contain one [unicast_master_table] section per configured
table, and the upstream interface section should include inhibit_announce
and unicast_master_table. For example:
[unicast_master_table]
##
## Associated with section: unicast_master_table_1
##
table_id 1
logQueryInterval 1
UDPv6 fc00:31:31:31::1
[eno1]
##
## Associated interface: eno1
##
inhibit_announce 1
unicast_master_table 1
Remove Unicast Master Table Configuration¶
To remove a unicast master table, delete all parameters associated with the section and re-apply.
~(keystone_admin)]$ system ptp-instance-parameter-delete <ptp4l-instance> \
--section unicast_master_table_1 \
table_id=1 \
logQueryInterval=1 \
UDPv6=<grandmaster-ipv6-address>
~(keystone_admin)]$ system ptp-instance-apply
Example: T-BC PTS Deployment¶
This example configures a T-BC that receives time
from a remote grandmaster over unicast IPv6 (PTS) and distributes time to
downstream nodes over L2. A single ptp4l instance handles both the
unicast upstream and L2 downstream transports using separate interfaces.
Topology
Remote GM (fc00:31:31:31::1)
│
│ unicast IPv6 (G.8275.2)
│
┌────┴──────────────────────────────────┐
│ NIC 1 (E825) ─ eno1 │
│ └─ ptp4l unicast slave │
│ └─ clock: SDP0 output (1PPS) ──┐ │
│ │ │
│ NIC 2 (E830) ─ enp108s0f0 │ │
│ └─ ptp4l L2 grandmaster │ │
│ └─ clock: SDP1 input ──────────┘ │
│ └─ ts2phc: sync PHC from 1PPS │
└───────────────────────────────────────┘
│
│ L2 (G.8275.1)
│
Downstream edge nodes
NIC 1 (E825,
eno1): Upstream-facing. Receives time from the remote grandmaster over unicast IPv6. Outputs a 1 PPS signal on (Software-Defined Pin) SDP0 to NIC 2.NIC 2 (E830,
enp108s0f0): Downstream-facing. Receives the 1 PPS signal on SDP1, synchronizes its PHC viats2phc, and distributes time to local edge nodes over L2.
Procedure
ptp4l — unicast slave and L2 grandmaster
Create the
ptp4linstance and add G.8275.2 profile parameters.~(keystone_admin)]$ system ptp-instance-add pts-inst1 ptp4l ~(keystone_admin)]$ system ptp-instance-parameter-add pts-inst1 \ domainNumber=44 \ dataset_comparison=G.8275.x \ network_transport=UDPv6 \ fault_reset_interval=-2 \ logAnnounceInterval=-3 \ logMinDelayReqInterval=-4 \ logSyncInterval=-4Note
The interval parameters (
logAnnounceInterval,logSyncInterval,logMinDelayReqInterval,fault_reset_interval) are environment-specific. Adjust them to match your network and synchronization source.Add the unicast master table for the upstream grandmaster.
~(keystone_admin)]$ system ptp-instance-parameter-add pts-inst1 \ --section unicast_master_table_1 \ table_id=1 \ logQueryInterval=1 \ UDPv6=fc00:31:31:31::1Create the upstream interface on NIC 1 (
eno1). Setinhibit_announce=1to suppress announce messages on the unicast slave port, and assign the unicast master table.~(keystone_admin)]$ system ptp-interface-add pts-inst1if1 pts-inst1 ~(keystone_admin)]$ system ptp-interface-parameter-add pts-inst1if1 \ unicast_master_table=1 \ inhibit_announce=1 ~(keystone_admin)]$ system host-if-ptp-assign controller-0 eno1 pts-inst1if1Create the downstream interface on NIC 2 (
enp108s0f0) with L2 transport.~(keystone_admin)]$ system ptp-interface-add pts-inst1if2 pts-inst1 ~(keystone_admin)]$ system ptp-interface-parameter-add pts-inst1if2 \ network_transport=L2 ~(keystone_admin)]$ system host-if-ptp-assign controller-0 enp108s0f0 pts-inst1if2Assign the instance to the host.
~(keystone_admin)]$ system host-ptp-instance-assign controller-0 pts-inst1
phc2sys — system clock synchronization
Create the
phc2sysinstance and link it to theptp4linstance.~(keystone_admin)]$ system ptp-instance-add phc-inst1 phc2sys ~(keystone_admin)]$ system ptp-instance-parameter-add phc-inst1 \ domainNumber=44 \ uds_address=/var/run/ptp4l-pts-inst1 ~(keystone_admin)]$ system host-ptp-instance-assign controller-0 phc-inst1
clock — NIC timing module configuration
Create the
clockinstance and assign it to the host.~(keystone_admin)]$ system ptp-instance-add clock-pts clock ~(keystone_admin)]$ system host-ptp-instance-assign controller-0 clock-pts
Configure NIC 1 (E825) to output a 1 PPS signal on SDP0 and use the DPLL TIME_REF as the PHC input reference.
~(keystone_admin)]$ system ptp-interface-add clock-ptsif1 clock-pts ~(keystone_admin)]$ system ptp-interface-parameter-add clock-ptsif1 \ sdp0=output \ period_sdp0=1pps \ tspll_cfg=timeref_156.25 ~(keystone_admin)]$ system host-if-ptp-assign controller-0 eno1 clock-ptsif1Configure NIC 2 (E830) to receive the 1 PPS signal on SDP1.
~(keystone_admin)]$ system ptp-interface-add clock-ptsif2 clock-pts ~(keystone_admin)]$ system ptp-interface-parameter-add clock-ptsif2 sdp1=input ~(keystone_admin)]$ system host-if-ptp-assign controller-0 enp108s0f0 clock-ptsif2
ts2phc — PHC synchronization for NIC 2
Create the
ts2phcinstance to synchronize NIC 2’s PHC from the 1 PPS signal generated by NIC 1.~(keystone_admin)]$ system ptp-instance-add ts1 ts2phc ~(keystone_admin)]$ system ptp-instance-parameter-add ts1 cmdline_opts='-s generic' ~(keystone_admin)]$ system host-ptp-instance-assign controller-0 ts1
Create the
ts2phcinterface on NIC 2 and configure the pin.~(keystone_admin)]$ system ptp-interface-add ts1if1 ts1 ~(keystone_admin)]$ system ptp-interface-parameter-add ts1if1 \ ts2phc.channel=1 \ ts2phc.pin_index=1 ~(keystone_admin)]$ system host-if-ptp-assign controller-0 enp108s0f0 ts1if1
Monitoring parameters
Configure holdover and offset thresholds for the instances.
~(keystone_admin)]$ system ptp-instance-parameter-add pts-inst1 \ --section monitoring \ holdover_seconds=60 \ offset_threshold_minor_nsec=1000000 \ offset_threshold_major_nsec=100000000 ~(keystone_admin)]$ system ptp-instance-parameter-add phc-inst1 \ --section monitoring \ holdover_seconds=60 \ offset_threshold_minor_nsec=1000000 \ offset_threshold_major_nsec=100000000See PTP Instance Monitoring Parameters for details on these parameters.
Apply the configuration
~(keystone_admin)]$ system ptp-instance-apply
Verify that no alarms are raised:
~(keystone_admin)]$ fm alarm-list
Generated configuration files
After applying, the following configuration files are generated on the host. Use these as a reference to verify that the configuration was applied correctly.
/etc/linuxptp/ptpinstance/ptp4l-pts-inst1.conf:
[global]
##
## Default Data Set
##
boundary_clock_jbod 1
clock_servo linreg
dataset_comparison G.8275.x
delay_mechanism E2E
domainNumber 44
fault_reset_interval -2
logAnnounceInterval -3
logMinDelayReqInterval -4
logSyncInterval -4
message_tag pts-inst1
network_transport UDPv6
summary_interval 6
time_stamping hardware
tx_timestamp_timeout 700
uds_address /var/run/ptp4l-pts-inst1
[unicast_master_table]
##
## Associated with section: unicast_master_table_1
##
table_id 1
logQueryInterval 1
UDPv6 fc00:31:31:31::1
[eno1]
##
## Associated interface: eno1
##
inhibit_announce 1
unicast_master_table 1
[enp108s0f0]
##
## Associated interface: enp108s0f0
##
network_transport L2
/etc/linuxptp/ptpinstance/phc2sys-phc-inst1.conf:
[global]
domainNumber 44
uds_address /var/run/ptp4l-pts-inst1
/etc/linuxptp/ptpinstance/clock-clock-pts.conf:
ifname [eno1]
base_port [eno1]
sdp0 output
period_sdp0 1pps
tspll_cfg timeref_156.25
ifname [enp108s0f0]
base_port [enp108s0f0]
sdp1 input
/etc/linuxptp/ptpinstance/ts2phc-ts1.conf:
[global]
##
## Default Data Set
##
leapfile /usr/share/zoneinfo/leap-seconds.list
message_tag ts1
ts2phc.pulsewidth 100000000
[enp108s0f0]
##
## Associated interface: enp108s0f0
##
ts2phc.channel 1
ts2phc.extts_polarity rising
ts2phc.pin_index 1
/etc/linuxptp/ptpinstance/instance-monitoring.conf (relevant sections):
[pts-inst1]
holdover_seconds 60
offset_threshold_major_nsec 100000000
offset_threshold_minor_nsec 1000000
[phc-inst1]
holdover_seconds 60
offset_threshold_major_nsec 100000000
offset_threshold_minor_nsec 1000000
[clock]
holdover_seconds 14400
locked_to_holdover_threshold_seconds 300
[ts1]
holdover_seconds 14400
locked_to_holdover_threshold_seconds 300
Example: T-GM PTS Deployment¶
This example configures a Telecom Grandmaster (T-GM) that serves time to
remote clients over unicast IPv6 only. The node receives its timing reference
from a GNSS source via ts2phc and advertises time over a single unicast
ptp4l instance.
In this topology the ptp4l instance does not have a unicast master table
because the node is the grandmaster — it does not request time from an
upstream source. Remote clients configure their own unicast master tables
pointing to this node’s address.
Topology
GNSS antenna
│
│ 1PPS + NMEA
│
┌────┴──────────────────────────────────┐
│ NIC 1 (E825) ─ eno1 │
│ └─ ts2phc: GNSS → PHC │
│ └─ ptp4l: unicast GM (UDPv6) │
│ └─ phc2sys: PHC → system clock │
└───────────────────────────────────────┘
│
│ unicast IPv6 (G.8275.2)
│
Remote PTS clients
Procedure
ts2phc — GNSS to PHC synchronization
Create the
ts2phcinstance to synchronize the NIC PHC from the GNSS source.~(keystone_admin)]$ system ptp-instance-add ts-gm ts2phc ~(keystone_admin)]$ system ptp-instance-parameter-add ts-gm \ ts2phc.nmea_serialport=/dev/ttyACM0 ~(keystone_admin)]$ system host-ptp-instance-assign controller-0 ts-gmCreate the
ts2phcinterface on NIC 1.~(keystone_admin)]$ system ptp-interface-add ts-gmif1 ts-gm ~(keystone_admin)]$ system host-if-ptp-assign controller-0 eno1 ts-gmif1
ptp4l — unicast grandmaster
Create the
ptp4linstance with G.8275.2 profile parameters.~(keystone_admin)]$ system ptp-instance-add gm-inst1 ptp4l ~(keystone_admin)]$ system ptp-instance-parameter-add gm-inst1 \ domainNumber=44 \ dataset_comparison=G.8275.x \ network_transport=UDPv6 \ logAnnounceInterval=-3 \ logSyncInterval=-4 \ logMinDelayReqInterval=-4Create the PTP interface on NIC 1. The
hybrid_e2e,inhibit_multicast_service, andunicast_listenparameters are required on a unicast GM interface so that the node accepts unicast negotiation requests from remote clients.~(keystone_admin)]$ system ptp-interface-add gm-inst1if1 gm-inst1 ~(keystone_admin)]$ system ptp-interface-parameter-add gm-inst1if1 \ hybrid_e2e=1 \ inhibit_multicast_service=1 \ unicast_listen=1 ~(keystone_admin)]$ system host-if-ptp-assign controller-0 eno1 gm-inst1if1Assign the instance to the host.
~(keystone_admin)]$ system host-ptp-instance-assign controller-0 gm-inst1
phc2sys — system clock synchronization
Create the
phc2sysinstance.~(keystone_admin)]$ system ptp-instance-add phc-gm phc2sys ~(keystone_admin)]$ system ptp-instance-parameter-add phc-gm \ domainNumber=44 \ uds_address=/var/run/ptp4l-gm-inst1 ~(keystone_admin)]$ system host-ptp-instance-assign controller-0 phc-gm
Apply the configuration
~(keystone_admin)]$ system ptp-instance-apply
~(keystone_admin)]$ fm alarm-list
Generated configuration files
/etc/linuxptp/ptpinstance/ptp4l-gm-inst1.conf:
[global]
##
## Default Data Set
##
boundary_clock_jbod 1
clock_servo linreg
dataset_comparison G.8275.x
delay_mechanism E2E
domainNumber 44
logAnnounceInterval -3
logMinDelayReqInterval -4
logSyncInterval -4
message_tag gm-inst1
network_transport UDPv6
summary_interval 6
time_stamping hardware
tx_timestamp_timeout 700
uds_address /var/run/ptp4l-gm-inst1
[eno1]
##
## Associated interface: eno1
##
hybrid_e2e 1
inhibit_multicast_service 1
unicast_listen 1
/etc/linuxptp/ptpinstance/ts2phc-ts-gm.conf:
[global]
##
## Default Data Set
##
leapfile /usr/share/zoneinfo/leap-seconds.list
message_tag ts-gm
ts2phc.nmea_serialport /dev/ttyACM0
ts2phc.pulsewidth 100000000
[eno1]
##
## Associated interface: eno1
##
/etc/linuxptp/ptpinstance/phc2sys-phc-gm.conf:
[global]
domainNumber 44
uds_address /var/run/ptp4l-gm-inst1
For troubleshooting PTS deployments, see PTP Instance Troubleshooting.