diff --git a/modules/nw-ptp-configuring-linuxptp-services-as-grandmaster-clock.adoc b/modules/nw-ptp-configuring-linuxptp-services-as-grandmaster-clock.adoc index d8d1f7833833..1704d12f0bdc 100644 --- a/modules/nw-ptp-configuring-linuxptp-services-as-grandmaster-clock.adoc +++ b/modules/nw-ptp-configuring-linuxptp-services-as-grandmaster-clock.adoc @@ -12,8 +12,8 @@ The `ts2phc` utility allows you to synchronize the system clock with the PTP gra [NOTE] ==== -Use the following example `PtpConfig` CR as the basis to configure `linuxptp` services as the grandmaster clock for your particular hardware and environment. -This example CR does not configure PTP fast events. To configure PTP fast events, set appropriate values for `ptp4lOpts`, `ptp4lConf`, and `ptpClockThreshold`. +Use the following example `PtpConfig` CR as the basis to configure `linuxptp` services as the grandmaster clock for an Intel Westport Channel E810 network interface. +To configure PTP fast events, set appropriate values for `ptp4lOpts`, `ptp4lConf`, and `ptpClockThreshold`. `ptpClockThreshold` is used only when events are enabled. See "Configuring the PTP fast event notifications publisher" for more information. ==== @@ -34,7 +34,11 @@ See "Configuring the PTP fast event notifications publisher" for more informatio .. Save the following YAML in the `grandmaster-clock-ptp-config.yaml` file: + -include::snippets/grandmaster-clock-ptp-config.adoc[] +.Recommended PTP grandmaster clock configuration +[source,yaml] +---- +include::snippets/ptp-PtpConfigGmWpc.yaml[] +---- .. Create the CR by running the following command: + diff --git a/modules/ptp-using-hardware-specific-nic-features.adoc b/modules/ptp-using-hardware-specific-nic-features.adoc new file mode 100644 index 000000000000..653ed8def0f1 --- /dev/null +++ b/modules/ptp-using-hardware-specific-nic-features.adoc @@ -0,0 +1,72 @@ +// Module included in the following assemblies: +// +// * networking/using-ptp.adoc + +:_content-type: CONCEPT +[id="ptp-using-hardware-specific-nic-features_{context}"] += Using hardware-specific NIC features with the PTP Operator + +NIC hardware with built-in PTP capabilities sometimes require device-specific configuration. +You can use hardware-specific NIC features for supported hardware with the PTP Operator by configuring a plugin in the `PtpConfig` custom resource (CR). +The `linuxptp-daemon` uses the named parameters in the `plugin` stanza to start `linuxptp` processes (`ptp4l` and `phc2sys`) based on the specific hardware configuration. + +For example, set the following for the `spec.profile.plugins` stanza in the `PtpConfig` CR to configure the Intel E810 NIC for use with PTP: + +[source,yaml] +---- +plugins: + e810: + enableDefaultConfig: false + pins: + "$iface_master": + "U.FL2": "0 2" + "U.FL1": "0 1" + "SMA2": "0 2" + "SMA1": "0 1" + ublxCmds: + - args: + - "-P" + - "29.20" + - "-z" + - "CFG-HW-ANT_CFG_VOLTCTRL,1" + reportOutput: false + - args: + - "-P" + - "29.20" + - "-e" + - "GPS" + reportOutput: false + - args: + - "-P" + - "29.20" + - "-e" + - "Galileo" + reportOutput: false + - args: + - "-P" + - "29.20" + - "-d" + - "GLONASS" + reportOutput: false + - args: + - "-P" + - "29.20" + - "-d" + - "BeiDou" + reportOutput: false + - args: + - "-P" + - "29.20" + - "-d" + - "SBAS" + reportOutput: false + - args: + - "-p" + - "MON-HW" + reportOutput: true +---- + +[IMPORANT] +==== +In {product-title} {product-version}, the Intel E810 NIC is supported with a `PtpConfig` plugin. No other NIC plugins are supported. +==== diff --git a/networking/using-ptp.adoc b/networking/using-ptp.adoc index 0ddd6236ac53..73d3fdd7b8fc 100644 --- a/networking/using-ptp.adoc +++ b/networking/using-ptp.adoc @@ -39,6 +39,7 @@ include::modules/nw-ptp-installing-operator-cli.adoc[leveloffset=+1] include::modules/nw-ptp-installing-operator-web-console.adoc[leveloffset=+1] +[id="configuring-ptp-hardware"] == Configuring PTP devices The PTP Operator adds the `NodePtpDevice.ptp.openshift.io` custom resource definition (CRD) to {product-title}. @@ -47,6 +48,8 @@ When installed, the PTP Operator searches your cluster for PTP-capable network d include::modules/nw-ptp-device-discovery.adoc[leveloffset=+2] +include::modules/ptp-using-hardware-specific-nic-features.adoc[leveloffset=+2] + include::modules/nw-ptp-configuring-linuxptp-services-as-grandmaster-clock.adoc[leveloffset=+2] [role="_additional-resources"] @@ -89,6 +92,7 @@ include::modules/cnf-configuring-log-filtering-for-linuxptp.adoc[leveloffset=+2] include::modules/cnf-troubleshooting-common-ptp-operator-issues.adoc[leveloffset=+1] +[id="ptp-hardware-fast-event-notifications-framework"] == PTP hardware fast event notifications framework Cloud native applications such as virtual RAN (vRAN) require access to notifications about hardware timing events that are critical to the functioning of the overall network. @@ -118,4 +122,4 @@ include::modules/cnf-monitoring-fast-events-metrics.adoc[leveloffset=+2] [role="_additional-resources"] .Additional resources -* xref:../monitoring/managing-metrics.adoc[Managing metrics] +* xref:../monitoring/managing-metrics.adoc#managing-metrics[Managing metrics] diff --git a/snippets/ptp-PtpConfigGmWpc.yaml b/snippets/ptp-PtpConfigGmWpc.yaml new file mode 100644 index 000000000000..a86e2805e561 --- /dev/null +++ b/snippets/ptp-PtpConfigGmWpc.yaml @@ -0,0 +1,192 @@ +apiVersion: ptp.openshift.io/v1 +kind: PtpConfig +metadata: + name: grandmaster + namespace: openshift-ptp +spec: + profile: + - name: "grandmaster" + ptp4lOpts: "-2 --summary_interval -4" + phc2sysOpts: -r -u 0 -m -O -37 -N 8 -R 16 -s $iface_master -n 24 + ptpSchedulingPolicy: SCHED_FIFO + ptpSchedulingPriority: 10 + ptpSettings: + logReduce: "true" + plugins: + e810: + enableDefaultConfig: false + pins: + "ens2f1": + "U.FL2": "0 2" + "U.FL1": "0 1" + "SMA2": "0 2" + "SMA1": "0 1" + ublxCmds: + - args: + - "-P" + - "29.20" + - "-z" + - "CFG-HW-ANT_CFG_VOLTCTRL,1" + reportOutput: false + - args: + - "-P" + - "29.20" + - "-e" + - "GPS" + reportOutput: false + - args: + - "-P" + - "29.20" + - "-e" + - "Galileo" + reportOutput: false + - args: + - "-P" + - "29.20" + - "-d" + - "GLONASS" + reportOutput: false + - args: + - "-P" + - "29.20" + - "-d" + - "BeiDou" + reportOutput: false + - args: + - "-P" + - "29.20" + - "-d" + - "SBAS" + reportOutput: false + - args: + - "-p" + - "MON-HW" + reportOutput: true + ts2phcOpts: " " + ts2phcConf: | + [nmea] + ts2phc.master 1 + [global] + use_syslog 0 + verbose 1 + logging_level 7 + ts2phc.pulsewidth 100000000 + #GNSS module - ls /dev/gnss* -al + ts2phc.nmea_serialport /dev/gnss0 + leapfile /usr/share/zoneinfo/leap-seconds.list + [ens2f1] + ts2phc.extts_polarity rising + ts2phc.extts_correction 0 + ptp4lConf: | + [ens2f1] + masterOnly 1 + [ens2f2] + masterOnly 1 + [ens2f3] + masterOnly 1 + [ens2f3] + masterOnly 1 + [global] + # + # Default Data Set + # + twoStepFlag 1 + priority1 128 + priority2 128 + domainNumber 24 + #utc_offset 37 + clockClass 6 + clockAccuracy 0x27 + 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 0 + 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 -4 + kernel_leap 1 + check_fup_sync 0 + clock_class_threshold 7 + # + # Servo Options + # + pi_proportional_const 0.0 + pi_integral_const 0.0 + 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 + 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 0 + # + # Clock description + # + productDescription ;; + revisionData ;; + manufacturerIdentity 00:00:00 + userDescription ; + timeSource 0x20 + recommend: + - profile: "grandmaster" + priority: 4 + match: + - nodeLabel: "node-role.kubernetes.io/worker"