diff --git a/netbox/ipam/models/vlans.py b/netbox/ipam/models/vlans.py index ca6b27d07..998bc9e2c 100644 --- a/netbox/ipam/models/vlans.py +++ b/netbox/ipam/models/vlans.py @@ -100,7 +100,7 @@ class VLANGroup(OrganizationalModel): if self.vid_ranges and check_ranges_overlap(self.vid_ranges): raise ValidationError({'vid_ranges': _("Ranges cannot overlap.")}) for vid_range in self.vid_ranges: - if vid_range.lower >= vid_range.upper: + if vid_range.lower > vid_range.upper: raise ValidationError({ 'vid_ranges': _( "Maximum child VID must be greater than or equal to minimum child VID ({value})" diff --git a/netbox/ipam/tests/test_models.py b/netbox/ipam/tests/test_models.py index 39eb33a4f..8a5d918a9 100644 --- a/netbox/ipam/tests/test_models.py +++ b/netbox/ipam/tests/test_models.py @@ -543,3 +543,17 @@ class TestVLANGroup(TestCase): vlan = VLAN(vid=109, name='VLAN 109', group=vlangroup) vlan.full_clean() + + def test_overlapping_vlan(self): + vlangroup = VLANGroup( + name='VLAN Group 1', + slug='vlan-group-1', + vid_ranges=string_to_ranges('2-4,3-5'), + ) + with self.assertRaises(ValidationError): + vlangroup.full_clean() + + # make sure single vlan range works + vlangroup.vid_ranges = string_to_ranges('2-2') + vlangroup.full_clean() + vlangroup.save()