Browse Source

Fixes #1953: Ignore duplicate IPs when calculating prefix utilization

Jeremy Stretch 7 years ago
parent
commit
f5bb072f28
1 changed files with 2 additions and 1 deletions
  1. 2 1
      netbox/ipam/models.py

+ 2 - 1
netbox/ipam/models.py

@@ -365,7 +365,8 @@ 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 = self.get_child_ips().count()
+            # Compile an IPSet to avoid counting duplicate IPs
+            child_count = netaddr.IPSet([ip.address.ip for ip in self.get_child_ips()]).size
             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