summaryrefslogtreecommitdiffstats
path: root/vnet/vnet/fib/fib_test.c
diff options
context:
space:
mode:
Diffstat (limited to 'vnet/vnet/fib/fib_test.c')
-rw-r--r--vnet/vnet/fib/fib_test.c1033
1 files changed, 457 insertions, 576 deletions
diff --git a/vnet/vnet/fib/fib_test.c b/vnet/vnet/fib/fib_test.c
index eb5253d06da..a28026c13c1 100644
--- a/vnet/vnet/fib/fib_test.c
+++ b/vnet/vnet/fib/fib_test.c
@@ -28,6 +28,7 @@
#include <vnet/mpls/mpls.h>
#include <vnet/fib/fib_path_list.h>
+#include <vnet/fib/fib_entry_src.h>
#include <vnet/fib/fib_walk.h>
#include <vnet/fib/fib_node_list.h>
#include <vnet/fib/fib_urpf_list.h>
@@ -256,6 +257,7 @@ fib_test_build_rewrite (u8 *eth_addr)
typedef enum fib_test_lb_bucket_type_t_ {
FT_LB_LABEL_O_ADJ,
+ FT_LB_LABEL_STACK_O_ADJ,
FT_LB_LABEL_O_LB,
FT_LB_O_LB,
FT_LB_SPECIAL,
@@ -277,6 +279,14 @@ typedef struct fib_test_lb_bucket_t_ {
struct
{
mpls_eos_bit_t eos;
+ mpls_label_t label_stack[8];
+ u8 label_stack_size;
+ u8 ttl;
+ adj_index_t adj;
+ } label_stack_o_adj;
+ struct
+ {
+ mpls_eos_bit_t eos;
mpls_label_t label;
u8 ttl;
index_t lb;
@@ -322,6 +332,63 @@ fib_test_validate_lb_v (const load_balance_t *lb,
switch (exp->type)
{
+ case FT_LB_LABEL_STACK_O_ADJ:
+ {
+ const mpls_label_dpo_t *mld;
+ mpls_label_t hdr;
+ u32 ii;
+
+ FIB_TEST_LB((DPO_MPLS_LABEL == dpo->dpoi_type),
+ "bucket %d stacks on %U",
+ bucket,
+ format_dpo_type, dpo->dpoi_type);
+
+ mld = mpls_label_dpo_get(dpo->dpoi_index);
+
+ FIB_TEST_LB(exp->label_stack_o_adj.label_stack_size == mld->mld_n_labels,
+ "label stack size",
+ mld->mld_n_labels);
+
+ for (ii = 0; ii < mld->mld_n_labels; ii++)
+ {
+ hdr = clib_net_to_host_u32(mld->mld_hdr[ii].label_exp_s_ttl);
+ FIB_TEST_LB((vnet_mpls_uc_get_label(hdr) ==
+ exp->label_stack_o_adj.label_stack[ii]),
+ "bucket %d stacks on label %d",
+ bucket,
+ exp->label_stack_o_adj.label_stack[ii]);
+
+ if (ii == mld->mld_n_labels-1)
+ {
+ FIB_TEST_LB((vnet_mpls_uc_get_s(hdr) ==
+ exp->label_o_adj.eos),
+ "bucket %d stacks on label %d %U!=%U",
+ bucket,
+ exp->label_stack_o_adj.label_stack[ii],
+ format_mpls_eos_bit, exp->label_o_adj.eos,
+ format_mpls_eos_bit, vnet_mpls_uc_get_s(hdr));
+ }
+ else
+ {
+ FIB_TEST_LB((vnet_mpls_uc_get_s(hdr) == MPLS_NON_EOS),
+ "bucket %d stacks on label %d %U",
+ bucket,
+ exp->label_stack_o_adj.label_stack[ii],
+ format_mpls_eos_bit, vnet_mpls_uc_get_s(hdr));
+ }
+ }
+
+ FIB_TEST_LB((DPO_ADJACENCY_INCOMPLETE == mld->mld_dpo.dpoi_type),
+ "bucket %d label stacks on %U",
+ bucket,
+ format_dpo_type, mld->mld_dpo.dpoi_type);
+
+ FIB_TEST_LB((exp->label_stack_o_adj.adj == mld->mld_dpo.dpoi_index),
+ "bucket %d label stacks on adj %d",
+ bucket,
+ exp->label_stack_o_adj.adj);
+ }
+ break;
case FT_LB_LABEL_O_ADJ:
{
const mpls_label_dpo_t *mld;
@@ -332,7 +399,7 @@ fib_test_validate_lb_v (const load_balance_t *lb,
format_dpo_type, dpo->dpoi_type);
mld = mpls_label_dpo_get(dpo->dpoi_index);
- hdr = clib_net_to_host_u32(mld->mld_hdr.label_exp_s_ttl);
+ hdr = clib_net_to_host_u32(mld->mld_hdr[0].label_exp_s_ttl);
FIB_TEST_LB((vnet_mpls_uc_get_label(hdr) ==
exp->label_o_adj.label),
@@ -367,10 +434,12 @@ fib_test_validate_lb_v (const load_balance_t *lb,
"bucket %d stacks on %U",
bucket,
format_dpo_type, dpo->dpoi_type);
-
+
mld = mpls_label_dpo_get(dpo->dpoi_index);
- hdr = clib_net_to_host_u32(mld->mld_hdr.label_exp_s_ttl);
+ hdr = clib_net_to_host_u32(mld->mld_hdr[0].label_exp_s_ttl);
+ FIB_TEST_LB(1 == mld->mld_n_labels, "label stack size",
+ mld->mld_n_labels);
FIB_TEST_LB((vnet_mpls_uc_get_label(hdr) ==
exp->label_o_lb.label),
"bucket %d stacks on label %d",
@@ -437,8 +506,8 @@ fib_test_validate_entry (fib_node_index_t fei,
u16 n_buckets,
...)
{
- const load_balance_t *lb;
dpo_id_t dpo = DPO_INVALID;
+ const load_balance_t *lb;
fib_prefix_t pfx;
index_t fw_lbi;
u32 fib_index;
@@ -462,34 +531,37 @@ fib_test_validate_entry (fib_node_index_t fei,
* ensure that the LB contributed by the entry is the
* same as the LB in the forwarding tables
*/
- switch (pfx.fp_proto)
+ if (fct == fib_entry_get_default_chain_type(fib_entry_get(fei)))
{
- case FIB_PROTOCOL_IP4:
- fw_lbi = ip4_fib_forwarding_lookup(fib_index, &pfx.fp_addr.ip4);
- break;
- case FIB_PROTOCOL_IP6:
- fw_lbi = ip6_fib_table_fwding_lookup(&ip6_main, fib_index, &pfx.fp_addr.ip6);
- break;
- case FIB_PROTOCOL_MPLS:
- {
- mpls_unicast_header_t hdr = {
- .label_exp_s_ttl = 0,
- };
-
- vnet_mpls_uc_set_label(&hdr.label_exp_s_ttl, pfx.fp_label);
- vnet_mpls_uc_set_s(&hdr.label_exp_s_ttl, pfx.fp_eos);
- hdr.label_exp_s_ttl = clib_host_to_net_u32(hdr.label_exp_s_ttl);
-
- fw_lbi = mpls_fib_table_forwarding_lookup(fib_index, &hdr);
- break;
- }
- default:
- fw_lbi = 0;
+ switch (pfx.fp_proto)
+ {
+ case FIB_PROTOCOL_IP4:
+ fw_lbi = ip4_fib_forwarding_lookup(fib_index, &pfx.fp_addr.ip4);
+ break;
+ case FIB_PROTOCOL_IP6:
+ fw_lbi = ip6_fib_table_fwding_lookup(&ip6_main, fib_index, &pfx.fp_addr.ip6);
+ break;
+ case FIB_PROTOCOL_MPLS:
+ {
+ mpls_unicast_header_t hdr = {
+ .label_exp_s_ttl = 0,
+ };
+
+ vnet_mpls_uc_set_label(&hdr.label_exp_s_ttl, pfx.fp_label);
+ vnet_mpls_uc_set_s(&hdr.label_exp_s_ttl, pfx.fp_eos);
+ hdr.label_exp_s_ttl = clib_host_to_net_u32(hdr.label_exp_s_ttl);
+
+ fw_lbi = mpls_fib_table_forwarding_lookup(fib_index, &hdr);
+ break;
+ }
+ default:
+ fw_lbi = 0;
+ }
+ FIB_TEST_LB((fw_lbi == dpo.dpoi_index),
+ "Contributed LB = FW LB: %U\n %U",
+ format_load_balance, fw_lbi, 0,
+ format_load_balance, dpo.dpoi_index, 0);
}
- FIB_TEST_LB((fw_lbi == dpo.dpoi_index),
- "Contributed LB = FW LB: %U\n %U",
- format_load_balance, fw_lbi, 0,
- format_load_balance, dpo.dpoi_index, 0);
dpo_reset(&dpo);
@@ -623,7 +695,7 @@ fib_test_v4 (void)
tm->hw[0]->sw_if_index,
~0, // invalid fib index
1, // weight
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup(fib_index, &local_pfx);
FIB_TEST((FIB_NODE_INDEX_INVALID != fei), "attached interface route present");
@@ -650,7 +722,7 @@ fib_test_v4 (void)
tm->hw[0]->sw_if_index,
~0, // invalid fib index
1, // weight
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup(fib_index, &local_pfx);
FIB_TEST(((FIB_ENTRY_FLAG_LOCAL | FIB_ENTRY_FLAG_CONNECTED) ==
@@ -700,7 +772,7 @@ fib_test_v4 (void)
tm->hw[0]->sw_if_index,
~0, // invalid fib index
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup(fib_index, &pfx);
FIB_TEST((FIB_ENTRY_FLAG_NONE == fib_entry_get_flags(fei)),
@@ -818,7 +890,7 @@ fib_test_v4 (void)
tm->hw[0]->sw_if_index,
~0, // invalid fib index
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
dpo = fib_entry_contribute_ip_forwarding(fei);
@@ -884,7 +956,7 @@ fib_test_v4 (void)
tm->hw[0]->sw_if_index,
~0, // invalid fib index
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
FIB_TEST((FIB_ENTRY_FLAG_ATTACHED == fib_entry_get_flags(fei)),
"Flags set on adj-fib");
@@ -933,7 +1005,7 @@ fib_test_v4 (void)
tm->hw[0]->sw_if_index,
~0, // invalid fib index
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup(fib_index, &pfx_10_10_10_2_s_32);
@@ -970,7 +1042,7 @@ fib_test_v4 (void)
tm->hw[0]->sw_if_index,
~0, // invalid fib index
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup(fib_index, &pfx_1_1_1_1_s_32);
ai = fib_entry_get_adj(fei);
@@ -1003,7 +1075,7 @@ fib_test_v4 (void)
tm->hw[0]->sw_if_index,
~0, // invalid fib index
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup(fib_index, &pfx_1_1_2_0_s_24);
ai = fib_entry_get_adj(fei);
@@ -1030,7 +1102,7 @@ fib_test_v4 (void)
tm->hw[0]->sw_if_index,
~0, // invalid fib index
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup(fib_index, &pfx_1_1_2_0_s_24);
dpo = fib_entry_contribute_ip_forwarding(fei);
@@ -1116,7 +1188,7 @@ fib_test_v4 (void)
~0, // no index provided.
fib_index, // nexthop in same fib as route
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
FIB_TEST_REC_FORW(&bgp_100_pfx, &pfx_1_1_1_1_s_32, 0);
@@ -1152,7 +1224,7 @@ fib_test_v4 (void)
~0, // no index provided.
fib_index, // nexthop in same fib as route
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
FIB_TEST_REC_FORW(&bgp_101_pfx, &pfx_1_1_1_1_s_32, 0);
@@ -1274,7 +1346,7 @@ fib_test_v4 (void)
~0, // no index provided.
fib_index, // nexthop in same fib as route
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
FIB_TEST_REC_FORW(&bgp_200_pfx, &pfx_1_1_1_2_s_32, 0);
@@ -1320,7 +1392,7 @@ fib_test_v4 (void)
tm->hw[0]->sw_if_index,
~0,
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_entry_path_add(fib_index,
&pfx_1_2_3_4_s_32,
@@ -1331,7 +1403,7 @@ fib_test_v4 (void)
tm->hw[1]->sw_if_index,
~0,
3,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
FIB_TEST((FIB_NODE_INDEX_INVALID != fei), "1.2.3.4/32 presnet");
@@ -1372,7 +1444,7 @@ fib_test_v4 (void)
tm->hw[1]->sw_if_index,
~0,
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_entry_path_add(fib_index,
&pfx_1_2_3_5_s_32,
@@ -1383,7 +1455,7 @@ fib_test_v4 (void)
tm->hw[0]->sw_if_index,
~0,
4,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
FIB_TEST((FIB_NODE_INDEX_INVALID != fei), "1.2.3.5/32 presnet");
@@ -1455,7 +1527,7 @@ fib_test_v4 (void)
tm->hw[0]->sw_if_index,
~0, // invalid fib index
0, // zero weigth
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup(fib_index, &pfx_6_6_6_6_s_32);
@@ -1474,7 +1546,7 @@ fib_test_v4 (void)
tm->hw[0]->sw_if_index,
~0, // invalid fib index
100,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup(fib_index, &pfx_6_6_6_6_s_32);
@@ -1556,7 +1628,7 @@ fib_test_v4 (void)
tm->hw[1]->sw_if_index,
~0, // invalid fib index
100,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup(fib_index, &pfx_6_6_6_6_s_32);
@@ -1812,7 +1884,7 @@ fib_test_v4 (void)
~0,
fib_index,
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_entry_path_add(fib_index,
&bgp_44_s_32,
@@ -1823,7 +1895,7 @@ fib_test_v4 (void)
~0,
fib_index,
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
FIB_TEST_REC_FORW(&bgp_44_s_32, &pfx_1_2_3_4_s_32, 0);
@@ -1893,7 +1965,7 @@ fib_test_v4 (void)
~0, // no index provided.
fib_index, // nexthop in same fib as route
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
FIB_TEST_REC_FORW(&bgp_201_pfx, &pfx_1_1_1_200_s_32, 0);
@@ -1936,7 +2008,7 @@ fib_test_v4 (void)
tm->hw[0]->sw_if_index,
~0, // invalid fib index
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup(fib_index, &pfx_1_1_1_0_s_24);
dpo1 = fib_entry_contribute_ip_forwarding(fei);
@@ -1994,7 +2066,7 @@ fib_test_v4 (void)
tm->hw[0]->sw_if_index,
~0, // invalid fib index
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup(fib_index, &pfx_1_1_1_0_s_28);
dpo2 = fib_entry_contribute_ip_forwarding(fei);
@@ -2097,7 +2169,7 @@ fib_test_v4 (void)
tm->hw[0]->sw_if_index,
~0, // invalid fib index
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
dpo1 = fib_entry_contribute_ip_forwarding(fei);
ai = fib_entry_get_adj(fei);
@@ -2198,7 +2270,7 @@ fib_test_v4 (void)
~0, // no index provided.
fib_index, // same as route
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fib_table_entry_path_add(fib_index,
&bgp_102,
@@ -2209,7 +2281,7 @@ fib_test_v4 (void)
~0, // no index provided.
fib_index, // same as route's FIB
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup_exact_match(fib_index, &bgp_102);
FIB_TEST((FIB_NODE_INDEX_INVALID != fei), "100.100.100.102/32 presnet");
@@ -2298,7 +2370,7 @@ fib_test_v4 (void)
~0, // no index provided.
fib_index, // Same as route's FIB
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
/*
@@ -2345,7 +2417,7 @@ fib_test_v4 (void)
~0, // no index provided.
fib_index,
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
/*
@@ -2459,7 +2531,7 @@ fib_test_v4 (void)
~0, // no index provided.
fib_index,
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fib_table_entry_path_add(fib_index,
&pfx_5_5_5_6_s_32,
@@ -2470,7 +2542,7 @@ fib_test_v4 (void)
~0, // no index provided.
fib_index,
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fib_table_entry_path_add(fib_index,
&pfx_5_5_5_7_s_32,
@@ -2481,7 +2553,7 @@ fib_test_v4 (void)
~0, // no index provided.
fib_index,
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
/*
* +3 entries, +3 shared path-list
@@ -2520,7 +2592,7 @@ fib_test_v4 (void)
tm->hw[0]->sw_if_index,
~0,
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
@@ -2579,7 +2651,7 @@ fib_test_v4 (void)
tm->hw[0]->sw_if_index,
~0, // invalid fib index
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup(fib_index, &pfx_5_5_5_5_s_32);
@@ -2621,7 +2693,7 @@ fib_test_v4 (void)
~0, // no index provided.
fib_index,
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup(fib_index, &pfx_5_5_5_7_s_32);
@@ -2696,7 +2768,7 @@ fib_test_v4 (void)
~0, // no index provided.
fib_index,
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup(fib_index, &pfx_5_5_5_6_s_32);
FIB_TEST(load_balance_is_drop(fib_entry_contribute_ip_forwarding(fei)),
@@ -2744,7 +2816,7 @@ fib_test_v4 (void)
~0, // recursive
fib_index,
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
dpo = fib_entry_contribute_ip_forwarding(fei);
FIB_TEST(load_balance_is_drop(dpo),
@@ -2774,7 +2846,7 @@ fib_test_v4 (void)
~0,
fib_index,
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_RESOLVE_VIA_HOST);
fei = fib_table_lookup_exact_match(fib_index, &pfx_1_1_1_1_s_32);
@@ -2804,7 +2876,7 @@ fib_test_v4 (void)
tm->hw[0]->sw_if_index,
~0, // invalid fib index
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup_exact_match(fib_index, &pfx_1_1_1_0_s_28);
ai = fib_entry_get_adj(fei);
@@ -2839,7 +2911,7 @@ fib_test_v4 (void)
tm->hw[0]->sw_if_index,
~0, // invalid fib index
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
FIB_TEST(!dpo_cmp(dpo2, load_balance_get_bucket(dpo1->dpoi_index, 0)),
"adj for 200.200.200.200/32 is recursive via adj for 1.1.1.1");
@@ -2863,7 +2935,7 @@ fib_test_v4 (void)
tm->hw[0]->sw_if_index,
~0, // invalid fib index
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fib_table_entry_path_add(fib_index,
@@ -2875,7 +2947,7 @@ fib_test_v4 (void)
~0,
fib_index,
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_RESOLVE_VIA_HOST);
fei = fib_table_lookup_exact_match(fib_index, &bgp_200_pfx);
@@ -2960,7 +3032,7 @@ fib_test_v4 (void)
tm->hw[0]->sw_if_index,
~0, // invalid fib index
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
FIB_TEST(!dpo_cmp(dpo2, load_balance_get_bucket_i(lb, 0)),
@@ -2987,7 +3059,7 @@ fib_test_v4 (void)
~0,
fib_index,
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_RESOLVE_VIA_HOST);
fei = fib_table_lookup_exact_match(fib_index, &bgp_200_pfx);
@@ -3055,7 +3127,7 @@ fib_test_v4 (void)
tm->hw[0]->sw_if_index,
~0,
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fib_table_entry_path_remove(fib_index,
@@ -3133,7 +3205,7 @@ fib_test_v4 (void)
tm->hw[0]->sw_if_index,
~0,
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fib_table_entry_path_add(fib_index,
&pfx_4_4_4_4_s_32,
@@ -3144,7 +3216,7 @@ fib_test_v4 (void)
tm->hw[0]->sw_if_index,
~0,
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fib_table_entry_path_add(fib_index,
&pfx_4_4_4_4_s_32,
@@ -3155,7 +3227,7 @@ fib_test_v4 (void)
tm->hw[0]->sw_if_index,
~0,
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
FIB_TEST(FIB_NODE_INDEX_INVALID !=
fib_table_lookup_exact_match(fib_index, &pfx_4_4_4_4_s_32),
@@ -3240,7 +3312,7 @@ fib_test_v4 (void)
~0,
fib_index,
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup_exact_match(fib_index, &pfx_4_4_4_4_s_32);
@@ -3300,7 +3372,7 @@ fib_test_v4 (void)
~0,
fib_index,
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_entry_path_add(fib_index,
&pfx_34_1_1_1_s_32,
@@ -3311,7 +3383,7 @@ fib_test_v4 (void)
~0,
fib_index,
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
FIB_TEST_REC_FORW(&pfx_34_1_1_1_s_32, &pfx_34_34_1_1_s_32, 0);
fib_table_entry_delete_index(fei, FIB_SOURCE_API);
@@ -3389,7 +3461,7 @@ fib_test_v4 (void)
tm->hw[0]->sw_if_index,
fib_index,
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup_exact_match(fib_index, &pfx_4_1_1_1_s_32);
@@ -3443,7 +3515,7 @@ fib_test_v4 (void)
tm->hw[0]->sw_if_index,
fib_index,
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup_exact_match(0, &pfx_2001_s_64);
@@ -3684,7 +3756,7 @@ fib_test_v6 (void)
tm->hw[0]->sw_if_index,
~0,
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup_exact_match(fib_index, &local_pfx);
@@ -3715,7 +3787,7 @@ fib_test_v6 (void)
tm->hw[0]->sw_if_index,
~0, // invalid fib index
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup(fib_index, &local_pfx);
@@ -3760,7 +3832,7 @@ fib_test_v6 (void)
tm->hw[0]->sw_if_index,
~0,
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup(fib_index, &pfx_0_0);
@@ -3881,7 +3953,7 @@ fib_test_v6 (void)
tm->hw[0]->sw_if_index,
~0,
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup(fib_index, &pfx_2001_1_2_s_128);
@@ -3920,7 +3992,7 @@ fib_test_v6 (void)
tm->hw[0]->sw_if_index,
~0,
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup(fib_index, &pfx_2001_1_3_s_128);
@@ -3974,7 +4046,7 @@ fib_test_v6 (void)
tm->hw[0]->sw_if_index,
~0,
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup(fib_index, &pfx_2001_a_s_64);
ai = fib_entry_get_adj(fei);
@@ -3988,7 +4060,7 @@ fib_test_v6 (void)
tm->hw[0]->sw_if_index,
~0,
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup(fib_index, &pfx_2001_b_s_64);
ai = fib_entry_get_adj(fei);
@@ -4023,7 +4095,7 @@ fib_test_v6 (void)
tm->hw[0]->sw_if_index,
~0,
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
FIB_TEST(fei == fib_table_lookup_exact_match(0, &pfx_1_1_1_1_s_32),
"1.1.1.1/32 o v6 route present");
@@ -4061,7 +4133,7 @@ fib_test_v6 (void)
tm->hw[0]->sw_if_index,
~0,
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup_exact_match(fib_index, &pfx_2001_c_s_64);
FIB_TEST((FIB_NODE_INDEX_INVALID != fei), "attached route present");
@@ -4163,7 +4235,7 @@ fib_test_v6 (void)
tm->hw[1]->sw_if_index,
~0,
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup_exact_match(fib_index, &connected_pfx);
FIB_TEST((FIB_NODE_INDEX_INVALID != fei), "attached interface route present");
@@ -4182,7 +4254,7 @@ fib_test_v6 (void)
tm->hw[0]->sw_if_index,
~0, // invalid fib index
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup(fib_index, &connected_pfx);
@@ -4462,429 +4534,6 @@ fib_test_v6 (void)
}
/*
- * Test the recursive route route handling for GRE tunnels
- */
-static void
-fib_test_gre (void)
-{
- /* fib_node_index_t fei; */
- /* u32 fib_index = 0; */
- /* test_main_t *tm; */
- /* u32 ii; */
-
- /* tm = &test_main; */
-
- /* for (ii = 0; ii < 4; ii++) */
- /* { */
- /* ip4_main.fib_index_by_sw_if_index[tm->hw[ii]->sw_if_index] = 0; */
- /* } */
-
- /* /\* */
- /* * add interface routes. We'll assume this works. It's more rigorously */
- /* * tested elsewhere. */
- /* *\/ */
- /* fib_prefix_t local_pfx = { */
- /* .fp_len = 24, */
- /* .fp_proto = FIB_PROTOCOL_IP4, */
- /* .fp_addr = { */
- /* .ip4 = { */
- /* /\* 10.10.10.10 *\/ */
- /* .as_u32 = clib_host_to_net_u32(0x0a0a0a0a), */
- /* }, */
- /* }, */
- /* }; */
-
- /* fib_table_entry_update_one_path(fib_index, &local_pfx, */
- /* FIB_SOURCE_INTERFACE, */
- /* (FIB_ENTRY_FLAG_CONNECTED | */
- /* FIB_ENTRY_FLAG_ATTACHED), */
- /* NULL, */
- /* tm->hw[0]->sw_if_index, */
- /* ~0, */
- /* 1, */
- /* FIB_ROUTE_PATH_FLAG_NONE); */
- /* fei = fib_table_lookup_exact_match(fib_index, &local_pfx); */
- /* FIB_TEST((FIB_NODE_INDEX_INVALID != fei), */
- /* "attached interface route present"); */
-
- /* local_pfx.fp_len = 32; */
- /* fib_table_entry_update_one_path(fib_index, &local_pfx, */
- /* FIB_SOURCE_INTERFACE, */
- /* (FIB_ENTRY_FLAG_CONNECTED | */
- /* FIB_ENTRY_FLAG_LOCAL), */
- /* NULL, */
- /* tm->hw[0]->sw_if_index, */
- /* ~0, // invalid fib index */
- /* 1, */
- /* FIB_ROUTE_PATH_FLAG_NONE); */
- /* fei = fib_table_lookup_exact_match(fib_index, &local_pfx); */
-
- /* FIB_TEST((FIB_NODE_INDEX_INVALID != fei), */
- /* "local interface route present"); */
-
- /* fib_prefix_t local2_pfx = { */
- /* .fp_len = 24, */
- /* .fp_proto = FIB_PROTOCOL_IP4, */
- /* .fp_addr = { */
- /* .ip4 = { */
- /* /\* 10.10.11.11 *\/ */
- /* .as_u32 = clib_host_to_net_u32(0x0a0a0b0b), */
- /* }, */
- /* }, */
- /* }; */
-
- /* fib_table_entry_update_one_path(fib_index, &local2_pfx, */
- /* FIB_SOURCE_INTERFACE, */
- /* (FIB_ENTRY_FLAG_CONNECTED | */
- /* FIB_ENTRY_FLAG_ATTACHED), */
- /* NULL, */
- /* tm->hw[1]->sw_if_index, */
- /* ~0, */
- /* 1, */
- /* FIB_ROUTE_PATH_FLAG_NONE); */
- /* fei = fib_table_lookup_exact_match(fib_index, &local2_pfx); */
- /* FIB_TEST((FIB_NODE_INDEX_INVALID != fei), */
- /* "attached interface route present"); */
-
- /* local2_pfx.fp_len = 32; */
- /* fib_table_entry_update_one_path(fib_index, &local2_pfx, */
- /* FIB_SOURCE_INTERFACE, */
- /* (FIB_ENTRY_FLAG_CONNECTED | */
- /* FIB_ENTRY_FLAG_LOCAL), */
- /* NULL, */
- /* tm->hw[0]->sw_if_index, */
- /* ~0, // invalid fib index */
- /* 1, */
- /* FIB_ROUTE_PATH_FLAG_NONE); */
- /* fei = fib_table_lookup_exact_match(fib_index, &local2_pfx); */
-
- /* FIB_TEST((FIB_NODE_INDEX_INVALID != fei), */
- /* "local interface route present"); */
-
- /* /\* */
- /* * Add the route that will be used to resolve the tunnel's destination */
- /* *\/ */
- /* fib_prefix_t route_pfx = { */
- /* .fp_len = 24, */
- /* .fp_proto = FIB_PROTOCOL_IP4, */
- /* .fp_addr = { */
- /* .ip4 = { */
- /* /\* 1.1.1.0/24 *\/ */
- /* .as_u32 = clib_host_to_net_u32(0x01010100), */
- /* }, */
- /* }, */
- /* }; */
- /* /\* 10.10.10.2 *\/ */
- /* ip46_address_t nh_10_10_10_2 = { */
- /* .ip4.as_u32 = clib_host_to_net_u32(0x0a0a0a02), */
- /* }; */
-
- /* fib_table_entry_path_add(fib_index, &route_pfx, */
- /* FIB_SOURCE_API, */
- /* FIB_ENTRY_FLAG_NONE, */
- /* &nh_10_10_10_2, */
- /* tm->hw[0]->sw_if_index, */
- /* ~0, */
- /* 1, */
- /* FIB_ROUTE_PATH_FLAG_NONE); */
- /* FIB_TEST((FIB_NODE_INDEX_INVALID != */
- /* fib_table_lookup_exact_match(fib_index, &local_pfx)), */
- /* "route present"); */
-
- /* /\* */
- /* * Add a tunnel */
- /* *\/ */
- /* /\* 1.1.1.1 *\/ */
- /* fib_prefix_t tun_dst_pfx = { */
- /* .fp_len = 32, */
- /* .fp_proto = FIB_PROTOCOL_IP4, */
- /* .fp_addr = { */
- /* .ip4.as_u32 = clib_host_to_net_u32(0x01010101), */
- /* }, */
- /* }; */
- /* /\* 10.10.10.10 *\/ */
- /* ip4_address_t tun_src = { */
- /* .as_u32 = clib_host_to_net_u32(0x0a0a0a0a), */
- /* }; */
- /* /\* 172.16.0.1 *\/ */
- /* ip4_address_t tun_itf = { */
- /* .as_u32 = clib_host_to_net_u32(0xac100001), */
- /* }; */
- /* fib_prefix_t tun_itf_pfx = { */
- /* .fp_len = 30, */
- /* .fp_proto = FIB_PROTOCOL_IP4, */
- /* .fp_addr = { */
- /* .ip4 = tun_itf, */
- /* }, */
- /* }; */
- /* u32 *encap_labels = NULL; */
- /* u32 label = 0xbaba; */
- /* u32 encap_index; */
- /* u32 tunnel_sw_if_index; */
-
- /* int rv; */
-
- /* /\* */
- /* * First we need the MPLS Encap present */
- /* * */
- /* * Pretty sure this is broken. the wiki say the 1st aparamter address */
- /* * should be the tunnel's interface address, which makes some sense. But */
- /* * the code for tunnel creation checks for the tunnel's destination */
- /* * address. curious... */
- /* *\/ */
- /* vec_add1(encap_labels, label); */
- /* rv = vnet_mpls_add_del_encap(&tun_dst_pfx.fp_addr.ip4, */
- /* 0, // inner VRF */
- /* encap_labels, */
- /* ~0, // policy_tunnel_index, */
- /* 0, // no_dst_hash, */
- /* &encap_index, */
- /* 1); // ADD */
- /* FIB_TEST((0 == rv), "MPLS encap created"); */
-
- /* /\* */
- /* * now create the tunnel */
- /* *\/ */
- /* rv = vnet_mpls_gre_add_del_tunnel(&tun_src, */
- /* &tun_dst_pfx.fp_addr.ip4, */
- /* &tun_itf_pfx.fp_addr.ip4, */
- /* tun_itf_pfx.fp_len, */
- /* 0, // inner VRF */
- /* 0, // outer VRF */
- /* &tunnel_sw_if_index, */
- /* 0, // l2 only */
- /* 1); // ADD */
- /* FIB_TEST((0 == rv), "Tunnel created"); */
-
- /* /\* */
- /* * add it again. just for giggles. */
- /* *\/ */
- /* rv = vnet_mpls_gre_add_del_tunnel(&tun_src, */
- /* &tun_dst_pfx.fp_addr.ip4, */
- /* &tun_itf_pfx.fp_addr.ip4, */
- /* tun_itf_pfx.fp_len, */
- /* 0, // inner VRF */
- /* 0, // outer VRF */
- /* &tunnel_sw_if_index, */
- /* 0, // l2 only */
- /* 1); // ADD */
- /* FIB_TEST((0 != rv), "Duplicate Tunnel not created"); */
-
- /* /\* */
- /* * Find the route added for the tunnel subnet and check that */
- /* * it has a midchin adj that is stacked on the adj used to reach the */
- /* * tunnel destination */
- /* *\/ */
- /* ip_adjacency_t *midchain_adj, *route_adj, *adjfib_adj; */
- /* adj_index_t midchain_ai, route_ai, adjfib_ai1, adjfib_ai2; */
- /* ip_lookup_main_t *lm; */
-
- /* lm = &ip4_main.lookup_main; */
-
- /* fei = fib_table_lookup_exact_match(fib_index, &tun_itf_pfx); */
- /* FIB_TEST((FIB_NODE_INDEX_INVALID != fei), "tun itf route present"); */
- /* midchain_ai = fib_entry_contribute_forwarding(fei); */
- /* midchain_adj = adj_get(midchain_ai); */
-
- /* FIB_TEST((IP_LOOKUP_NEXT_MIDCHAIN == midchain_adj->lookup_next_index), */
- /* "Tunnel interface links to midchain"); */
-
- /* fei = fib_table_lookup_exact_match(fib_index, &route_pfx); */
- /* route_ai = fib_entry_contribute_forwarding(fei); */
- /* FIB_TEST((midchain_adj->sub_type.midchain.adj_index == route_ai), */
- /* "tunnel midchain it stacked on route adj"); */
-
- /* /\* */
- /* * update the route to the tunnel's destination to load-balance via */
- /* * interface 1. */
- /* *\/ */
- /* /\* 10.10.11.2 *\/ */
- /* ip46_address_t nh_10_10_11_2 = { */
- /* .ip4.as_u32 = clib_host_to_net_u32(0x0a0a0b02), */
- /* }; */
-
- /* fib_table_entry_path_add(fib_index, &route_pfx, */
- /* FIB_SOURCE_API, */
- /* FIB_ENTRY_FLAG_NONE, */
- /* &nh_10_10_11_2, */
- /* tm->hw[1]->sw_if_index, */
- /* ~0, */
- /* 1, */
- /* FIB_ROUTE_PATH_FLAG_NONE); */
-
- /* /\* */
- /* * the tunnels midchain should have re-stacked. This tests that the */
- /* * route re-resolution backwalk works to a tunnel interface. */
- /* *\/ */
- /* fei = fib_table_lookup_exact_match(fib_index, &route_pfx); */
- /* FIB_TEST((route_ai != fib_entry_contribute_forwarding(fei)), "route changed"); */
- /* route_ai = fib_entry_contribute_forwarding(fei); */
-
- /* midchain_adj = adj_get(midchain_ai); */
-
- /* FIB_TEST((midchain_adj->sub_type.midchain.adj_index == route_ai), */
- /* "tunnel midchain has re-stacked on route adj"); */
-
- /* route_adj = adj_get(route_ai); */
-
- /* FIB_TEST((2 == route_adj->n_adj), "Route adj is multipath"); */
-
- /* /\* */
- /* * At this stage both nieghbour adjs are incomplete, so the same should */
- /* * be true of the multipath adj */
- /* *\/ */
- /* FIB_TEST((IP_LOOKUP_NEXT_ARP == route_adj->lookup_next_index), */
- /* "Adj0 is ARP: %d", route_adj->lookup_next_index); */
- /* FIB_TEST((IP_LOOKUP_NEXT_ARP == (route_adj+1)->lookup_next_index), */
- /* "Adj1 is ARP"); */
-
- /* /\* */
- /* * do the equivalent of creating an ARP entry for 10.10.10.2. */
- /* * This will complete the adj, and this */
- /* * change should be refelct in the multipath too. */
- /* *\/ */
- /* u8* rewrite = NULL, byte = 0xd; */
- /* vec_add(rewrite, &byte, 6); */
-
- /* adjfib_ai1 = adj_nbr_add_or_lock(FIB_PROTOCOL_IP4, */
- /* VNET_LINK_IP4, */
- /* &nh_10_10_10_2, */
- /* tm->hw[0]->sw_if_index); */
- /* adj_nbr_update_rewrite(FIB_PROTOCOL_IP4, */
- /* adjfib_ai1, */
- /* rewrite); */
- /* adjfib_adj = adj_get(adjfib_ai1); */
- /* FIB_TEST((IP_LOOKUP_NEXT_REWRITE == adjfib_adj->lookup_next_index), */
- /* "Adj-fib10 adj is rewrite"); */
-
- /* adjfib_ai2 = adj_nbr_add_or_lock(FIB_PROTOCOL_IP4, */
- /* VNET_LINK_IP4, */
- /* &nh_10_10_11_2, */
- /* tm->hw[1]->sw_if_index); */
- /* adj_nbr_update_rewrite(FIB_PROTOCOL_IP4, */
- /* adjfib_ai2, */
- /* rewrite); */
-
- /* adjfib_adj = adj_get(adjfib_ai2); */
-
- /* FIB_TEST((IP_LOOKUP_NEXT_REWRITE == adjfib_adj->lookup_next_index), */
- /* "Adj-fib11 adj is rewrite"); */
-
- /* fei = fib_table_lookup_exact_match(fib_index, &route_pfx); */
- /* FIB_TEST((route_ai != fib_entry_contribute_forwarding(fei)), "route changed"); */
- /* route_ai = fib_entry_contribute_forwarding(fei); */
- /* route_adj = adj_get(route_ai); */
- /* FIB_TEST((IP_LOOKUP_NEXT_REWRITE == route_adj->lookup_next_index), */
- /* "Adj0 is rewrite"); */
- /* FIB_TEST((IP_LOOKUP_NEXT_REWRITE == (route_adj+1)->lookup_next_index), */
- /* "Adj1 is rewrite"); */
-
- /* /\* */
- /* * CLEANUP */
- /* *\/ */
- /* adj_index_t drop_ai = adj_get_special(FIB_PROTOCOL_IP4, */
- /* ADJ_SPECIAL_TYPE_DROP); */
-
- /* /\* */
- /* * remove the route that the tunnel resovles via. expect */
- /* * it to now resolve via the default route, which is drop */
- /* *\/ */
- /* fib_table_entry_path_remove(fib_index, &route_pfx, */
- /* FIB_SOURCE_API, */
- /* &nh_10_10_10_2, */
- /* tm->hw[0]->sw_if_index, */
- /* ~0, */
- /* 1, */
- /* FIB_ROUTE_PATH_FLAG_NONE); */
- /* fib_table_entry_path_remove(fib_index, &route_pfx, */
- /* FIB_SOURCE_API, */
- /* &nh_10_10_11_2, */
- /* tm->hw[1]->sw_if_index, */
- /* ~0, */
- /* 1, */
- /* FIB_ROUTE_PATH_FLAG_NONE); */
- /* FIB_TEST((FIB_NODE_INDEX_INVALID != */
- /* fib_table_lookup_exact_match(fib_index, &local_pfx)), */
- /* "route present"); */
- /* midchain_adj = adj_get(midchain_ai); */
- /* FIB_TEST((midchain_adj->sub_type.midchain.adj_index == drop_ai), */
- /* "tunnel midchain has re-stacked on drop"); */
-
- /* /\* */
- /* * remove the tunnel and its MPLS encaps */
- /* *\/ */
- /* rv = vnet_mpls_gre_add_del_tunnel(&tun_src, */
- /* &tun_dst_pfx.fp_addr.ip4, */
- /* &tun_itf_pfx.fp_addr.ip4, */
- /* tun_itf_pfx.fp_len, */
- /* 0, // inner VRF */
- /* 0, // outer VRF */
- /* &tunnel_sw_if_index, */
- /* 0, // l2 only */
- /* 0); // DEL */
- /* FIB_TEST((0 == rv), "Tunnel removed"); */
- /* rv = vnet_mpls_gre_add_del_tunnel(&tun_src, */
- /* &tun_dst_pfx.fp_addr.ip4, */
- /* &tun_itf_pfx.fp_addr.ip4, */
- /* tun_itf_pfx.fp_len, */
- /* 0, // inner VRF */
- /* 0, // outer VRF */
- /* &tunnel_sw_if_index, */
- /* 0, // l2 only */
- /* 0); // DEL */
- /* FIB_TEST((0 != rv), "No existant Tunnel not removed"); */
-
- /* rv = vnet_mpls_add_del_encap(&tun_dst_pfx.fp_addr.ip4, */
- /* 0, // inner VRF */
- /* encap_labels, */
- /* ~0, // policy_tunnel_index, */
- /* 0, // no_dst_hash, */
- /* NULL, */
- /* 0); // ADD */
- /* FIB_TEST((0 == rv), "MPLS encap deleted"); */
-
- /* vec_free(encap_labels); */
-
- /* /\* */
- /* * no more FIB entries expected */
- /* *\/ */
- /* fei = fib_table_lookup_exact_match(fib_index, &tun_itf_pfx); */
- /* FIB_TEST((FIB_NODE_INDEX_INVALID == fei), "tun itf route removed"); */
- /* fei = fib_table_lookup_exact_match(fib_index, &tun_dst_pfx); */
- /* FIB_TEST((FIB_NODE_INDEX_INVALID == fei), "tun dst route removed"); */
-
- /* /\* */
- /* * CLEANUP the connecteds */
- /* *\/ */
- /* local2_pfx.fp_len = 24; */
- /* fib_table_entry_delete(fib_index, &local2_pfx, */
- /* FIB_SOURCE_INTERFACE); */
- /* fei = fib_table_lookup_exact_match(fib_index, &local2_pfx); */
- /* FIB_TEST((FIB_NODE_INDEX_INVALID == fei), */
- /* "attached interface route remove"); */
-
- /* local2_pfx.fp_len = 32; */
- /* fib_table_entry_special_remove(fib_index, &local2_pfx, */
- /* FIB_SOURCE_INTERFACE); */
- /* fei = fib_table_lookup_exact_match(fib_index, &local2_pfx); */
- /* FIB_TEST((FIB_NODE_INDEX_INVALID == fei), */
- /* "local interface route removed"); */
- /* local_pfx.fp_len = 24; */
- /* fib_table_entry_delete(fib_index, &local_pfx, */
- /* FIB_SOURCE_INTERFACE); */
- /* fei = fib_table_lookup_exact_match(fib_index, &local_pfx); */
- /* FIB_TEST((FIB_NODE_INDEX_INVALID == fei), */
- /* "attached interface route remove"); */
-
- /* local_pfx.fp_len = 32; */
- /* fib_table_entry_special_remove(fib_index, &local_pfx, */
- /* FIB_SOURCE_INTERFACE); */
- /* fei = fib_table_lookup_exact_match(fib_index, &local_pfx); */
- /* FIB_TEST((FIB_NODE_INDEX_INVALID == fei), */
- /* "local interface route removed"); */
-}
-
-/*
* Test Attached Exports
*/
static void
@@ -4931,7 +4580,7 @@ fib_test_ae (void)
tm->hw[0]->sw_if_index,
~0,
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup_exact_match(fib_index, &local_pfx);
FIB_TEST((FIB_NODE_INDEX_INVALID != fei),
@@ -4947,7 +4596,7 @@ fib_test_ae (void)
tm->hw[0]->sw_if_index,
~0, // invalid fib index
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup_exact_match(fib_index, &local_pfx);
@@ -4976,7 +4625,7 @@ fib_test_ae (void)
tm->hw[0]->sw_if_index,
~0, // invalid fib index
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup(fib_index, &pfx_10_10_10_1_s_32);
@@ -5003,7 +4652,7 @@ fib_test_ae (void)
tm->hw[0]->sw_if_index,
~0, // invalid fib index
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup_exact_match(import_fib_index1, &local_pfx);
FIB_TEST((FIB_NODE_INDEX_INVALID != fei), "attached export created");
@@ -5045,7 +4694,7 @@ fib_test_ae (void)
tm->hw[0]->sw_if_index,
~0, // invalid fib index
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup_exact_match(fib_index, &pfx_10_10_10_2_s_32);
FIB_TEST((FIB_NODE_INDEX_INVALID != fei), "ADJ-fib2 present");
@@ -5076,7 +4725,7 @@ fib_test_ae (void)
tm->hw[0]->sw_if_index,
~0, // invalid fib index
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup_exact_match(import_fib_index1, &local_pfx);
FIB_TEST((FIB_NODE_INDEX_INVALID != fei), "attached export created");
@@ -5113,7 +4762,7 @@ fib_test_ae (void)
tm->hw[0]->sw_if_index,
~0, // invalid fib index
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup_exact_match(fib_index, &pfx_10_10_10_3_s_32);
FIB_TEST((FIB_NODE_INDEX_INVALID != fei), "ADJ-fib3 present");
@@ -5185,7 +4834,7 @@ fib_test_ae (void)
tm->hw[0]->sw_if_index,
~0, // invalid fib index
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup_exact_match(import_fib_index1, &pfx_10_10_10_1_s_32);
FIB_TEST((FIB_NODE_INDEX_INVALID == fei), "ADJ-fib1 removed from FIB1");
@@ -5208,7 +4857,7 @@ fib_test_ae (void)
tm->hw[0]->sw_if_index,
~0, // invalid fib index
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup_exact_match(import_fib_index1, &pfx_10_10_10_1_s_32);
FIB_TEST((FIB_NODE_INDEX_INVALID != fei), "ADJ-fib1 imported in FIB1");
@@ -5240,7 +4889,7 @@ fib_test_ae (void)
tm->hw[0]->sw_if_index,
~0, // invalid fib index
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
dpo = fib_entry_contribute_ip_forwarding(fei);
@@ -5296,7 +4945,7 @@ fib_test_ae (void)
tm->hw[0]->sw_if_index,
~0, // invalid fib index
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
dpo = fib_entry_contribute_ip_forwarding(fei);
@@ -5332,7 +4981,7 @@ fib_test_ae (void)
tm->hw[0]->sw_if_index,
~0, // invalid fib index
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup_exact_match(fib_index, &pfx_10_10_10_1_s_32);
@@ -5371,7 +5020,7 @@ fib_test_ae (void)
tm->hw[0]->sw_if_index,
~0,
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup_exact_match(fib_index, &pfx_10_10_10_1_s_32);
@@ -5430,6 +5079,7 @@ fib_test_ae (void)
adj_nbr_db_size());
}
+
/*
* Test the recursive route route handling for GRE tunnels
*/
@@ -5440,7 +5090,7 @@ fib_test_label (void)
const u32 fib_index = 0;
test_main_t *tm;
ip4_main_t *im;
- int lb_count;
+ int lb_count, ii;
lb_count = pool_elts(load_balance_pool);
tm = &test_main;
@@ -5476,7 +5126,7 @@ fib_test_label (void)
tm->hw[0]->sw_if_index,
~0,
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup_exact_match(fib_index, &local0_pfx);
FIB_TEST((FIB_NODE_INDEX_INVALID != fei),
@@ -5492,7 +5142,7 @@ fib_test_label (void)
tm->hw[0]->sw_if_index,
~0, // invalid fib index
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup_exact_match(fib_index, &local0_pfx);
@@ -5522,7 +5172,7 @@ fib_test_label (void)
tm->hw[1]->sw_if_index,
~0,
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup_exact_match(fib_index, &local1_pfx);
FIB_TEST((FIB_NODE_INDEX_INVALID != fei),
@@ -5538,7 +5188,7 @@ fib_test_label (void)
tm->hw[1]->sw_if_index,
~0, // invalid fib index
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup_exact_match(fib_index, &local1_pfx);
@@ -5608,6 +5258,9 @@ fib_test_label (void)
.eos = MPLS_NON_EOS,
},
};
+ mpls_label_t *l99 = NULL;
+ vec_add1(l99, 99);
+
fib_table_entry_update_one_path(fib_index,
&pfx_1_1_1_1_s_32,
FIB_SOURCE_API,
@@ -5617,7 +5270,7 @@ fib_test_label (void)
tm->hw[0]->sw_if_index,
~0, // invalid fib index
1,
- 99,
+ l99,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup(fib_index, &pfx_1_1_1_1_s_32);
@@ -5644,6 +5297,8 @@ fib_test_label (void)
.adj = ai_mpls_10_10_11_1,
},
};
+ mpls_label_t *l_imp_null = NULL;
+ vec_add1(l_imp_null, MPLS_IETF_IMPLICIT_NULL_LABEL);
fei = fib_table_entry_path_add(fib_index,
&pfx_1_1_1_1_s_32,
@@ -5654,7 +5309,7 @@ fib_test_label (void)
tm->hw[1]->sw_if_index,
~0, // invalid fib index
1,
- MPLS_IETF_IMPLICIT_NULL_LABEL,
+ l_imp_null,
FIB_ROUTE_PATH_FLAG_NONE);
FIB_TEST(fib_test_validate_entry(fei,
@@ -5732,7 +5387,7 @@ fib_test_label (void)
tm->hw[1]->sw_if_index,
~0, // invalid fib index
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
FIB_TEST(fib_test_validate_entry(fei,
@@ -5800,6 +5455,8 @@ fib_test_label (void)
.eos = MPLS_EOS,
},
};
+ mpls_label_t *l1600 = NULL;
+ vec_add1(l1600, 1600);
fib_table_entry_update_one_path(fib_index,
&pfx_2_2_2_2_s_32,
@@ -5810,7 +5467,7 @@ fib_test_label (void)
~0,
fib_index,
1,
- 1600,
+ l1600,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup(fib_index, &pfx_2_2_2_2_s_32);
@@ -6063,6 +5720,9 @@ fib_test_label (void)
/*
* add back the path with the valid label
*/
+ l99 = NULL;
+ vec_add1(l99, 99);
+
fib_table_entry_path_add(fib_index,
&pfx_1_1_1_1_s_32,
FIB_SOURCE_API,
@@ -6072,7 +5732,7 @@ fib_test_label (void)
tm->hw[0]->sw_if_index,
~0, // invalid fib index
1,
- 99,
+ l99,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup(fib_index, &pfx_1_1_1_1_s_32);
@@ -6191,6 +5851,8 @@ fib_test_label (void)
.eos = MPLS_EOS,
},
};
+ mpls_label_t *l101 = NULL;
+ vec_add1(l101, 101);
fei = fib_table_entry_update_one_path(fib_index,
&pfx_1_1_1_2_s_32,
@@ -6201,7 +5863,7 @@ fib_test_label (void)
tm->hw[0]->sw_if_index,
~0, // invalid fib index
1,
- 101,
+ l101,
FIB_ROUTE_PATH_FLAG_NONE);
FIB_TEST(fib_test_validate_entry(fei,
@@ -6229,6 +5891,9 @@ fib_test_label (void)
.eos = MPLS_EOS,
},
};
+ mpls_label_t *l1601 = NULL;
+ vec_add1(l1601, 1601);
+
l1600_eos_o_1_1_1_1.label_o_lb.lb = non_eos_1_1_1_1.dpoi_index;
fei = fib_table_entry_path_add(fib_index,
@@ -6240,7 +5905,7 @@ fib_test_label (void)
~0,
fib_index,
1,
- 1601,
+ l1601,
FIB_ROUTE_PATH_FLAG_NONE);
FIB_TEST(fib_test_validate_entry(fei,
@@ -6256,6 +5921,9 @@ fib_test_label (void)
* update the via-entry so it no longer has an imp-null path.
* the LB for the recursive can use an imp-null
*/
+ l_imp_null = NULL;
+ vec_add1(l_imp_null, MPLS_IETF_IMPLICIT_NULL_LABEL);
+
fei = fib_table_entry_update_one_path(fib_index,
&pfx_1_1_1_2_s_32,
FIB_SOURCE_API,
@@ -6265,7 +5933,7 @@ fib_test_label (void)
tm->hw[1]->sw_if_index,
~0, // invalid fib index
1,
- MPLS_IETF_IMPLICIT_NULL_LABEL,
+ l_imp_null,
FIB_ROUTE_PATH_FLAG_NONE);
FIB_TEST(fib_test_validate_entry(fei,
@@ -6298,7 +5966,7 @@ fib_test_label (void)
tm->hw[1]->sw_if_index,
~0, // invalid fib index
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
FIB_TEST(fib_test_validate_entry(fei,
@@ -6340,7 +6008,7 @@ fib_test_label (void)
~0,
fib_index,
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fib_entry_contribute_forwarding(fib_table_lookup(fib_index,
@@ -6384,7 +6052,7 @@ fib_test_label (void)
~0,
fib_index,
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
fei = fib_table_lookup(fib_index, &pfx_2_2_2_4_s_32);
@@ -6398,6 +6066,54 @@ fib_test_label (void)
dpo_reset(&ip_1_1_1_1);
/*
+ * Create an entry with a deep label stack
+ */
+ fib_prefix_t pfx_2_2_5_5_s_32 = {
+ .fp_len = 32,
+ .fp_proto = FIB_PROTOCOL_IP4,
+ .fp_addr = {
+ .ip4.as_u32 = clib_host_to_net_u32(0x02020505),
+ },
+ };
+ fib_test_lb_bucket_t ls_eos_o_10_10_10_1 = {
+ .type = FT_LB_LABEL_STACK_O_ADJ,
+ .label_stack_o_adj = {
+ .adj = ai_mpls_10_10_11_1,
+ .label_stack_size = 8,
+ .label_stack = {
+ 200, 201, 202, 203, 204, 205, 206, 207
+ },
+ .eos = MPLS_EOS,
+ },
+ };
+ mpls_label_t *label_stack = NULL;
+ vec_validate(label_stack, 7);
+ for (ii = 0; ii < 8; ii++)
+ {
+ label_stack[ii] = ii + 200;
+ }
+
+ fei = fib_table_entry_update_one_path(fib_index,
+ &pfx_2_2_5_5_s_32,
+ FIB_SOURCE_API,
+ FIB_ENTRY_FLAG_NONE,
+ FIB_PROTOCOL_IP4,
+ &nh_10_10_11_1,
+ tm->hw[1]->sw_if_index,
+ ~0, // invalid fib index
+ 1,
+ label_stack,
+ FIB_ROUTE_PATH_FLAG_NONE);
+
+ FIB_TEST(fib_test_validate_entry(fei,
+ FIB_FORW_CHAIN_TYPE_UNICAST_IP4,
+ 1,
+ &ls_eos_o_10_10_10_1),
+ "2.2.5.5/32 LB 1 buckets via: "
+ "adj 10.10.11.1");
+ fib_table_entry_delete_index(fei, FIB_SOURCE_API);
+
+ /*
* cleanup
*/
fib_table_entry_delete(fib_index,
@@ -6950,6 +6666,7 @@ lfib_test_deagg (void)
lookup_dpo_t *lkd;
test_main_t *tm;
int lb_count;
+ adj_index_t ai_mpls_10_10_10_1;
tm = &test_main;
lb_count = pool_elts(load_balance_pool);
@@ -6964,6 +6681,14 @@ lfib_test_deagg (void)
tm->hw[0]->sw_if_index,
1);
+ ip46_address_t nh_10_10_10_1 = {
+ .ip4.as_u32 = clib_host_to_net_u32(0x0a0a0a01),
+ };
+ ai_mpls_10_10_10_1 = adj_nbr_add_or_lock(FIB_PROTOCOL_IP4,
+ VNET_LINK_MPLS,
+ &nh_10_10_10_1,
+ tm->hw[0]->sw_if_index);
+
/*
* Test the specials stack properly.
*/
@@ -7023,7 +6748,7 @@ lfib_test_deagg (void)
~0,
fib_index,
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
FIB_TEST((lfe == fib_table_lookup(lfib_index, &pfx)),
@@ -7074,7 +6799,7 @@ lfib_test_deagg (void)
~0,
lfib_index,
1,
- MPLS_LABEL_INVALID,
+ NULL,
FIB_ROUTE_PATH_FLAG_NONE);
FIB_TEST((lfe == fib_table_lookup(lfib_index, &pfx)),
@@ -7113,30 +6838,192 @@ lfib_test_deagg (void)
format_mpls_unicast_label, deag_label,
format_mpls_eos_bit, MPLS_EOS);
+ dpo_reset(&dpo);
- mpls_sw_interface_enable_disable(&mpls_main,
- tm->hw[0]->sw_if_index,
- 0);
+ /*
+ * An MPLS x-connect
+ */
+ fib_prefix_t pfx_1200 = {
+ .fp_len = 21,
+ .fp_proto = FIB_PROTOCOL_MPLS,
+ .fp_label = 1200,
+ .fp_eos = MPLS_NON_EOS,
+ };
+ fib_test_lb_bucket_t neos_o_10_10_10_1 = {
+ .type = FT_LB_LABEL_STACK_O_ADJ,
+ .label_stack_o_adj = {
+ .adj = ai_mpls_10_10_10_1,
+ .label_stack_size = 4,
+ .label_stack = {
+ 200, 300, 400, 500,
+ },
+ .eos = MPLS_NON_EOS,
+ },
+ };
+ dpo_id_t neos_1200 = DPO_INVALID;
+ dpo_id_t ip_1200 = DPO_INVALID;
+ mpls_label_t *l200 = NULL;
+ vec_add1(l200, 200);
+ vec_add1(l200, 300);
+ vec_add1(l200, 400);
+ vec_add1(l200, 500);
+
+ lfe = fib_table_entry_update_one_path(fib_index,
+ &pfx_1200,
+ FIB_SOURCE_API,
+ FIB_ENTRY_FLAG_NONE,
+ FIB_PROTOCOL_IP4,
+ &nh_10_10_10_1,
+ tm->hw[0]->sw_if_index,
+ ~0, // invalid fib index
+ 1,
+ l200,
+ FIB_ROUTE_PATH_FLAG_NONE);
+
+ FIB_TEST(fib_test_validate_entry(lfe,
+ FIB_FORW_CHAIN_TYPE_MPLS_NON_EOS,
+ 1,
+ &neos_o_10_10_10_1),
+ "1200/0 LB 1 buckets via: "
+ "adj 10.10.11.1");
- dpo_reset(&dpo);
/*
- * +1 for the drop LB in the MPLS tables.
+ * A recursive route via the MPLS x-connect
*/
- FIB_TEST(lb_count+1 == pool_elts(load_balance_pool),
- "Load-balance resources freed %d of %d",
- lb_count+1, pool_elts(load_balance_pool));
-}
+ fib_prefix_t pfx_2_2_2_3_s_32 = {
+ .fp_len = 32,
+ .fp_proto = FIB_PROTOCOL_IP4,
+ .fp_addr = {
+ .ip4.as_u32 = clib_host_to_net_u32(0x02020203),
+ },
+ };
+ fib_route_path_t *rpaths = NULL, rpath = {
+ .frp_proto = FIB_PROTOCOL_MPLS,
+ .frp_local_label = 1200,
+ .frp_sw_if_index = ~0, // recurive
+ .frp_fib_index = 0, // Default MPLS fib
+ .frp_weight = 1,
+ .frp_flags = FIB_ROUTE_PATH_FLAG_NONE,
+ .frp_label_stack = NULL,
+ };
+ vec_add1(rpaths, rpath);
-static clib_error_t *
-lfib_test (vlib_main_t * vm,
- unformat_input_t * input,
- vlib_cli_command_t * cmd_arg)
-{
- fib_test_mk_intf(4);
+ fib_table_entry_path_add2(fib_index,
+ &pfx_2_2_2_3_s_32,
+ FIB_SOURCE_API,
+ FIB_ENTRY_FLAG_NONE,
+ rpaths);
- lfib_test_deagg();
+ /*
+ * A labelled recursive route via the MPLS x-connect
+ */
+ fib_prefix_t pfx_2_2_2_4_s_32 = {
+ .fp_len = 32,
+ .fp_proto = FIB_PROTOCOL_IP4,
+ .fp_addr = {
+ .ip4.as_u32 = clib_host_to_net_u32(0x02020204),
+ },
+ };
+ mpls_label_t *l999 = NULL;
+ vec_add1(l999, 999);
+ rpaths[0].frp_label_stack = l999,
+
+ fib_table_entry_path_add2(fib_index,
+ &pfx_2_2_2_4_s_32,
+ FIB_SOURCE_API,
+ FIB_ENTRY_FLAG_NONE,
+ rpaths);
+
+ fib_entry_contribute_forwarding(fib_table_lookup(fib_index, &pfx_1200),
+ FIB_FORW_CHAIN_TYPE_UNICAST_IP4,
+ &ip_1200);
+ fib_entry_contribute_forwarding(fib_table_lookup(fib_index, &pfx_1200),
+ FIB_FORW_CHAIN_TYPE_MPLS_NON_EOS,
+ &neos_1200);
+
+ fib_test_lb_bucket_t ip_o_1200 = {
+ .type = FT_LB_O_LB,
+ .lb = {
+ .lb = ip_1200.dpoi_index,
+ },
+ };
+ fib_test_lb_bucket_t mpls_o_1200 = {
+ .type = FT_LB_LABEL_O_LB,
+ .label_o_lb = {
+ .lb = neos_1200.dpoi_index,
+ .label = 999,
+ .eos = MPLS_EOS,
+ },
+ };
- return (NULL);
+ lfe = fib_table_lookup(fib_index, &pfx_2_2_2_3_s_32);
+ FIB_TEST(fib_test_validate_entry(lfe,
+ FIB_FORW_CHAIN_TYPE_UNICAST_IP4,
+ 1,
+ &ip_o_1200),
+ "2.2.2.2.3/32 LB 1 buckets via: label 1200 EOS");
+ lfe = fib_table_lookup(fib_index, &pfx_2_2_2_4_s_32);
+ FIB_TEST(fib_test_validate_entry(lfe,
+ FIB_FORW_CHAIN_TYPE_UNICAST_IP4,
+ 1,
+ &mpls_o_1200),
+ "2.2.2.2.4/32 LB 1 buckets via: label 1200 non-EOS");
+
+ fib_table_entry_delete(fib_index, &pfx_1200, FIB_SOURCE_API);
+ fib_table_entry_delete(fib_index, &pfx_2_2_2_3_s_32, FIB_SOURCE_API);
+ fib_table_entry_delete(fib_index, &pfx_2_2_2_4_s_32, FIB_SOURCE_API);
+
+ dpo_reset(&neos_1200);
+ dpo_reset(&ip_1200);
+
+ /*
+ * A recursive via a label that does not exist
+ */
+ fib_test_lb_bucket_t bucket_drop = {
+ .type = FT_LB_SPECIAL,
+ .special = {
+ .adj = DPO_PROTO_MPLS,
+ },
+ };
+
+ rpaths[0].frp_label_stack = NULL;
+ lfe = fib_table_entry_path_add2(fib_index,
+ &pfx_2_2_2_4_s_32,
+ FIB_SOURCE_API,
+ FIB_ENTRY_FLAG_NONE,
+ rpaths);
+
+ fib_entry_contribute_forwarding(fib_table_lookup(fib_index, &pfx_1200),
+ FIB_FORW_CHAIN_TYPE_UNICAST_IP4,
+ &ip_1200);
+ ip_o_1200.lb.lb = ip_1200.dpoi_index;
+
+ FIB_TEST(fib_test_validate_entry(lfe,
+ FIB_FORW_CHAIN_TYPE_UNICAST_IP4,
+ 1,
+ &ip_o_1200),
+ "2.2.2.2.4/32 LB 1 buckets via: label 1200 EOS");
+ lfe = fib_table_lookup(fib_index, &pfx_1200);
+ FIB_TEST(fib_test_validate_entry(lfe,
+ FIB_FORW_CHAIN_TYPE_UNICAST_IP4,
+ 1,
+ &bucket_drop),
+ "2.2.2.4/32 LB 1 buckets via: ip4-DROP");
+
+ fib_table_entry_delete(fib_index, &pfx_2_2_2_4_s_32, FIB_SOURCE_API);
+
+ dpo_reset(&ip_1200);
+
+ /*
+ * cleanup
+ */
+ mpls_sw_interface_enable_disable(&mpls_main,
+ tm->hw[0]->sw_if_index,
+ 0);
+
+ FIB_TEST(lb_count == pool_elts(load_balance_pool),
+ "Load-balance resources freed %d of %d",
+ lb_count, pool_elts(load_balance_pool));
}
static clib_error_t *
@@ -7151,10 +7038,6 @@ fib_test (vlib_main_t * vm,
fib_test_v4();
fib_test_v6();
}
- else if (unformat (input, "gre"))
- {
- fib_test_gre();
- }
else if (unformat (input, "label"))
{
fib_test_label();
@@ -7163,6 +7046,10 @@ fib_test (vlib_main_t * vm,
{
fib_test_ae();
}
+ else if (unformat (input, "lfib"))
+ {
+ lfib_test_deagg();
+ }
else if (unformat (input, "walk"))
{
fib_test_walk();
@@ -7177,9 +7064,9 @@ fib_test (vlib_main_t * vm,
*/
fib_test_v4();
fib_test_v6();
- fib_test_gre();
fib_test_ae();
fib_test_label();
+ lfib_test_deagg();
}
return (NULL);
@@ -7191,12 +7078,6 @@ VLIB_CLI_COMMAND (test_fib_command, static) = {
.function = fib_test,
};
-VLIB_CLI_COMMAND (test_lfib_command, static) = {
- .path = "test lfib",
- .short_help = "mpls label fib unit tests - DO NOT RUN ON A LIVE SYSTEM",
- .function = lfib_test,
-};
-
clib_error_t *
fib_test_init (vlib_main_t *vm)
{