man(8)

🌸 NAME 🌸

okay so bestie, welcome to the man(8) page for synce4l β€” the Synchronous Ethernet (SyncE) controller application πŸ’…βœ¨

like yes it's a section-8 system administration manual, but it's also the moment. buckle up πŸŽ€


✨ SYNOPSIS ✨

synce4l -f [file] [-l <num>] [-m] [-q] [-v] [-h]

πŸ¦‹ DESCRIPTION πŸ¦‹

so synce4l is an implementation of the Synchronous Ethernet (SyncE) protocol, according to ITU-T Rec. G.8264 β€” no cap, that's literally what it is πŸ“œ

the design goal? it's giving "provide logic to supported hardware" by processing Ethernet Synchronization Messaging Channel (ESMC) and controlling the Ethernet Equipment Clock (EEC) on a Network Card Interface (NIC) πŸ”₯

and here's the tea: the application can operate in two mutually exclusive modes β€” line or external. you pick one. you cannot have both. the universe said no 🫢

🌈 External input mode

if synce4l is configured to run in external input mode, then the EEC needs to have an external 1PPS source attached (GPS or other generator) πŸ“‘

in this scenario, synce4l always broadcasts the clock quality level (QL) defined in the configuration file. and additionally β€” for external input mode β€” incoming SyncE frames do not participate in the best source selection algorithm for the EEC. like, they're just not in the running, bestie πŸ™ˆ

πŸ’œ Line input mode

in line input mode, incoming SyncE frames are processed and the best clock source is extracted from the link having the best quality level πŸ‘‘

synce4l configures such a "best quality" port as a source to recover clock for the EEC. the recovered QL is broadcasted to all other interfaces then. and nope β€” an external clock source cannot be used in this mode. periodt 🚫


πŸ’… OPTIONS πŸ’…

  • -f [file] β€” read configuration from file (heads up: the config file takes precedence over command line arguments, so the file wins every argument, iykyk) πŸ“‚
  • -l [num] β€” set the logging level to num (0: least detailed, 7: most detailed) πŸ”
  • -m β€” print messages to stdout πŸ–¨οΈ
  • -q β€” do not print messages to the syslog 🀫
  • -v β€” print synce4l version and exit πŸ‘‹
  • -h β€” print this message and exit πŸ†˜

πŸŽ€ CONFIGURATION FILE πŸŽ€

the configuration file contains three sections:

  • global,
  • device,
  • port.

⭐ Global section

this section starts with the [global] keyword. it sets the logging options, that's its whole vibe.

available options:

  • logging_level β€” minimum log level required to appear in a log. defaults to 6, valid values are 0 - 7 πŸ“Š
  • message_tag β€” tag reported in a log 🏷️
  • use_syslog β€” set to 1 if syslog should be used. defaults to 1, valid values are 0 or 1 πŸ’»
  • verbose β€” set to 1 to log extra information. defaults to 0, valid values are 0 or 1 πŸ—£οΈ

🧚 Device section

this section specifies the configuration of one logical device, e.g. 'synce1'. the name is defined by the user. the name has no impact for any functionality except traces β€” it's purely for the aesthetic 🎨

the name must be enclosed in extra angle bracket when defining a new device section, e.g. [<synce1>] 🫢

all ports defined by port sections after the device section will create one SyncE device (until the next device section). so order matters, bestie πŸ“Œ

available options:

  • input_mode β€” set to "line" to enable line input mode, set "external" for external input mode. defaults to "line", valid values are "line" or "external" πŸ”€
  • external_input_QL β€” Quality Level (QL) for "external input" mode. valid values specified in ITU-T Recommendations πŸ“–
  • external_input_ext_QL β€” Extended Quality Level for "external input" mode. valid values specified in ITU-T Recommendations πŸ“–
  • extended_tlv β€” set to 1 to enable extended QL. defaults to 0, valid values are 0 or 1 πŸ”›
  • network_option β€” network option according to T-REC-G.8264. all devices in the SyncE domain should have the same option configured. no rogue settings, okay? 🀝 defaults to 1, valid values are 1 or 2 🌐
  • recover_time β€” seconds indicating the minimum time to recover from the QL-failed state on the port. defaults to 60, valid values are 10 - 720 ⏱️
  • get_eec_state_cmd β€” defines a shell command which will be executed by synce4l to acquire current state of a SyncE EEC on the device. a separated command must be provided by the user for each device configured for frequency synchronization. the command shall output current state of EEC to stdout, and the expected values are defined (also by the user) with the following configuration items: eec_holdover_value, eec_locked_ho_value, eec_locked_value, eec_freerun_value, eec_invalid_value 🐚
  • eec_holdover_value β€” defines a string value expected on the stdout stream when the EEC is in HOLDOVER state 🧊
  • eec_locked_ho_value β€” defines a string value expected on the stdout stream when the EEC is in LOCKED HOLDOVER state πŸ”’
  • eec_locked_value β€” defines a string value expected on the stdout stream when the EEC is in LOCKED state πŸ”
  • eec_freerun_value β€” defines a string value expected on the stdout stream when the EEC is in FREERUN state πŸƒ
  • eec_invalid_value β€” defines a string value expected on the stdout stream when the EEC is in INVALID state ❌

πŸ“ Port section

any other section not starting with < (e.g. [eth0]) is the port section. multiple port sections are allowed. each port participates in SyncE communication πŸŒ‰

available options:

  • tx_heartbeat_msec β€” interval between consecutive SyncE frame transmissions (1000ms recommended). defaults to 1000, valid values are 100 - 3000 πŸ“€
  • rx_heartbeat_msec β€” interval between consecutive SyncE socket polls (frame receive). defaults to 50, valid values are 10 - 500 πŸ“₯
  • recover_clock_enable_cmd β€” a shell command which enables the PHY port pointed by this Port section as a source of frequency for the SyncE EEC on this device (required only in "internal input" mode) βœ…
  • recover_clock_disable_cmd β€” a shell command which disables the PHY port pointed by this Port section as a source of frequency for the SyncE EEC on this device (required only in "internal input" mode) 🚫
  • allowed_qls β€” list of integers containing allowed SSM QLs separated by comma (,), other received ones would be discarded. if the parameter is not provided, all QLs will be accepted 🎯
  • allowed_ext_qls β€” list of integers containing allowed extended SSM QLs separated by comma (,), other received ones would be discarded. if the parameter is not provided, all QLs will be accepted 🎯

πŸ’€ BUGS πŸ’€

no known bugs. she's flawless, she's perfect, she ate and left no crumbs πŸ‘‘


πŸ‘‘ AUTHOR πŸ‘‘

  • Arkadiusz Kubalewski <arkadiusz.kubalewski@intel.com>
  • Michal Michalik <michal.michalik@intel.com>

okay that's the whole page bestie, go forth and synchronize those Ethernet clocks 🌸✨

version 1.0 Β· dated 27 Oct 2022 Β· mwah πŸ’‹ 🫢