Browse Source

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

Jeremy Stretch 7 years ago
parent
commit
d306e76420
2 changed files with 4 additions and 10 deletions
  1. 2 4
      netbox/ipam/models.py
  2. 2 6
      netbox/ipam/views.py

+ 2 - 4
netbox/ipam/models.py

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

+ 2 - 6
netbox/ipam/views.py

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