prefixlen = child.address.prefixlen() low_mask = 2 ** (size - self.address.prefixlen()) - 1 high_mask = 2 ** size - 1 high_mask &= ~low_mask address = self.address.int() & high_mask address |= child.address.int() & low_mask if prefixlen != size: child.address = IP("%s/%s" % (child.address, prefixlen)) else: child.address = IP(address) def onModifyAction(self, action, old_attr): for child in self._modifyChildren(old_attr): action.addBothUpdate(child.createUpdate()) Resource.registerSubclass(NetworkResource) class IPsecNetworkResource(NetworkResource): XML_TAG = 'ipsec_network' TYPE = IPSEC_NETWORK_RESTYPE TEMPLATE_TYPE = None # there are no generic IPsec network gateway = Address(optional=True) def hasAddresses(self): return True def checkConsistency(self, loader_context=None): NetworkResource.checkConsistency(self, loader_context) if (self.gateway is not None) \ and (self.address.version() != self.gateway.version()):
if self.address_type == IPV6_ADDRESS: family = AF_INET6 else: family = AF_INET addresses = set() try: for family, socktype, proto, canonname, sockaddr in getaddrinfo(self.hostname, None, family): address = parseIPAddress(sockaddr[0]) addresses.add(address) except gaierror, err: message = toUnicode(err.args[1]) raise RulesetError(tr('Unable to get the address of the hostname "%s": %s!'), self.hostname, message) return addresses def exportXML(self, parent): if self.from_template: return None return Resource.exportXML(self, parent) def _matchResource(self, other): try: if other.isGeneric(): return False other_addresses = other.getAddresses() except NotImplementedError: return False return matchAddresses(self.addresses, other_addresses) Resource.registerSubclass(HostnameResource)