summaryrefslogtreecommitdiffstats
path: root/src/vnet
diff options
context:
space:
mode:
authorSteven Luong <sluong@cisco.com>2021-02-08 23:48:30 -0800
committerDave Wallace <dwallacelf@gmail.com>2021-02-09 22:40:34 +0000
commit16f08657758db0f32b60cc88644b3a1c8fc28cbc (patch)
treec382af5be9c7a2598f7bc96efd92ee22698edf82 /src/vnet
parent4b47ee26cba610b26bbfc088736846541bee7be3 (diff)
l2: crash on l2_input_is_xconnect
Running vpp without any interface configured and then invoking the binary-api l2_xconnect_dump causes vpp to crash in l2_input_is_xconnect due to l2input_main.configs has no memory allocated to it, not even for the local interface which exists all the times. The reason that l2input_main.configs has no memory allocated to it was due to gerrit patch 29232 which took out a line in l2input_init /* Create the config vector */ vec_validate (mp->configs, 100); The fix is to iterate through l2input_main.configs for each interface in l2 to call l2_input_is_xconnect when dumping l2_xconnect interfaces. Type: fix Fixes: gerrit 29232 Signed-off-by: Steven Luong <sluong@cisco.com> Change-Id: I8d9cba4b7eba4c2e0c60887c4fd57d5ec3b06d3b
Diffstat (limited to 'src/vnet')
-rw-r--r--src/vnet/l2/l2_api.c18
1 files changed, 8 insertions, 10 deletions
diff --git a/src/vnet/l2/l2_api.c b/src/vnet/l2/l2_api.c
index 85e9c31e2fb..70d6eeff424 100644
--- a/src/vnet/l2/l2_api.c
+++ b/src/vnet/l2/l2_api.c
@@ -103,10 +103,8 @@ static void
vl_api_l2_xconnect_dump_t_handler (vl_api_l2_xconnect_dump_t * mp)
{
vl_api_registration_t *reg;
- vnet_main_t *vnm = vnet_get_main ();
- vnet_interface_main_t *im = &vnm->interface_main;
l2input_main_t *l2im = &l2input_main;
- vnet_sw_interface_t *swif;
+ u32 sw_if_index;
l2_input_config_t *config;
reg = vl_api_client_index_to_registration (mp->client_index);
@@ -114,13 +112,13 @@ vl_api_l2_xconnect_dump_t_handler (vl_api_l2_xconnect_dump_t * mp)
return;
/* *INDENT-OFF* */
- pool_foreach (swif, im->sw_interfaces)
- {
- config = vec_elt_at_index (l2im->configs, swif->sw_if_index);
- if (l2_input_is_xconnect(config))
- send_l2_xconnect_details (reg, mp->context, swif->sw_if_index,
- config->output_sw_if_index);
- }
+ vec_foreach_index (sw_if_index, l2im->configs)
+ {
+ config = vec_elt_at_index (l2im->configs, sw_if_index);
+ if (l2_input_is_xconnect (config))
+ send_l2_xconnect_details (reg, mp->context, sw_if_index,
+ config->output_sw_if_index);
+ }
/* *INDENT-ON* */
}