diff options
author | John Lo <loj@cisco.com> | 2017-02-28 13:10:52 -0500 |
---|---|---|
committer | Damjan Marion <dmarion.lists@gmail.com> | 2017-02-28 21:59:13 +0000 |
commit | 7100b9cc6f1342a320c372bf746ae85cf815c41b (patch) | |
tree | 9dbc8a297ef13d196476d8286c099a712963c286 /src | |
parent | c47ed032c6d036a9f942fc9ced48874fad55b48c (diff) |
Clear L2 output config on interface mode change to L3 (VPP-651)
With VPP-651, the L2 output config with L2-tag rewrite was not
cleared when a sub-interface is deleted. Subsequently, when the
same sw_if_index was reused for another interface, the L2 output
config with L2-tag rewrite remained on the new interface.
On deleting a (sub-)interface which is in L2 mode, it will be
changed to L3 mode first to clear any L2 config. The L2 to L3 mode
change path did address L2 input config cleanup. It is now fixed
to also clear L2 output config.
Change-Id: I3352a89d92e1b27340a5adcf75bbaa01a5050c29
Signed-off-by: John Lo <loj@cisco.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/vnet/l2/l2_input.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/vnet/l2/l2_input.c b/src/vnet/l2/l2_input.c index ead9ca85494..fbd75f222e0 100644 --- a/src/vnet/l2/l2_input.c +++ b/src/vnet/l2/l2_input.c @@ -513,10 +513,13 @@ l2input_set_bridge_features (u32 bd_index, u32 feat_mask, u32 feat_value) */ u32 -set_int_l2_mode (vlib_main_t * vm, vnet_main_t * vnet_main, u32 mode, u32 sw_if_index, u32 bd_index, /* for bridged interface */ - u32 bvi, /* the bridged interface is the BVI */ - u32 shg, /* the bridged interface's split horizon group */ - u32 xc_sw_if_index) /* peer interface for xconnect */ +set_int_l2_mode (vlib_main_t * vm, vnet_main_t * vnet_main, /* */ + u32 mode, /* One of L2 modes or back to L3 mode */ + u32 sw_if_index, /* sw interface index */ + u32 bd_index, /* for bridged interface */ + u32 bvi, /* the bridged interface is the BVI */ + u32 shg, /* the bridged interface split horizon group */ + u32 xc_sw_if_index) /* peer interface for xconnect */ { l2input_main_t *mp = &l2input_main; l2output_main_t *l2om = &l2output_main; @@ -584,6 +587,10 @@ set_int_l2_mode (vlib_main_t * vm, vnet_main_t * vnet_main, u32 mode, u32 sw_if_ config->bd_index = 0; config->feature_bitmap = L2INPUT_FEAT_DROP; + /* Clear L2 output config */ + out_config = l2output_intf_config (sw_if_index); + memset (out_config, 0, sizeof (l2_output_config_t)); + /* Make sure any L2-output packet to this interface now in L3 mode is * dropped. This may happen if L2 FIB MAC entry is stale */ l2om->next_nodes.output_node_index_vec[sw_if_index] = |