1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Fixes #1689: Disregard IP address mask when filtering for child IPs of a prefix

This commit is contained in:
Jeremy Stretch
2017-11-06 10:07:44 -05:00
parent 73cd76932a
commit d306e76420
2 changed files with 4 additions and 10 deletions

View File

@ -285,7 +285,7 @@ class Prefix(CreatedUpdatedModel, CustomFieldModel):
""" """
Return all IPAddresses within this Prefix. Return all IPAddresses within this Prefix.
""" """
return IPAddress.objects.filter(address__net_contained_or_equal=str(self.prefix), vrf=self.vrf) return IPAddress.objects.filter(address__net_host_contained=self.prefix, vrf=self.vrf)
def get_available_ips(self): def get_available_ips(self):
""" """
@ -314,9 +314,7 @@ class Prefix(CreatedUpdatedModel, CustomFieldModel):
child_prefixes = netaddr.IPSet([p.prefix for p in queryset]) child_prefixes = netaddr.IPSet([p.prefix for p in queryset])
return int(float(child_prefixes.size) / self.prefix.size * 100) return int(float(child_prefixes.size) / self.prefix.size * 100)
else: else:
child_count = IPAddress.objects.filter( child_count = self.get_child_ips().count()
address__net_contained_or_equal=str(self.prefix), vrf=self.vrf
).count()
prefix_size = self.prefix.size prefix_size = self.prefix.size
if self.family == 4 and self.prefix.prefixlen < 31 and not self.is_pool: if self.family == 4 and self.prefix.prefixlen < 31 and not self.is_pool:
prefix_size -= 2 prefix_size -= 2

View File

@ -459,9 +459,7 @@ class PrefixView(View):
aggregate = None aggregate = None
# Count child IP addresses # Count child IP addresses
ipaddress_count = IPAddress.objects.filter( ipaddress_count = prefix.get_child_ips().count()
vrf=prefix.vrf, address__net_host_contained=str(prefix.prefix)
).count()
# Parent prefixes table # Parent prefixes table
parent_prefixes = Prefix.objects.filter( parent_prefixes = Prefix.objects.filter(
@ -530,9 +528,7 @@ class PrefixIPAddressesView(View):
prefix = get_object_or_404(Prefix.objects.all(), pk=pk) prefix = get_object_or_404(Prefix.objects.all(), pk=pk)
# Find all IPAddresses belonging to this Prefix # Find all IPAddresses belonging to this Prefix
ipaddresses = IPAddress.objects.filter( ipaddresses = prefix.get_child_ips().select_related(
vrf=prefix.vrf, address__net_host_contained=str(prefix.prefix)
).select_related(
'vrf', 'interface__device', 'primary_ip4_for', 'primary_ip6_for' 'vrf', 'interface__device', 'primary_ip4_for', 'primary_ip6_for'
) )
ipaddresses = add_available_ipaddresses(prefix.prefix, ipaddresses, prefix.is_pool) ipaddresses = add_available_ipaddresses(prefix.prefix, ipaddresses, prefix.is_pool)