diff options
| -rwxr-xr-x | smoketest/scripts/cli/test_service_dhcp-server.py | 3 | ||||
| -rwxr-xr-x | src/conf_mode/service_dhcp-server.py | 28 | 
2 files changed, 18 insertions, 13 deletions
| diff --git a/smoketest/scripts/cli/test_service_dhcp-server.py b/smoketest/scripts/cli/test_service_dhcp-server.py index 849a411f1..194289567 100755 --- a/smoketest/scripts/cli/test_service_dhcp-server.py +++ b/smoketest/scripts/cli/test_service_dhcp-server.py @@ -387,6 +387,9 @@ class TestServiceDHCPServer(VyOSUnitTestSHIM.TestCase):          self.cli_set(pool + ['static-mapping', 'dupe1', 'ip-address', inc_ip(subnet, 10)])          with self.assertRaises(ConfigSessionError):              self.cli_commit() +        # Should allow disabled duplicate +        self.cli_set(pool + ['static-mapping', 'dupe1', 'disable']) +        self.cli_commit()          self.cli_delete(pool + ['static-mapping', 'dupe1'])          # cannot have mappings with duplicate MAC addresses diff --git a/src/conf_mode/service_dhcp-server.py b/src/conf_mode/service_dhcp-server.py index 9632b91fc..91ea354b6 100755 --- a/src/conf_mode/service_dhcp-server.py +++ b/src/conf_mode/service_dhcp-server.py @@ -246,19 +246,21 @@ def verify(dhcp):                              raise ConfigError(f'Either MAC address or Client identifier (DUID) is required for '                                                f'static mapping "{mapping}" within shared-network "{network}, {subnet}"!') -                        if mapping_config['ip_address'] in used_ips: -                            raise ConfigError(f'Configured IP address for static mapping "{mapping}" already exists on another static mapping') -                        used_ips.append(mapping_config['ip_address']) - -                    if 'mac' in mapping_config: -                        if mapping_config['mac'] in used_mac: -                            raise ConfigError(f'Configured MAC address for static mapping "{mapping}" already exists on another static mapping') -                        used_mac.append(mapping_config['mac']) - -                    if 'duid' in mapping_config: -                        if mapping_config['duid'] in used_duid: -                            raise ConfigError(f'Configured DUID for static mapping "{mapping}" already exists on another static mapping') -                        used_duid.append(mapping_config['duid']) +                        if 'disable' not in mapping_config: +                            if mapping_config['ip_address'] in used_ips: +                                raise ConfigError(f'Configured IP address for static mapping "{mapping}" already exists on another static mapping') +                            used_ips.append(mapping_config['ip_address']) + +                    if 'disable' not in mapping_config: +                        if 'mac' in mapping_config: +                            if mapping_config['mac'] in used_mac: +                                raise ConfigError(f'Configured MAC address for static mapping "{mapping}" already exists on another static mapping') +                            used_mac.append(mapping_config['mac']) + +                        if 'duid' in mapping_config: +                            if mapping_config['duid'] in used_duid: +                                raise ConfigError(f'Configured DUID for static mapping "{mapping}" already exists on another static mapping') +                            used_duid.append(mapping_config['duid'])              # There must be one subnet connected to a listen interface.              # This only counts if the network itself is not disabled! | 
