summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/conf_mode/service_ntp.py30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/conf_mode/service_ntp.py b/src/conf_mode/service_ntp.py
index e58da2737..38e0df079 100755
--- a/src/conf_mode/service_ntp.py
+++ b/src/conf_mode/service_ntp.py
@@ -21,6 +21,7 @@ from vyos.config import config_dict_merge
from vyos.configdict import is_node_changed
from vyos.configverify import verify_vrf
from vyos.configverify import verify_interface_exists
+from vyos.netlink import timestamp
from vyos.utils.process import call
from vyos.utils.permission import chmod_750
from vyos.utils.network import get_interface_config
@@ -105,6 +106,35 @@ def verify(ntp):
else:
break
+ if 'timestamp' in ntp:
+ for iface, iface_config in ntp['timestamp'].get('interface', {}).items():
+ rx_filter = iface_config.get('receive_filter')
+ if iface != 'all':
+ verify_interface_exists(ntp, iface)
+ if rx_filter and rx_filter != 'none':
+ if iface == 'all':
+ any_supported = False
+ for real_iface in os.listdir('/sys/class/net'):
+ supported = timestamp.get_hw_timestamp_filters(real_iface)
+ if rx_filter in supported or 'all' in supported:
+ any_supported = True
+ break
+ if not any_supported:
+ raise ConfigError(
+ f'No interface supports hardware timestamp receive-filter "{rx_filter}"'
+ )
+ else:
+ supported = timestamp.get_hw_timestamp_filters(iface)
+ if not supported:
+ raise ConfigError(
+ f'Interface "{iface}" does not support hardware timestamping'
+ )
+ if rx_filter not in supported and 'all' not in supported:
+ raise ConfigError(
+ f'Interface "{iface}" does not support hardware timestamp '
+ f'receive-filter "{rx_filter}", supported: {", ".join(sorted(supported))}'
+ )
+
return None
def generate(ntp):