@@ -54,7 +54,9 @@ def process(self):
5454 self .frr_conf = CsFile (FRR_CONFIG )
5555 self .frr_conf .repopulate ()
5656 self ._pre_set ()
57+ self ._access_list_set ()
5758 self ._process_peers ()
59+ self ._route_map_set ()
5860 self ._post_set ()
5961 if self .frr_conf .commit ():
6062 restart_frr = True
@@ -75,13 +77,35 @@ def _process_dbag_item(self, item):
7577 self .peers [as_number ]['ip6_peers' ].append (item )
7678
7779 def _pre_set (self ):
78- self .frr_conf .add ("frr version 6.0" )
7980 self .frr_conf .add ("frr defaults traditional" )
8081 self .frr_conf .add ("hostname {}" .format (CsHelper .get_hostname ()))
8182 self .frr_conf .add ("service integrated-vtysh-config" )
8283 self .frr_conf .add ("ip nht resolve-via-default" )
8384 return
8485
86+ def _access_list_set (self ):
87+ self .frr_conf .add ("ip prefix-list all-v4 seq 1 permit any" )
88+ self .frr_conf .add ("ip prefix-list default-v4 seq 1 permit 0.0.0.0/0" )
89+ self .frr_conf .add ("ipv6 prefix-list all-v6 seq 1 permit any" )
90+ self .frr_conf .add ("ipv6 prefix-list default-v6 seq 1 permit ::/0" )
91+
92+ for as_number in self .peers .keys ():
93+ if self .peers [as_number ]['ip4_peers' ]:
94+ seq = 1
95+ ip4_cidrs = set ({ip4_peer ['guest_ip4_cidr' ] for ip4_peer in self .peers [as_number ]['ip4_peers' ]})
96+ for ip4_cidr in ip4_cidrs :
97+ self .frr_conf .add ("ip prefix-list local-v4 seq {} permit {}" .format (seq , ip4_cidr ))
98+ seq += 1
99+
100+ if self .peers [as_number ]['ip6_peers' ]:
101+ seq = 1
102+ ip6_cidrs = set ({ip6_peer ['guest_ip6_cidr' ] for ip6_peer in self .peers [as_number ]['ip6_peers' ]})
103+ for ip6_cidr in ip6_cidrs :
104+ self .frr_conf .add ("ipv6 prefix-list local-v6 seq {} permit {}" .format (seq , ip6_cidr ))
105+ seq += 1
106+
107+ return
108+
85109 def _process_peers (self ):
86110 for as_number in self .peers .keys ():
87111 self .frr_conf .add ("router bgp {}" .format (as_number ))
@@ -90,13 +114,17 @@ def _process_peers(self):
90114 self .frr_conf .add (" bgp default ipv6-unicast" )
91115 for ip4_peer in self .peers [as_number ]['ip4_peers' ]:
92116 self .frr_conf .add (" neighbor {} remote-as {}" .format (ip4_peer ['ip4_address' ], ip4_peer ['peer_as_number' ]))
117+ self .frr_conf .add (" neighbor {} route-map upstream-v4-in in" )
118+ self .frr_conf .add (" neighbor {} route-map upstream-v4-out out" )
93119 if 'peer_password' in ip4_peer :
94120 self .frr_conf .add (" neighbor {} password {}" .format (ip4_peer ['ip4_address' ], ip4_peer ['peer_password' ]))
95121 if 'details' in ip4_peer :
96122 if 'EBGP_MultiHop' in ip4_peer ['details' ]:
97123 self .frr_conf .add (" neighbor {} ebgp-multihop {}" .format (ip4_peer ['ip4_address' ], ip4_peer ['details' ]['EBGP_MultiHop' ]))
98124 for ip6_peer in self .peers [as_number ]['ip6_peers' ]:
99125 self .frr_conf .add (" neighbor {} remote-as {}" .format (ip6_peer ['ip6_address' ], ip6_peer ['peer_as_number' ]))
126+ self .frr_conf .add (" neighbor {} route-map upstream-v6-in in" )
127+ self .frr_conf .add (" neighbor {} route-map upstream-v6-out out" )
100128 if 'peer_password' in ip6_peer :
101129 self .frr_conf .add (" neighbor {} password {}" .format (ip6_peer ['ip6_address' ], ip6_peer ['peer_password' ]))
102130 if 'details' in ip6_peer :
@@ -115,5 +143,27 @@ def _process_peers(self):
115143 self .frr_conf .add (" network {}" .format (ip6_cidr ))
116144 self .frr_conf .add (" exit-address-family" )
117145
146+ def _route_map_set (self ):
147+ self .frr_conf .add ("route-map upstream-v4-in permit 10" )
148+ self .frr_conf .add (" match ip address prefix-list default-v4" )
149+ self .frr_conf .add ("route-map upstream-v4-in deny 1000" )
150+ self .frr_conf .add (" match ip address prefix-list all-v4" )
151+
152+ self .frr_conf .add ("route-map upstream-v4-out permit 10" )
153+ self .frr_conf .add (" match ip address prefix-list local-v4" )
154+ self .frr_conf .add ("route-map upstream-v4-out deny 1000" )
155+ self .frr_conf .add (" match ip address prefix-list all-v4" )
156+
157+ self .frr_conf .add ("route-map upstream-v6-in permit 10" )
158+ self .frr_conf .add (" match ipv6 address prefix-list default-v6" )
159+ self .frr_conf .add ("route-map upstream-v6-in deny 1000" )
160+ self .frr_conf .add (" match ipv6 address prefix-list all-v6" )
161+
162+ self .frr_conf .add ("route-map upstream-v6-out permit 10" )
163+ self .frr_conf .add (" match ipv6 address prefix-list local-v6" )
164+ self .frr_conf .add ("route-map upstream-v6-out deny 1000" )
165+ self .frr_conf .add (" match ipv6 address prefix-list all-v6" )
166+ return
167+
118168 def _post_set (self ):
119169 self .frr_conf .add ("line vty" )
0 commit comments