From bf5805c52b7133ec76edeebac33f3c30b56b169f Mon Sep 17 00:00:00 2001 From: Lucas Christian Date: Thu, 8 Aug 2024 23:36:09 -0700 Subject: T6630: ntp: add hardware timestamp offload --- data/templates/chrony/chrony.conf.j2 | 11 ++++++ interface-definitions/service_ntp.xml.in | 60 +++++++++++++++++++++++++++++++ smoketest/scripts/cli/test_service_ntp.py | 30 ++++++++++++++++ 3 files changed, 101 insertions(+) diff --git a/data/templates/chrony/chrony.conf.j2 b/data/templates/chrony/chrony.conf.j2 index 86c20a4d8..838813866 100644 --- a/data/templates/chrony/chrony.conf.j2 +++ b/data/templates/chrony/chrony.conf.j2 @@ -66,3 +66,14 @@ bindaddress {{ address }} binddevice {{ interface }} {% endif %} {% endif %} + +{% if offload.timestamp.interface is vyos_defined %} +# Enable hardware timestamping on the specified interfaces +{% for interface, config in offload.timestamp.interface.items() %} +hwtimestamp {{ interface }} {{- ' rxfilter ' ~ config.receive_filter if config.receive_filter is vyos_defined }} +{% endfor %} +{% endif %} +{% if offload.timestamp.default_enable is vyos_defined %} +# Enable hardware timestamping on all supported interfaces not otherwise configured +hwtimestamp * +{% endif %} diff --git a/interface-definitions/service_ntp.xml.in b/interface-definitions/service_ntp.xml.in index eca0ada63..005499abd 100644 --- a/interface-definitions/service_ntp.xml.in +++ b/interface-definitions/service_ntp.xml.in @@ -13,6 +13,66 @@ #include #include #include + + + Configurable offload options + + + + + Enable timestamping of packets in the NIC hardware + + + + + Enable timestamping on all supported interfaces + + + + + + Interface to enable timestamping on + + + + + txt + Interface name + + + #include + + + + + + Selects which inbound packets are timestamped by the NIC + + all ntp none + + + all + All received packets are timestamped + + + ntp + Only NTP packets are timestamped + + + none + No received packets are timestamped + + + (all|ntp|none) + + + + + + + + + Leap second behavior diff --git a/smoketest/scripts/cli/test_service_ntp.py b/smoketest/scripts/cli/test_service_ntp.py index fe6b1a529..644894914 100755 --- a/smoketest/scripts/cli/test_service_ntp.py +++ b/smoketest/scripts/cli/test_service_ntp.py @@ -194,5 +194,35 @@ class TestSystemNTP(VyOSUnitTestSHIM.TestCase): for server in servers: self.assertIn(f'server {server} iburst ' + ' '.join(options) + ' xleave', config) + def test_offload_timestamp_default(self): + # Test offloading of NIC timestamp + servers = ['192.0.2.1', '192.0.2.2'] + options = ['prefer'] + + for server in servers: + for option in options: + self.cli_set(base_path + ['server', server, option]) + + self.cli_set(base_path + ['offload', 'timestamp', 'default-enable']) + + # commit changes + self.cli_commit() + + # Check generated configuration + # this file must be read with higher permissions + config = cmd(f'sudo cat {NTP_CONF}') + self.assertIn('driftfile /run/chrony/drift', config) + self.assertIn('dumpdir /run/chrony', config) + self.assertIn('ntsdumpdir /run/chrony', config) + self.assertIn('clientloglimit 1048576', config) + self.assertIn('rtcsync', config) + self.assertIn('makestep 1.0 3', config) + self.assertIn('leapsectz right/UTC', config) + + for server in servers: + self.assertIn(f'server {server} iburst ' + ' '.join(options), config) + + self.assertIn('hwtimestamp *', config) + if __name__ == '__main__': unittest.main(verbosity=2) -- cgit v1.2.3