Skip to content

virtual router: Add route-maps to BGP peers for Routed Mode #9964

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 51 additions & 1 deletion systemvm/debian/opt/cloud/bin/cs/CsBgpPeers.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,9 @@ def process(self):
self.frr_conf = CsFile(FRR_CONFIG)
self.frr_conf.repopulate()
self._pre_set()
self._access_list_set()
self._process_peers()
self._route_map_set()
self._post_set()
if self.frr_conf.commit():
restart_frr = True
Expand All @@ -75,13 +77,35 @@ def _process_dbag_item(self, item):
self.peers[as_number]['ip6_peers'].append(item)

def _pre_set(self):
self.frr_conf.add("frr version 6.0")
self.frr_conf.add("frr defaults traditional")
self.frr_conf.add("hostname {}".format(CsHelper.get_hostname()))
self.frr_conf.add("service integrated-vtysh-config")
self.frr_conf.add("ip nht resolve-via-default")
return

def _access_list_set(self):
self.frr_conf.add("ip prefix-list all-v4 seq 1 permit any")
self.frr_conf.add("ip prefix-list default-v4 seq 1 permit 0.0.0.0/0")
self.frr_conf.add("ipv6 prefix-list all-v6 seq 1 permit any")
self.frr_conf.add("ipv6 prefix-list default-v6 seq 1 permit ::/0")

for as_number in self.peers.keys():
if self.peers[as_number]['ip4_peers']:
seq = 1
ip4_cidrs = set({ip4_peer['guest_ip4_cidr'] for ip4_peer in self.peers[as_number]['ip4_peers']})
for ip4_cidr in ip4_cidrs:
self.frr_conf.add("ip prefix-list local-v4 seq {} permit {}".format(seq, ip4_cidr))
seq += 1

if self.peers[as_number]['ip6_peers']:
seq = 1
ip6_cidrs = set({ip6_peer['guest_ip6_cidr'] for ip6_peer in self.peers[as_number]['ip6_peers']})
for ip6_cidr in ip6_cidrs:
self.frr_conf.add("ipv6 prefix-list local-v6 seq {} permit {}".format(seq, ip6_cidr))
seq += 1

return

def _process_peers(self):
for as_number in self.peers.keys():
self.frr_conf.add("router bgp {}".format(as_number))
Expand All @@ -90,13 +114,17 @@ def _process_peers(self):
self.frr_conf.add(" bgp default ipv6-unicast")
for ip4_peer in self.peers[as_number]['ip4_peers']:
self.frr_conf.add(" neighbor {} remote-as {}".format(ip4_peer['ip4_address'], ip4_peer['peer_as_number']))
self.frr_conf.add(" neighbor {} route-map upstream-v4-in in")
self.frr_conf.add(" neighbor {} route-map upstream-v4-out out")
if 'peer_password' in ip4_peer:
self.frr_conf.add(" neighbor {} password {}".format(ip4_peer['ip4_address'], ip4_peer['peer_password']))
if 'details' in ip4_peer:
if 'EBGP_MultiHop' in ip4_peer['details']:
self.frr_conf.add(" neighbor {} ebgp-multihop {}".format(ip4_peer['ip4_address'], ip4_peer['details']['EBGP_MultiHop']))
for ip6_peer in self.peers[as_number]['ip6_peers']:
self.frr_conf.add(" neighbor {} remote-as {}".format(ip6_peer['ip6_address'], ip6_peer['peer_as_number']))
self.frr_conf.add(" neighbor {} route-map upstream-v6-in in")
self.frr_conf.add(" neighbor {} route-map upstream-v6-out out")
if 'peer_password' in ip6_peer:
self.frr_conf.add(" neighbor {} password {}".format(ip6_peer['ip6_address'], ip6_peer['peer_password']))
if 'details' in ip6_peer:
Expand All @@ -115,5 +143,27 @@ def _process_peers(self):
self.frr_conf.add(" network {}".format(ip6_cidr))
self.frr_conf.add(" exit-address-family")

def _route_map_set(self):
self.frr_conf.add("route-map upstream-v4-in permit 10")
self.frr_conf.add(" match ip address prefix-list default-v4")
self.frr_conf.add("route-map upstream-v4-in deny 1000")
self.frr_conf.add(" match ip address prefix-list all-v4")

self.frr_conf.add("route-map upstream-v4-out permit 10")
self.frr_conf.add(" match ip address prefix-list local-v4")
self.frr_conf.add("route-map upstream-v4-out deny 1000")
self.frr_conf.add(" match ip address prefix-list all-v4")

self.frr_conf.add("route-map upstream-v6-in permit 10")
self.frr_conf.add(" match ipv6 address prefix-list default-v6")
self.frr_conf.add("route-map upstream-v6-in deny 1000")
self.frr_conf.add(" match ipv6 address prefix-list all-v6")

self.frr_conf.add("route-map upstream-v6-out permit 10")
self.frr_conf.add(" match ipv6 address prefix-list local-v6")
self.frr_conf.add("route-map upstream-v6-out deny 1000")
self.frr_conf.add(" match ipv6 address prefix-list all-v6")
return

def _post_set(self):
self.frr_conf.add("line vty")
Loading