Skip to content

Commit 6523334

Browse files
Merge pull request #6545 from crafty-ua/Add_ipv4_32_and_ipv6_128_prefix_support_#6455
Add ipv4 /32 and ipv6 /128 prefix support #6455
2 parents b3cde51 + a665b79 commit 6523334

File tree

2 files changed

+3
-13
lines changed

2 files changed

+3
-13
lines changed

netbox/ipam/models/ip.py

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -340,16 +340,6 @@ def clean(self):
340340
'prefix': "Cannot create prefix with /0 mask."
341341
})
342342

343-
# Disallow host masks
344-
if self.prefix.version == 4 and self.prefix.prefixlen == 32:
345-
raise ValidationError({
346-
'prefix': "Cannot create host addresses (/32) as prefixes. Create an IPv4 address instead."
347-
})
348-
elif self.prefix.version == 6 and self.prefix.prefixlen == 128:
349-
raise ValidationError({
350-
'prefix': "Cannot create host addresses (/128) as prefixes. Create an IPv6 address instead."
351-
})
352-
353343
# Enforce unique IP space (if applicable)
354344
if (self.vrf is None and settings.ENFORCE_GLOBAL_UNIQUE) or (self.vrf and self.vrf.enforce_unique):
355345
duplicate_prefixes = self.get_duplicates()
@@ -471,8 +461,8 @@ def get_available_ips(self):
471461
child_ips = netaddr.IPSet([ip.address.ip for ip in self.get_child_ips()])
472462
available_ips = prefix - child_ips
473463

474-
# IPv6, pool, or IPv4 /31 sets are fully usable
475-
if self.family == 6 or self.is_pool or self.prefix.prefixlen == 31:
464+
# IPv6, pool, or IPv4 /31-/32 sets are fully usable
465+
if self.family == 6 or self.is_pool or (self.family == 4 and self.prefix.prefixlen >= 31):
476466
return available_ips
477467

478468
# For "normal" IPv4 prefixes, omit first and last addresses

netbox/ipam/views.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -522,7 +522,7 @@ def get_extra_context(self, request, instance):
522522
# Parent prefixes table
523523
parent_prefixes = Prefix.objects.restrict(request.user, 'view').filter(
524524
vrf=instance.vrf,
525-
prefix__net_contains=str(instance.address.ip)
525+
prefix__net_contains_or_equals=str(instance.address.ip)
526526
).prefetch_related(
527527
'site', 'role'
528528
)

0 commit comments

Comments
 (0)