summaryrefslogtreecommitdiffstats
path: root/test/test_lb_api.py
blob: 70d41d432a70b46df36a27cb2542e9353e0ed606 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#  Copyright (c) 2019. Vinci Consulting Corp. All Rights Reserved.
#
#  Licensed under the Apache License, Version 2.0 (the "License");
#  you may not use this file except in compliance with the License.
#  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.

import framework
import ipaddress

DEFAULT_VIP = "lb_vip_details(_0=978, context=12, vip=vl_api_lb_ip_addr_t(pfx=IPv6Network(u'::/0'), protocol=<vl_api_ip_proto_t.IP_API_PROTO_RESERVED: 255>, port=0), encap=<vl_api_lb_encap_type_t.LB_API_ENCAP_TYPE_GRE4: 0>, dscp=<vl_api_ip_dscp_t.IP_API_DSCP_CS0: 0>, srv_type=<vl_api_lb_srv_type_t.LB_API_SRV_TYPE_CLUSTERIP: 0>, target_port=0, flow_table_length=0)"  # noqa


class TestLbEmptyApi(framework.VppTestCase):
    """TestLbEmptyApi """

    def test_lb_empty_vip_dump(self):

        # no records should  normally return [], but
        # lb initializes with a default VIP
        rv = self.vapi.lb_vip_dump()
        # print(rv)
        self.assertEqual(rv, [], 'Expected: [] Received: %r.' % rv)

    def test_lb_empty_as_dump(self):

        # no records should return []
        rv = self.vapi.lb_as_dump()
        # print(rv)
        self.assertEqual(rv, [], 'Expected: [] Received: %r.' % rv)


class TestLbApi(framework.VppTestCase):
    """TestLbApi """

    def test_lb_vip_dump(self):
        # add some vips
        # rv = self.vapi.lb_add_del_vip(pfx=ipaddress.IPv4Network(u'1.2.3.0/24'),  # noqa
        #                               protocol=17,
        #                               encap=0)
        # print(rv)
        self.vapi.cli("lb vip 2001::/16 encap gre6")
        rv = self.vapi.lb_vip_dump()
        # print(rv)
        self.assertEqual(str(rv[-1].vip.pfx), "2001::/16",
                         'Expected: 2001::/16 Received: %r.' % rv[-1].vip.pfx)

        self.vapi.cli("lb vip 2001::/16 del")


class TestLbAsApi(framework.VppTestCase):
    """TestLbAsApi """

    def test_lb_as_dump(self):
        # add some vips
        self.vapi.cli("lb vip 2001::/16 encap gre6")
        self.vapi.cli("lb as 2001::/16 2000::1")
        # add some as's for the vips
        # rv = self.vapi.lb_add_del_as(
        #     pfx=ipaddress.IPv4Network(u"10.0.0.0/24"),
        #     as_address=ipaddress.IPv4Address(u"192.168.1.1"))

        # print(rv)
        rv = self.vapi.lb_as_dump()
        # print(rv)
        self.assertEqual(str(rv[0].vip.pfx), "2001::/16",
                         'Expected: "2001::/16" Received: %r.' % rv[0].vip.pfx)
        self.assertEqual(str(rv[0].app_srv), "2000::1",
                         'Expected: "2000::1" Received: %r.' % rv[0].app_srv)
span> freelists; /**< power of two freelist vector */ uword alloc_arena; /**< memory allocation arena */ uword alloc_arena_next; /**< first available mem chunk */ uword alloc_arena_size; /**< size of the arena */ } clib_bihash_t; /** Get pointer to value page given its clib mheap offset */ static inline void *clib_bihash_get_value (clib_bihash * h, uword offset); /** Get clib mheap offset given a pointer */ static inline uword clib_bihash_get_offset (clib_bihash * h, void *v); /** initialize a bounded index extensible hash table @param h - the bi-hash table to initialize @param name - name of the hash table @param nbuckets - the number of buckets, will be rounded up to a power of two @param memory_size - clib mheap size, in bytes */ void clib_bihash_init (clib_bihash * h, char *name, u32 nbuckets, uword memory_size); /** Destroy a bounded index extensible hash table @param h - the bi-hash table to free */ void clib_bihash_free (clib_bihash * h); /** Add or delete a (key,value) pair from a bi-hash table @param h - the bi-hash table to search @param add_v - the (key,value) pair to add @param is_add - add=1, delete=0 @returns 0 on success, < 0 on error @note This function will replace an existing (key,value) pair if the new key matches an existing key */ int clib_bihash_add_del (clib_bihash * h, clib_bihash_kv * add_v, int is_add); /** Search a bi-hash table, use supplied hash code @param h - the bi-hash table to search @param hash - the hash code @param in_out_kv - (key,value) pair containing the search key @returns 0 on success (with in_out_kv set), < 0 on error */ int clib_bihash_search_inline_with_hash (clib_bihash * h, u64 hash, clib_bihash_kv * in_out_kv); /** Search a bi-hash table @param h - the bi-hash table to search @param in_out_kv - (key,value) pair containing the search key @returns 0 on success (with in_out_kv set), < 0 on error */ int clib_bihash_search_inline (clib_bihash * h, clib_bihash_kv * in_out_kv); /** Prefetch a bi-hash bucket given a hash code @param h - the bi-hash table to search @param hash - the hash code @note see also clib_bihash_hash to compute the code */ void clib_bihash_prefetch_bucket (clib_bihash * h, u64 hash); /** Prefetch bi-hash (key,value) data given a hash code @param h - the bi-hash table to search @param hash - the hash code @note assumes that the bucket has been prefetched, see clib_bihash_prefetch_bucket */ void clib_bihash_prefetch_data (clib_bihash * h, u64 hash); /** Search a bi-hash table @param h - the bi-hash table to search @param search_key - (key,value) pair containing the search key @param valuep - (key,value) set to search result @returns 0 on success (with valuep set), < 0 on error @note used in situations where key modification is not desired */ int clib_bihash_search_inline_2 (clib_bihash * h, clib_bihash_kv * search_key, clib_bihash_kv * valuep); /* Calback function for walking a bihash table * * @param kv - KV pair visited * @param ctx - Context passed to the walk * @return BIHASH_WALK_CONTINUE to continue BIHASH_WALK_STOP to stop */ typedef int (*clib_bihash_foreach_key_value_pair_cb) (clib_bihash_kv * kv, void *ctx); /** Visit active (key,value) pairs in a bi-hash table @param h - the bi-hash table to search @param callback - function to call with each active (key,value) pair @param arg - arbitrary second argument passed to the callback function First argument is the (key,value) pair to visit */ void clib_bihash_foreach_key_value_pair (clib_bihash * h, clib_bihash_foreach_key_value_pair_cb * callback, void *arg); /* * fd.io coding-style-patch-verification: ON * * Local Variables: * eval: (c-set-style "gnu") * End: */