This section describes how to configure a Dual Intel Westport NIC in the LLS-C1 T-GM mode using the PTP timing pod.

Prerequisites

The following topology diagram is an example configuration:

  • NIC1 PF3 is connected to RU1 NIC2

  • PF1 is connected to RU2 NIC1

  • (Optional) PF1 is connected to Midhaul and serves as a secondary source of PTP and SyncE


Dual Intel Westport NIC Configuration in LLS-C1 T-GM Mode Using Timing Pod

Procedure

  1. Navigate to Catalog > Network Function in the Telco Cloud Automation UI.
  2. Select the Network Function you want to set up in LLS-C1 T-GM mode and click EDIT.
  3. Click the Topology tab, and select and drag 'Helm' from Components to the workspace.
  4. Enter all the required details for the VMware PTP Timing Pod:

    Configure PTP Timing Pod
    1. Properties:
      • Name: tca-timing-pod

      • Description: Description of the helm chart

      • Chart Name: Chart name of the timing-pod. The value must be 'tca-timing-pod'

      • Chart Version: tca-timing-pod helm version

      • Helm Version: tca-timing-pod helm version (v3)

    2. Help Property Overrides: Add an entry for the values.yaml file
    3. Depends On (Optional): Select the timing pod helm chart and add it as a dependency to your DU Helm chart.

      Note: tca-timing-pod must start before any other pods that are part of the network function.

  5. Edit the network function helm charts to add the dependency on the timing pod.

    Add dependency to the timing pod
  6. Save the changes.
  7. Click the Infrastructure Requirements tab.
  8. Add a PTP device for each port that is connected to RU.
    Caution:
    • To sync the PTP Hardware Clock (PHC) from GNSS, a PTP device from PF0 is also required.

    • PF0 can also be used for other purposes, for example, to connect to an RU or the secondary source of PTP.

    Secondary timing source:

    • If a secondary source of PTP is available, tca-timing-pod can also sync DU to the secondary source in case GNSS is down. Add a PTP device for the secondary PTP source, but it is optional.

    • If a secondary source of SyncE is available, tca-timing-pod can increase the DU holdover time by using SyncE in the following scenarios. Add a device of PTP type in CSAR for the secondary SyncE source, but is optional.

      • GNSS is down and secondary source of PTP is not provided.

      • GNSS is down and secondary source of PTP is also down.


    Add PTP devices
  9. Instantiate the network function.

    Namespace for tca-timing-pod helm: For tca-timing-pod helm charts, do not use 'tca-system' namespace. Use the same namespace where the DU application will be installed.

    In the following screenshot, 'testnf' namespace is used for both the DU application and tca-timing-pod.


    NF instantiation

    values.yaml for tca-timing-pod:

    • In the below sample file, the value of GNSSHoldoverTimeout is set to 14400s (=4 hours) based on Intel’s recommendation of the Holdover period for Intel Westport NICs. You can change this value.

    • Modify other fields such as SecondaryPTPSource, SecondarySynceSource, interface names in Synce4lNic1GmConf, Synce4lNic1BcConf, and Ptp4lNic1Conf based on the setup in use.

    • The name of the PTP device from the first port must be 'ptp'.

    Notes:

    • Use 'tca-system' as namespace in the tca-timing-pod values.yaml

    • Use 3 as the ProfileId for Single WPC.

    Example: values.yaml for tca-timing-pod

    ProfileId: "4" # 1: T-TSC, 2: T-BC, 3: T-GM, 4: Dual WPC
      
    # GNSS state Polling interval in seconds
    GnssStatePollInterval: "2"
    # When the timing pod is stated with ProfileId 3 (T-GM), once GNSS disconnection
    # is detected it goes into the HOLDOVER state and continue operating in T-GM mode.
    # At the end of the Holdover period, if a secondary PTP source is available, it switches
    # to Boundary Clock Mode. If a secondary PTP source is not available it transitions to
    # FREERUN state
    GnssHolderoverTimeout: "14400" # In seconds
    # If SecondaryPTPSource is provided,
    # then Timing source will be switched to SecondaryPTPSource from MH when GNSS status is offline
    # Provide Interface name on worker node VM where PTP packets are received from secondary source on primary NIC e.g Intel Westport
    # or secondary NIC e.g Intel Salem channel
    SecondaryPTPSource: ""
    # Boolean flag to indicate if secondary ptp source is on secondary(OCP) NIC
    # "true" if secondary source in on secondary(OCP) NIC
    # "false" if secondary source is on primary NIC
    SecondaryPTPSourceOnSecondaryNIC: ""
    # If SecondarySynceSource is provided,
    # then Timing source will be switched to SecondarySynceSource when: a. GNSS status is offline and SecondaryPTPSource is not present
    # b. SecondaryPTPSource goes out of sync
    # Provide Interface name on worker node VM where synce packets are received from secondary synce source
    SecondarySynceSource: ""
      
    namespace: tca-system
      
    nodeSelector: {
          key: value
    }
      
    Containers:
      TimingController:
        name: timing-controller
        image: vmwaresaas.jfrog.io/registry/tca-timing-controller:5.0.0
      MessageQueue:
        name: rabbitmq
        image: vmwaresaas.jfrog.io/registry/rabbitmq:3.12-management
      Monitor:
        name: monitor
        image: vmwaresaas.jfrog.io/registry/ptp-ocloud-notifications-monitor:5.0.0
      
    # tsp2hc config for 1st NIC (with GNSS module)
    Ts2phcNic1Conf: |
      [global]
      use_syslog              1
      verbose                 0
      logging_level           6
      ts2phc.pulsewidth       100000000
      ts2phc.nmea_serialport  /dev/ttyGNSS_0300
      message_tag             ts2phc_nic1
      
      [ptp]
      ts2phc.extts_polarity   rising
      
    # tsp2hc config for 2nd NIC (without GNSS module)
    Ts2phcNic2Conf: |
      [global]
      use_syslog              0
      verbose                 1
      logging_level           7
      ts2phc.pulsewidth       100000000
      message_tag             ts2phc_nic2
        
      [nic2-eth1]
      ts2phc.channel            1
      ts2phc.extts_polarity   rising
      ts2phc.pin_index          1
    # tsp2hc cmdline options for 1st NIC (with GNSS module)
    Ts2phcNic1Opts: |
      -m -s nmea --leapfile /usr/share/zoneinfo/leap-seconds.list
    # path inside timing pod where leap-seconds file should be mounted.
    # same path should be provided in Ts2phcNic1Opts for using leapfile
    LeapfileMountPath: "/usr/share/zoneinfo/leap-seconds.list"
      
    # tsp2hc cmdline options for 2nd NIC (without GNSS module)
    Ts2phcNic2Opts: |
      -m -s generic --leapfile /usr/share/zoneinfo/leap-seconds.list
    # synce4l config for 1st NIC, when operating in T-GM Mode
    Synce4lNic1GmConf: |
      [global]
      logging_level 7
      use_syslog 0
      verbose 1
      message_tag [synce4l_nic1]
      
      [<synce1>]
      input_mode external
      network_option 1
      external_input_QL 1
      external_input_ext_QL 33
      extended_tlv 1
      recover_time 20
      eec_get_state_cmd cat /sys/class/net/ptp/device/dpll_0_state
      eec_holdover_value 4
      eec_locked_ho_value 3
      eec_locked_value 2
      eec_freerun_value 1
      eec_invalid_value 0
      
      # interface connected to RU
      [nic1-eth2]
      tx_heartbeat_msec 1000
      rx_heartbeat_msec 500
      recover_clock_enable_cmd echo 1 0 > /sys/class/net/nic1-eth2/device/phy/synce
      recover_clock_disable_cmd echo 0 0 > /sys/class/net/nic1-eth2/device/phy/synce
    # synce4l config for 2nd NIC
    Synce4lNic2Conf: |
      [global]
      logging_level 7
      use_syslog 0
      verbose 1
      message_tag [synce4l_nic2]
        
      [<synce2>]
      input_mode external
      network_option 1
      external_input_QL 1
      external_input_ext_QL 33
      extended_tlv 1
      recover_time 20
      eec_get_state_cmd cat /sys/class/net/nic2-eth1/device/dpll_0_state
      eec_holdover_value 4
      eec_locked_ho_value 3
      eec_locked_value 2
      eec_freerun_value 1
      eec_invalid_value 0
        
      # interface connected to RU
      [nic2-eth2]
      tx_heartbeat_msec 1000
      rx_heartbeat_msec 500
      recover_clock_enable_cmd echo 1 0 > /sys/class/net/nic2-eth2/device/phy/synce
      recover_clock_disable_cmd echo 0 0 > /sys/class/net/nic2-eth2/device/phy/synce
    # synce4l config for 1st NIC, when operating in T-BC Mode
    Synce4lNic1BcConf: |
      [global]
      logging_level 7
      use_syslog 0
      verbose 1
      message_tag [synce4l]
      
      [<synce1>]
      input_mode line
      network_option 1
      extended_tlv 1
      recover_time 20
      eec_get_state_cmd cat /sys/class/net/ptp/device/dpll_0_state
      eec_holdover_value 4
      eec_locked_ho_value 3
      eec_locked_value 2
      eec_freerun_value 1
      eec_invalid_value 0
      
      # interface connected to secondary synce source
      [nic1-eth2]
      tx_heartbeat_msec 1000
      rx_heartbeat_msec 500
      recover_clock_enable_cmd echo 1 0 > /sys/class/net/nic1-eth2/device/phy/synce
      recover_clock_disable_cmd echo 0
      
      # interface connected to RU
      [nic1-eth4]
      tx_heartbeat_msec 1000
      rx_heartbeat_msec 500
      recover_clock_enable_cmd echo 0
      recover_clock_disable_cmd echo 0
    # ptp4l config for 1st WPC when operating in T-GM mode
    Ptp4lNic1Conf: |
      [global]
      #
      # Default Data Set
      #
      twoStepFlag       1
      clientOnly        0
      socket_priority       0
      priority1     128
      priority2     128
      domainNumber      24
      utc_offset        37
      clockClass        6
      clockAccuracy     0x21
      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
      maxStepsRemoved       255
      #
      # Port Data Set
      #
      logAnnounceInterval   -3
      logSyncInterval       -4
      operLogSyncInterval   0
      logMinDelayReqInterval    -4
      logMinPdelayReqInterval   0
      operLogPdelayReqInterval 0
      announceReceiptTimeout    3
      syncReceiptTimeout    0
      delayAsymmetry        0
      fault_reset_interval  4
      neighborPropDelayThresh   20000000
      serverOnly        0
      G.8275.portDS.localPriority   128
      asCapable               auto
      BMCA                    ptp
      inhibit_announce        0
      inhibit_delay_req       0
      ignore_source_id        0
      #
      # 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  300
      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
      #
      # 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        0.0
      first_step_threshold  0.00002
      max_frequency     900000000
      clock_servo       pi
      sanity_freq_limit 200000000
      ntpshm_segment        0
      msg_interval_request  0
      servo_num_offset_values 10
      servo_offset_threshold  0
      write_phase_mode  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_nic1
      uds_ro_address    /var/run/ptp4lro_nic1
      #
      # 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        0x20
      clock_class_threshold 7
      
      # interface's connected to RUs
      [nic1-eth4]
      serverOnly 1
     
    Ptp4lNic2Conf: |
      [global]
      #
      # Default Data Set
      #
      twoStepFlag        1
      clientOnly        0
      socket_priority        0
      priority1        128
      priority2        128
      domainNumber        24
      utc_offset        37
      clockClass        6
      clockAccuracy        0x21
      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
      maxStepsRemoved        255
      #
      # Port Data Set
      #
      logAnnounceInterval    -3
      logSyncInterval        -4
      operLogSyncInterval    0
      logMinDelayReqInterval    -4
      logMinPdelayReqInterval    0
      operLogPdelayReqInterval 0
      announceReceiptTimeout    3
      syncReceiptTimeout    0
      delayAsymmetry        0
      fault_reset_interval    4
      neighborPropDelayThresh    20000000
      serverOnly        1
      G.8275.portDS.localPriority    128
      asCapable               auto
      BMCA                    ptp
      inhibit_announce        0
      inhibit_delay_req       0
      ignore_source_id        0
      #
      # 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    300
      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
      #
      # 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        0.0
      first_step_threshold    0.00002
      max_frequency        900000000
      clock_servo        pi
      sanity_freq_limit    200000000
      ntpshm_segment        0
      msg_interval_request    0
      servo_num_offset_values 10
      servo_offset_threshold  0
      write_phase_mode    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_nic2
      uds_ro_address       /var/run/ptp4lro_nic2
      #
      # 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        0x20
        
      # interface's connected to RUs
      [nic2-eth2]
      serverOnly 1
    Phc2sysOpts: |
      -s ptp -c CLOCK_REALTIME -O -37 -m -R 16 -u 16
    LeapSeconds: |
    
    #	ATOMIC TIME
    #	Coordinated Universal Time (UTC) is the reference time scale derived
    #	from The "Temps Atomique International" (TAI) calculated by the Bureau
    #	International des Poids et Mesures (BIPM) using a worldwide network of atomic
    #	clocks. UTC differs from TAI by an integer number of seconds; it is the basis
    #	of all activities in the world.
    #
    #
    #	ASTRONOMICAL TIME (UT1) is the time scale based on the rate of rotation of the earth.
    #	It is now mainly derived from Very Long Baseline Interferometry (VLBI). The various
    #	irregular fluctuations progressively detected in the rotation rate of the Earth led
    #	in 1972 to the replacement of UT1 by UTC as the reference time scale.
    #
    #
    #	LEAP SECOND
    #	Atomic clocks are more stable than the rate of the earth's rotation since the latter
    #	undergoes a full range of geophysical perturbations at various time scales: lunisolar
    #	and core-mantle torques, atmospheric and oceanic effects, etc.
    #	Leap seconds are needed to keep the two time scales in agreement, i.e. UT1-UTC smaller
    #	than 0.9 seconds. Therefore, when necessary a "leap second" is applied to UTC.
    #	Since the adoption of this system in 1972 it has been necessary to add a number of seconds to UTC,
    #	firstly due to the initial choice of the value of the second (1/86400 mean solar day of
    #	the year 1820) and secondly to the general slowing down of the Earth's rotation. It is
    #	theoretically possible to have a negative leap second (a second removed from UTC), but so far,
    #	all leap seconds have been positive (a second has been added to UTC). Based on what we know about
    #	the earth's rotation, it is unlikely that we will ever have a negative leap second.
    #
    #
    #	HISTORY
    #	The first leap second was added on June 30, 1972. Until the year 2000, it was necessary in average to add a
    #       leap second at a rate of 1 to 2 years. Since the year 2000 leap seconds are introduced with an
    #	average interval of 3 to 4 years due to the acceleration of the Earth's rotation speed.
    #
    #
    #	RESPONSIBILITY OF THE DECISION TO INTRODUCE A LEAP SECOND IN UTC
    #	The decision to introduce a leap second in UTC is the responsibility of the Earth Orientation Center of
    #	the International Earth Rotation and reference System Service (IERS). This center is located at Paris
    #	Observatory. According to international agreements, leap seconds should be scheduled only for certain dates:
    #	first preference is given to the end of December and June, and second preference at the end of March
    #	and September. Since the introduction of leap seconds in 1972, only dates in June and December were used.
    #
    #		Questions or comments to:
    #			Christian Bizouard:  [email protected]
    #			Earth orientation Center of the IERS
    #			Paris Observatory, France
    #
    #
    #
    #    	COPYRIGHT STATUS OF THIS FILE
    #    	This file is in the public domain.
    #
    #
    #	VALIDITY OF THE FILE
    #	It is important to express the validity of the file. These next two dates are
    #	given in units of seconds since 1900.0.
    #
    #	1) Last update of the file.
    #
    #	Updated through IERS Bulletin C (https://hpiers.obspm.fr/iers/bul/bulc/bulletinc.dat)
    #
    #	The following line shows the last update of this file in NTP timestamp:
    #
    #$	3929093563
    #
    #	2) Expiration date of the file given on a semi-annual basis: last June or last December
    #
    #	File expires on 28 June 2025
    #
    #	Expire date in NTP timestamp:
    #
    #@	3960057600
    #
    #
    #	LIST OF LEAP SECONDS
    #	NTP timestamp (X parameter) is the number of seconds since 1900.0
    #
    #	MJD: The Modified Julian Day number. MJD = X/86400 + 15020
    #
    #	DTAI: The difference DTAI= TAI-UTC in units of seconds
    #	It is the quantity to add to UTC to get the time in TAI
    #
    #	Day Month Year : epoch in clear
    #
    #NTP Time      DTAI    Day Month Year
    #
    2272060800      10      # 1 Jan 1972
    2287785600      11      # 1 Jul 1972
    2303683200      12      # 1 Jan 1973
    2335219200      13      # 1 Jan 1974
    2366755200      14      # 1 Jan 1975
    2398291200      15      # 1 Jan 1976
    2429913600      16      # 1 Jan 1977
    2461449600      17      # 1 Jan 1978
    2492985600      18      # 1 Jan 1979
    2524521600      19      # 1 Jan 1980
    2571782400      20      # 1 Jul 1981
    2603318400      21      # 1 Jul 1982
    2634854400      22      # 1 Jul 1983
    2698012800      23      # 1 Jul 1985
    2776982400      24      # 1 Jan 1988
    2840140800      25      # 1 Jan 1990
    2871676800      26      # 1 Jan 1991
    2918937600      27      # 1 Jul 1992
    2950473600      28      # 1 Jul 1993
    2982009600      29      # 1 Jul 1994
    3029443200      30      # 1 Jan 1996
    3076704000      31      # 1 Jul 1997
    3124137600      32      # 1 Jan 1999
    3345062400      33      # 1 Jan 2006
    3439756800      34      # 1 Jan 2009
    3550089600      35      # 1 Jul 2012
    3644697600      36      # 1 Jul 2015
    3692217600      37      # 1 Jan 2017
    #
    #	A hash code has been generated to be able to verify the integrity
    #	of this file. For more information about using this hash code,
    #	please see the readme file in the 'source' directory :
    #	https://hpiers.obspm.fr/iers/bul/bulc/ntp/sources/README
    #
    #h	be738595 57b0cf1b b0218343 fb77062f 5a775e7