MCPcopy Index your code
hub / github.com/python/cpython / subnets

Method subnets

Lib/ipaddress.py:921–972  ·  view source on GitHub ↗

The subnets which join to make the current subnet. In the case that self contains only one IP (self._prefixlen == 32 for IPv4 or self._prefixlen == 128 for IPv6), yield an iterator with just ourself. Args: prefixlen_diff: An integer, the amount the prefi

(self, prefixlen_diff=1, new_prefix=None)

Source from the content-addressed store, hash-verified

919 return (self.version, self.network_address, self.netmask)
920
921 def subnets(self, prefixlen_diff=1, new_prefix=None):
922 """The subnets which join to make the current subnet.
923
924 In the case that self contains only one IP
925 (self._prefixlen == 32 for IPv4 or self._prefixlen == 128
926 for IPv6), yield an iterator with just ourself.
927
928 Args:
929 prefixlen_diff: An integer, the amount the prefix length
930 should be increased by. This should not be set if
931 new_prefix is also set.
932 new_prefix: The desired new prefix length. This must be a
933 larger number (smaller prefix) than the existing prefix.
934 This should not be set if prefixlen_diff is also set.
935
936 Returns:
937 An iterator of IPv(4|6) objects.
938
939 Raises:
940 ValueError: The prefixlen_diff is too small or too large.
941 OR
942 prefixlen_diff and new_prefix are both set or new_prefix
943 is a smaller number than the current prefix (smaller
944 number means a larger network)
945
946 """
947 if self._prefixlen == self.max_prefixlen:
948 yield self
949 return
950
951 if new_prefix is not None:
952 if new_prefix < self._prefixlen:
953 raise ValueError('new prefix must be longer')
954 if prefixlen_diff != 1:
955 raise ValueError('cannot set prefixlen_diff and new_prefix')
956 prefixlen_diff = new_prefix - self._prefixlen
957
958 if prefixlen_diff < 0:
959 raise ValueError('prefix length diff must be > 0')
960 new_prefixlen = self._prefixlen + prefixlen_diff
961
962 if new_prefixlen > self.max_prefixlen:
963 raise ValueError(
964 'prefix length diff %d is invalid for netblock %s' % (
965 new_prefixlen, self))
966
967 start = int(self.network_address)
968 end = int(self.broadcast_address) + 1
969 step = (int(self.hostmask) + 1) >> prefixlen_diff
970 for new_addr in range(start, end, step):
971 current = self.__class__((new_addr, new_prefixlen))
972 yield current
973
974 def supernet(self, prefixlen_diff=1, new_prefix=None):
975 """The supernet containing the current network.

Callers 10

address_excludeMethod · 0.95
testFancySubnettingMethod · 0.80
testGetSubnetsMethod · 0.80
testSubnet2Method · 0.80
testGetSubnets3Method · 0.80
testGetNum_AddressesMethod · 0.80

Calls 1

__class__Method · 0.45

Tested by 9

testFancySubnettingMethod · 0.64
testGetSubnetsMethod · 0.64
testSubnet2Method · 0.64
testGetSubnets3Method · 0.64
testGetNum_AddressesMethod · 0.64