L2 BD: introduce a BD interface on which to send UU packets
Change-Id: I21ad6b04c19c8735d057174b1f260a59f2812241
Signed-off-by: Neale Ranns <nranns@cisco.com>
diff --git a/src/vnet/l2/l2_bd.c b/src/vnet/l2/l2_bd.c
index 973beb7..47bdce6 100644
--- a/src/vnet/l2/l2_bd.c
+++ b/src/vnet/l2/l2_bd.c
@@ -52,8 +52,9 @@
{
if (bd_is_valid (bd_config))
return;
- bd_config->feature_bitmap = ~L2INPUT_FEAT_ARP_TERM;
+ bd_config->feature_bitmap = ~(L2INPUT_FEAT_ARP_TERM | L2INPUT_FEAT_UU_FWD);
bd_config->bvi_sw_if_index = ~0;
+ bd_config->uu_fwd_sw_if_index = ~0;
bd_config->members = 0;
bd_config->flood_count = 0;
bd_config->tun_master_count = 0;
@@ -240,7 +241,7 @@
Return 0 if ok, non-zero if for an error.
*/
u32
-bd_set_flags (vlib_main_t * vm, u32 bd_index, u32 flags, u32 enable)
+bd_set_flags (vlib_main_t * vm, u32 bd_index, bd_flags_t flags, u32 enable)
{
l2_bridge_domain_t *bd_config = l2input_bd_config (bd_index);
@@ -894,7 +895,7 @@
};
/* *INDENT-ON* */
-u8 *
+static u8 *
format_vtr (u8 * s, va_list * args)
{
u32 vtr_op = va_arg (*args, u32);
@@ -929,6 +930,20 @@
}
}
+static u8 *
+format_uu_cfg (u8 * s, va_list * args)
+{
+ l2_bridge_domain_t *bd_config = va_arg (*args, l2_bridge_domain_t *);
+
+ if (bd_config->feature_bitmap & L2INPUT_FEAT_UU_FWD)
+ return (format (s, "%U", format_vnet_sw_if_index_name_with_NA,
+ vnet_get_main (), bd_config->uu_fwd_sw_if_index));
+ else if (bd_config->feature_bitmap & L2INPUT_FEAT_UU_FLOOD)
+ return (format (s, "flood"));
+ else
+ return (format (s, "drop"));
+}
+
/**
Show bridge-domain state.
The CLI format is:
@@ -1002,10 +1017,10 @@
{
printed = 1;
vlib_cli_output (vm,
- "%=8s %=7s %=4s %=9s %=9s %=9s %=9s %=9s %=9s %=9s",
+ "%=8s %=7s %=4s %=9s %=9s %=9s %=11s %=9s %=9s %=11s",
"BD-ID", "Index", "BSN", "Age(min)",
- "Learning", "U-Forwrd", "UU-Flood", "Flooding",
- "ARP-Term", "BVI-Intf");
+ "Learning", "U-Forwrd", "UU-Flood",
+ "Flooding", "ARP-Term", "BVI-Intf");
}
if (bd_config->mac_age)
@@ -1013,14 +1028,13 @@
else
as = format (as, "off");
vlib_cli_output (vm,
- "%=8d %=7d %=4d %=9v %=9s %=9s %=9s %=9s %=9s %=9U",
+ "%=8d %=7d %=4d %=9v %=9s %=9s %=11U %=9s %=9s %=11U",
bd_config->bd_id, bd_index, bd_config->seq_num, as,
bd_config->feature_bitmap & L2INPUT_FEAT_LEARN ?
"on" : "off",
bd_config->feature_bitmap & L2INPUT_FEAT_FWD ?
"on" : "off",
- bd_config->feature_bitmap & L2INPUT_FEAT_UU_FLOOD ?
- "on" : "off",
+ format_uu_cfg, bd_config,
bd_config->feature_bitmap & L2INPUT_FEAT_FLOOD ?
"on" : "off",
bd_config->feature_bitmap & L2INPUT_FEAT_ARP_TERM ?
@@ -1055,6 +1069,13 @@
"-", i < bd_config->flood_count ? "*" : "-",
format_vtr, vtr_opr, dot1q, tag1, tag2);
}
+ if (~0 != bd_config->uu_fwd_sw_if_index)
+ vlib_cli_output (vm, "%=30U%=7d%=5d%=5d%=5s%=9s%=30s",
+ format_vnet_sw_if_index_name, vnm,
+ bd_config->uu_fwd_sw_if_index,
+ bd_config->uu_fwd_sw_if_index,
+ 0, 0, "uu", "-", "None");
+
}
if ((detail || arp) &&
@@ -1150,7 +1171,7 @@
return VNET_API_ERROR_BD_ID_EXCEED_MAX;
bd_index = bd_add_bd_index (bdm, a->bd_id);
- u32 enable_flags = 0, disable_flags = 0;
+ bd_flags_t enable_flags = 0, disable_flags = 0;
if (a->flood)
enable_flags |= L2_FLOOD;
else