Exemplo n.º 1
0
    def get_available_peers(self):
        # Not linked to PeeringDB, cannot determine peers
        if not self.peeringdb_id:
            return None

        # Get the IX LAN we are belonging to
        api = PeeringDB()
        network_ixlan = api.get_ix_network(self.peeringdb_id)

        # Get all peering sessions currently existing
        existing_sessions = self.get_peering_sessions()
        ipv4_sessions = []
        ipv6_sessions = []
        for session in existing_sessions:
            ip = ipaddress.ip_address(session.ip_address)
            if ip.version == 6:
                ipv6_sessions.append(str(ip))
            elif ip.version == 4:
                ipv4_sessions.append(str(ip))
            else:
                self.logger.debug('peering session with strange ip: %s', ip)

        # Find all peers belonging to the same IX and order them by ASN
        # Exclude our own ASN and already existing sessions
        return PeerRecord.objects.all().filter(
            Q(network_ixlan__ix_id=network_ixlan.ixlan_id)
            & ~Q(network__asn=settings.MY_ASN)
            & (~Q(network_ixlan__ipaddr6__in=ipv6_sessions)
               | ~Q(network_ixlan__ipaddr4__in=ipv4_sessions))).order_by(
                   'network__asn')
Exemplo n.º 2
0
    def get_available_peers(self):
        peers = []

        # Not linked to PeeringDB, cannot determine peers
        if not self.peeringdb_id:
            return peers

        # Get the LAN that we are attached to and retrieve the peers
        api = PeeringDB()
        lan = api.get_ix_network(self.peeringdb_id)
        peeringdb_peers = api.get_peers_for_ix(lan.ix_id)
        known_peerings = []

        # Grab all addresses we are connected to
        for session in self.peeringsession_set.all():
            known_peerings.append(ipaddress.ip_address(session.ip_address))

        # Check if peers addresses are in the list of addresses we are already
        # connected to.
        for peeringdb_peer in peeringdb_peers:
            peeringdb_peer['has_ipv6'] = True if peeringdb_peer[
                'network_ixlan'].ipaddr6 else None
            peeringdb_peer['has_ipv4'] = True if peeringdb_peer[
                'network_ixlan'].ipaddr4 else None
            peeringdb_peer['peering6'] = peeringdb_peer[
                'has_ipv6'] and ipaddress.ip_address(
                    peeringdb_peer['network_ixlan'].ipaddr6) in known_peerings
            peeringdb_peer['peering4'] = peeringdb_peer[
                'has_ipv4'] and ipaddress.ip_address(
                    peeringdb_peer['network_ixlan'].ipaddr4) in known_peerings
            peeringdb_peer['internet_exchange'] = self

            peers.append(peeringdb_peer)

        return peers