X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fplugins%2Funittest%2Ffib_test.c;h=26e2d24766697ad9a61bae6e6c47b3d6c6ddcaa4;hb=275bd796346c3b1618170f4eda36b9a41ade9c87;hp=b9b77ba479f5eae2e04d7580ca41463aa19f9aa1;hpb=1c59df770b73954468c45039ebda4491f2c2dbe6;p=vpp.git diff --git a/src/plugins/unittest/fib_test.c b/src/plugins/unittest/fib_test.c index b9b77ba479f..26e2d247666 100644 --- a/src/plugins/unittest/fib_test.c +++ b/src/plugins/unittest/fib_test.c @@ -158,10 +158,6 @@ fib_test_mk_intf (u32 ninterfaces) VNET_HW_INTERFACE_FLAG_LINK_UP); tm->hw[i] = vnet_get_hw_interface(vnet_get_main(), tm->hw_if_indicies[i]); - vec_validate (ip4_main.fib_index_by_sw_if_index, - tm->hw[i]->sw_if_index); - vec_validate (ip6_main.fib_index_by_sw_if_index, - tm->hw[i]->sw_if_index); ip4_main.fib_index_by_sw_if_index[tm->hw[i]->sw_if_index] = 0; ip6_main.fib_index_by_sw_if_index[tm->hw[i]->sw_if_index] = 0; @@ -503,8 +499,9 @@ fib_test_validate_lb_v (const load_balance_t *lb, FIB_TEST_LB((vnet_mpls_uc_get_label(hdr) == exp->label_o_adj.label), - "bucket %d stacks on label %d", + "bucket %d stacks on label %d not %d", bucket, + vnet_mpls_uc_get_label(hdr), exp->label_o_adj.label); FIB_TEST_LB((vnet_mpls_uc_get_s(hdr) == @@ -5313,7 +5310,7 @@ fib_test_ae (void) { const dpo_id_t *dpo, *dpo_drop; const u32 fib_index = 0; - fib_node_index_t fei; + fib_node_index_t dfrt, fei; test_main_t *tm; ip4_main_t *im; int res; @@ -5340,7 +5337,6 @@ fib_test_ae (void) }, }; - vec_validate(im->fib_index_by_sw_if_index, tm->hw[0]->sw_if_index); im->fib_index_by_sw_if_index[tm->hw[0]->sw_if_index] = fib_index; dpo_drop = drop_dpo_get(DPO_PROTO_IP4); @@ -5414,6 +5410,44 @@ fib_test_ae (void) import_fib_index1 = fib_table_find_or_create_and_lock(FIB_PROTOCOL_IP4, 11, FIB_SOURCE_CLI); + /* + * Add default route in the import FIB + */ + fib_prefix_t pfx_0_0_0_0_s_0 = { + .fp_len = 0, + .fp_proto = FIB_PROTOCOL_IP4, + .fp_addr = { + .ip4 = { + {0} + }, + }, + }; + + dfrt = fib_table_lookup(import_fib_index1, &pfx_0_0_0_0_s_0); + FIB_TEST((FIB_NODE_INDEX_INVALID != dfrt), "default route present"); + + fib_table_entry_path_add(import_fib_index1, + &pfx_0_0_0_0_s_0, + FIB_SOURCE_API, + FIB_ENTRY_FLAG_NONE, + DPO_PROTO_IP4, + NULL, + tm->hw[0]->sw_if_index, + ~0, // invalid fib index + 1, + NULL, + FIB_ROUTE_PATH_FLAG_NONE); + fei = fib_table_lookup(fib_index, &pfx_0_0_0_0_s_0); + FIB_TEST((FIB_NODE_INDEX_INVALID != fei), "default route present"); + FIB_TEST((fei != dfrt), "default route added"); + + /* + * delete default route and check for the presence in the import table + */ + fib_table_entry_delete(import_fib_index1, &pfx_0_0_0_0_s_0, FIB_SOURCE_API); + fei = fib_table_lookup(import_fib_index1, &pfx_0_0_0_0_s_0); + FIB_TEST((FIB_NODE_INDEX_INVALID != fei), "default route present"); + FIB_TEST((fei == dfrt), "default route removed"); /* * Add an attached route in the import FIB @@ -5869,10 +5903,14 @@ fib_test_ae (void) static int fib_test_pref (void) { - test_main_t *tm = &test_main; - int res; + test_main_t *tm; + ip4_main_t *im; + int res, i; + tm = &test_main; + im = &ip4_main; res = 0; + const fib_prefix_t pfx_1_1_1_1_s_32 = { .fp_len = 32, .fp_proto = FIB_PROTOCOL_IP4, @@ -5883,6 +5921,9 @@ fib_test_pref (void) }, }; + for (i = 0; i <= 2; i++) + im->fib_index_by_sw_if_index[tm->hw[i]->sw_if_index] = 0; + /* * 2 high, 2 medium and 2 low preference non-recursive paths */ @@ -6355,7 +6396,6 @@ fib_test_label (void) FIB_TEST((0 == adj_nbr_db_size()), "ADJ DB size is %d", adj_nbr_db_size()); - vec_validate(im->fib_index_by_sw_if_index, tm->hw[0]->sw_if_index); im->fib_index_by_sw_if_index[tm->hw[0]->sw_if_index] = fib_index; fib_table_entry_update_one_path(fib_index, &local0_pfx, @@ -6401,7 +6441,6 @@ fib_test_label (void) }, }; - vec_validate(im->fib_index_by_sw_if_index, tm->hw[1]->sw_if_index); im->fib_index_by_sw_if_index[tm->hw[1]->sw_if_index] = fib_index; fib_table_entry_update_one_path(fib_index, &local1_pfx, @@ -7381,6 +7420,73 @@ fib_test_label (void) "adj 10.10.11.1"); fib_table_entry_delete_index(fei, FIB_SOURCE_API); + /* + * A prefix with outgoing labels. We'll RR source a /32 it covers + * and test that the RR source picks up the out-going labels + */ + fib_prefix_t pfx_100_s_8 = { + .fp_len = 8, + .fp_proto = FIB_PROTOCOL_IP4, + .fp_addr = { + .ip4.as_u32 = clib_host_to_net_u32(0x64000000), + }, + }; + fib_test_lb_bucket_t l_100_eos_o_10_10_10_1 = { + .type = FT_LB_LABEL_O_ADJ, + .label_o_adj = { + .adj = ai_mpls_10_10_11_1, + .label = 1602, + .eos = MPLS_EOS, + }, + }; + fib_mpls_label_t *l1602 = NULL, fml1602 = { + .fml_value = 1602, + }; + vec_add1(l1602, fml1602); + fei = fib_table_entry_update_one_path(fib_index, + &pfx_100_s_8, + FIB_SOURCE_API, + FIB_ENTRY_FLAG_NONE, + DPO_PROTO_IP4, + &nh_10_10_11_1, + tm->hw[1]->sw_if_index, + ~0, // invalid fib index + 1, + l1602, + FIB_ROUTE_PATH_FLAG_NONE); + + FIB_TEST(!fib_test_validate_entry(fei, + FIB_FORW_CHAIN_TYPE_UNICAST_IP4, + 1, + &l_100_eos_o_10_10_10_1), + "100.0.0.0/8 LB 1 buckets via: lbl 101 " + "adj 10.10.11.1"); + + fib_prefix_t pfx_100_1_1_1_s_32 = { + .fp_len = 32, + .fp_proto = FIB_PROTOCOL_IP4, + .fp_addr = { + .ip4.as_u32 = clib_host_to_net_u32(0x64010101), + }, + }; + + fei = fib_table_entry_special_add(fib_index, + &pfx_100_1_1_1_s_32, + FIB_SOURCE_RR, + FIB_ENTRY_FLAG_NONE); + + FIB_TEST(!fib_test_validate_entry(fei, + FIB_FORW_CHAIN_TYPE_UNICAST_IP4, + 1, + &l_100_eos_o_10_10_10_1), + "100.1.1.1/32 LB 1 buckets via: " + "adj 10.10.11.1"); + + fib_table_entry_delete(fib_index, + &pfx_100_s_8, + FIB_SOURCE_API); + fib_table_entry_delete_index(fei, FIB_SOURCE_RR); + /* * cleanup */ @@ -8458,7 +8564,7 @@ lfib_test (void) mpls_table_create(MPLS_FIB_DEFAULT_TABLE_ID, FIB_SOURCE_API, NULL); mpls_sw_interface_enable_disable(&mpls_main, tm->hw[0]->sw_if_index, - 1, 1); + 1); ip46_address_t nh_10_10_10_1 = { .ip4.as_u32 = clib_host_to_net_u32(0x0a0a0a01), @@ -9029,7 +9135,7 @@ lfib_test (void) */ mpls_sw_interface_enable_disable(&mpls_main, tm->hw[0]->sw_if_index, - 0, 1); + 0); mpls_table_delete(MPLS_FIB_DEFAULT_TABLE_ID, FIB_SOURCE_API); FIB_TEST(0 == pool_elts(mpls_disp_dpo_pool), @@ -9049,12 +9155,22 @@ static int fib_test_inherit (void) { fib_node_index_t fei; + int n_feis, res, i; test_main_t *tm; - int n_feis, res; + ip4_main_t *im4; + ip6_main_t *im6; + tm = &test_main; + im4 = &ip4_main; + im6 = &ip6_main; res = 0; + + for (i = 0; i <= 2; i++) + { + im4->fib_index_by_sw_if_index[tm->hw[i]->sw_if_index] = 0; + im6->fib_index_by_sw_if_index[tm->hw[i]->sw_if_index] = 0; + } n_feis = fib_entry_pool_size(); - tm = &test_main; const ip46_address_t nh_10_10_10_1 = { .ip4.as_u32 = clib_host_to_net_u32(0x0a0a0a01),