diff options
| author | Viacheslav Hletenko <v.gletenko@vyos.io> | 2025-12-11 06:48:04 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-12-11 06:48:04 +0200 |
| commit | 781691031f68d5ad0f32b34703a5650844685a0b (patch) | |
| tree | 0210153af88525e7af9eb4ab1cd8e8b979b75381 | |
| parent | 7d8767de8d9f61f0a9d06e91e952e20beac78120 (diff) | |
| parent | 3ae47d81e1e990de7fc5260e61227b9ef7044d92 (diff) | |
| download | vyos-1x-781691031f68d5ad0f32b34703a5650844685a0b.tar.gz vyos-1x-781691031f68d5ad0f32b34703a5650844685a0b.zip | |
Merge pull request #4889 from cpcowart/cc/fix-dhcpv6-renew-gate
T8078: dhcpv6: allow lease renew for pd & parameters
| -rwxr-xr-x | src/op_mode/dhcp.py | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/src/op_mode/dhcp.py b/src/op_mode/dhcp.py index 7c4c545fc..9cb5a84ae 100755 --- a/src/op_mode/dhcp.py +++ b/src/op_mode/dhcp.py @@ -308,11 +308,31 @@ def _verify_client(func): v = 'v6' if family == 'inet6' else '' interface = kwargs.get('interface') interface_path = Section.get_config_path(interface) + path_elems = interface_path.split() + base_path = ['interfaces'] + path_elems + unconf_message = f'DHCP{v} client not configured on interface {interface}!' - # Check if config does not exist - if not config.exists(f'interfaces {interface_path} address dhcp{v}'): + iface_conf = config.get_config_dict( + base_path, key_mangling=('-', '_'), get_first_key=True + ) + + if family == 'inet6': + addrs = iface_conf.get('address', []) + has_dhcpv6_addr = 'dhcpv6' in addrs + + dhcpv6_opts = iface_conf.get('dhcpv6_options', {}) + has_parameters_only = 'parameters_only' in dhcpv6_opts + has_pd = 'pd' in dhcpv6_opts + + config_exists = has_dhcpv6_addr or has_parameters_only or has_pd + else: + addrs = iface_conf.get('address', []) + config_exists = 'dhcp' in addrs + + if not config_exists: raise vyos.opmode.UnconfiguredObject(unconf_message) + return func(*args, **kwargs) return _wrapper |
