MCPcopy Index your code
hub / github.com/RustPython/RustPython / subnets

Method subnets

Lib/ipaddress.py:924–975  ·  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

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