X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fl2%2Fl2_bd.c;h=b1abb4c0fbad6023f284b90a58e049b7d36771f9;hb=93e658058033e251b98d18a1f0717a07a85adfc2;hp=a87d02f2ffdf1ed712c98a55073d87fa565c4194;hpb=0f360dc3aa40d0654198bd3f3850bd31a0d78f7e;p=vpp.git diff --git a/src/vnet/l2/l2_bd.c b/src/vnet/l2/l2_bd.c index a87d02f2ffd..b1abb4c0fba 100644 --- a/src/vnet/l2/l2_bd.c +++ b/src/vnet/l2/l2_bd.c @@ -108,6 +108,9 @@ bd_delete (bd_main_t * bdm, u32 bd_index) bd->bd_id = ~0; bd->feature_bitmap = 0; + /* free BD tag */ + vec_free (bd->bd_tag); + /* free memory used by BD */ vec_free (bd->members); hash_free (bd->mac_by_ip4); @@ -263,7 +266,7 @@ bd_set_flags (vlib_main_t * vm, u32 bd_index, u32 flags, u32 enable) bd_config->feature_bitmap &= ~feature_bitmap; } - return 0; + return bd_config->feature_bitmap; } /** @@ -288,6 +291,32 @@ bd_set_mac_age (vlib_main_t * vm, u32 bd_index, u8 age) L2_MAC_AGE_PROCESS_EVENT_STOP, 0); } +/** + Set the tag for the bridge domain. +*/ + +static void +bd_set_bd_tag (vlib_main_t * vm, u32 bd_index, u8 * bd_tag) +{ + u8 *old; + l2_bridge_domain_t *bd_config; + vec_validate (l2input_main.bd_configs, bd_index); + bd_config = vec_elt_at_index (l2input_main.bd_configs, bd_index); + + old = bd_config->bd_tag; + + if (bd_tag[0]) + { + bd_config->bd_tag = format (0, "%s%c", bd_tag, 0); + } + else + { + bd_config->bd_tag = NULL; + } + + vec_free (old); +} + /** Set bridge-domain learn enable/disable. The CLI format is: @@ -328,12 +357,7 @@ bd_learn (vlib_main_t * vm, } /* set the bridge domain flag */ - if (bd_set_flags (vm, bd_index, L2_LEARN, enable)) - { - error = - clib_error_return (0, "bridge-domain id %d out of range", bd_index); - goto done; - } + bd_set_flags (vm, bd_index, L2_LEARN, enable); done: return error; @@ -397,12 +421,7 @@ bd_fwd (vlib_main_t * vm, unformat_input_t * input, vlib_cli_command_t * cmd) } /* set the bridge domain flag */ - if (bd_set_flags (vm, bd_index, L2_FWD, enable)) - { - error = - clib_error_return (0, "bridge-domain id %d out of range", bd_index); - goto done; - } + bd_set_flags (vm, bd_index, L2_FWD, enable); done: return error; @@ -468,12 +487,7 @@ bd_flood (vlib_main_t * vm, } /* set the bridge domain flag */ - if (bd_set_flags (vm, bd_index, L2_FLOOD, enable)) - { - error = - clib_error_return (0, "bridge-domain id %d out of range", bd_index); - goto done; - } + bd_set_flags (vm, bd_index, L2_FLOOD, enable); done: return error; @@ -538,12 +552,7 @@ bd_uu_flood (vlib_main_t * vm, } /* set the bridge domain flag */ - if (bd_set_flags (vm, bd_index, L2_UU_FLOOD, enable)) - { - error = - clib_error_return (0, "bridge-domain id %d out of range", bd_index); - goto done; - } + bd_set_flags (vm, bd_index, L2_UU_FLOOD, enable); done: return error; @@ -605,12 +614,7 @@ bd_arp_term (vlib_main_t * vm, enable = 0; /* set the bridge domain flag */ - if (bd_set_flags (vm, bd_index, L2_ARP_TERM, enable)) - { - error = - clib_error_return (0, "bridge-domain id %d out of range", bd_index); - goto done; - } + bd_set_flags (vm, bd_index, L2_ARP_TERM, enable); done: return error; @@ -931,6 +935,7 @@ bd_show (vlib_main_t * vm, unformat_input_t * input, vlib_cli_command_t * cmd) u32 detail = 0; u32 intf = 0; u32 arp = 0; + u32 bd_tag = 0; u32 bd_id = ~0; uword *p; @@ -947,6 +952,8 @@ bd_show (vlib_main_t * vm, unformat_input_t * input, vlib_cli_command_t * cmd) intf = 1; if (unformat (input, "arp")) arp = 1; + if (unformat (input, "bd-tag")) + bd_tag = 1; if (bd_id == 0) return clib_error_return (0, @@ -1064,6 +1071,12 @@ bd_show (vlib_main_t * vm, unformat_input_t * input, vlib_cli_command_t * cmd) })); /* *INDENT-ON* */ } + + if ((detail || bd_tag) && (bd_config->bd_tag)) + { + vlib_cli_output (vm, "\n BD-Tag: %s", bd_config->bd_tag); + + } } } vec_free (as); @@ -1105,7 +1118,7 @@ done: /* *INDENT-OFF* */ VLIB_CLI_COMMAND (bd_show_cli, static) = { .path = "show bridge-domain", - .short_help = "show bridge-domain [bridge-domain-id [detail|int|arp]]", + .short_help = "show bridge-domain [bridge-domain-id [detail|int|arp|bd-tag]]", .function = bd_show, }; /* *INDENT-ON* */ @@ -1159,6 +1172,10 @@ bd_add_del (l2_bridge_domain_add_del_args_t * a) bd_set_flags (vm, bd_index, disable_flags, 0 /* disable */ ); bd_set_mac_age (vm, bd_index, a->mac_age); + + if (a->bd_tag) + bd_set_bd_tag (vm, bd_index, a->bd_tag); + } else { @@ -1177,8 +1194,8 @@ bd_add_del (l2_bridge_domain_add_del_args_t * a) /** Create or delete bridge-domain. The CLI format: - create bridge-domain [learn <0|1>] [forward <0|1>] [uu-flood <0|1>] - [flood <0|1>] [arp-term <0|1>] [mac-age ] [del] + create bridge-domain [learn <0|1>] [forward <0|1>] [uu-flood <0|1>] [flood <0|1>] + [arp-term <0|1>] [mac-age ] [bd-tag ] [del] */ static clib_error_t * @@ -1191,6 +1208,7 @@ bd_add_del_command_fn (vlib_main_t * vm, unformat_input_t * input, u32 bd_id = ~0; u32 flood = 1, forward = 1, learn = 1, uu_flood = 1, arp_term = 0; u32 mac_age = 0; + u8 *bd_tag = NULL; l2_bridge_domain_add_del_args_t _a, *a = &_a; int rv; @@ -1214,6 +1232,8 @@ bd_add_del_command_fn (vlib_main_t * vm, unformat_input_t * input, ; else if (unformat (line_input, "mac-age %d", &mac_age)) ; + else if (unformat (line_input, "bd-tag %s", &bd_tag)) + ; else if (unformat (line_input, "del")) { is_add = 0; @@ -1240,6 +1260,11 @@ bd_add_del_command_fn (vlib_main_t * vm, unformat_input_t * input, error = clib_error_return (0, "mac age must be less than 256"); goto done; } + if ((bd_tag) && (strlen ((char *) bd_tag) > 63)) + { + error = clib_error_return (0, "bd-tag cannot be longer than 63"); + goto done; + } memset (a, 0, sizeof (*a)); a->is_add = is_add; @@ -1250,6 +1275,7 @@ bd_add_del_command_fn (vlib_main_t * vm, unformat_input_t * input, a->learn = (u8) learn; a->arp_term = (u8) arp_term; a->mac_age = (u8) mac_age; + a->bd_tag = bd_tag; rv = bd_add_del (a); @@ -1277,6 +1303,7 @@ bd_add_del_command_fn (vlib_main_t * vm, unformat_input_t * input, } done: + vec_free (bd_tag); unformat_free (line_input); return error; @@ -1316,7 +1343,7 @@ VLIB_CLI_COMMAND (bd_create_cli, static) = { .path = "create bridge-domain", .short_help = "create bridge-domain " " [learn <0|1>] [forward <0|1>] [uu-flood <0|1>] [flood <0|1>] [arp-term <0|1>]" - " [mac-age ] [del]", + " [mac-age ] [bd-tag ] [del]", .function = bd_add_del_command_fn, }; /* *INDENT-ON* */