def test_15_add_ebgp_peer(self): q4 = QuaggaBGPContainer(name='q4', asn=65001, router_id='192.168.0.5') self.quaggas['q4'] = q4 initial_wait_time = q4.run() time.sleep(initial_wait_time) self.gobgp.add_peer(q4) q4.add_peer(self.gobgp) prefix = '10.0.4.0/24' q4.add_route(prefix) self.gobgp.wait_for(expected_state=BGP_FSM_ESTABLISHED, peer=q4) q1 = self.quaggas['q1'] q2 = self.quaggas['q2'] for q in [q1, q2]: def _f(): return prefix in [ p['nlri']['prefix'] for p in self.gobgp.get_adj_rib_out(q) ] wait_for_completion(_f) def f(): return len(q2.get_global_rib(prefix)) == 1 wait_for_completion(f)
def test_07_add_ebgp_peer(self): q3 = QuaggaBGPContainer(name='q3', asn=65001, router_id='192.168.0.4') self.quaggas['q3'] = q3 initial_wait_time = q3.run() time.sleep(initial_wait_time) self.gobgp.add_peer(q3) q3.add_peer(self.gobgp) q3.add_route('10.0.3.0/24') self.gobgp.wait_for(expected_state=BGP_FSM_ESTABLISHED, peer=q3)
def test_05_add_quagga(self): q4 = QuaggaBGPContainer(name='q4', asn=65004, router_id='192.168.0.5') self.quaggas['q4'] = q4 initial_wait_time = q4.run() time.sleep(initial_wait_time) self.gobgp.add_peer(q4) q4.add_peer(self.gobgp) q4.add_route('10.0.4.0/24') self.gobgp.wait_for(expected_state=BGP_FSM_ESTABLISHED, peer=q4)
def test_09_add_distant_relative(self): q1 = self.quaggas['q1'] q2 = self.quaggas['q2'] q3 = self.quaggas['q3'] q5 = QuaggaBGPContainer(name='q5', asn=65005, router_id='192.168.0.6') initial_wait_time = q5.run() time.sleep(initial_wait_time) for q in [q2, q3]: q5.add_peer(q) q.add_peer(q5) med200 = { 'name': 'med200', 'type': 'permit', 'match': '0.0.0.0/0', 'med': 200 } q2.add_policy(med200, self.gobgp, 'out') med100 = { 'name': 'med100', 'type': 'permit', 'match': '0.0.0.0/0', 'med': 100 } q3.add_policy(med100, self.gobgp, 'out') q5.add_route('10.0.6.0/24') self.gobgp.wait_for(expected_state=BGP_FSM_ESTABLISHED, peer=q2) self.gobgp.wait_for(expected_state=BGP_FSM_ESTABLISHED, peer=q3) q2.wait_for(expected_state=BGP_FSM_ESTABLISHED, peer=q5) q3.wait_for(expected_state=BGP_FSM_ESTABLISHED, peer=q5) timeout = 120 interval = 1 count = 0 while True: paths = self.gobgp.get_adj_rib_out(q1, '10.0.6.0/24') if len(paths) > 0: path = paths[0] print "{0}'s nexthop is {1}".format(path['nlri']['prefix'], path['nexthop']) n_addrs = [i[1].split('/')[0] for i in self.gobgp.ip_addrs] if path['nexthop'] in n_addrs: break time.sleep(interval) count += interval if count >= timeout: raise Exception('timeout')
def test_09_add_distant_relative(self): q1 = self.quaggas['q1'] q2 = self.quaggas['q2'] q3 = self.quaggas['q3'] q5 = QuaggaBGPContainer(name='q5', asn=65005, router_id='192.168.0.6') initial_wait_time = q5.run() time.sleep(initial_wait_time) for q in [q2, q3]: q5.add_peer(q) q.add_peer(q5) med200 = {'name': 'med200', 'type': 'permit', 'match': '0.0.0.0/0', 'med': 200} q2.add_policy(med200, self.gobgp, 'out') med100 = {'name': 'med100', 'type': 'permit', 'match': '0.0.0.0/0', 'med': 100} q3.add_policy(med100, self.gobgp, 'out') q5.add_route('10.0.6.0/24') self.gobgp.wait_for(expected_state=BGP_FSM_ESTABLISHED, peer=q2) self.gobgp.wait_for(expected_state=BGP_FSM_ESTABLISHED, peer=q3) q2.wait_for(expected_state=BGP_FSM_ESTABLISHED, peer=q5) q3.wait_for(expected_state=BGP_FSM_ESTABLISHED, peer=q5) timeout = 120 interval = 1 count = 0 while True: paths = self.gobgp.get_adj_rib_out(q1, '10.0.6.0/24') if len(paths) > 0: path = paths[0] print "{0}'s nexthop is {1}".format(path['nlri']['prefix'], path['nexthop']) n_addrs = [i[1].split('/')[0] for i in self.gobgp.ip_addrs] if path['nexthop'] in n_addrs: break time.sleep(interval) count += interval if count >= timeout: raise Exception('timeout')
def test_15_add_ebgp_peer(self): q4 = QuaggaBGPContainer(name='q4', asn=65001, router_id='192.168.0.5') self.quaggas['q4'] = q4 initial_wait_time = q4.run() time.sleep(initial_wait_time) self.gobgp.add_peer(q4) q4.add_peer(self.gobgp) prefix = '10.0.4.0/24' q4.add_route(prefix) self.gobgp.wait_for(expected_state=BGP_FSM_ESTABLISHED, peer=q4) q1 = self.quaggas['q1'] q2 = self.quaggas['q2'] for q in [q1, q2]: def _f(): return prefix in [p['nlri']['prefix'] for p in self.gobgp.get_adj_rib_out(q)] wait_for_completion(_f) def f(): return len(q2.get_global_rib(prefix)) == 1 wait_for_completion(f)
def test_10_add_distant_relative(self): q1 = self.quaggas['q1'] q2 = self.quaggas['q2'] q3 = self.quaggas['q3'] q5 = QuaggaBGPContainer(name='q5', asn=65005, router_id='192.168.0.6') initial_wait_time = q5.run() time.sleep(initial_wait_time) for q in [q2, q3]: q5.add_peer(q) q.add_peer(q5) med200 = { 'name': 'med200', 'type': 'permit', 'match': '0.0.0.0/0', 'med': 200, 'priority': 10 } q2.add_policy(med200, self.gobgp, 'out') med100 = { 'name': 'med100', 'type': 'permit', 'match': '0.0.0.0/0', 'med': 100, 'priority': 10 } q3.add_policy(med100, self.gobgp, 'out') q5.add_route('10.0.6.0/24') q2.wait_for(expected_state=BGP_FSM_ESTABLISHED, peer=q5) q3.wait_for(expected_state=BGP_FSM_ESTABLISHED, peer=q5) self.gobgp.wait_for(expected_state=BGP_FSM_ESTABLISHED, peer=q2) self.gobgp.wait_for(expected_state=BGP_FSM_ESTABLISHED, peer=q3) def check_nexthop(target_prefix, expected_nexthop): is_done = False for _ in range(self.retry_limit): if is_done: break time.sleep(self.wait_per_retry) for path in q1.get_global_rib(): if path['prefix'] == target_prefix: print("{0}'s nexthop is {1}".format( path['prefix'], path['nexthop'])) n_addrs = [ i[1].split('/')[0] for i in expected_nexthop.ip_addrs ] if path['nexthop'] in n_addrs: is_done = True break return is_done done = check_nexthop('10.0.6.0/24', q3) self.assertTrue(done) med300 = { 'name': 'med300', 'type': 'permit', 'match': '0.0.0.0/0', 'med': 300, 'priority': 5 } q3.add_policy(med300, self.gobgp, 'out') time.sleep(self.wait_per_retry) done = check_nexthop('10.0.6.0/24', q2) self.assertTrue(done)
def test_10_add_distant_relative(self): q1 = self.quaggas['q1'] q2 = self.quaggas['q2'] q3 = self.quaggas['q3'] q5 = QuaggaBGPContainer(name='q5', asn=65005, router_id='192.168.0.6') initial_wait_time = q5.run() time.sleep(initial_wait_time) for q in [q2, q3]: q5.add_peer(q) q.add_peer(q5) med200 = {'name': 'med200', 'type': 'permit', 'match': '0.0.0.0/0', 'med': 200, 'priority': 10} q2.add_policy(med200, self.gobgp, 'out') med100 = {'name': 'med100', 'type': 'permit', 'match': '0.0.0.0/0', 'med': 100, 'priority': 10} q3.add_policy(med100, self.gobgp, 'out') q5.add_route('10.0.6.0/24') q2.wait_for(expected_state=BGP_FSM_ESTABLISHED, peer=q5) q3.wait_for(expected_state=BGP_FSM_ESTABLISHED, peer=q5) self.gobgp.wait_for(expected_state=BGP_FSM_ESTABLISHED, peer=q2) self.gobgp.wait_for(expected_state=BGP_FSM_ESTABLISHED, peer=q3) def check_nexthop(target_prefix, expected_nexthop): is_done = False for _ in range(self.retry_limit): if is_done: break time.sleep(self.wait_per_retry) for path in q1.get_global_rib(): if path['prefix'] == target_prefix: print "{0}'s nexthop is {1}".format(path['prefix'], path['nexthop']) n_addrs = [i[1].split('/')[0] for i in expected_nexthop.ip_addrs] if path['nexthop'] in n_addrs: is_done = True break return is_done done = check_nexthop('10.0.6.0/24', q3) self.assertTrue(done) med300 = {'name': 'med300', 'type': 'permit', 'match': '0.0.0.0/0', 'med': 300, 'priority': 5} q3.add_policy(med300, self.gobgp, 'out') time.sleep(self.wait_per_retry) done = check_nexthop('10.0.6.0/24', q2) self.assertTrue(done)