# 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)
Example #2
0
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)
Example #5
0
                   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)