{
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;
bd_config->tun_normal_count = 0;
+ bd_config->no_flood_count = 0;
bd_config->mac_by_ip4 = 0;
bd_config->mac_by_ip6 = hash_create_mem (0, sizeof (ip6_address_t),
sizeof (uword));
bd_config->tun_master_count--;
else if (sw_if->flood_class == VNET_FLOOD_CLASS_TUNNEL_NORMAL)
bd_config->tun_normal_count--;
+ else if (sw_if->flood_class == VNET_FLOOD_CLASS_NO_FLOOD)
+ bd_config->no_flood_count--;
}
vec_delete (bd_config->members, 1, ix);
update_flood_count (bd_config);
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);
* 6-byte MAC address directly in the hash table entry uword.
*
* @warning This only works for 64-bit processor with 8-byte uword;
- * which means this code *WILL NOT WORK* for a 32-bit prcessor with
+ * which means this code *WILL NOT WORK* for a 32-bit processor with
* 4-byte uword.
*/
u32
ASSERT (sizeof (uword) == sizeof (u64)); /* make sure uword is 8 bytes */
ASSERT (bd_is_valid (bd_cfg));
- mac16[3] = 0; /* Clear last 2 unsed bytes of the 8-byte MAC address */
+ mac16[3] = 0; /* Clear last 2 unused bytes of the 8-byte MAC address */
if (is_ip6)
{
ip6_address_t *ip6_addr_key;
if (is_add)
{
if (old_mac == 0)
- { /* new entry - allocate and craete ip6 address key */
+ { /* new entry - allocate and create ip6 address key */
ip6_addr_key = clib_mem_alloc (sizeof (ip6_address_t));
clib_memcpy (ip6_addr_key, ip_addr, sizeof (ip6_address_t));
}
return 0;
}
else
- { /* updat mac for ip6 address */
+ { /* update mac for ip6 address */
hp = hash_get_pair (bd_cfg->mac_by_ip6, ip_addr);
ip6_addr_key = (ip6_address_t *) hp->key;
}
};
/* *INDENT-ON* */
-u8 *
+static u8 *
format_vtr (u8 * s, va_list * args)
{
u32 vtr_op = va_arg (*args, u32);
}
}
+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:
{
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)
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 ?
"-", 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) &&
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
goto done;
}
- memset (a, 0, sizeof (*a));
+ clib_memset (a, 0, sizeof (*a));
a->is_add = is_add;
a->bd_id = bd_id;
a->flood = (u8) flood;