#include <vnet/l2/feat_bitmap.h>
#include <vnet/l2/l2_bvi.h>
#include <vnet/l2/l2_fib.h>
+#include <vnet/l2/l2_bd.h>
#include <vppinfra/error.h>
#include <vppinfra/hash.h>
/* Get config for the bridge domain interface */
bd_config = vec_elt_at_index (msm->bd_configs, bd_index0);
+ /* Save bridge domain seq_num */
+ vnet_buffer (b0)->l2.bd_sn = bd_config->seq_num;
+
/*
* Process bridge domain feature enables.
* To perform learning/flooding/forwarding, the corresponding bit
/* mask out features from bitmap using packet type and bd config */
feature_bitmap = config->feature_bitmap & feat_mask;
+ /* Save interface seq_num */
+ vnet_buffer (b0)->l2.int_sn = config->seq_num;
+
/* save for next feature graph nodes */
vnet_buffer (b0)->l2.feature_bitmap = feature_bitmap;
*/
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;
VNET_SIMULATED_ETHERNET_TX_NEXT_ETHERNET_INPUT);
ASSERT (slot == VNET_SIMULATED_ETHERNET_TX_NEXT_ETHERNET_INPUT);
}
+
+ /* Clear MACs learned on the interface */
+ if ((config->feature_bitmap | L2INPUT_FEAT_LEARN) ||
+ (bd_config->feature_bitmap | L2INPUT_FEAT_LEARN))
+ l2fib_flush_int_mac (vm, sw_if_index);
+
l2_if_adjust--;
}
else if (config->xconnect)
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] =
config->xconnect = 0;
config->bridge = 1;
config->bd_index = bd_index;
+ config->seq_num += 1;
/*
* Enable forwarding, flooding, learning and ARP termination by default
shg = 0; /* not used in xconnect */
}
- /* set up split-horizon group */
+ /* set up split-horizon group and set output feature bit */
config->shg = shg;
out_config = l2output_intf_config (sw_if_index);
out_config->shg = shg;
+ out_config->feature_bitmap |= L2OUTPUT_FEAT_OUTPUT;
/*
* Test: remove this when non-IP features can be configured.