def bgp(self, node): super(IosClassicCompiler, self).bgp(node) node.bgp.use_ipv4 = node.ip.use_ipv4 node.bgp.use_ipv6 = node.ip.use_ipv6 # Seperate by address family ipv4_peers = [] ipv6_peers = [] # Note cast to dict - #TODO revisit this requirement # TODO: revisit and tidy up the logic here: split iBGP and eBGP # TODO: sort the peer list by peer IP for peer in node.bgp.ibgp_neighbors: peer = ConfigStanza(peer) peer.remote_ip = peer.loopback if peer.use_ipv4: if node.is_ebgp_v4: peer.next_hop_self = True ipv4_peers.append(peer) if peer.use_ipv6: if node.is_ebgp_v6: peer.next_hop_self = True ipv6_peers.append(peer) for peer in node.bgp.ibgp_rr_parents: peer = ConfigStanza(peer) peer.remote_ip = peer.loopback if peer.use_ipv4: if node.is_ebgp_v4: peer.next_hop_self = True ipv4_peers.append(peer) if peer.use_ipv6: if node.is_ebgp_v6: peer.next_hop_self = True ipv6_peers.append(peer) for peer in node.bgp.ibgp_rr_clients: peer = ConfigStanza(peer) peer.rr_client = True peer.remote_ip = peer.loopback if peer.use_ipv4: if node.is_ebgp_v4: peer.next_hop_self = True ipv4_peers.append(peer) if peer.use_ipv6: if node.is_ebgp_v6: peer.next_hop_self = True ipv6_peers.append(peer) for peer in node.bgp.ebgp_neighbors: peer = ConfigStanza(peer) peer.is_ebgp = True peer.remote_ip = peer.dst_int_ip if peer.use_ipv4: peer.next_hop_self = True ipv4_peers.append(peer) if peer.use_ipv6: peer.next_hop_self = True ipv6_peers.append(peer) node.bgp.ipv4_peers = ipv4_peers node.bgp.ipv6_peers = ipv6_peers vpnv4_neighbors = [] if node.bgp.vpnv4: for neigh in node.bgp.ibgp_neighbors: if not neigh.use_ipv4: continue neigh_data = ConfigStanza(neigh) vpnv4_neighbors.append(neigh_data) for neigh in node.bgp.ibgp_rr_clients: if not neigh.use_ipv4: continue neigh_data = ConfigStanza(neigh) neigh_data.rr_client = True vpnv4_neighbors.append(neigh_data) for neigh in node.bgp.ibgp_rr_parents: if not neigh.use_ipv4: continue neigh_data = ConfigStanza(neigh) vpnv4_neighbors.append(neigh_data) vpnv4_neighbors = sorted(vpnv4_neighbors, key=lambda x: x['loopback']) node.bgp.vpnv4_neighbors = vpnv4_neighbors