# TODO: implement @property def prefixlen(self): return self.address.prefixlen @classmethod def _from_data_bytes(cls, data, prefix_len=None, rsvd1=None, flags=None, rsvd2=None): asn = data.read('uint:32') address = read_afi_address_from_bitstream(data) if prefix_len is not None: orig_address = address address = ip_network(address).supernet(new_prefix=prefix_len) if address[0] != orig_address: raise ValueError("invalid prefix length %s for %r" % (prefix_len, address)) lcaf = cls(asn=asn, address=address) lcaf.sanitize() return lcaf def _to_data_bytes(self): data = BitArray('uint:32=%d' % self.asn) data += get_bitstream_for_afi_address(self.address) return data # Register this class in the registry type_registry.register_type_class(LCAFAutonomousSystemAddress)
class LCAFNullAddress(LCAFAddress): lcaf_type = 0 prefixlen = 0 def __init__(self): super(LCAFNullAddress, self).__init__() def __unicode__(self): return u"NULL" def sanitize(self): super(LCAFNullAddress, self).sanitize() # TODO: implement def get_addresses(self): return [] @classmethod def _from_data_bytes(cls, data, prefix_len=None, rsvd1=None, flags=None, rsvd2=None): lcaf = cls() lcaf.sanitize() return lcaf def _to_data_bytes(self): return BitArray(0) # Register this class in the registry type_registry.register_type_class(LCAFNullAddress)
def sanitize(self): super(LCAFAFIListAddress, self).sanitize() # TODO: implement @classmethod def _from_data_bytes(cls, data, prefix_len=None, rsvd1=None, flags=None, rsvd2=None): addresses = [] while data.pos != data.len: address = read_afi_address_from_bitstream(data) if prefix_len is not None: orig_address = address address = ip_network(address).supernet(new_prefix=prefix_len) if address[0] != orig_address: raise ValueError("invalid prefix length %s for %r" % (prefix_len, address)) addresses.append(address) lcaf = cls(addresses=addresses) lcaf.sanitize() return lcaf def _to_data_bytes(self): data = BitArray() for address in self.addresses: data += get_bitstream_for_afi_address(address) return data # Register this class in the registry type_registry.register_type_class(LCAFAFIListAddress)
map_server_rloc = read_afi_address_from_bitstream(data) private_etr_rloc = read_afi_address_from_bitstream(data) # The rest of the data is RTR RLOCs rtr_rlocs = [] while data.pos != data.len: rtr_rlocs.append(read_afi_address_from_bitstream(data)) # Build the object lcaf = cls(map_server_port=map_server_port, etr_port=etr_port, global_etr_rloc=global_etr_rloc, map_server_rloc=map_server_rloc, private_etr_rloc=private_etr_rloc, rtr_rlocs=rtr_rlocs) lcaf.sanitize() return lcaf def _to_data_bytes(self): data = BitArray('uint:16=%d, uint:16=%d' % (self.map_server_port, self.etr_port)) data += get_bitstream_for_afi_address(self.global_etr_rloc) data += get_bitstream_for_afi_address(self.map_server_rloc) data += get_bitstream_for_afi_address(self.private_etr_rloc) for rtr_rloc in self.rtr_rlocs: data += get_bitstream_for_afi_address(rtr_rloc) return data # Register this class in the registry type_registry.register_type_class(LCAFNATTraversalAddress)
latitude_degrees=latitude_degrees, latitude_minutes=latitude_minutes, latitude_seconds=latitude_seconds, east=east, longitude_degrees=longitude_degrees, longitude_minutes=longitude_minutes, longitude_seconds=longitude_seconds, altitude=altitude, address=address) lcaf.sanitize() return lcaf def _to_data_bytes(self): data = BitArray('bool=%d, uint:15=%d, uint:8=%d, ' 'uint:8=%d' % (self.north, self.latitude_degrees, self.latitude_minutes, self.latitude_seconds)) data += BitArray('bool=%d, uint:15=%d, uint:8=%d, ' 'uint:8=%d' % (self.east, self.longitude_degrees, self.longitude_minutes, self.longitude_seconds)) data += BitArray('int:32=%d' % self.altitude) data += get_bitstream_for_afi_address(self.address) return data # Register this class in the registry type_registry.register_type_class(LCAFGeoAddress)
return self.address.prefixlen @classmethod def _from_data_bytes(cls, data, prefix_len=None, rsvd1=None, flags=None, rsvd2=None): instance_id = data.read('uint:32') address = read_afi_address_from_bitstream(data) if prefix_len is not None: orig_address = address address = ip_network(address).supernet(new_prefix=prefix_len) if address[0] != orig_address: raise ValueError("invalid prefix length %s for %r" % (prefix_len, address)) lcaf = cls(instance_id=instance_id, address=address) lcaf.iid_mask_len = rsvd2.read('uint:8') lcaf.sanitize() return lcaf def _to_data_bytes(self): self.sanitize() data = BitArray('uint:32=%d' % self.instance_id) data += get_bitstream_for_afi_address(self.address) return data def _to_rsvd2(self): return BitArray('uint:8=%d' % self.iid_mask_len) # Register this class in the registry type_registry.register_type_class(LCAFInstanceAddress)