def setUpClass(cls): gobgp_ctn_image_name = parser_option.gobgp_image base.TEST_PREFIX = parser_option.test_prefix g1 = GoBGPContainer(name='g1', asn=65000, router_id='192.168.0.1', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) q1 = QuaggaBGPContainer(name='q1', asn=65001, router_id='192.168.0.2') q2 = QuaggaBGPContainer(name='q2', asn=65002, router_id='192.168.0.3') q3 = QuaggaBGPContainer(name='q3', asn=65003, router_id='192.168.0.4') qs = [q1, q2, q3] ctns = [g1, q1, q2, q3] initial_wait_time = max(ctn.run() for ctn in ctns) time.sleep(initial_wait_time) for q in qs: g1.add_peer(q, passwd='passwd') q.add_peer(g1, passwd='passwd', passive=True) # advertise a route from q1, q2, q3 for idx, q in enumerate(qs): route = '10.0.{0}.0/24'.format(idx + 1) q.add_route(route) cls.gobgp = g1 cls.quaggas = {'q1': q1, 'q2': q2, 'q3': q3}
def setUpClass(cls): gobgp_ctn_image_name = parser_option.gobgp_image base.TEST_PREFIX = parser_option.test_prefix g1 = GoBGPContainer(name='g1', asn=65000, router_id='192.168.0.1', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) rs_clients = [ ExaBGPContainer(name='q{0}'.format(i + 1), asn=(65001 + i), router_id='192.168.0.{0}'.format(i + 2)) for i in range(4)] ctns = [g1] + rs_clients initial_wait_time = max(ctn.run() for ctn in ctns) time.sleep(initial_wait_time) for i, rs_client in enumerate(rs_clients): g1.add_peer(rs_client, is_rs_client=True) as2 = False if i > 1: as2 = True rs_client.add_peer(g1, as2=as2) # advertise a route from route-server-clients for idx, rs_client in enumerate(rs_clients): route = '10.0.{0}.0/24'.format(idx + 1) rs_client.add_route(route) if idx < 2: route = '10.0.10.0/24' rs_client.add_route(route) cls.gobgp = g1 cls.quaggas = {x.name: x for x in rs_clients}
def setUpClass(cls): gobgp_ctn_image_name = parser_option.gobgp_image base.TEST_PREFIX = parser_option.test_prefix g1 = GoBGPContainer(name='g1', asn=65001, router_id='192.168.0.1', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) q1 = QuaggaBGPContainer(name='q1', asn=65002, router_id='192.168.0.2') g2 = GoBGPContainer(name='g2', asn=65001, router_id='192.168.0.3', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) ctns = [g1, g2, q1] initial_wait_time = max(ctn.run() for ctn in ctns) time.sleep(initial_wait_time) g1.add_peer(q1) q1.add_peer(g1) q1.add_peer(g2) g2.add_peer(q1) g1.add_route('10.0.0.0/24') cls.g1 = g1 cls.g2 = g2 cls.q1 = q1 cls.ctns = {n.name: n for n in ctns}
def setUpClass(cls): gobgp_ctn_image_name = parser_option.gobgp_image base.TEST_PREFIX = parser_option.test_prefix g1 = GoBGPContainer(name='g1', asn=65000, router_id='192.168.0.1', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) g2 = GoBGPContainer(name='g2', asn=65000, router_id='192.168.0.2', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) ctns = {ctn.name: ctn for ctn in [g1, g2]} initial_wait_time = max(ctn.run() for ctn in ctns.values()) time.sleep(initial_wait_time) g1.local("gobgp vrf add vrf1 rd 100:100 rt both 100:100") g1.local("gobgp vrf add vrf2 rd 200:200 rt both 200:200") g2.local("gobgp vrf add vrf1 rd 100:100 rt both 100:100") g2.local("gobgp vrf add vrf3 rd 300:300 rt both 300:300") g1.local("gobgp vrf vrf1 rib add 10.0.0.0/24") g1.local("gobgp vrf vrf2 rib add 10.0.0.0/24") g2.local("gobgp vrf vrf1 rib add 20.0.0.0/24") g2.local("gobgp vrf vrf3 rib add 20.0.0.0/24") for a, b in combinations(ctns.values(), 2): a.add_peer(b, vpn=True, passwd='rtc', graceful_restart=True) b.add_peer(a, vpn=True, passwd='rtc', graceful_restart=True) cls.g1 = g1 cls.g2 = g2 cls.ctns = ctns
def test_05_check_remove_private_as_peer_all(self): g3 = GoBGPContainer(name='g3', asn=100, router_id='192.168.0.4', ctn_image_name=parser_option.gobgp_image, log_level=parser_option.gobgp_log_level) g4 = GoBGPContainer(name='g4', asn=200, router_id='192.168.0.5', ctn_image_name=parser_option.gobgp_image, log_level=parser_option.gobgp_log_level) time.sleep(max(ctn.run() for ctn in [g3, g4])) self.ctns['g3'] = g3 self.ctns['g4'] = g4 self.g2.add_peer(g3) g3.add_peer(self.g2) g3.add_peer(g4, remove_private_as='all') g4.add_peer(g3) self.g2.wait_for(expected_state=BGP_FSM_ESTABLISHED, peer=g3) g3.wait_for(expected_state=BGP_FSM_ESTABLISHED, peer=g4) def f(): rib = g4.get_global_rib() self.assertEqual(len(rib), 1) self.assertEqual(len(rib[0]['paths']), 1) self.assertEqual(rib[0]['paths'][0]['aspath'], [100]) assert_several_times(f)
def setUpClass(cls): gobgp_ctn_image_name = parser_option.gobgp_image base.TEST_PREFIX = parser_option.test_prefix g1 = GoBGPContainer(name='g1', asn=65000, router_id='192.168.0.1', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) g2 = GoBGPContainer(name='g2', asn=65001, router_id='192.168.0.2', ctn_image_name=gobgp_ctn_image_name) e1 = ExaBGPContainer(name='e1', asn=65002, router_id='192.168.0.3') ctns = [g1, g2, e1] # advertise a route from route-server-clients cls.clients = {} for idx, cli in enumerate((g2, e1)): route = '10.0.{0}.0/24'.format(idx) cli.add_route(route) cls.clients[cli.name] = cli initial_wait_time = max(ctn.run() for ctn in ctns) time.sleep(initial_wait_time) for cli in cls.clients.itervalues(): g1.add_peer(cli, is_rs_client=True, passwd='passwd', passive=True, prefix_limit=10) cli.add_peer(g1, passwd='passwd') cls.gobgp = g1
def setUpClass(cls): gobgp_ctn_image_name = parser_option.gobgp_image base.TEST_PREFIX = parser_option.test_prefix g1 = GoBGPContainer(name='g1', asn=65000, router_id='192.168.0.1', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) rs_clients = [ QuaggaBGPContainer(name='q{0}'.format(i + 1), asn=(65001 + i), router_id='192.168.0.{0}'.format(i + 2)) for i in range(3)] ctns = [g1] + rs_clients q1 = rs_clients[0] q2 = rs_clients[1] q3 = rs_clients[2] initial_wait_time = max(ctn.run() for ctn in ctns) time.sleep(initial_wait_time) for rs_client in rs_clients: g1.add_peer(rs_client, is_rs_client=True, passwd='passwd', passive=True, prefix_limit=10) rs_client.add_peer(g1, passwd='passwd') # advertise a route from route-server-clients routes = [] for idx, rs_client in enumerate(rs_clients): route = '10.0.{0}.0/24'.format(idx + 1) rs_client.add_route(route) routes.append(route) cls.gobgp = g1 cls.quaggas = {'q1': q1, 'q2': q2, 'q3': q3}
def setUpClass(cls): gobgp_ctn_image_name = parser_option.gobgp_image base.TEST_PREFIX = parser_option.test_prefix g1 = GoBGPContainer(name='g1', asn=65000, router_id='192.168.0.1', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level, config_format=parser_option.config_format) q1 = ExaBGPContainer(name='q1', asn=65001, router_id='192.168.0.2') q2 = ExaBGPContainer(name='q2', asn=65002, router_id='192.168.0.3') q3 = ExaBGPContainer(name='q3', asn=65003, router_id='192.168.0.4') qs = [q1, q2, q3] ctns = [g1, q1, q2, q3] # advertise a route from q1, q2, q3 for idx, q in enumerate(qs): route = '10.0.{0}.0/24'.format(idx + 1) q.add_route(route) initial_wait_time = max(ctn.run() for ctn in ctns) time.sleep(initial_wait_time) g1.local('gobgp global policy export add default reject') for q in qs: g1.add_peer(q) q.add_peer(g1) cls.gobgp = g1 cls.quaggas = {'q1': q1, 'q2': q2, 'q3': q3}
def setUpClass(cls): gobgp_ctn_image_name = parser_option.gobgp_image base.TEST_PREFIX = parser_option.test_prefix g1 = GoBGPContainer(name='g1', asn=65000, router_id='192.168.0.1', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) g2 = GoBGPContainer(name='g2', asn=65001, router_id='192.168.0.2', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) ctns = [g1, g2] initial_wait_time = max(ctn.run() for ctn in ctns) time.sleep(initial_wait_time) g1.add_route('10.10.10.0/24') g1.add_route('10.10.20.0/24') g1.add_peer(g2, graceful_restart=True) g2.add_peer(g1, graceful_restart=True) cls.bgpds = {'g1': g1, 'g2': g2}
def setUpClass(cls): gobgp_ctn_image_name = parser_option.gobgp_image base.TEST_PREFIX = parser_option.test_prefix g1 = GoBGPContainer(name='g1', asn=65000, router_id='192.168.0.1', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) q1 = QuaggaBGPContainer(name='q1', asn=65000, router_id='192.168.0.2') q2 = QuaggaBGPContainer(name='q2', asn=65000, router_id='192.168.0.3') q3 = QuaggaBGPContainer(name='q3', asn=65000, router_id='192.168.0.4') q4 = QuaggaBGPContainer(name='q4', asn=65000, router_id='192.168.0.5') qs = [q1, q2, q3, q4] ctns = [g1, q1, q2, q3, q4] initial_wait_time = max(ctn.run() for ctn in ctns) time.sleep(initial_wait_time) # g1 as a route reflector g1.add_peer(q1, is_rr_client=True) q1.add_peer(g1) g1.add_peer(q2, is_rr_client=True) q2.add_peer(g1) g1.add_peer(q3) q3.add_peer(g1) g1.add_peer(q4) q4.add_peer(g1) # advertise a route from q1, q2 for idx, c in enumerate(qs): route = '10.0.{0}.0/24'.format(idx + 1) c.add_route(route) cls.gobgp = g1 cls.quaggas = {'q1': q1, 'q2': q2, 'q3': q3, 'q4': q4}
def setUpClass(cls): gobgp_ctn_image_name = parser_option.gobgp_image base.TEST_PREFIX = parser_option.test_prefix g1 = GoBGPContainer(name='g1', asn=65000, router_id='192.168.0.1', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) g2 = GoBGPContainer(name='g2', asn=65001, router_id='192.168.0.2', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) g3 = GoBGPContainer(name='g3', asn=65002, router_id='192.168.0.3', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) g4 = GoBGPContainer(name='g4', asn=65003, router_id='192.168.0.4', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) ctns = [g1, g2, g3, g4] # advertise a route from route-server-clients cls.clients = {} for cli in [g2, g3, g4]: cls.clients[cli.name] = cli initial_wait_time = max(ctn.run() for ctn in ctns) time.sleep(initial_wait_time) for cli in cls.clients.itervalues(): g1.add_peer(cli, is_rs_client=True, passwd='passwd', passive=True, prefix_limit=10) cli.add_peer(g1, passwd='passwd') cls.gobgp = g1
def setUpClass(cls): gobgp_ctn_image_name = parser_option.gobgp_image base.TEST_PREFIX = parser_option.test_prefix # preparing the container for ipv4 g1_v4 = GoBGPContainer(name='g1_v4', asn=65000, router_id='192.168.0.1', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level, zebra=True) q1_v4 = QuaggaBGPContainer(name='q1_v4', asn=65001, router_id='192.168.0.2', zebra=True) o1_v4 = QuaggaBGPContainer(name='o1_v4', asn=65002, router_id='192.168.0.3') o2_v4 = QuaggaBGPContainer(name='o2_v4', asn=65002, router_id='192.168.0.4') # preparing the container for ipv6 g1_v6 = GoBGPContainer(name='g1_v6', asn=65000, router_id='192.168.0.1', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level, zebra=True) q1_v6 = QuaggaBGPContainer(name='q1_v6', asn=65001, router_id='192.168.0.2', zebra=True) o1_v6 = QuaggaBGPContainer(name='o1_v6', asn=65002, router_id='192.168.0.3') o2_v6 = QuaggaBGPContainer(name='o2_v6', asn=65002, router_id='192.168.0.4') # preparing the bridge for ipv4 br01_v4 = Bridge(name='br01_v4', subnet='192.168.10.0/24') br02_v4 = Bridge(name='br02_v4', subnet='192.168.20.0/24') br03_v4 = Bridge(name='br03_v4', subnet='192.168.30.0/24') # preparing the bridge for ipv6 br01_v6 = Bridge(name='br01_v6', subnet='2001:10::/32') br02_v6 = Bridge(name='br02_v6', subnet='2001:20::/32') br03_v6 = Bridge(name='br03_v6', subnet='2001:30::/32') cls.ctns = { 'ipv4': [g1_v4, q1_v4, o1_v4, o2_v4], 'ipv6': [g1_v6, q1_v6, o1_v6, o2_v6], } cls.gobgps = { 'ipv4': g1_v4, 'ipv6': g1_v6, } cls.quaggas = { 'ipv4': q1_v4, 'ipv6': q1_v6, } cls.others = { 'ipv4': [o1_v4, o2_v4], 'ipv6': [o1_v6, o2_v6], } cls.bridges = { 'br01_v4': br01_v4, 'br02_v4': br02_v4, 'br03_v4': br03_v4, 'br01_v6': br01_v6, 'br02_v6': br02_v6, 'br03_v6': br03_v6, }
def test_15_check_active_connection(self): g1 = self.gobgp g2 = GoBGPContainer(name='g2', asn=65000, router_id='192.168.0.7', ctn_image_name=self.gobgp.image, log_level=parser_option.gobgp_log_level) time.sleep(g2.run()) self.quaggas['g2'] = g2 g2.add_peer(g1, passive=True) g1.add_peer(g2) g1.wait_for(expected_state=BGP_FSM_ESTABLISHED, peer=g2)
def setUpClass(cls): gobgp_ctn_image_name = parser_option.gobgp_image base.TEST_PREFIX = parser_option.test_prefix g1 = GoBGPContainer(name='g1', asn=65000, router_id='192.168.0.1', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) g2 = GoBGPContainer(name='g2', asn=65000, router_id='192.168.0.2', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) ctns = [g1, g2] initial_wait_time = max(ctn.run() for ctn in ctns) time.sleep(initial_wait_time) g1.local("gobgp vrf add vrf1 rd 10:10 rt both 10:10") g2.local("gobgp vrf add vrf1 rd 10:10 rt both 10:10") for a, b in combinations(ctns, 2): a.add_peer(b, vpn=True, passwd='evpn') b.add_peer(a, vpn=True, passwd='evpn') cls.g1 = g1 cls.g2 = g2
def setUpClass(cls): gobgp_ctn_image_name = parser_option.gobgp_image base.TEST_PREFIX = parser_option.test_prefix g1 = GoBGPContainer(name='g1', asn=65000, router_id='192.168.0.1', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) g2 = GoBGPContainer(name='g2', asn=65001, router_id='192.168.0.2', ctn_image_name=gobgp_ctn_image_name) e1 = ExaBGPContainer(name='e1', asn=65002, router_id='192.168.0.3') ctns = [g1, g2, e1] cls.clients = {cli.name: cli for cli in (g2, e1)} initial_wait_time = max(ctn.run() for ctn in ctns) time.sleep(initial_wait_time) for cli in list(cls.clients.values()): # Omit "passwd" to avoid a issue on ExaBGP version 4.0.5: # https://github.com/Exa-Networks/exabgp/issues/766 g1.add_peer(cli, is_rs_client=True, passive=True, prefix_limit=10) cli.add_peer(g1) # advertise a route from route-server-clients g2.add_route('10.0.0.0/24') e1.add_route('10.0.1.0/24') cls.gobgp = g1
def setUpClass(cls): gobgp_ctn_image_name = parser_option.gobgp_image base.TEST_PREFIX = parser_option.test_prefix g1 = GoBGPContainer(name='g1', asn=65000, router_id='192.168.0.1', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level, zebra=True, zapi_version=3) g2 = GoBGPContainer(name='g2', asn=65001, router_id='192.168.0.2', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level, zebra=True, zapi_version=3) initial_wait_time = max(ctn.run() for ctn in [g1, g2]) time.sleep(initial_wait_time) g1.add_peer(g2, vpn=True) g2.add_peer(g1, vpn=True) cls.g1 = g1 cls.g2 = g2
def test_07_check_replace_peer_as(self): g5 = GoBGPContainer(name='g5', asn=100, router_id='192.168.0.6', ctn_image_name=parser_option.gobgp_image, log_level=parser_option.gobgp_log_level) time.sleep(g5.run()) g4 = self.ctns['g4'] g4.add_peer(g5, replace_peer_as=True) g5.add_peer(g4) g4.wait_for(expected_state=BGP_FSM_ESTABLISHED, peer=g5) time.sleep(1) self.assertTrue(g5.get_global_rib()[0]['paths'][0]['aspath'] == [200, 200, 200, 200, 200])
def setUpClass(cls): gobgp_ctn_image_name = parser_option.gobgp_image base.TEST_PREFIX = parser_option.test_prefix g1 = GoBGPContainer(name='g1', asn=65000, router_id='192.168.0.1', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) q1 = QuaggaBGPContainer(name='q1', asn=65000, router_id='192.168.0.2') q2 = QuaggaBGPContainer(name='q2', asn=65000, router_id='192.168.0.3') qs = [q1, q2] ctns = [g1, q1, q2] initial_wait_time = max(ctn.run() for ctn in ctns) time.sleep(initial_wait_time) # ibgp peer. loop topology for a, b in combinations(ctns, 2): a.add_peer(b) b.add_peer(a) # advertise a route from q1, q2 for idx, c in enumerate(qs): route = '10.0.{0}.0/24'.format(idx + 1) c.add_route(route) cls.gobgp = g1 cls.quaggas = {'q1': q1, 'q2': q2}
def test_07_check_replace_peer_as(self): g5 = GoBGPContainer(name='g5', asn=100, router_id='192.168.0.6', ctn_image_name=parser_option.gobgp_image, log_level=parser_option.gobgp_log_level) time.sleep(g5.run()) g4 = self.ctns['g4'] g4.add_peer(g5, replace_peer_as=True) g5.add_peer(g4) g4.wait_for(expected_state=BGP_FSM_ESTABLISHED, peer=g5) def f(): rib = g5.get_global_rib() self.assertEqual(rib[0]['paths'][0]['aspath'], [200, 200, 200, 200, 200]) assert_several_times(f)
def setUpClass(cls): gobgp_ctn_image_name = parser_option.gobgp_image base.TEST_PREFIX = parser_option.test_prefix g1 = GoBGPContainer(name='g1', asn=65000, router_id='192.168.0.1', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) e1 = ExaBGPContainer(name='e1', asn=65001, router_id='192.168.0.2') ctns = [g1, e1] initial_wait_time = max(ctn.run() for ctn in ctns) time.sleep(initial_wait_time) g1.add_peer(e1, treat_as_withdraw=True) e1.add_peer(g1) cls.g1 = g1 cls.e1 = e1
def setUpClass(cls): gobgp_ctn_image_name = parser_option.gobgp_image base.TEST_PREFIX = parser_option.test_prefix g1 = GoBGPContainer(name='g1', asn=65000, router_id='192.168.0.1', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) rs_clients = [ QuaggaBGPContainer(name='q{0}'.format(i + 1), asn=(65001 + i), router_id='192.168.0.{0}'.format(i + 2)) for i in range(3) ] ctns = [g1] + rs_clients q1 = rs_clients[0] q2 = rs_clients[1] q3 = rs_clients[2] # advertise a route from route-server-clients routes = [] for idx, rs_client in enumerate(rs_clients): route = '10.0.{0}.0/24'.format(idx + 1) rs_client.add_route(route) routes.append(route) initial_wait_time = max(ctn.run() for ctn in ctns) time.sleep(initial_wait_time) for rs_client in rs_clients: g1.add_peer(rs_client, is_rs_client=True, passwd='passwd', passive=True, prefix_limit=10) rs_client.add_peer(g1, passwd='passwd') cls.gobgp = g1 cls.quaggas = {'q1': q1, 'q2': q2, 'q3': q3}
def boot(env): gobgp_ctn_image_name = env.parser_option.gobgp_image log_level = env.parser_option.gobgp_log_level g1 = GoBGPContainer(name='g1', asn=65000, router_id='192.168.0.1', ctn_image_name=gobgp_ctn_image_name, log_level=log_level) e1 = ExaBGPContainer(name='e1', asn=65001, router_id='192.168.0.2') e2 = ExaBGPContainer(name='e2', asn=65001, router_id='192.168.0.2') ctns = [g1, e1, e2] initial_wait_time = max(ctn.run() for ctn in ctns) time.sleep(initial_wait_time) for q in [e1, e2]: g1.add_peer(q, is_rs_client=True) q.add_peer(g1) env.g1 = g1 env.e1 = e1 env.e2 = e2
def setUpClass(cls): gobgp_ctn_image_name = parser_option.gobgp_image base.TEST_PREFIX = parser_option.test_prefix g1 = GoBGPContainer(name='g1', asn=65002, router_id='192.168.0.2', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) q1 = QuaggaBGPContainer(name='q1', asn=65003, router_id='192.168.0.3') q2 = QuaggaBGPContainer(name='q2', asn=65004, router_id='192.168.0.4') q3 = QuaggaBGPContainer(name='q3', asn=65005, router_id='192.168.0.5') q4 = QuaggaBGPContainer(name='q4', asn=65006, router_id='192.168.0.6') ctns = [g1, q1, q2, q3, q4] v4 = [q1, q2] v6 = [q3, q4] for idx, q in enumerate(v4): route = '10.0.{0}.0/24'.format(idx + 1) q.add_route(route) for idx, q in enumerate(v6): route = '2001:{0}::/96'.format(idx + 1) q.add_route(route, rf='ipv6') initial_wait_time = max(ctn.run() for ctn in ctns) time.sleep(initial_wait_time) for ctn in v4: g1.add_peer(ctn, is_rs_client=True) ctn.add_peer(g1) for ctn in v6: g1.add_peer(ctn, is_rs_client=True, v6=True) ctn.add_peer(g1, v6=True) cls.gobgp = g1 cls.quaggas = {'q1': q1, 'q2': q2, 'q3': q3, 'q4': q4} cls.ipv4s = {'q1': q1, 'q2': q2} cls.ipv6s = {'q3': q3, 'q4': q4}
def setUpClass(cls): # +-----Confederation(AS30)-----+ # AS21 AS20 | +-AS65002-+ +-AS65001-+ | AS10 # +----+ +----+ | | +-----+ | | +-----+ | | +----+ # | q3 |---| q2 |--+-+-| g1 |-+-----+-| q11 |-+-+--| q1 | # +----+ +----+ | | +-----+ | | +-----+ | | +----+ # | | | | | | | | # | | | | | | | | # | | | | | | | | # | | +-----+ | | +-----+ | | # | | | q22 | | | | q12 | | | # | | +-----+ | | +-----+ | | # | +---------+ +---------+ | # +-----------------------------+ gobgp_ctn_image_name = parser_option.gobgp_image base.TEST_PREFIX = parser_option.test_prefix bgp_conf_1 = {'global': {'confederation': {'config': { 'enabled': True, 'identifier': 30, 'member-as-list': [65002]}}}} bgp_conf_2 = {'global': {'confederation': {'config': { 'enabled': True, 'identifier': 30, 'member-as-list': [65001]}}}} g1 = GoBGPContainer(name='g1', asn=65002, router_id='192.168.2.1', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level, bgp_config=bgp_conf_2) q1 = QuaggaBGPContainer(name='q1', asn=10, router_id='1.1.1.1') q2 = QuaggaBGPContainer(name='q2', asn=20, router_id='2.2.2.2') q3 = QuaggaBGPContainer(name='q3', asn=21, router_id='3.3.3.3') q11 = QuaggaBGPContainer(name='q11', asn=65001, router_id='192.168.1.1', bgpd_config=bgp_conf_1) q12 = QuaggaBGPContainer(name='q12', asn=65001, router_id='192.168.1.2', bgpd_config=bgp_conf_1) q22 = QuaggaBGPContainer(name='q22', asn=65002, router_id='192.168.2.2', bgpd_config=bgp_conf_2) ctns = [g1, q1, q2, q3, q11, q12, q22] cls.initial_wait_time = max(ctn.run() for ctn in ctns) time.sleep(cls.initial_wait_time) q1.add_peer(q11, remote_as=30) q11.add_peer(q1) q11.add_peer(q12) q12.add_peer(q11) g1.add_peer(q11) q11.add_peer(g1) g1.add_peer(q22) q22.add_peer(g1) g1.add_peer(q2) q2.add_peer(g1, remote_as=30) q3.add_peer(q2) q2.add_peer(q3) cls.gobgp = g1 cls.quaggas = {'q1': q1, 'q2': q2, 'q3': q3, 'q11': q11, 'q12': q12, 'q22': q22}
def setUpClass(cls): gobgp_ctn_image_name = parser_option.gobgp_image base.TEST_PREFIX = parser_option.test_prefix g1 = GoBGPContainer(name='g1', asn=65000, router_id='192.168.0.1', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level, config_format=parser_option.config_format) q1 = ExaBGPContainer(name='q1', asn=65001, router_id='192.168.0.2') q2 = ExaBGPContainer(name='q2', asn=65002, router_id='192.168.0.3') q3 = ExaBGPContainer(name='q3', asn=65003, router_id='192.168.0.4') qs = [q1, q2, q3] ctns = [g1, q1, q2, q3] initial_wait_time = max(ctn.run() for ctn in ctns) time.sleep(initial_wait_time) g1.local('gobgp global policy export add default reject') for q in qs: g1.add_peer(q) q.add_peer(g1) # advertise a route from q1, q2, q3 for idx, q in enumerate(qs): route = '10.0.{0}.0/24'.format(idx + 1) q.add_route(route) cls.gobgp = g1 cls.quaggas = {'q1': q1, 'q2': q2, 'q3': q3}
def setUpClass(cls): gobgp_ctn_image_name = parser_option.gobgp_image base.TEST_PREFIX = parser_option.test_prefix g1 = GoBGPContainer(name='g1', asn=65000, router_id='192.168.0.1', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) g2 = GoBGPContainer(name='g2', asn=65001, router_id='192.168.0.2', ctn_image_name=gobgp_ctn_image_name) e1 = ExaBGPContainer(name='e1', asn=65002, router_id='192.168.0.3') ctns = [g1, g2, e1] cls.clients = {cli.name: cli for cli in (g2, e1)} initial_wait_time = max(ctn.run() for ctn in ctns) time.sleep(initial_wait_time) for cli in cls.clients.values(): # Omit "passwd" to avoid a issue on ExaBGP version 4.0.5: # https://github.com/Exa-Networks/exabgp/issues/766 g1.add_peer(cli, is_rs_client=True, passive=True, prefix_limit=10) cli.add_peer(g1) # advertise a route from route-server-clients g2.add_route('10.0.0.0/24') e1.add_route('10.0.1.0/24') cls.gobgp = g1
def setUpClass(cls): gobgp_ctn_image_name = parser_option.gobgp_image base.TEST_PREFIX = parser_option.test_prefix g1 = GoBGPContainer(name='g1', asn=65000, router_id='192.168.0.1', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) g2 = GoBGPContainer(name='g2', asn=65000, router_id='192.168.0.2', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) e1 = ExaBGPContainer(name='e1', asn=65000, router_id='192.168.0.3') ctns = [g1, g2, e1] e1.add_route(route='192.168.100.0/24', identifier=10, aspath=[100, 200, 300]) e1.add_route(route='192.168.100.0/24', identifier=20, aspath=[100, 200]) e1.add_route(route='192.168.100.0/24', identifier=30, aspath=[100]) initial_wait_time = max(ctn.run() for ctn in ctns) time.sleep(initial_wait_time) g1.add_peer(e1, addpath=True) e1.add_peer(g1, addpath=True) g1.add_peer(g2, addpath=False, is_rr_client=True) g2.add_peer(g1, addpath=False) cls.g1 = g1 cls.g2 = g2 cls.e1 = e1
def test_04_add_non_graceful_restart_enabled_peer(self): g1 = self.bgpds['g1'] # g2 = self.bgpds['g2'] gobgp_ctn_image_name = parser_option.gobgp_image g3 = GoBGPContainer(name='g3', asn=65002, router_id='192.168.0.3', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) self.bgpds['g3'] = g3 time.sleep(g3.run()) g3.add_route('10.10.30.0/24') g1.add_peer(g3) g3.add_peer(g1) g1.wait_for(expected_state=BGP_FSM_ESTABLISHED, peer=g3) time.sleep(1) self.assertTrue(len(g3.get_global_rib('10.10.20.0/24')) == 1)
def setUpClass(cls): gobgp_ctn_image_name = parser_option.gobgp_image base.TEST_PREFIX = parser_option.test_prefix g1 = GoBGPContainer(name='g1', asn=65000, router_id='192.168.0.1', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) g2 = GoBGPContainer(name='g2', asn=65001, router_id='192.168.0.2', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) ctns = [g1, g2] initial_wait_time = max(ctn.run() for ctn in ctns) time.sleep(initial_wait_time + 2) done = False def f(ifname, ctn): out = ctn.local('ip -6 n', capture=True) l = [line for line in out.split('\n') if ifname in line] if len(l) == 0: return False elif len(l) > 1: raise Exception('not p2p link') return 'REACHABLE' in l[0] for i in range(20): g1.local('ping6 -c 1 ff02::1%eth0') g2.local('ping6 -c 1 ff02::1%eth0') if f('eth0', g1) and f('eth0', g2): done = True break time.sleep(1) if not done: raise Exception('timeout') for a, b in combinations(ctns, 2): a.add_peer(b, interface='eth0') b.add_peer(a, interface='eth0') cls.g1 = g1 cls.g2 = g2
def setUpClass(cls): gobgp_ctn_image_name = parser_option.gobgp_image base.TEST_PREFIX = parser_option.test_prefix g1 = GoBGPContainer(name='g1', asn=65000, router_id='192.168.0.1', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) e1 = ExaBGPContainer(name='e1', asn=65000, router_id='192.168.0.2') ctns = [g1, e1] # advertise a route from q1, q2 matchs = ['destination 10.0.0.0/24', 'source 20.0.0.0/24'] thens = ['discard'] e1.add_route(route='flow1', rf='ipv4-flowspec', matchs=matchs, thens=thens) matchs2 = ['tcp-flags S', 'protocol ==tcp ==udp', "packet-length '>1000&<2000'", "source-port '!=2&!=22&!=222'"] thens2 = ['rate-limit 9600', 'redirect 0.10:100', 'mark 20', 'action sample'] g1.add_route(route='flow1', rf='ipv4-flowspec', matchs=matchs2, thens=thens2) matchs3 = ['destination 2001::/24/10', 'source 2002::/24/15'] thens3 = ['discard'] e1.add_route(route='flow2', rf='ipv6-flowspec', matchs=matchs3, thens=thens3) matchs4 = ['destination 2001::/24 10', "label '==100'"] thens4 = ['discard'] g1.add_route(route='flow2', rf='ipv6-flowspec', matchs=matchs4, thens=thens4) initial_wait_time = max(ctn.run() for ctn in ctns) time.sleep(initial_wait_time) # ibgp peer. loop topology for a, b in combinations(ctns, 2): a.add_peer(b, flowspec=True) b.add_peer(a, flowspec=True) cls.gobgp = g1 cls.exabgp = e1
def setUpClass(cls): gobgp_ctn_image_name = parser_option.gobgp_image base.TEST_PREFIX = parser_option.test_prefix g1 = GoBGPContainer(name='g1', asn=65000, router_id='192.168.0.1', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) e1 = ExaBGPContainer(name='e1', asn=65000, router_id='192.168.0.2') ctns = [g1, e1] # advertise a route from q1, q2 matchs = ['destination 10.0.0.0/24', 'source 20.0.0.0/24'] thens = ['discard'] e1.add_route(route='flow1', rf='ipv4-flowspec', matchs=matchs, thens=thens) matchs2 = [ 'tcp-flags S', 'protocol ==tcp ==udp', "packet-length '>1000&<2000'" ] thens2 = [ 'rate-limit 9600', 'redirect 0.10:100', 'mark 20', 'action sample' ] g1.add_route(route='flow1', rf='ipv4-flowspec', matchs=matchs2, thens=thens2) matchs3 = ['destination 2001::/24/10', 'source 2002::/24/15'] thens3 = ['discard'] e1.add_route(route='flow2', rf='ipv6-flowspec', matchs=matchs3, thens=thens3) matchs4 = ['destination 2001::/24 10', "label '==100'"] thens4 = ['discard'] g1.add_route(route='flow2', rf='ipv6-flowspec', matchs=matchs4, thens=thens4) initial_wait_time = max(ctn.run() for ctn in ctns) time.sleep(initial_wait_time) # ibgp peer. loop topology for a, b in combinations(ctns, 2): a.add_peer(b, flowspec=True) b.add_peer(a, flowspec=True) cls.gobgp = g1 cls.exabgp = e1
def setUpClass(cls): gobgp_ctn_image_name = parser_option.gobgp_image base.TEST_PREFIX = parser_option.test_prefix g1 = GoBGPContainer(name='g1', asn=65000, router_id='192.168.0.1', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) q1 = QuaggaBGPContainer(name='q1', asn=65000, router_id='192.168.0.2') q2 = QuaggaBGPContainer(name='q2', asn=65000, router_id='192.168.0.3') q3 = QuaggaBGPContainer(name='q3', asn=65000, router_id='192.168.0.4') q4 = QuaggaBGPContainer(name='q4', asn=65000, router_id='192.168.0.5') qs = [q1, q2, q3, q4] ctns = [g1, q1, q2, q3, q4] # advertise a route from q1, q2 for idx, c in enumerate(qs): route = '10.0.{0}.0/24'.format(idx + 1) c.add_route(route) initial_wait_time = max(ctn.run() for ctn in ctns) time.sleep(initial_wait_time) # g1 as a route reflector g1.add_peer(q1, is_rr_client=True) q1.add_peer(g1) g1.add_peer(q2, is_rr_client=True) q2.add_peer(g1) g1.add_peer(q3) q3.add_peer(g1) g1.add_peer(q4) q4.add_peer(g1) cls.gobgp = g1 cls.quaggas = {'q1': q1, 'q2': q2, 'q3': q3, 'q4': q4}
def test_07_mpath_test_setup(self): g1 = GoBGPContainer(name='g1', asn=65000, router_id='192.168.0.1', ctn_image_name=parser_option.gobgp_image, log_level=parser_option.gobgp_log_level, config_format=parser_option.config_format, zebra=True) g2 = GoBGPContainer(name='g2', asn=65001, router_id='192.168.0.2', ctn_image_name=parser_option.gobgp_image) g3 = GoBGPContainer(name='g3', asn=65001, router_id='192.168.0.3', ctn_image_name=parser_option.gobgp_image) g4 = GoBGPContainer(name='g4', asn=65000, router_id='192.168.0.4', ctn_image_name=parser_option.gobgp_image) g5 = GoBGPContainer(name='g5', asn=65000, router_id='192.168.0.5', ctn_image_name=parser_option.gobgp_image) ctns = [g1, g2, g3, g4, g5] for ctn in ctns: self.ctns[ctn.name] = ctn initial_wait_time = max(ctn.run() for ctn in ctns) time.sleep(initial_wait_time) # advertise same prefix g2.add_route('10.0.10.0/24') g3.add_route('10.0.10.0/24') g4.add_route('10.0.10.0/24') g5.add_route('10.0.10.0/24') for g in [g2, g3, g4, g5]: g1.add_peer(g) g.add_peer(g1)
def test_23_check_withdrawal3(self): gobgp_ctn_image_name = parser_option.gobgp_image g1 = self.gobgp g3 = GoBGPContainer(name='g3', asn=65006, router_id='192.168.0.8', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) g4 = GoBGPContainer(name='g4', asn=65007, router_id='192.168.0.9', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) initial_wait_time = max(ctn.run() for ctn in [g3, g4]) time.sleep(initial_wait_time) self.quaggas = {'g3': g3, 'g4': g4} g3.local('gobgp global rib add 50.0.0.0/24') g1.add_peer(g3, passive=True) g3.add_peer(g1) g1.add_peer(g4, passive=True) g4.add_peer(g1) self.test_01_neighbor_established() self.test_02_check_gobgp_global_rib() g4.local('gobgp global rib add 50.0.0.0/24 med 10') paths = g1.get_adj_rib_out(g3, '50.0.0.0/24') self.assertTrue(len(paths) == 0) paths = g1.get_adj_rib_out(g4, '50.0.0.0/24') self.assertTrue(len(paths) == 1) self.assertTrue(paths[0]['source-id'] == '192.168.0.8') g3.local('gobgp global rib del 50.0.0.0/24') paths = g1.get_adj_rib_out(g3, '50.0.0.0/24') self.assertTrue(len(paths) == 1) self.assertTrue(paths[0]['source-id'] == '192.168.0.9') paths = g1.get_adj_rib_out(g4, '50.0.0.0/24') self.assertTrue(len(paths) == 0)
def test_05_rr_setup(self): gobgp_ctn_image_name = parser_option.gobgp_image g3 = GoBGPContainer(name='g3', asn=65000, router_id='192.168.0.3', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) g4 = GoBGPContainer(name='g4', asn=65000, router_id='192.168.0.4', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) g5 = GoBGPContainer(name='g5', asn=65000, router_id='192.168.0.5', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) time.sleep(max(ctn.run() for ctn in [g3, g4, g5])) g3.add_peer(g4, vpn=True, is_rr_client=True) g4.add_peer(g3, vpn=True) g3.add_peer(g5, vpn=True, is_rr_client=True) g5.add_peer(g3, vpn=True) for v in [g3, g4, g5]: self.ctns[v.name] = v
def test_30_ebgp_setup(self): # +----+ +----+ # | g6 |----(eBGP)----| g7 | # +----+ +----+ gobgp_ctn_image_name = parser_option.gobgp_image g6 = GoBGPContainer(name='g6', asn=65001, router_id='192.168.0.6', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) g7 = GoBGPContainer(name='g7', asn=65002, router_id='192.168.0.7', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) time.sleep(max(ctn.run() for ctn in [g6, g7])) g6.local("gobgp vrf add vrf1 rd 100:100 rt both 100:100") g6.local("gobgp vrf add vrf2 rd 200:200 rt both 200:200") g7.local("gobgp vrf add vrf1 rd 100:100 rt both 100:100") g7.local("gobgp vrf add vrf3 rd 300:300 rt both 300:300") g6.local("gobgp vrf vrf1 rib add 60.0.0.0/24") g6.local("gobgp vrf vrf2 rib add 60.0.0.0/24") g7.local("gobgp vrf vrf1 rib add 70.0.0.0/24") g7.local("gobgp vrf vrf3 rib add 70.0.0.0/24") for a, b in combinations([g6, g7], 2): a.add_peer(b, vpn=True, passwd='rtc', graceful_restart=True) b.add_peer(a, vpn=True, passwd='rtc', graceful_restart=True) g6.wait_for(expected_state=BGP_FSM_ESTABLISHED, peer=g7) self.__class__.g6 = g6 self.__class__.g7 = g7
def setUpClass(cls): # +----+ +----+ # | g1 |----(iBGP)----| g2 | # +----+ +----+ gobgp_ctn_image_name = parser_option.gobgp_image base.TEST_PREFIX = parser_option.test_prefix g1 = GoBGPContainer(name='g1', asn=65000, router_id='192.168.0.1', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) g2 = GoBGPContainer(name='g2', asn=65000, router_id='192.168.0.2', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) time.sleep(max(ctn.run() for ctn in [g1, g2])) g1.local("gobgp vrf add vrf1 rd 100:100 rt both 100:100") g1.local("gobgp vrf add vrf2 rd 200:200 rt both 200:200") g2.local("gobgp vrf add vrf1 rd 100:100 rt both 100:100") g2.local("gobgp vrf add vrf3 rd 300:300 rt both 300:300") g1.local("gobgp vrf vrf1 rib add 10.0.0.0/24") g1.local("gobgp vrf vrf2 rib add 10.0.0.0/24") g2.local("gobgp vrf vrf1 rib add 20.0.0.0/24") g2.local("gobgp vrf vrf3 rib add 20.0.0.0/24") cls.g1 = g1 cls.g2 = g2
def test_10_rr_setup(self): # +------+ # | g3 | # +------| (RR) |------+ # | +------+ | # (iBGP) (iBGP) # | | # +-------------+ +-------------+ # | g4 | | g5 | # | (RR Client) | | (RR Client) | # +-------------+ +-------------+ gobgp_ctn_image_name = parser_option.gobgp_image g3 = GoBGPContainer(name='g3', asn=65000, router_id='192.168.0.3', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) g4 = GoBGPContainer(name='g4', asn=65000, router_id='192.168.0.4', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) g5 = GoBGPContainer(name='g5', asn=65000, router_id='192.168.0.5', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) time.sleep(max(ctn.run() for ctn in [g3, g4, g5])) g3.add_peer(g4, vpn=True, is_rr_client=True) g4.add_peer(g3, vpn=True) g3.add_peer(g5, vpn=True, is_rr_client=True) g5.add_peer(g3, vpn=True) g3.wait_for(expected_state=BGP_FSM_ESTABLISHED, peer=g4) g3.wait_for(expected_state=BGP_FSM_ESTABLISHED, peer=g5) self.__class__.g3 = g3 self.__class__.g4 = g4 self.__class__.g5 = g5
def setUpClass(cls): gobgp_ctn_image_name = parser_option.gobgp_image base.TEST_PREFIX = parser_option.test_prefix g1 = GoBGPContainer(name='g1', asn=65001, router_id='192.168.0.1', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level, config_format='yaml') g2 = GoBGPContainer(name='g2', asn=65002, router_id='192.168.0.2', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level, config_format='yaml') g3 = GoBGPContainer(name='g3', asn=65003, router_id='192.168.0.3', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level, config_format='yaml') g4 = GoBGPContainer(name='g4', asn=65004, router_id='192.168.0.4', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level, config_format='yaml') g5 = GoBGPContainer(name='g5', asn=65005, router_id='192.168.0.5', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level, config_format='yaml') g6 = GoBGPContainer(name='g6', asn=65006, router_id='192.168.0.6', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level, config_format='yaml') g7 = GoBGPContainer(name='g7', asn=65007, router_id='192.168.0.7', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level, config_format='yaml') ctns = [g1, g2, g3, g4, g5, g6, g7] initial_wait_time = max(ctn.run() for ctn in ctns) time.sleep(initial_wait_time) g4.local("gobgp vrf add red rd 10:10 rt both 10:10") g4.local("gobgp vrf add blue rd 20:20 rt both 20:20") g5.local("gobgp vrf add red rd 10:10 rt both 10:10") g5.local("gobgp vrf add blue rd 20:20 rt both 20:20") g1.add_peer(g4) g4.add_peer(g1, vrf='red') g2.add_peer(g4) g4.add_peer(g2, vrf='red') g3.add_peer(g4) g4.add_peer(g3, vrf='blue') g4.add_peer(g5, vpn=True) g5.add_peer(g4, vpn=True) g5.add_peer(g6, vrf='red') g6.add_peer(g5) g5.add_peer(g7, vrf='blue') g7.add_peer(g5) cls.g1 = g1 cls.g2 = g2 cls.g3 = g3 cls.g4 = g4 cls.g5 = g5 cls.g6 = g6 cls.g7 = g7
def setUpClass(cls): gobgp_ctn_image_name = parser_option.gobgp_image base.TEST_PREFIX = parser_option.test_prefix g1 = GoBGPContainer(name='g1', asn=65001, router_id='192.168.0.1', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level, config_format='yaml') g2 = GoBGPContainer(name='g2', asn=65001, router_id='192.168.0.2', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level, config_format='yaml') g3 = GoBGPContainer(name='g3', asn=65001, router_id='192.168.0.3', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level, config_format='yaml') g4 = GoBGPContainer(name='g4', asn=65001, router_id='192.168.0.4', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level, config_format='yaml') g5 = GoBGPContainer(name='g5', asn=65001, router_id='192.168.0.5', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level, config_format='yaml') ctns = [g1, g2, g3, g4, g5] initial_wait_time = max(ctn.run() for ctn in ctns) time.sleep(initial_wait_time) g3.local("gobgp vrf add red rd 10:10 rt both 10:10") g3.local("gobgp vrf add blue rd 20:20 rt both 20:20") g1.add_peer(g3, graceful_restart=True, llgr=True) g3.add_peer(g1, vrf='red', is_rr_client=True, graceful_restart=True, llgr=True) g2.add_peer(g3, graceful_restart=True, llgr=True) g3.add_peer(g2, vrf='red', is_rr_client=True, graceful_restart=True, llgr=True) g4.add_peer(g3, graceful_restart=True, llgr=True) g3.add_peer(g4, vrf='blue', is_rr_client=True, graceful_restart=True, llgr=True) g5.add_peer(g3, graceful_restart=True, llgr=True) g3.add_peer(g5, vrf='blue', is_rr_client=True, graceful_restart=True, llgr=True) cls.g1 = g1 cls.g2 = g2 cls.g3 = g3 cls.g4 = g4 cls.g5 = g5
def setUpClass(cls): # +-----Confederation(AS30)-----+ # AS21 AS20 | +-AS65002-+ +-AS65001-+ | AS10 # +----+ +----+ | | +-----+ | | +-----+ | | +----+ # | q3 |---| q2 |--+-+-| g1 |-+-----+-| q11 |-+-+--| q1 | # +----+ +----+ | | +-----+ | | +-----+ | | +----+ # | | | | | | | | # | | | | | | | | # | | | | | | | | # | | +-----+ | | +-----+ | | # | | | q22 | | | | q12 | | | # | | +-----+ | | +-----+ | | # | +---------+ +---------+ | # +-----------------------------+ gobgp_ctn_image_name = parser_option.gobgp_image base.TEST_PREFIX = parser_option.test_prefix bgp_conf_1 = { 'global': { 'confederation': { 'config': { 'enabled': True, 'identifier': 30, 'member-as-list': [65002] } } } } bgp_conf_2 = { 'global': { 'confederation': { 'config': { 'enabled': True, 'identifier': 30, 'member-as-list': [65001] } } } } g1 = GoBGPContainer(name='g1', asn=65002, router_id='192.168.2.1', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level, bgp_config=bgp_conf_2) q1 = QuaggaBGPContainer(name='q1', asn=10, router_id='1.1.1.1') q2 = QuaggaBGPContainer(name='q2', asn=20, router_id='2.2.2.2') q3 = QuaggaBGPContainer(name='q3', asn=21, router_id='3.3.3.3') q11 = QuaggaBGPContainer(name='q11', asn=65001, router_id='192.168.1.1', bgpd_config=bgp_conf_1) q12 = QuaggaBGPContainer(name='q12', asn=65001, router_id='192.168.1.2', bgpd_config=bgp_conf_1) q22 = QuaggaBGPContainer(name='q22', asn=65002, router_id='192.168.2.2', bgpd_config=bgp_conf_2) ctns = [g1, q1, q2, q3, q11, q12, q22] cls.initial_wait_time = max(ctn.run() for ctn in ctns) time.sleep(cls.initial_wait_time) q1.add_peer(q11, remote_as=30) q11.add_peer(q1) q11.add_peer(q12) q12.add_peer(q11) g1.add_peer(q11) q11.add_peer(g1) g1.add_peer(q22) q22.add_peer(g1) g1.add_peer(q2) q2.add_peer(g1, remote_as=30) q3.add_peer(q2) q2.add_peer(q3) cls.gobgp = g1 cls.quaggas = { 'q1': q1, 'q2': q2, 'q3': q3, 'q11': q11, 'q12': q12, 'q22': q22 }
def setUpClass(cls): gobgp_ctn_image_name = parser_option.gobgp_image base.TEST_PREFIX = parser_option.test_prefix g1 = GoBGPContainer(name='g1', asn=65000, router_id='192.168.0.1', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) g2 = GoBGPContainer(name='g2', asn=65000, router_id='192.168.0.2', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) g3 = GoBGPContainer(name='g3', asn=65000, router_id='192.168.0.3', ctn_image_name=gobgp_ctn_image_name, log_level=parser_option.gobgp_log_level) e1 = ExaBGPContainer(name='e1', asn=65000, router_id='192.168.0.4') ctns = [g1, g2, g3, e1] initial_wait_time = max(ctn.run() for ctn in ctns) time.sleep(initial_wait_time) g1.add_peer(e1, addpath=True) e1.add_peer(g1, addpath=True) g1.add_peer(g2, addpath=False, is_rr_client=True) g2.add_peer(g1, addpath=False) g1.add_peer(g3, addpath=True, is_rr_client=True) g3.add_peer(g1, addpath=True) cls.g1 = g1 cls.g2 = g2 cls.g3 = g3 cls.e1 = e1