From 2d2736d370aa3e5664ea58c0c71a6d70359e4ae3 Mon Sep 17 00:00:00 2001 From: Cavalle Date: Mon, 13 Oct 2025 01:23:31 +0200 Subject: [PATCH 01/20] TELCODOCS-2100: new holdover feature --- modules/nw-ptp-t-bc-t-tsc-holdover.adoc | 440 ++++++++++++++++++ .../ptp/configuring-ptp.adoc | 2 + 2 files changed, 442 insertions(+) create mode 100644 modules/nw-ptp-t-bc-t-tsc-holdover.adoc diff --git a/modules/nw-ptp-t-bc-t-tsc-holdover.adoc b/modules/nw-ptp-t-bc-t-tsc-holdover.adoc new file mode 100644 index 000000000000..e6b442481b63 --- /dev/null +++ b/modules/nw-ptp-t-bc-t-tsc-holdover.adoc @@ -0,0 +1,440 @@ +// Module included in the following assemblies: +// +// * networking/ptp/configuring-ptp.adoc + +:_mod-docs-content-type: PROCEDURE +[id="nw-ptp-t-bc-t-tsc-holdover_{context}"] += T-BC / T-TSC Holdover + +You can run the holdover feature with Telecom Boundary Clocks (T-BC) and Telecom Time Slave Clocks (T-TSC) on the Intel E810-XXVDA4T NIC. From the T-BC settings, the `linuxptp` daemon will launch two `ptp4l` instances: one for the Timer Reference (TR) port, and another one for all TT ports. The NIC owning the TR port will lead the timing of the entire system. Connect up to two additional NICs to the leading NIC if additional time transmitter ports are required through the on-board SMA cables. + +The `ts2phc` service monitors the `ptp4l` instance bound to the TR port. If the TR port stops operating as the time receiver, in the event of upstream grandmaster clock (T-GM) deterioration in quality or the link disconnects, for example, the system enters holdover mode and reconfigures itself dynamically. + +.Procedure + +. Create a docker file to include the custom `ts2phc` build in the container image: ++ +[source,bash] +---- +FROM golang:1.23.5 AS builder +WORKDIR /go/src/github.com/k8snetworkplumbingwg/linuxptp-daemon +COPY . . +RUN make clean && make + +FROM quay.io/centos/centos:stream9 + +COPY extra/linuxptp-4.2-2.el9_4.4.test_extgm.x86_64.rpm / +RUN yum -y update && yum -y update glibc && yum --setopt=skip_missing_names_on_install=False -y install /linuxptp-4.2-2.el9_4.4.test_extgm.x86_64.rpm ethtool hwdata synce4l gpsd-minimal gpsd-minimal-clients && yum clean all && \ + rm /linuxptp-4.2-2.el9_4.4.test_extgm.x86_64.rpm + + +RUN ln -s /usr/bin/gpspipe /usr/local/bin/gpspipe && ln -s /usr/sbin/gpsd /usr/local/sbin/gpsd && ln -s /usr/bin/ubxtool /usr/local/bin/ubxtool + + +COPY --from=builder /go/src/github.com/k8snetworkplumbingwg/linuxptp-daemon/bin/ptp /usr/local/bin/ + +CMD ["/usr/local/bin/ptp"] +---- + +. Build and push the image: ++ +[source,bash] +---- +$ podman build --arch=x86_64 --no-cache -t -f Dockerfile.tbc . && podman push +---- + +. Replace the `linuxptp` daemon stock image with your custom image. The method depends on the environment used. + +. Configure the triple port T-BC NIC. See the example below where the `PtpConfig` resource contains two profiles, one for time transmitter ports (00-tbc-tt) and one to configure all the hardware, the TR port, and `ts2phc` and `phc2sys` processes: ++ +[source,yaml] +---- +apiVersion: ptp.openshift.io/v1 +kind: PtpConfig +metadata: + name: t-bc + namespace: openshift-ptp +spec: + profile: + - name: 00-tbc-tt + ptp4lConf: | + [ens4f0] + masterOnly 1 + [ens8f0] + masterOnly 1 + [ens1f0] + masterOnly 1 + [global] + # + # Default Data Set + # + twoStepFlag 1 + slaveOnly 0 + priority1 128 + priority2 128 + domainNumber 25 + clockClass 248 + clockAccuracy 0xFE + offsetScaledLogVariance 0xFFFF + free_running 0 + freq_est_interval 1 + dscp_event 0 + dscp_general 0 + dataset_comparison G.8275.x + G.8275.defaultDS.localPriority 128 + # + # Port Data Set + # + logAnnounceInterval -3 + logSyncInterval -4 + logMinDelayReqInterval -4 + logMinPdelayReqInterval -4 + announceReceiptTimeout 3 + syncReceiptTimeout 0 + delayAsymmetry 0 + fault_reset_interval -4 + neighborPropDelayThresh 20000000 + masterOnly 0 + G.8275.portDS.localPriority 128 + # + # Run time options + # + assume_two_step 0 + logging_level 6 + path_trace_enabled 0 + follow_up_info 0 + hybrid_e2e 0 + inhibit_multicast_service 0 + net_sync_monitor 0 + tc_spanning_tree 0 + tx_timestamp_timeout 50 + unicast_listen 0 + unicast_master_table 0 + unicast_req_duration 3600 + use_syslog 1 + verbose 0 + summary_interval 0 + kernel_leap 1 + check_fup_sync 0 + clock_class_threshold 135 + # + # Servo Options + # + pi_proportional_const 0.60 + pi_integral_const 0.001 + pi_proportional_scale 0.0 + pi_proportional_exponent -0.3 + pi_proportional_norm_max 0.7 + pi_integral_scale 0.0 + pi_integral_exponent 0.4 + pi_integral_norm_max 0.3 + step_threshold 2.0 + first_step_threshold 0.00002 + max_frequency 900000000 + clock_servo pi + sanity_freq_limit 200000000 + ntpshm_segment 0 + # + # Transport options + # + transportSpecific 0x0 + ptp_dst_mac 01:1B:19:00:00:00 + p2p_dst_mac 01:80:C2:00:00:0E + udp_ttl 1 + udp6_scope 0x0E + uds_address /var/run/ptp4l + # + # Default interface options + # + clock_type BC + network_transport L2 + delay_mechanism E2E + time_stamping hardware + tsproc_mode filter + delay_filter moving_median + delay_filter_length 10 + egressLatency 0 + ingressLatency 0 + boundary_clock_jbod 1 + # + # Clock description + # + productDescription ;; + revisionData ;; + manufacturerIdentity 00:00:00 + userDescription ; + timeSource 0xA0 + ptp4lOpts: -2 --summary_interval -4 + ptpSchedulingPolicy: SCHED_FIFO + ptpSchedulingPriority: 10 + ptpSettings: + controllingProfile: 01-tbc-tr + logReduce: "false" + - name: 01-tbc-tr + phc2sysOpts: -r -n 25 -N 8 -R 16 -u 0 -m -s ens4f1 + plugins: + e810: + enableDefaultConfig: false + interconnections: + - gnssInput: false + id: ens4f0 + part: E810-XXVDA4T + phaseOutputConnectors: + - SMA1 + - SMA2 + upstreamPort: ens4f1 + - id: ens1f0 + inputConnector: + connector: SMA1 + part: E810-XXVDA4T + - id: ens8f0 + inputConnector: + connector: SMA1 + part: E810-XXVDA4T + pins: + ens4f0: + SMA1: 2 1 + SMA2: 2 2 + U.FL1: 0 1 + U.FL2: 0 2 + ens1f0: + SMA1: 1 1 + SMA2: 0 2 + U.FL1: 0 1 + U.FL2: 0 2 + ens8f0: + SMA1: 1 1 + SMA2: 0 2 + U.FL1: 0 1 + U.FL2: 0 2 + settings: + LocalHoldoverTimeout: 14400 + LocalMaxHoldoverOffSet: 1500 + MaxInSpecOffset: 100 + ptp4lConf: | + # The interface name is hardware-specific + [ens4f1] + masterOnly 0 + [global] + # + # Default Data Set + # + twoStepFlag 1 + slaveOnly 0 + priority1 128 + priority2 128 + domainNumber 25 + clockClass 248 + clockAccuracy 0xFE + offsetScaledLogVariance 0xFFFF + free_running 0 + freq_est_interval 1 + dscp_event 0 + dscp_general 0 + dataset_comparison G.8275.x + G.8275.defaultDS.localPriority 128 + # + # Port Data Set + # + logAnnounceInterval -3 + logSyncInterval -4 + logMinDelayReqInterval -4 + logMinPdelayReqInterval -4 + announceReceiptTimeout 3 + syncReceiptTimeout 0 + delayAsymmetry 0 + fault_reset_interval -4 + neighborPropDelayThresh 20000000 + masterOnly 0 + G.8275.portDS.localPriority 128 + # + # Run time options + # + assume_two_step 0 + logging_level 6 + path_trace_enabled 0 + follow_up_info 0 + hybrid_e2e 0 + inhibit_multicast_service 0 + net_sync_monitor 0 + tc_spanning_tree 0 + tx_timestamp_timeout 50 + unicast_listen 0 + unicast_master_table 0 + unicast_req_duration 3600 + use_syslog 1 + verbose 0 + summary_interval 0 + kernel_leap 1 + check_fup_sync 0 + clock_class_threshold 135 + # + # Servo Options + # + pi_proportional_const 0.60 + pi_integral_const 0.001 + pi_proportional_scale 0.0 + pi_proportional_exponent -0.3 + pi_proportional_norm_max 0.7 + pi_integral_scale 0.0 + pi_integral_exponent 0.4 + pi_integral_norm_max 0.3 + step_threshold 2.0 + first_step_threshold 0.00002 + max_frequency 900000000 + clock_servo pi + sanity_freq_limit 200000000 + ntpshm_segment 0 + # + # Transport options + # + transportSpecific 0x0 + ptp_dst_mac 01:1B:19:00:00:00 + p2p_dst_mac 01:80:C2:00:00:0E + udp_ttl 1 + udp6_scope 0x0E + uds_address /var/run/ptp4l + # + # Default interface options + # + clock_type OC + network_transport L2 + delay_mechanism E2E + time_stamping hardware + tsproc_mode filter + delay_filter moving_median + delay_filter_length 10 + egressLatency 0 + ingressLatency 0 + boundary_clock_jbod 1 + # + # Clock description + # + productDescription ;; + revisionData ;; + manufacturerIdentity 00:00:00 + userDescription ; + timeSource 0xA0 + ptp4lOpts: -2 --summary_interval -4 + ptpSchedulingPolicy: SCHED_FIFO + ptpSchedulingPriority: 10 + ptpSettings: + inSyncConditionThreshold: "10" + inSyncConditionTimes: "12" + logReduce: "false" + ts2phcConf: | + [global] + use_syslog 0 + verbose 1 + logging_level 7 + ts2phc.pulsewidth 100000000 + leapfile /usr/share/zoneinfo/leap-seconds.list + domainNumber 25 + uds_address /var/run/ptp4l.0.socket + [ens4f0] + ts2phc.extts_polarity rising + ts2phc.extts_correction -10 + ts2phc.master 0 + [ens1f0] + ts2phc.extts_polarity rising + ts2phc.extts_correction -27 + ts2phc.master 0 + [ens8f0] + ts2phc.extts_polarity rising + ts2phc.extts_correction -27 + ts2phc.master 0 + ts2phcOpts: -s generic -a --ts2phc.rh_external_pps 1 + recommend: + - match: + - nodeLabel: node-role.kubernetes.io/master + priority: 4 + profile: 00-tbc-tt + - match: + - nodeLabel: node-role.kubernetes.io/master + priority: 4 + profile: 01-tbc-tr +---- + +. Configure pins and interconnections. The following example shows a triple NIC chain of blocks operating as a single boundary clock. ++ +[source,yaml] +---- +interconnections: + - gnssInput: false + id: ens4f0 + part: E810-XXVDA4T + phaseOutputConnectors: + - SMA1 + - SMA2 + upstreamPort: ens4f1 + - id: ens1f0 + inputConnector: + connector: SMA1 + part: E810-XXVDA4T + - id: ens8f0 + inputConnector: + connector: SMA1 + part: E810-XXVDA4T + pins: + ens4f0: + SMA1: 2 1 + SMA2: 2 2 + U.FL1: 0 1 + U.FL2: 0 2 + ens1f0: + SMA1: 1 1 + SMA2: 0 2 + U.FL1: 0 1 + U.FL2: 0 2 + ens8f0: + SMA1: 1 1 + SMA2: 0 2 + U.FL1: 0 1 + U.FL2: 0 2 +---- ++ +Set the time receiver NIC (`id: ens4f0`) and the specific TR port (`upstreamPort: ens4f1`) for both T-BC and T-TSC configurations. Also, set the API. In the single-NIC case, disable all pins or enable outputs if using for 1PPS measurements. + +. Configure the `ts2phc` process. In the configuration file, specify `ts2phc.master 0` for the `ts2phc` NIC sections. The command line options indicate the generic time source and the external PPS option as `-a --ts2phc.rh_external_pps 1`. Use the `ts2phc.extts_correction` setting per NIC to compensate internal and external delays. ++ +[source,yaml] +---- +ts2phcConf: | + [global] + use_syslog 0 + verbose 1 + logging_level 7 + ts2phc.pulsewidth 100000000 + leapfile /usr/share/zoneinfo/leap-seconds.list + domainNumber 25 + uds_address /var/run/ptp4l.0.socket + [ens4f0] + ts2phc.extts_polarity rising + ts2phc.extts_correction -10 + ts2phc.master 0 + [ens1f0] + ts2phc.extts_polarity rising + ts2phc.extts_correction -27 + ts2phc.master 0 + [ens8f0] + ts2phc.extts_polarity rising + ts2phc.extts_correction -27 + ts2phc.master 0 + ts2phcOpts: -s generic -a --ts2phc.rh_external_pps 1 +---- + +. Configure the `ptp4l` process. Customize `ptp4l` values in the `ptp4lConf` interface sections. The TR port is set to `masterOnly 0` only. Set all TT ports to `masterOnly 1`. + +[NOTE] +==== +To render this configuration for T-TSC operation, remove the `00-tbc-tt` profile and adjust the `ts2phcConf` section to list only the TR NIC. +==== + +.Verification + +Disable the TR port on the device on test or disable the PTP protocol on the T-GM / T-BC connected to it to enter and exit the holdover feature. Monitor the Digital Phase-Locked Loop (DPLL) offsets with netlink tooling: ++ +[source,bash] +---- +$ sudo podman run --privileged --network=host --rm quay.io/vgrinber/tools:dpll dpll-cli monitor |jq -r '"\(.boardLabel)\t\(.pinParentDevice[1].phaseOffsetPs)"' +---- \ No newline at end of file diff --git a/networking/advanced_networking/ptp/configuring-ptp.adoc b/networking/advanced_networking/ptp/configuring-ptp.adoc index 41edacd620b3..8fbad0622724 100644 --- a/networking/advanced_networking/ptp/configuring-ptp.adoc +++ b/networking/advanced_networking/ptp/configuring-ptp.adoc @@ -46,6 +46,8 @@ include::modules/nw-ptp-three-nic-hardware-config-reference.adoc[leveloffset=+2] include::modules/nw-ptp-holdover-in-a-grandmaster-clock.adoc[leveloffset=+1] +include::modules/nw-ptp-t-bc-t-tsc-holdover.adoc[leveloffset=+1] + [role="_additional-resources"] .Additional resources From 1db2aaddd5fe43895e168fddb44810d5eb599f51 Mon Sep 17 00:00:00 2001 From: Lluis Cavalle Date: Mon, 13 Oct 2025 10:54:54 +0200 Subject: [PATCH 02/20] Update nw-ptp-t-bc-t-tsc-holdover.adoc --- modules/nw-ptp-t-bc-t-tsc-holdover.adoc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/modules/nw-ptp-t-bc-t-tsc-holdover.adoc b/modules/nw-ptp-t-bc-t-tsc-holdover.adoc index e6b442481b63..72026b74d3e2 100644 --- a/modules/nw-ptp-t-bc-t-tsc-holdover.adoc +++ b/modules/nw-ptp-t-bc-t-tsc-holdover.adoc @@ -138,8 +138,8 @@ spec: # Transport options # transportSpecific 0x0 - ptp_dst_mac 01:1B:19:00:00:00 - p2p_dst_mac 01:80:C2:00:00:0E + ptp_dst_mac AA:BB:CC:DD:EE:FF + p2p_dst_mac AA:BB:CC:DD:EE:FF udp_ttl 1 udp6_scope 0x0E uds_address /var/run/ptp4l @@ -289,8 +289,8 @@ spec: # Transport options # transportSpecific 0x0 - ptp_dst_mac 01:1B:19:00:00:00 - p2p_dst_mac 01:80:C2:00:00:0E + ptp_dst_mac AA:BB:CC:DD:EE:FF + p2p_dst_mac AA:BB:CC:DD:EE:FF udp_ttl 1 udp6_scope 0x0E uds_address /var/run/ptp4l @@ -437,4 +437,4 @@ Disable the TR port on the device on test or disable the PTP protocol on the T-G [source,bash] ---- $ sudo podman run --privileged --network=host --rm quay.io/vgrinber/tools:dpll dpll-cli monitor |jq -r '"\(.boardLabel)\t\(.pinParentDevice[1].phaseOffsetPs)"' ----- \ No newline at end of file +---- From 01b055d84b0f113c4716cf27d8b4e995b958322e Mon Sep 17 00:00:00 2001 From: Lluis Cavalle Date: Mon, 13 Oct 2025 10:58:46 +0200 Subject: [PATCH 03/20] Update nw-ptp-t-bc-t-tsc-holdover.adoc --- modules/nw-ptp-t-bc-t-tsc-holdover.adoc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/nw-ptp-t-bc-t-tsc-holdover.adoc b/modules/nw-ptp-t-bc-t-tsc-holdover.adoc index 72026b74d3e2..805375aa986e 100644 --- a/modules/nw-ptp-t-bc-t-tsc-holdover.adoc +++ b/modules/nw-ptp-t-bc-t-tsc-holdover.adoc @@ -139,7 +139,7 @@ spec: # transportSpecific 0x0 ptp_dst_mac AA:BB:CC:DD:EE:FF - p2p_dst_mac AA:BB:CC:DD:EE:FF + p2p_dst_mac BB:CC:DD:EE:FF:GG udp_ttl 1 udp6_scope 0x0E uds_address /var/run/ptp4l @@ -289,8 +289,8 @@ spec: # Transport options # transportSpecific 0x0 - ptp_dst_mac AA:BB:CC:DD:EE:FF - p2p_dst_mac AA:BB:CC:DD:EE:FF + ptp_dst_mac AA:BB:CC:DD:EE:HH + p2p_dst_mac BB:CC:DD:EE:FF:II udp_ttl 1 udp6_scope 0x0E uds_address /var/run/ptp4l From 39fb3329e0b19f2329ee51c76fdbda458cc6fef4 Mon Sep 17 00:00:00 2001 From: Lluis Cavalle Date: Mon, 13 Oct 2025 11:06:34 +0200 Subject: [PATCH 04/20] Update nw-ptp-t-bc-t-tsc-holdover.adoc small style fix --- modules/nw-ptp-t-bc-t-tsc-holdover.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/nw-ptp-t-bc-t-tsc-holdover.adoc b/modules/nw-ptp-t-bc-t-tsc-holdover.adoc index 805375aa986e..ce1636fe3b9d 100644 --- a/modules/nw-ptp-t-bc-t-tsc-holdover.adoc +++ b/modules/nw-ptp-t-bc-t-tsc-holdover.adoc @@ -8,7 +8,7 @@ You can run the holdover feature with Telecom Boundary Clocks (T-BC) and Telecom Time Slave Clocks (T-TSC) on the Intel E810-XXVDA4T NIC. From the T-BC settings, the `linuxptp` daemon will launch two `ptp4l` instances: one for the Timer Reference (TR) port, and another one for all TT ports. The NIC owning the TR port will lead the timing of the entire system. Connect up to two additional NICs to the leading NIC if additional time transmitter ports are required through the on-board SMA cables. -The `ts2phc` service monitors the `ptp4l` instance bound to the TR port. If the TR port stops operating as the time receiver, in the event of upstream grandmaster clock (T-GM) deterioration in quality or the link disconnects, for example, the system enters holdover mode and reconfigures itself dynamically. +The `ts2phc` service monitors the `ptp4l` instance bound to the TR port. If the TR port stops operating as the time receiver, if upstream grandmaster clock (T-GM) deteriorates in quality or the link disconnects, for example, the system enters holdover mode and reconfigures itself dynamically. .Procedure From 59d5e1e7876b5c2f529729068b98acf151df816c Mon Sep 17 00:00:00 2001 From: Lluis Cavalle Date: Mon, 13 Oct 2025 15:29:49 +0200 Subject: [PATCH 05/20] Update nw-ptp-t-bc-t-tsc-holdover.adoc Fixing errors --- modules/nw-ptp-t-bc-t-tsc-holdover.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/nw-ptp-t-bc-t-tsc-holdover.adoc b/modules/nw-ptp-t-bc-t-tsc-holdover.adoc index ce1636fe3b9d..bcadcd59bff6 100644 --- a/modules/nw-ptp-t-bc-t-tsc-holdover.adoc +++ b/modules/nw-ptp-t-bc-t-tsc-holdover.adoc @@ -6,7 +6,7 @@ [id="nw-ptp-t-bc-t-tsc-holdover_{context}"] = T-BC / T-TSC Holdover -You can run the holdover feature with Telecom Boundary Clocks (T-BC) and Telecom Time Slave Clocks (T-TSC) on the Intel E810-XXVDA4T NIC. From the T-BC settings, the `linuxptp` daemon will launch two `ptp4l` instances: one for the Timer Reference (TR) port, and another one for all TT ports. The NIC owning the TR port will lead the timing of the entire system. Connect up to two additional NICs to the leading NIC if additional time transmitter ports are required through the on-board SMA cables. +You can run the holdover feature with Telecom Boundary Clocks (T-BC) and Telecom Time Slave Clocks (T-TSC) on the Intel E810-XXVDA4T NIC. From the T-BC settings, the `linuxptp` daemon will launch two `ptp4l` instances: one for the Timer Receiver (TR) port, and another one for all Time Transmitter (TT) ports. The NIC owning the TR port will lead the timing of the entire system. Connect up to two additional NICs to the leading NIC if additional TT ports are required through the on-board SMA connectors. The `ts2phc` service monitors the `ptp4l` instance bound to the TR port. If the TR port stops operating as the time receiver, if upstream grandmaster clock (T-GM) deteriorates in quality or the link disconnects, for example, the system enters holdover mode and reconfigures itself dynamically. From 483bf93665b5b1a129b639bcba02764ac3b02171 Mon Sep 17 00:00:00 2001 From: Cavalle Date: Wed, 15 Oct 2025 13:31:34 +0200 Subject: [PATCH 06/20] TELCODOCS-2100: feedback applied --- modules/nw-ptp-t-bc-t-tsc-holdover.adoc | 161 +++++++----------------- 1 file changed, 46 insertions(+), 115 deletions(-) diff --git a/modules/nw-ptp-t-bc-t-tsc-holdover.adoc b/modules/nw-ptp-t-bc-t-tsc-holdover.adoc index bcadcd59bff6..8c23636fb3e0 100644 --- a/modules/nw-ptp-t-bc-t-tsc-holdover.adoc +++ b/modules/nw-ptp-t-bc-t-tsc-holdover.adoc @@ -4,46 +4,22 @@ :_mod-docs-content-type: PROCEDURE [id="nw-ptp-t-bc-t-tsc-holdover_{context}"] -= T-BC / T-TSC Holdover += Applying unassisted holdover for Telecom Boundary Clocks and Telecom Time Slave Clocks -You can run the holdover feature with Telecom Boundary Clocks (T-BC) and Telecom Time Slave Clocks (T-TSC) on the Intel E810-XXVDA4T NIC. From the T-BC settings, the `linuxptp` daemon will launch two `ptp4l` instances: one for the Timer Receiver (TR) port, and another one for all Time Transmitter (TT) ports. The NIC owning the TR port will lead the timing of the entire system. Connect up to two additional NICs to the leading NIC if additional TT ports are required through the on-board SMA connectors. +The unassisted holdover feature enables an Intel E810-XXVDA4T Network Interface Card (NIC), configured as either a Telecom Boundary Clock (T-BC) or a Telecom Time Slave Clock (T-TSC), to maintain highly accurate time synchronization even when the upstream timing signal is lost. This is achieved by relying on the NIC's internal oscillator to enter a stable, controlled drift state. -The `ts2phc` service monitors the `ptp4l` instance bound to the TR port. If the TR port stops operating as the time receiver, if upstream grandmaster clock (T-GM) deteriorates in quality or the link disconnects, for example, the system enters holdover mode and reconfigures itself dynamically. +The `ts2phc` service monitors the `ptp4l` instance bound to the TR port. If the TR port stops operating as the time receiver, if upstream Grandmaster Clock (T-GM) deteriorates in quality or the link disconnects, for example, the system enters holdover mode and reconfigures itself dynamically. -.Procedure - -. Create a docker file to include the custom `ts2phc` build in the container image: -+ -[source,bash] ----- -FROM golang:1.23.5 AS builder -WORKDIR /go/src/github.com/k8snetworkplumbingwg/linuxptp-daemon -COPY . . -RUN make clean && make - -FROM quay.io/centos/centos:stream9 - -COPY extra/linuxptp-4.2-2.el9_4.4.test_extgm.x86_64.rpm / -RUN yum -y update && yum -y update glibc && yum --setopt=skip_missing_names_on_install=False -y install /linuxptp-4.2-2.el9_4.4.test_extgm.x86_64.rpm ethtool hwdata synce4l gpsd-minimal gpsd-minimal-clients && yum clean all && \ - rm /linuxptp-4.2-2.el9_4.4.test_extgm.x86_64.rpm - - -RUN ln -s /usr/bin/gpspipe /usr/local/bin/gpspipe && ln -s /usr/sbin/gpsd /usr/local/sbin/gpsd && ln -s /usr/bin/ubxtool /usr/local/bin/ubxtool - - -COPY --from=builder /go/src/github.com/k8snetworkplumbingwg/linuxptp-daemon/bin/ptp /usr/local/bin/ - -CMD ["/usr/local/bin/ptp"] ----- +:FeatureName: Applying unassisted holdover for Telecom Boundary Clocks and Telecom Time Slave Clocks +include::snippets/technology-preview.adoc[leveloffset=+1] -. Build and push the image: -+ -[source,bash] ----- -$ podman build --arch=x86_64 --no-cache -t -f Dockerfile.tbc . && podman push ----- +.Prerequisites +* Install the OpenShift CLI (`oc`). +* Log in as a user with `cluster-admin` privileges. +* Install the PTP Operator. +* An Intel E810-XXVDA4T NIC. -. Replace the `linuxptp` daemon stock image with your custom image. The method depends on the environment used. +.Procedure . Configure the triple port T-BC NIC. See the example below where the `PtpConfig` resource contains two profiles, one for time transmitter ports (00-tbc-tt) and one to configure all the hardware, the TR port, and `ts2phc` and `phc2sys` processes: + @@ -59,11 +35,11 @@ spec: - name: 00-tbc-tt ptp4lConf: | [ens4f0] - masterOnly 1 + masterOnly 1 <1> [ens8f0] - masterOnly 1 + masterOnly 1 <1> [ens1f0] - masterOnly 1 + masterOnly 1 <1> [global] # # Default Data Set @@ -171,11 +147,11 @@ spec: controllingProfile: 01-tbc-tr logReduce: "false" - name: 01-tbc-tr - phc2sysOpts: -r -n 25 -N 8 -R 16 -u 0 -m -s ens4f1 - plugins: + phc2sysOpts: -r -n 25 -N 8 -R 16 -u 0 -m -s ens4f1 <2> + plugins: <3> e810: enableDefaultConfig: false - interconnections: + interconnections: <4> - gnssInput: false id: ens4f0 part: E810-XXVDA4T @@ -329,9 +305,9 @@ spec: logging_level 7 ts2phc.pulsewidth 100000000 leapfile /usr/share/zoneinfo/leap-seconds.list - domainNumber 25 - uds_address /var/run/ptp4l.0.socket - [ens4f0] + domainNumber 25 <5> + uds_address /var/run/ptp4l.0.socket <6> + [ens4f0] <7> ts2phc.extts_polarity rising ts2phc.extts_correction -10 ts2phc.master 0 @@ -343,7 +319,7 @@ spec: ts2phc.extts_polarity rising ts2phc.extts_correction -27 ts2phc.master 0 - ts2phcOpts: -s generic -a --ts2phc.rh_external_pps 1 + ts2phcOpts: -s generic -a --ts2phc.rh_external_pps 1 <8> recommend: - match: - nodeLabel: node-role.kubernetes.io/master @@ -354,74 +330,19 @@ spec: priority: 4 profile: 01-tbc-tr ---- +<1> All TT ports have the `masterOnly` set to 1. +<2> The `phc2sysOpts` setting in the TR profile specifies the upstream port (ens4f1) as the source of the node time synchronization. +<3> The TR profile contains the hardware plugin section. +<4> The interconnections section in the hardware plugin has contains three NICs: `ens4f0`, `ens1f0`, and `ens8f0`. The leading NIC (`ens4f0`) is the only one with the `gnnsInput` field (set to false) and the `upstreamPort` field, that specifies the TR port. It also has a list of `phaseOutputConnectors`, `SMA1` and `SMA2`. The following NICs have the `inputConnector` field. Set the time receiver NIC (`ens4f0`) and the specific TR port (`upstreamPort: ens4f1`) for both T-BC and T-TSC configurations. +<5> The `ts2phc` configuration contains the `domainNumber` of the upstream PTP domain. +<6> The `ts2phc` configuration contains the `uds_address`. Its value is not important because the daemon patches it with the correct address. +<7> The `ts2phc` configuration must include all NICs participating in this setup (`ens4f0`, `ens1f0`, and `ens8f0`). +<8> `ts2phcOpts` sets the source as generic (`-s generic`) and automatic (`-a`). The last option (`--ts2phc.rh_external_pps 1`) configures it to operate with external phase source, the digital phase-locked loop (DPLL). -. Configure pins and interconnections. The following example shows a triple NIC chain of blocks operating as a single boundary clock. -+ -[source,yaml] ----- -interconnections: - - gnssInput: false - id: ens4f0 - part: E810-XXVDA4T - phaseOutputConnectors: - - SMA1 - - SMA2 - upstreamPort: ens4f1 - - id: ens1f0 - inputConnector: - connector: SMA1 - part: E810-XXVDA4T - - id: ens8f0 - inputConnector: - connector: SMA1 - part: E810-XXVDA4T - pins: - ens4f0: - SMA1: 2 1 - SMA2: 2 2 - U.FL1: 0 1 - U.FL2: 0 2 - ens1f0: - SMA1: 1 1 - SMA2: 0 2 - U.FL1: 0 1 - U.FL2: 0 2 - ens8f0: - SMA1: 1 1 - SMA2: 0 2 - U.FL1: 0 1 - U.FL2: 0 2 ----- -+ -Set the time receiver NIC (`id: ens4f0`) and the specific TR port (`upstreamPort: ens4f1`) for both T-BC and T-TSC configurations. Also, set the API. In the single-NIC case, disable all pins or enable outputs if using for 1PPS measurements. - -. Configure the `ts2phc` process. In the configuration file, specify `ts2phc.master 0` for the `ts2phc` NIC sections. The command line options indicate the generic time source and the external PPS option as `-a --ts2phc.rh_external_pps 1`. Use the `ts2phc.extts_correction` setting per NIC to compensate internal and external delays. -+ -[source,yaml] ----- -ts2phcConf: | - [global] - use_syslog 0 - verbose 1 - logging_level 7 - ts2phc.pulsewidth 100000000 - leapfile /usr/share/zoneinfo/leap-seconds.list - domainNumber 25 - uds_address /var/run/ptp4l.0.socket - [ens4f0] - ts2phc.extts_polarity rising - ts2phc.extts_correction -10 - ts2phc.master 0 - [ens1f0] - ts2phc.extts_polarity rising - ts2phc.extts_correction -27 - ts2phc.master 0 - [ens8f0] - ts2phc.extts_polarity rising - ts2phc.extts_correction -27 - ts2phc.master 0 - ts2phcOpts: -s generic -a --ts2phc.rh_external_pps 1 ----- +[NOTE] +==== +In the single-NIC case, disable all pins or enable outputs if using for 1PPS measurements. +==== . Configure the `ptp4l` process. Customize `ptp4l` values in the `ptp4lConf` interface sections. The TR port is set to `masterOnly 0` only. Set all TT ports to `masterOnly 1`. @@ -432,9 +353,19 @@ To render this configuration for T-TSC operation, remove the `00-tbc-tt` profile .Verification -Disable the TR port on the device on test or disable the PTP protocol on the T-GM / T-BC connected to it to enter and exit the holdover feature. Monitor the Digital Phase-Locked Loop (DPLL) offsets with netlink tooling: +To get the T-BC status, run the following command: + -[source,bash] +[source,terminal] +---- +$ oc -linuxptp-daemon-container logs ds/linuxptp-daemon --since=1s -f |grep T-BC ---- -$ sudo podman run --privileged --network=host --rm quay.io/vgrinber/tools:dpll dpll-cli monitor |jq -r '"\(.boardLabel)\t\(.pinParentDevice[1].phaseOffsetPs)"' ++ +.Example output +[source,terminal] ---- +T-BC[1760525446]:[ts2phc.1.config] ens4f0 offset 1 T-BC-STATUS s2 +T-BC[1760525447]:[ts2phc.1.config] ens4f0 offset 1 T-BC-STATUS s2 +T-BC[1760525448]:[ts2phc.1.config] ens4f0 offset -1 T-BC-STATUS s2 +---- ++ +This is reported every second, where `s2` indicates it is locked, `s1` indicates holdover is activated, and `s0`, unlocked. \ No newline at end of file From bd6ffb5d62d4d5e720ed68a2dfe343f642b146be Mon Sep 17 00:00:00 2001 From: Cavalle Date: Wed, 15 Oct 2025 13:54:36 +0200 Subject: [PATCH 07/20] TELCODOCS-2100: corrections --- modules/nw-ptp-t-bc-t-tsc-holdover.adoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/nw-ptp-t-bc-t-tsc-holdover.adoc b/modules/nw-ptp-t-bc-t-tsc-holdover.adoc index 8c23636fb3e0..c57331b65cf1 100644 --- a/modules/nw-ptp-t-bc-t-tsc-holdover.adoc +++ b/modules/nw-ptp-t-bc-t-tsc-holdover.adoc @@ -354,12 +354,12 @@ To render this configuration for T-TSC operation, remove the `00-tbc-tt` profile .Verification To get the T-BC status, run the following command: -+ + [source,terminal] ---- $ oc -linuxptp-daemon-container logs ds/linuxptp-daemon --since=1s -f |grep T-BC ---- -+ + .Example output [source,terminal] ---- From 125a8200bf1a471da7aa92734263e694c3d55b80 Mon Sep 17 00:00:00 2001 From: Cavalle Date: Wed, 15 Oct 2025 14:04:40 +0200 Subject: [PATCH 08/20] TELCODOCS-2100: numbering --- modules/nw-ptp-t-bc-t-tsc-holdover.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/nw-ptp-t-bc-t-tsc-holdover.adoc b/modules/nw-ptp-t-bc-t-tsc-holdover.adoc index c57331b65cf1..d25d93bb6b14 100644 --- a/modules/nw-ptp-t-bc-t-tsc-holdover.adoc +++ b/modules/nw-ptp-t-bc-t-tsc-holdover.adoc @@ -338,7 +338,7 @@ spec: <6> The `ts2phc` configuration contains the `uds_address`. Its value is not important because the daemon patches it with the correct address. <7> The `ts2phc` configuration must include all NICs participating in this setup (`ens4f0`, `ens1f0`, and `ens8f0`). <8> `ts2phcOpts` sets the source as generic (`-s generic`) and automatic (`-a`). The last option (`--ts2phc.rh_external_pps 1`) configures it to operate with external phase source, the digital phase-locked loop (DPLL). - ++ [NOTE] ==== In the single-NIC case, disable all pins or enable outputs if using for 1PPS measurements. From 5f8e8482cdd3f863f0f47b6cef6dcb4e2730c6be Mon Sep 17 00:00:00 2001 From: Lluis Cavalle Date: Thu, 16 Oct 2025 15:16:41 +0200 Subject: [PATCH 09/20] Update modules/nw-ptp-t-bc-t-tsc-holdover.adoc Co-authored-by: Ronan Hennessy <104497497+rohennes@users.noreply.github.com> --- modules/nw-ptp-t-bc-t-tsc-holdover.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/nw-ptp-t-bc-t-tsc-holdover.adoc b/modules/nw-ptp-t-bc-t-tsc-holdover.adoc index d25d93bb6b14..d20895d6e867 100644 --- a/modules/nw-ptp-t-bc-t-tsc-holdover.adoc +++ b/modules/nw-ptp-t-bc-t-tsc-holdover.adoc @@ -333,7 +333,7 @@ spec: <1> All TT ports have the `masterOnly` set to 1. <2> The `phc2sysOpts` setting in the TR profile specifies the upstream port (ens4f1) as the source of the node time synchronization. <3> The TR profile contains the hardware plugin section. -<4> The interconnections section in the hardware plugin has contains three NICs: `ens4f0`, `ens1f0`, and `ens8f0`. The leading NIC (`ens4f0`) is the only one with the `gnnsInput` field (set to false) and the `upstreamPort` field, that specifies the TR port. It also has a list of `phaseOutputConnectors`, `SMA1` and `SMA2`. The following NICs have the `inputConnector` field. Set the time receiver NIC (`ens4f0`) and the specific TR port (`upstreamPort: ens4f1`) for both T-BC and T-TSC configurations. +<4> The interconnections section in the hardware plugin has contains three NICs: `ens4f0`, `ens1f0`, and `ens8f0`. The leading NIC (`ens4f0`) is the only one with the `gnnsInput` field (set to `false`) and the `upstreamPort` field, that specifies the TR port. It also has a list of `phaseOutputConnectors`, `SMA1` and `SMA2`. The following NICs have the `inputConnector` field. Set the time receiver NIC (`ens4f0`) and the specific TR port (`upstreamPort: ens4f1`) for both T-BC and T-TSC configurations. <5> The `ts2phc` configuration contains the `domainNumber` of the upstream PTP domain. <6> The `ts2phc` configuration contains the `uds_address`. Its value is not important because the daemon patches it with the correct address. <7> The `ts2phc` configuration must include all NICs participating in this setup (`ens4f0`, `ens1f0`, and `ens8f0`). From 973585acf54c3c9b19fcbc6429e3d66f7e8a94bb Mon Sep 17 00:00:00 2001 From: Lluis Cavalle Date: Thu, 16 Oct 2025 15:16:57 +0200 Subject: [PATCH 10/20] Update modules/nw-ptp-t-bc-t-tsc-holdover.adoc Co-authored-by: Ronan Hennessy <104497497+rohennes@users.noreply.github.com> --- modules/nw-ptp-t-bc-t-tsc-holdover.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/nw-ptp-t-bc-t-tsc-holdover.adoc b/modules/nw-ptp-t-bc-t-tsc-holdover.adoc index d20895d6e867..4da83302b28f 100644 --- a/modules/nw-ptp-t-bc-t-tsc-holdover.adoc +++ b/modules/nw-ptp-t-bc-t-tsc-holdover.adoc @@ -331,7 +331,7 @@ spec: profile: 01-tbc-tr ---- <1> All TT ports have the `masterOnly` set to 1. -<2> The `phc2sysOpts` setting in the TR profile specifies the upstream port (ens4f1) as the source of the node time synchronization. +<2> The `phc2sysOpts` setting in the TR profile specifies the upstream port (`ens4f1`) as the source of the node time synchronization. <3> The TR profile contains the hardware plugin section. <4> The interconnections section in the hardware plugin has contains three NICs: `ens4f0`, `ens1f0`, and `ens8f0`. The leading NIC (`ens4f0`) is the only one with the `gnnsInput` field (set to `false`) and the `upstreamPort` field, that specifies the TR port. It also has a list of `phaseOutputConnectors`, `SMA1` and `SMA2`. The following NICs have the `inputConnector` field. Set the time receiver NIC (`ens4f0`) and the specific TR port (`upstreamPort: ens4f1`) for both T-BC and T-TSC configurations. <5> The `ts2phc` configuration contains the `domainNumber` of the upstream PTP domain. From a24e0617f1548c4991cb6720eca62f5367d8f077 Mon Sep 17 00:00:00 2001 From: Lluis Cavalle Date: Thu, 16 Oct 2025 15:17:46 +0200 Subject: [PATCH 11/20] Update modules/nw-ptp-t-bc-t-tsc-holdover.adoc Co-authored-by: Ronan Hennessy <104497497+rohennes@users.noreply.github.com> --- modules/nw-ptp-t-bc-t-tsc-holdover.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/nw-ptp-t-bc-t-tsc-holdover.adoc b/modules/nw-ptp-t-bc-t-tsc-holdover.adoc index 4da83302b28f..eec801dc2c4b 100644 --- a/modules/nw-ptp-t-bc-t-tsc-holdover.adoc +++ b/modules/nw-ptp-t-bc-t-tsc-holdover.adoc @@ -10,7 +10,7 @@ The unassisted holdover feature enables an Intel E810-XXVDA4T Network Interface The `ts2phc` service monitors the `ptp4l` instance bound to the TR port. If the TR port stops operating as the time receiver, if upstream Grandmaster Clock (T-GM) deteriorates in quality or the link disconnects, for example, the system enters holdover mode and reconfigures itself dynamically. -:FeatureName: Applying unassisted holdover for Telecom Boundary Clocks and Telecom Time Slave Clocks +:FeatureName: Applying unassisted holdover for T-BC and T-TSC include::snippets/technology-preview.adoc[leveloffset=+1] .Prerequisites From 9621a21c6ca432213b3511ebca64a5e167a618c4 Mon Sep 17 00:00:00 2001 From: Lluis Cavalle Date: Thu, 16 Oct 2025 15:18:43 +0200 Subject: [PATCH 12/20] Update modules/nw-ptp-t-bc-t-tsc-holdover.adoc Co-authored-by: Ronan Hennessy <104497497+rohennes@users.noreply.github.com> --- modules/nw-ptp-t-bc-t-tsc-holdover.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/nw-ptp-t-bc-t-tsc-holdover.adoc b/modules/nw-ptp-t-bc-t-tsc-holdover.adoc index eec801dc2c4b..75763c0d19b1 100644 --- a/modules/nw-ptp-t-bc-t-tsc-holdover.adoc +++ b/modules/nw-ptp-t-bc-t-tsc-holdover.adoc @@ -4,7 +4,7 @@ :_mod-docs-content-type: PROCEDURE [id="nw-ptp-t-bc-t-tsc-holdover_{context}"] -= Applying unassisted holdover for Telecom Boundary Clocks and Telecom Time Slave Clocks += Applying unassisted holdover for boundary clocks and time slave clocks The unassisted holdover feature enables an Intel E810-XXVDA4T Network Interface Card (NIC), configured as either a Telecom Boundary Clock (T-BC) or a Telecom Time Slave Clock (T-TSC), to maintain highly accurate time synchronization even when the upstream timing signal is lost. This is achieved by relying on the NIC's internal oscillator to enter a stable, controlled drift state. From f8213072f4d59351b78ddfbdf765b65908794c02 Mon Sep 17 00:00:00 2001 From: Lluis Cavalle Date: Thu, 16 Oct 2025 23:10:08 +0200 Subject: [PATCH 13/20] Update modules/nw-ptp-t-bc-t-tsc-holdover.adoc Co-authored-by: Ronan Hennessy <104497497+rohennes@users.noreply.github.com> --- modules/nw-ptp-t-bc-t-tsc-holdover.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/nw-ptp-t-bc-t-tsc-holdover.adoc b/modules/nw-ptp-t-bc-t-tsc-holdover.adoc index 75763c0d19b1..c2bf6cc0ff30 100644 --- a/modules/nw-ptp-t-bc-t-tsc-holdover.adoc +++ b/modules/nw-ptp-t-bc-t-tsc-holdover.adoc @@ -6,7 +6,7 @@ [id="nw-ptp-t-bc-t-tsc-holdover_{context}"] = Applying unassisted holdover for boundary clocks and time slave clocks -The unassisted holdover feature enables an Intel E810-XXVDA4T Network Interface Card (NIC), configured as either a Telecom Boundary Clock (T-BC) or a Telecom Time Slave Clock (T-TSC), to maintain highly accurate time synchronization even when the upstream timing signal is lost. This is achieved by relying on the NIC's internal oscillator to enter a stable, controlled drift state. +The unassisted holdover feature enables an Intel E810-XXVDA4T Network Interface Card (NIC), configured as either a PTP boundary clock (T-BC) or a PTP time slave clock (T-TSC), to maintain highly accurate time synchronization even when the upstream timing signal is lost. This is achieved by relying on the NIC's internal oscillator to enter a stable, controlled drift state. The `ts2phc` service monitors the `ptp4l` instance bound to the TR port. If the TR port stops operating as the time receiver, if upstream Grandmaster Clock (T-GM) deteriorates in quality or the link disconnects, for example, the system enters holdover mode and reconfigures itself dynamically. From 7693858ff82c50cf0bbfefad0aebe661c4dbf7b0 Mon Sep 17 00:00:00 2001 From: Lluis Cavalle Date: Thu, 16 Oct 2025 23:15:24 +0200 Subject: [PATCH 14/20] Update nw-ptp-t-bc-t-tsc-holdover.adoc removing unnecessary step --- modules/nw-ptp-t-bc-t-tsc-holdover.adoc | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/modules/nw-ptp-t-bc-t-tsc-holdover.adoc b/modules/nw-ptp-t-bc-t-tsc-holdover.adoc index c2bf6cc0ff30..4193b12a2119 100644 --- a/modules/nw-ptp-t-bc-t-tsc-holdover.adoc +++ b/modules/nw-ptp-t-bc-t-tsc-holdover.adoc @@ -344,8 +344,6 @@ spec: In the single-NIC case, disable all pins or enable outputs if using for 1PPS measurements. ==== -. Configure the `ptp4l` process. Customize `ptp4l` values in the `ptp4lConf` interface sections. The TR port is set to `masterOnly 0` only. Set all TT ports to `masterOnly 1`. - [NOTE] ==== To render this configuration for T-TSC operation, remove the `00-tbc-tt` profile and adjust the `ts2phcConf` section to list only the TR NIC. @@ -368,4 +366,4 @@ T-BC[1760525447]:[ts2phc.1.config] ens4f0 offset 1 T-BC-STATUS s2 T-BC[1760525448]:[ts2phc.1.config] ens4f0 offset -1 T-BC-STATUS s2 ---- + -This is reported every second, where `s2` indicates it is locked, `s1` indicates holdover is activated, and `s0`, unlocked. \ No newline at end of file +This is reported every second, where `s2` indicates it is locked, `s1` indicates holdover is activated, and `s0`, unlocked. From 16a74139270baa8eecf7ed2f5e8e516da3853195 Mon Sep 17 00:00:00 2001 From: Lluis Cavalle Date: Thu, 16 Oct 2025 23:26:23 +0200 Subject: [PATCH 15/20] Update nw-ptp-t-bc-t-tsc-holdover.adoc fixing typos --- modules/nw-ptp-t-bc-t-tsc-holdover.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/nw-ptp-t-bc-t-tsc-holdover.adoc b/modules/nw-ptp-t-bc-t-tsc-holdover.adoc index 4193b12a2119..7698b2c44c37 100644 --- a/modules/nw-ptp-t-bc-t-tsc-holdover.adoc +++ b/modules/nw-ptp-t-bc-t-tsc-holdover.adoc @@ -8,7 +8,7 @@ The unassisted holdover feature enables an Intel E810-XXVDA4T Network Interface Card (NIC), configured as either a PTP boundary clock (T-BC) or a PTP time slave clock (T-TSC), to maintain highly accurate time synchronization even when the upstream timing signal is lost. This is achieved by relying on the NIC's internal oscillator to enter a stable, controlled drift state. -The `ts2phc` service monitors the `ptp4l` instance bound to the TR port. If the TR port stops operating as the time receiver, if upstream Grandmaster Clock (T-GM) deteriorates in quality or the link disconnects, for example, the system enters holdover mode and reconfigures itself dynamically. +The `ts2phc` service monitors the `ptp4l` instance bound to the timing receiver (TR) port. If the TR port stops operating as the time receiver, if upstream grandmaster clock (T-GM) deteriorates in quality or the link disconnects, for example, the system enters holdover mode and reconfigures itself dynamically. :FeatureName: Applying unassisted holdover for T-BC and T-TSC include::snippets/technology-preview.adoc[leveloffset=+1] From d34a779f3d4fce084cca60a3a90363f0c3417b4e Mon Sep 17 00:00:00 2001 From: Lluis Cavalle Date: Thu, 16 Oct 2025 23:29:34 +0200 Subject: [PATCH 16/20] Update nw-ptp-t-bc-t-tsc-holdover.adoc --- modules/nw-ptp-t-bc-t-tsc-holdover.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/nw-ptp-t-bc-t-tsc-holdover.adoc b/modules/nw-ptp-t-bc-t-tsc-holdover.adoc index 7698b2c44c37..4f6dd4eb7917 100644 --- a/modules/nw-ptp-t-bc-t-tsc-holdover.adoc +++ b/modules/nw-ptp-t-bc-t-tsc-holdover.adoc @@ -331,7 +331,7 @@ spec: profile: 01-tbc-tr ---- <1> All TT ports have the `masterOnly` set to 1. -<2> The `phc2sysOpts` setting in the TR profile specifies the upstream port (`ens4f1`) as the source of the node time synchronization. +<2> The `phc2sysOpts` setting in the TR profile specifies the upstream port `ens4f1` as the source of the node time synchronization. <3> The TR profile contains the hardware plugin section. <4> The interconnections section in the hardware plugin has contains three NICs: `ens4f0`, `ens1f0`, and `ens8f0`. The leading NIC (`ens4f0`) is the only one with the `gnnsInput` field (set to `false`) and the `upstreamPort` field, that specifies the TR port. It also has a list of `phaseOutputConnectors`, `SMA1` and `SMA2`. The following NICs have the `inputConnector` field. Set the time receiver NIC (`ens4f0`) and the specific TR port (`upstreamPort: ens4f1`) for both T-BC and T-TSC configurations. <5> The `ts2phc` configuration contains the `domainNumber` of the upstream PTP domain. From 1f3e3ce20bf62733c82a4894c80d19d2d0ba40e6 Mon Sep 17 00:00:00 2001 From: Lluis Cavalle Date: Thu, 16 Oct 2025 23:32:19 +0200 Subject: [PATCH 17/20] Update nw-ptp-t-bc-t-tsc-holdover.adoc Parenthesis removed --- modules/nw-ptp-t-bc-t-tsc-holdover.adoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/nw-ptp-t-bc-t-tsc-holdover.adoc b/modules/nw-ptp-t-bc-t-tsc-holdover.adoc index 4f6dd4eb7917..069c54e98668 100644 --- a/modules/nw-ptp-t-bc-t-tsc-holdover.adoc +++ b/modules/nw-ptp-t-bc-t-tsc-holdover.adoc @@ -333,11 +333,11 @@ spec: <1> All TT ports have the `masterOnly` set to 1. <2> The `phc2sysOpts` setting in the TR profile specifies the upstream port `ens4f1` as the source of the node time synchronization. <3> The TR profile contains the hardware plugin section. -<4> The interconnections section in the hardware plugin has contains three NICs: `ens4f0`, `ens1f0`, and `ens8f0`. The leading NIC (`ens4f0`) is the only one with the `gnnsInput` field (set to `false`) and the `upstreamPort` field, that specifies the TR port. It also has a list of `phaseOutputConnectors`, `SMA1` and `SMA2`. The following NICs have the `inputConnector` field. Set the time receiver NIC (`ens4f0`) and the specific TR port (`upstreamPort: ens4f1`) for both T-BC and T-TSC configurations. +<4> The interconnections section in the hardware plugin has contains three NICs: `ens4f0`, `ens1f0`, and `ens8f0`. The leading NIC `ens4f0`) is the only one with the `gnnsInput` field, set to `false`, and the `upstreamPort` field, that specifies the TR port. It also has a list of `phaseOutputConnectors`, `SMA1` and `SMA2`. The following NICs have the `inputConnector` field. Set the time receiver NIC `ens4f0` and the specific TR port. that is `upstreamPort: ens4f1`, for both T-BC and T-TSC configurations. <5> The `ts2phc` configuration contains the `domainNumber` of the upstream PTP domain. <6> The `ts2phc` configuration contains the `uds_address`. Its value is not important because the daemon patches it with the correct address. <7> The `ts2phc` configuration must include all NICs participating in this setup (`ens4f0`, `ens1f0`, and `ens8f0`). -<8> `ts2phcOpts` sets the source as generic (`-s generic`) and automatic (`-a`). The last option (`--ts2phc.rh_external_pps 1`) configures it to operate with external phase source, the digital phase-locked loop (DPLL). +<8> `ts2phcOpts` sets the source as generic with `-s generic` and automatic with `-a`. The last option, `--ts2phc.rh_external_pps 1`, configures it to operate with external phase source, the digital phase-locked loop (DPLL). + [NOTE] ==== From 435d0c359493d037cb5bc5eb37823e6cd9c55a00 Mon Sep 17 00:00:00 2001 From: Lluis Cavalle Date: Fri, 17 Oct 2025 12:25:14 +0200 Subject: [PATCH 18/20] Update modules/nw-ptp-t-bc-t-tsc-holdover.adoc Co-authored-by: Shane Lovern <95357210+slovern@users.noreply.github.com> --- modules/nw-ptp-t-bc-t-tsc-holdover.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/nw-ptp-t-bc-t-tsc-holdover.adoc b/modules/nw-ptp-t-bc-t-tsc-holdover.adoc index 069c54e98668..1ac8cc4405ec 100644 --- a/modules/nw-ptp-t-bc-t-tsc-holdover.adoc +++ b/modules/nw-ptp-t-bc-t-tsc-holdover.adoc @@ -8,7 +8,7 @@ The unassisted holdover feature enables an Intel E810-XXVDA4T Network Interface Card (NIC), configured as either a PTP boundary clock (T-BC) or a PTP time slave clock (T-TSC), to maintain highly accurate time synchronization even when the upstream timing signal is lost. This is achieved by relying on the NIC's internal oscillator to enter a stable, controlled drift state. -The `ts2phc` service monitors the `ptp4l` instance bound to the timing receiver (TR) port. If the TR port stops operating as the time receiver, if upstream grandmaster clock (T-GM) deteriorates in quality or the link disconnects, for example, the system enters holdover mode and reconfigures itself dynamically. +The `ts2phc` service monitors the `ptp4l` instance bound to the timing receiver (TR) port. If, for example, the TR port stops operating as the time receiver, the upstream grandmaster clock (T-GM) deteriorates in quality or the link disconnects, the system enters holdover mode and reconfigures itself dynamically. :FeatureName: Applying unassisted holdover for T-BC and T-TSC include::snippets/technology-preview.adoc[leveloffset=+1] From 00d8157e2ea2c65f5eebea166fe904b33f320467 Mon Sep 17 00:00:00 2001 From: Lluis Cavalle Date: Fri, 17 Oct 2025 12:25:34 +0200 Subject: [PATCH 19/20] Update modules/nw-ptp-t-bc-t-tsc-holdover.adoc Co-authored-by: Shane Lovern <95357210+slovern@users.noreply.github.com> --- modules/nw-ptp-t-bc-t-tsc-holdover.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/nw-ptp-t-bc-t-tsc-holdover.adoc b/modules/nw-ptp-t-bc-t-tsc-holdover.adoc index 1ac8cc4405ec..2de1618e725c 100644 --- a/modules/nw-ptp-t-bc-t-tsc-holdover.adoc +++ b/modules/nw-ptp-t-bc-t-tsc-holdover.adoc @@ -333,7 +333,7 @@ spec: <1> All TT ports have the `masterOnly` set to 1. <2> The `phc2sysOpts` setting in the TR profile specifies the upstream port `ens4f1` as the source of the node time synchronization. <3> The TR profile contains the hardware plugin section. -<4> The interconnections section in the hardware plugin has contains three NICs: `ens4f0`, `ens1f0`, and `ens8f0`. The leading NIC `ens4f0`) is the only one with the `gnnsInput` field, set to `false`, and the `upstreamPort` field, that specifies the TR port. It also has a list of `phaseOutputConnectors`, `SMA1` and `SMA2`. The following NICs have the `inputConnector` field. Set the time receiver NIC `ens4f0` and the specific TR port. that is `upstreamPort: ens4f1`, for both T-BC and T-TSC configurations. +<4> The interconnections section in the hardware plugin has three NICs: `ens4f0`, `ens1f0`, and `ens8f0`. The leading NIC, `ens4f0`, is the only one with the `gnnsInput` field, set to `false`, and the `upstreamPort` field that specifies the TR port. It also has a list of `phaseOutputConnectors`, `SMA1` and `SMA2`. The following NICs have the `inputConnector` field. Set the time receiver NIC `ens4f0` and the specific TR port. that is `upstreamPort: ens4f1`, for both T-BC and T-TSC configurations. <5> The `ts2phc` configuration contains the `domainNumber` of the upstream PTP domain. <6> The `ts2phc` configuration contains the `uds_address`. Its value is not important because the daemon patches it with the correct address. <7> The `ts2phc` configuration must include all NICs participating in this setup (`ens4f0`, `ens1f0`, and `ens8f0`). From 1c839a2298b1b9dcb0ff98bb689ecf6353e013c6 Mon Sep 17 00:00:00 2001 From: Lluis Cavalle Date: Fri, 17 Oct 2025 12:25:46 +0200 Subject: [PATCH 20/20] Update modules/nw-ptp-t-bc-t-tsc-holdover.adoc Co-authored-by: Shane Lovern <95357210+slovern@users.noreply.github.com> --- modules/nw-ptp-t-bc-t-tsc-holdover.adoc | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/nw-ptp-t-bc-t-tsc-holdover.adoc b/modules/nw-ptp-t-bc-t-tsc-holdover.adoc index 2de1618e725c..e20d95fbe9bf 100644 --- a/modules/nw-ptp-t-bc-t-tsc-holdover.adoc +++ b/modules/nw-ptp-t-bc-t-tsc-holdover.adoc @@ -365,5 +365,4 @@ T-BC[1760525446]:[ts2phc.1.config] ens4f0 offset 1 T-BC-STATUS s2 T-BC[1760525447]:[ts2phc.1.config] ens4f0 offset 1 T-BC-STATUS s2 T-BC[1760525448]:[ts2phc.1.config] ens4f0 offset -1 T-BC-STATUS s2 ---- -+ This is reported every second, where `s2` indicates it is locked, `s1` indicates holdover is activated, and `s0`, unlocked.