Example #1
0
    def get_routing_table(self, neighbor_address, target_prefix, retry=3, interval=-1):
        if interval < 0:
            interval = self.wait_per_retry
        print "check route %s on quagga : %s" % (target_prefix, neighbor_address)
        retry_count = 0

        # quagga cli doesn't show prefix's netmask
        quagga_prefix = target_prefix.split('/')[0]
        while True:
            tn = qaccess.login(neighbor_address)
            q_rib = qaccess.show_rib(tn)
            qaccess.logout(tn)
            for q_path in q_rib:
                if quagga_prefix == q_path['Network']:
                    return q_path

            retry_count += 1
            if retry_count > retry:
                break
            else:
                print "target_prefix %s is none" % target_prefix
                print "wait (" + str(interval) + " seconds)"
                time.sleep(interval)

        print "route : %s is none" % target_prefix
        return None
Example #2
0
    def check_community(self,
                        neighbor_address,
                        target_addr,
                        community,
                        retry=3,
                        interval=-1,
                        af=IPv4):
        if interval < 0:
            interval = self.wait_per_retry
        print "check route %s on quagga : %s" % (target_addr, neighbor_address)
        retry_count = 0

        while True:
            tn = qaccess.login(neighbor_address)
            result = qaccess.check_community(tn, target_addr, community, af)
            qaccess.logout(tn)

            if result:
                return True
            else:
                print "target path %s with community %s is none" % (
                    target_addr, community)

            retry_count += 1
            if retry_count > retry:
                break
            else:
                print "wait (" + str(interval) + " seconds)"
                time.sleep(interval)

        return False
Example #3
0
    def get_route(self,
                  neighbor_address,
                  target_prefix,
                  retry=3,
                  interval=-1,
                  af=IPv4):
        if interval < 0:
            interval = self.wait_per_retry
        print "check route %s on quagga : %s" % (target_prefix,
                                                 neighbor_address)
        retry_count = 0

        while True:
            tn = qaccess.login(neighbor_address)
            q_rib = qaccess.lookup_prefix(tn, target_prefix, af)
            qaccess.logout(tn)
            for q_path in q_rib:
                if target_prefix == q_path['Network']:
                    return q_path

            retry_count += 1
            if retry_count > retry:
                break
            else:
                print "target_prefix %s is none" % target_prefix
                print "wait (" + str(interval) + " seconds)"
                time.sleep(interval)

        print "route : %s is none" % target_prefix
        return None
Example #4
0
    def check_med(self, neighbor_address, target_addr, med, retry=3, interval=-1, af=IPv4):
        if interval < 0:
            interval = self.wait_per_retry
        print "check route %s on quagga : %s" % (target_addr, neighbor_address)
        retry_count = 0

        while True:
            tn = qaccess.login(neighbor_address)
            result = qaccess.check_med(tn, target_addr, med, af)
            qaccess.logout(tn)

            if result:
                return True
            else:
                print "target path %s with med %s is none" % (target_addr, med)

            retry_count += 1
            if retry_count > retry:
                break
            else:
                print "wait (" + str(interval) + " seconds)"
                time.sleep(interval)

        return False
