X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2Fplugins%2Fgbp%2Fgbp_bridge_domain.c;h=8896669002c99b475498ab9aae49702b07d57bb8;hb=8ea109e40;hp=17ccc345b66a927eacc054eb58de4f924de99d3b;hpb=dc66aadb9ad7e4a7623e6689a21a46aadb9942b4;p=vpp.git diff --git a/src/plugins/gbp/gbp_bridge_domain.c b/src/plugins/gbp/gbp_bridge_domain.c index 17ccc345b66..8896669002c 100644 --- a/src/plugins/gbp/gbp_bridge_domain.c +++ b/src/plugins/gbp/gbp_bridge_domain.c @@ -121,7 +121,13 @@ format_gbp_bridge_domain_flags (u8 * s, va_list * args) if (gf) { if (gf & GBP_BD_FLAG_DO_NOT_LEARN) - s = format (s, "do-not-learn"); + s = format (s, "do-not-learn "); + if (gf & GBP_BD_FLAG_UU_FWD_DROP) + s = format (s, "uu-fwd-drop "); + if (gf & GBP_BD_FLAG_MCAST_DROP) + s = format (s, "mcast-drop "); + if (gf & GBP_BD_FLAG_UCAST_ARP) + s = format (s, "ucast-arp "); } else { @@ -183,10 +189,11 @@ gbp_bridge_domain_add_and_lock (u32 bd_id, if (~0 == bd_index) return (VNET_API_ERROR_BD_NOT_MODIFIABLE); - /* - * unset learning in the bridge - */ - bd_set_flags (vlib_get_main (), bd_index, L2_LEARN, 0); + bd_flags_t bd_flags = L2_LEARN; + if (flags & GBP_BD_FLAG_UU_FWD_DROP) + bd_flags |= L2_UU_FLOOD; + if (flags & GBP_BD_FLAG_MCAST_DROP) + bd_flags |= L2_FLOOD; pool_get (gbp_bridge_domain_pool, gb); memset (gb, 0, sizeof (*gb)); @@ -205,13 +212,16 @@ gbp_bridge_domain_add_and_lock (u32 bd_id, set_int_l2_mode (vlib_get_main (), vnet_get_main (), MODE_L2_BRIDGE, gb->gb_bvi_sw_if_index, bd_index, L2_BD_PORT_TYPE_BVI, 0, 0); - if (~0 != gb->gb_uu_fwd_sw_if_index) + + if (!(flags & GBP_BD_FLAG_UU_FWD_DROP) + && ~0 != gb->gb_uu_fwd_sw_if_index) { set_int_l2_mode (vlib_get_main (), vnet_get_main (), MODE_L2_BRIDGE, gb->gb_uu_fwd_sw_if_index, bd_index, L2_BD_PORT_TYPE_UU_FWD, 0, 0); } - if (~0 != gb->gb_bm_flood_sw_if_index) + if (!(flags & GBP_BD_FLAG_MCAST_DROP) + && ~0 != gb->gb_bm_flood_sw_if_index) { set_int_l2_mode (vlib_get_main (), vnet_get_main (), MODE_L2_BRIDGE, gb->gb_bm_flood_sw_if_index, @@ -219,6 +229,11 @@ gbp_bridge_domain_add_and_lock (u32 bd_id, gbp_learn_enable (gb->gb_bm_flood_sw_if_index, GBP_LEARN_MODE_L2); } + /* + * unset learning in the bridge + any flag(s) set above + */ + bd_set_flags (vlib_get_main (), bd_index, bd_flags, 0); + /* * Add the BVI's MAC to the L2FIB */ @@ -343,8 +358,8 @@ gbp_bridge_domain_cli (vlib_main_t * vm, add = 1; else if (unformat (input, "del")) add = 0; - else if (unformat (input, "flags &d", &flags)) - add = 0; + else if (unformat (input, "flags %d", &flags)) + ; else if (unformat (input, "bd %d", &bd_id)) ; else @@ -380,7 +395,8 @@ gbp_bridge_domain_cli (vlib_main_t * vm, /* *INDENT-OFF* */ VLIB_CLI_COMMAND (gbp_bridge_domain_cli_node, static) = { .path = "gbp bridge-domain", - .short_help = "gbp bridge-domain [del] bd bvi uu-flood ", + .short_help = "gbp bridge-domain [del] bd bvi " + " uu-flood [flags ]", .function = gbp_bridge_domain_cli, };