Example #5
0
    def get_route(self, neighbor_address, target_prefix, retry=3, interval=-1, af=IPv4):
        if interval < 0:
            interval = self.wait_per_retry
        print "check route %s on quagga : %s" % (target_prefix, neighbor_address)
        retry_count = 0

        while True:
            tn = qaccess.login(neighbor_address)
            q_rib = qaccess.lookup_prefix(tn, target_prefix, af)
            qaccess.logout(tn)
            for q_path in q_rib:
                if target_prefix == q_path['Network']:
                    return q_path

            retry_count += 1
            if retry_count > retry:
                break
            else:
                print "target_prefix %s is none" % target_prefix
                print "wait (" + str(interval) + " seconds)"
                time.sleep(interval)

        print "route : %s is none" % target_prefix
        return None
    def test_04_export_policy_update(self):
        # initialize test environment
        # policy_pattern:p4 attaches a policy to reject route
        # 192.168.2.0/24, 192.168.20.0/24, 192.168.200.0/24
        # coming from peer2(10.0.0.2) to peer3(10.0.0.3)'s export-policy.
        self.initialize(policy_pattern="p4")

        # add other network
        tn = qaccess.login(peer2)
        print "add network 192.168.20.0/24"
        qaccess.add_network(tn, 65002, prefix2)
        print "add network 192.168.200.0/24"
        qaccess.add_network(tn, 65002, prefix3)
        qaccess.logout(tn)

        addresses = self.get_neighbor_address(self.gobgp_config) 
        self.retry_routine_for_state(addresses, "BGP_FSM_ESTABLISHED")

        time.sleep(self.initial_wait_time)

        def path_exists_in_localrib(peer, prefix,r=10):
            paths = self.get_paths_in_localrib(peer, prefix, retry=r)
            return paths is not None

        def path_exists_in_routing_table(peer, prefix,r=10):
            qpath = self.get_routing_table(peer, prefix, retry=r)
            return qpath is not None

        def path_exists_in_adj_rib_in(peer, prefix,r=10):
            path = self.get_adj_rib_in(peer, prefix, retry=r)
            return path is not None

        def path_exists_in_adj_rib_out(peer, prefix,r=10):
            path = self.get_adj_rib_out(peer, prefix, retry=r)
            return path is not None


        self.assertTrue(path_exists_in_localrib(peer1,prefix1))
        self.assertTrue(path_exists_in_localrib(peer1,prefix2))
        self.assertTrue(path_exists_in_localrib(peer1,prefix3))

        # check peer3 local-rib
        self.assertTrue(path_exists_in_localrib(peer3,prefix1))
        self.assertTrue(path_exists_in_localrib(peer3,prefix2))
        self.assertTrue(path_exists_in_localrib(peer3,prefix3))

        # check peer3 rib-out
        self.assertTrue(path_exists_in_adj_rib_out(peer3,prefix1))
        self.assertFalse(path_exists_in_adj_rib_out(peer3,prefix2,r=3))
        self.assertFalse(path_exists_in_adj_rib_out(peer3,prefix3,r=3))

        # check show ip bgp on peer1(quagga1)
        self.assertTrue(path_exists_in_routing_table(peer1, prefix1))
        self.assertTrue(path_exists_in_routing_table(peer1, prefix2))
        self.assertTrue(path_exists_in_routing_table(peer1, prefix3))

        # check show ip bgp on peer3(quagga3)
        self.assertTrue(path_exists_in_routing_table(peer3, prefix1))
        self.assertFalse(path_exists_in_routing_table(peer3, prefix2,r=3))
        self.assertFalse(path_exists_in_routing_table(peer3, prefix3,r=0))

        # check adj-rib-out in peer2
        peer2 = "10.0.0.2"
        self.assertTrue(path_exists_in_adj_rib_in(peer2, prefix1))
        self.assertTrue(path_exists_in_adj_rib_in(peer2, prefix2))
        self.assertTrue(path_exists_in_adj_rib_in(peer2, prefix3))

        # update policy
        print "update_policy_config"
        fab.update_policy_config(parser_option.go_path, policy_pattern="p4")
        time.sleep(self.initial_wait_time)

        # soft reset
        print "soft_reset"
        self.soft_reset(peer2, IPv4)

        # check local-rib
        self.assertTrue(path_exists_in_localrib(peer3,prefix1))
        self.assertTrue(path_exists_in_localrib(peer3,prefix2))
        self.assertTrue(path_exists_in_localrib(peer3,prefix3))

        # check local-adj-out-rib
        self.assertTrue(path_exists_in_adj_rib_out(peer3, prefix1))
        self.assertFalse(path_exists_in_adj_rib_out(peer3, prefix2,r=3))
        self.assertTrue(path_exists_in_adj_rib_out(peer3, prefix3))

        # check show ip bgp on peer3(quagga3)
        self.assertTrue(path_exists_in_routing_table(peer3, prefix1))
        self.assertFalse(path_exists_in_routing_table(peer3, prefix2,r=3))
        self.assertTrue(path_exists_in_routing_table(peer3, prefix3))
    def test_04_export_policy_update(self):
        # initialize test environment
        # policy_pattern:p4 attaches a policy to reject route
        # 192.168.2.0/24, 192.168.20.0/24, 192.168.200.0/24
        # coming from peer2(10.0.0.2) to peer3(10.0.0.3)'s export-policy.
        self.initialize(policy_pattern="p4")

        # add other network
        tn = qaccess.login(peer2)
        print "add network 192.168.20.0/24"
        qaccess.add_network(tn, 65002, prefix2)
        print "add network 192.168.200.0/24"
        qaccess.add_network(tn, 65002, prefix3)
        qaccess.logout(tn)

        addresses = self.get_neighbor_address(self.gobgp_config)
        self.retry_routine_for_state(addresses, "BGP_FSM_ESTABLISHED")

        time.sleep(self.initial_wait_time)

        def path_exists_in_localrib(peer, prefix, r=10):
            paths = self.get_paths_in_localrib(peer, prefix, retry=r)
            return paths is not None

        def path_exists_in_routing_table(peer, prefix, r=10):
            qpath = self.get_routing_table(peer, prefix, retry=r)
            return qpath is not None

        def path_exists_in_adj_rib_in(peer, prefix, r=10):
            path = self.get_adj_rib_in(peer, prefix, retry=r)
            return path is not None

        def path_exists_in_adj_rib_out(peer, prefix, r=10):
            path = self.get_adj_rib_out(peer, prefix, retry=r)
            return path is not None

        self.assertTrue(path_exists_in_localrib(peer1, prefix1))
        self.assertTrue(path_exists_in_localrib(peer1, prefix2))
        self.assertTrue(path_exists_in_localrib(peer1, prefix3))

        # check peer3 local-rib
        self.assertTrue(path_exists_in_localrib(peer3, prefix1))
        self.assertTrue(path_exists_in_localrib(peer3, prefix2))
        self.assertTrue(path_exists_in_localrib(peer3, prefix3))

        # check peer3 rib-out
        self.assertTrue(path_exists_in_adj_rib_out(peer3, prefix1))
        self.assertFalse(path_exists_in_adj_rib_out(peer3, prefix2, r=3))
        self.assertFalse(path_exists_in_adj_rib_out(peer3, prefix3, r=3))

        # check show ip bgp on peer1(quagga1)
        self.assertTrue(path_exists_in_routing_table(peer1, prefix1))
        self.assertTrue(path_exists_in_routing_table(peer1, prefix2))
        self.assertTrue(path_exists_in_routing_table(peer1, prefix3))

        # check show ip bgp on peer3(quagga3)
        self.assertTrue(path_exists_in_routing_table(peer3, prefix1))
        self.assertFalse(path_exists_in_routing_table(peer3, prefix2, r=3))
        self.assertFalse(path_exists_in_routing_table(peer3, prefix3, r=0))

        # check adj-rib-out in peer2
        peer2 = "10.0.0.2"
        self.assertTrue(path_exists_in_adj_rib_in(peer2, prefix1))
        self.assertTrue(path_exists_in_adj_rib_in(peer2, prefix2))
        self.assertTrue(path_exists_in_adj_rib_in(peer2, prefix3))

        # update policy
        print "update_policy_config"
        fab.update_policy_config(parser_option.go_path, policy_pattern="p4")
        time.sleep(self.initial_wait_time)

        # soft reset
        print "soft_reset"
        self.soft_reset(peer2, IPv4)

        # check local-rib
        self.assertTrue(path_exists_in_localrib(peer3, prefix1))
        self.assertTrue(path_exists_in_localrib(peer3, prefix2))
        self.assertTrue(path_exists_in_localrib(peer3, prefix3))

        # check local-adj-out-rib
        self.assertTrue(path_exists_in_adj_rib_out(peer3, prefix1))
        self.assertFalse(path_exists_in_adj_rib_out(peer3, prefix2, r=3))
        self.assertTrue(path_exists_in_adj_rib_out(peer3, prefix3))

        # check show ip bgp on peer3(quagga3)
        self.assertTrue(path_exists_in_routing_table(peer3, prefix1))
        self.assertFalse(path_exists_in_routing_table(peer3, prefix2, r=3))
        self.assertTrue(path_exists_in_routing_table(peer3, prefix3))