|
FD.io VPP
v21.10.1-2-g0a485f517
Vector Packet Processing
|
Go to the documentation of this file.
36 #include <vnet/l2/l2.api_enum.h>
37 #include <vnet/l2/l2.api_types.h>
39 #define REPLY_MSG_ID_BASE l2input_main.msg_id_base
85 vl_api_l2_fib_clear_table_reply_t *rmp;
110 mp->
static_mac = (l2fib_entry_result_is_set_STATIC (l2fe_res) ? 1 : 0);
111 mp->
filter_mac = (l2fib_entry_result_is_set_FILTER (l2fe_res) ? 1 : 0);
112 mp->
bvi_mac = (l2fib_entry_result_is_set_BVI (l2fe_res) ? 1 : 0);
162 vl_api_l2fib_add_del_reply_t *rmp;
169 rv = VNET_API_ERROR_NO_SUCH_ENTRY;
170 goto bad_sw_if_index;
188 rv = VNET_API_ERROR_INVALID_SW_IF_INDEX;
189 goto bad_sw_if_index;
197 rv = VNET_API_ERROR_INVALID_SW_IF_INDEX;
198 goto bad_sw_if_index;
202 flags |= L2FIB_ENTRY_RESULT_FLAG_STATIC;
204 flags |= L2FIB_ENTRY_RESULT_FLAG_BVI;
212 rv = VNET_API_ERROR_NO_SUCH_ENTRY;
224 vl_api_want_l2_macs_events2_reply_t *rmp;
237 rv = VNET_API_ERROR_INVALID_VALUE;
242 if (
fm->event_scan_delay == 0.0)
243 fm->event_scan_delay = (
f64) (10) * 10e-3;
251 rv = VNET_API_ERROR_L2_MACS_EVENT_CLINET_PRESENT;
269 vl_api_want_l2_macs_events_reply_t *rmp;
282 rv = VNET_API_ERROR_INVALID_VALUE;
297 rv = VNET_API_ERROR_L2_MACS_EVENT_CLINET_PRESENT;
320 vl_api_l2fib_flush_int_reply_t *rmp;
335 vl_api_l2fib_flush_all_reply_t *rmp;
347 vl_api_l2fib_flush_bd_reply_t *rmp;
353 rv = VNET_API_ERROR_NO_SUCH_ENTRY;
366 vl_api_l2fib_set_scan_delay_reply_t *rmp;
371 fm->event_scan_delay = (
f64) (scan_delay) *10e-3;
376 rv = VNET_API_ERROR_INVALID_VALUE;
398 bitmap |= L2INPUT_FEAT_LEARN;
401 bitmap |= L2INPUT_FEAT_FWD;
404 bitmap |= L2INPUT_FEAT_FLOOD;
407 bitmap |= L2INPUT_FEAT_UU_FLOOD;
410 bitmap |= L2INPUT_FEAT_ARP_TERM;
428 vl_api_bridge_domain_set_default_learn_limit_reply_t *rmp;
432 REPLY_MACRO (VL_API_BRIDGE_DOMAIN_SET_DEFAULT_LEARN_LIMIT_REPLY);
441 vl_api_bridge_domain_set_learn_limit_reply_t *rmp;
448 rv = VNET_API_ERROR_BD_NOT_MODIFIABLE;
455 rv = VNET_API_ERROR_NO_SUCH_ENTRY;
460 REPLY_MACRO (VL_API_BRIDGE_DOMAIN_SET_LEARN_LIMIT_REPLY);
469 vl_api_bridge_domain_set_mac_age_reply_t *rmp;
476 rv = VNET_API_ERROR_BD_NOT_MODIFIABLE;
483 rv = VNET_API_ERROR_NO_SUCH_ENTRY;
488 REPLY_MACRO (VL_API_BRIDGE_DOMAIN_SET_MAC_AGE_REPLY);
503 .bd_id = ntohl (mp->
bd_id),
509 vl_api_bridge_domain_add_del_reply_t *rmp;
521 vl_api_bridge_domain_sw_if_t *sw_ifs;
525 (n_sw_ifs *
sizeof (vl_api_bridge_domain_sw_if_t)));
540 strncpy ((
char *) mp->
bd_tag, (
char *) bd_config->
bd_tag,
552 sw_ifs->shg = input_cfg->
shg;
574 if (filter_sw_if_index != ~0)
592 for (; bd_index <
end; bd_index++)
597 if (bd_config && (bd_config->
bd_id > 0))
640 rv = VNET_API_ERROR_BD_NOT_MODIFIABLE;
647 rv = VNET_API_ERROR_NO_SUCH_ENTRY;
667 vl_api_l2_interface_vlan_tag_rewrite_reply_t *rmp;
674 vtr_op = ntohl (mp->
vtr_op);
691 rv = VNET_API_ERROR_INVALID_VALUE;
692 goto bad_sw_if_index;
701 REPLY_MACRO (VL_API_L2_INTERFACE_VLAN_TAG_REWRITE_REPLY);
708 vl_api_l2_interface_pbb_tag_rewrite_reply_t *rmp;
717 vtr_op = ntohl (mp->
vtr_op);
728 rv = VNET_API_ERROR_INVALID_VALUE;
729 goto bad_sw_if_index;
741 REPLY_MACRO (VL_API_L2_INTERFACE_PBB_TAG_REWRITE_REPLY);
748 vl_api_sw_interface_set_l2_xconnect_reply_t *rmp;
773 rv = VNET_API_ERROR_NON_ETHERNET;
776 rv = VNET_API_ERROR_BD_ALREADY_HAS_BVI;
783 REPLY_MACRO (VL_API_SW_INTERFACE_SET_L2_XCONNECT_REPLY);
789 v = clib_net_to_host_u32 (v);
804 return (VNET_API_ERROR_INVALID_VALUE);
812 vl_api_sw_interface_set_l2_bridge_reply_t *rmp;
831 rx_sw_if_index, bd_index, pt, mp->
shg, 0);
841 rv = VNET_API_ERROR_NON_ETHERNET;
844 rv = VNET_API_ERROR_BD_ALREADY_HAS_BVI;
851 REPLY_MACRO (VL_API_SW_INTERFACE_SET_L2_BRIDGE_REPLY);
858 const ip46_address_t *
ip,
910 for (bd_index = start; bd_index <
end; bd_index++)
916 ip6_address_t *ip6_addr;
924 ip46_address_t ip = {
935 ip46_address_t ip = {
952 vl_api_bd_ip_mac_add_del_reply_t *rmp;
964 rv = VNET_API_ERROR_BD_NOT_MODIFIABLE;
971 rv = VNET_API_ERROR_NO_SUCH_ENTRY;
980 rv = VNET_API_ERROR_UNSPECIFIED;
989 vl_api_bd_ip_mac_flush_reply_t *rmp;
999 rv = VNET_API_ERROR_BD_NOT_MODIFIABLE;
1006 rv = VNET_API_ERROR_NO_SUCH_ENTRY;
1025 vl_api_l2_interface_efp_filter_reply_t *rmp;
1035 REPLY_MACRO (VL_API_L2_INTERFACE_EFP_FILTER_REPLY);
1043 vl_api_l2_patch_add_del_reply_t *rmp;
1053 (
int) (mp->
is_add != 0));
1064 vl_api_sw_interface_set_vpath_reply_t *rmp;
1082 REPLY_MACRO (VL_API_SW_INTERFACE_SET_VPATH_REPLY);
1108 vl_api_bvi_delete_reply_t *rmp;
1120 if (e1 == NULL || e2 == NULL)
1163 last_event = *event;
1178 vevent->_vl_msg_id =
1200 .name =
"l2-arp-term-publisher",
1208 vl_api_want_l2_arp_term_events_reply_t *rmp;
1221 rv = VNET_API_ERROR_INVALID_REGISTRATION;
1227 pool_put (
am->l2_arp_term_events_registrations, rp);
1230 if (
pool_elts (
am->l2_arp_term_events_registrations) == 0)
1238 rv = VNET_API_ERROR_INVALID_REGISTRATION;
1241 pool_get (
am->l2_arp_term_events_registrations, rp);
1245 rp -
am->l2_arp_term_events_registrations);
1249 REPLY_MACRO (VL_API_WANT_L2_ARP_TERM_EVENTS_REPLY);
1262 p =
hash_get (
am->l2_arp_term_events_registration_hash, client_index);
1267 pool_put (
am->l2_arp_term_events_registrations, rp);
1268 hash_unset (
am->l2_arp_term_events_registration_hash, client_index);
1269 if (
pool_elts (
am->l2_arp_term_events_registrations) == 0)
1277 #include <vnet/l2/l2.api.c>
1284 am->is_mp_safe[VL_API_BRIDGE_DOMAIN_DUMP] = 1;
#define vec_reset_length(v)
Reset vector length to zero NULL-pointer tolerant.
static void l2fib_add_filter_entry(const u8 *mac, u32 bd_index)
vl_api_interface_index_t tx_sw_if_index
void l2fib_flush_int_mac(vlib_main_t *vm, u32 sw_if_index)
Flush all non static MACs from an interface.
static void vl_api_l2fib_set_scan_delay_t_handler(vl_api_l2fib_set_scan_delay_t *mp)
static void vl_api_bridge_domain_add_del_t_handler(vl_api_bridge_domain_add_del_t *mp)
static int l2_bd_port_type_decode(vl_api_l2_port_type_t v, l2_bd_port_type_t *l)
#define VALIDATE_SW_IF_INDEX(mp)
static vl_api_registration_t * vl_api_client_index_to_registration(u32 index)
int l2_bvi_create(u32 user_instance, const mac_address_t *mac_in, u32 *sw_if_indexp)
bool is_add[default=true]
static void send_l2_xconnect_details(vl_api_registration_t *reg, u32 context, u32 rx_sw_if_index, u32 tx_sw_if_index)
#define hash_set(h, key, value)
L2 interface vlan tag rewrite configure request.
vl_api_interface_index_t bvi_sw_if_index
L2 fib clear table request, clear all mac entries in the l2 fib.
#define BAD_RX_SW_IF_INDEX_LABEL
u32 user_instance[default=0xffffffff]
L2 bridge domain operational state response.
#define REPLY_MACRO2(t, body)
Set bridge flags response.
@ BRIDGE_API_FLAG_UU_FLOOD
#define VALIDATE_TX_SW_IF_INDEX(mp)
static void vl_api_send_msg(vl_api_registration_t *rp, u8 *elem)
VLIB_API_INIT_FUNCTION(l2_api_hookup)
static void vl_api_l2fib_flush_int_t_handler(vl_api_l2fib_flush_int_t *mp)
l2_arp_term_main_t l2_arp_term_main
struct l2fib_entry_result_t_::@469::@471 fields
vl_api_interface_index_t sw_if_index
static uword * vlib_process_wait_for_event(vlib_main_t *vm)
vl_api_interface_index_t rx_sw_if_index
vl_api_bridge_domain_sw_if_t sw_if_details[n_sw_ifs]
#define ip46_address_initializer
#define pool_elt_at_index(p, i)
Returns pointer to element at given index.
bool enable_disable[default=true]
l2 fib table details structure
Tell client about an IP4 ARP resolution event or MAC/IP info from ARP requests in L2 BDs.
vl_api_interface_index_t sw_if_index[default=0xffffffff]
static void vl_api_bd_ip_mac_flush_t_handler(vl_api_bd_ip_mac_flush_t *mp)
bool enable_disable[default=true]
static void vl_api_bridge_domain_dump_t_handler(vl_api_bridge_domain_dump_t *mp)
vl_api_interface_index_t sw_if_index
static void vl_api_l2_patch_add_del_t_handler(vl_api_l2_patch_add_del_t *mp)
static void vl_api_sw_interface_set_vpath_t_handler(vl_api_sw_interface_set_vpath_t *mp)
static void vl_api_want_l2_arp_term_events_t_handler(vl_api_want_l2_arp_term_events_t *mp)
Flush bridge domain IP to MAC entries.
static void vl_api_l2_fib_table_dump_t_handler(vl_api_l2_fib_table_dump_t *mp)
Register to receive L2 MAC events for learned and aged MAC.
static bd_flags_t bd_flags_decode(vl_api_bd_flags_t v)
bool is_add[default=true]
static void vl_api_bridge_domain_set_learn_limit_t_handler(vl_api_bridge_domain_set_learn_limit_t *mp)
#define hash_foreach(key_var, value_var, h, body)
bool enable[default=0xffffffff]
vl_api_mac_address_t b_smac
Interface set vpath request.
#define pool_put(P, E)
Free an object E in pool P.
u8 max_macs_in_event[default=10]
vlib_main_t * vm
X-connect all packets from the HOST to the PHY.
#define REPLY_MSG_ID_BASE
L2 bridge domain add or delete request.
u32 l2vtr_configure(vlib_main_t *vlib_main, vnet_main_t *vnet_main, u32 sw_if_index, u32 vtr_op, u32 push_dot1q, u32 vtr_tag1, u32 vtr_tag2)
Configure vtag tag rewrite on the given interface.
bool enable[default=true]
vl_api_interface_index_t sw_if_index
static void vl_api_bd_ip_mac_dump_t_handler(vl_api_bd_ip_mac_dump_t *mp)
static void vl_api_sw_interface_set_l2_bridge_t_handler(vl_api_sw_interface_set_l2_bridge_t *mp)
static void vl_api_l2_flags_t_handler(vl_api_l2_flags_t *mp)
void l2_arp_term_set_publisher_node(bool on)
bridge domain IP to MAC entry details structure
vl_api_mac_address_t b_dmac
static void vl_api_l2_fib_clear_table_t_handler(vl_api_l2_fib_clear_table_t *mp)
Delete BVI interface request.
void bd_flush_ip_mac(u32 bd_index)
Flush IP address to MAC address mapping tables in a BD.
u32 bd_id[default=0xffffffff]
void l2fib_add_entry(const u8 *mac, u32 bd_index, u32 sw_if_index, l2fib_entry_result_flags_t flags)
Add an entry to the l2fib.
#define hash_unset(h, key)
L2 FIB flush interface entries.
u32 bd_default_learn_limit
ip46_type_t ip_address_decode(const vl_api_address_t *in, ip46_address_t *out)
Decode/Encode for struct/union types.
u32 resulting_feature_bitmap
int bd_add_del(l2_bridge_domain_add_del_args_t *a)
u8 max_macs_in_event[default=10]
#define pool_foreach(VAR, POOL)
Iterate through pool.
u32 bd_add_del_ip_mac(u32 bd_index, ip46_type_t type, const ip46_address_t *ip, const mac_address_t *mac, u8 is_add)
Add/delete IP address to MAC address mapping.
int vnet_l2_patch_add_del(u32 rx_sw_if_index, u32 tx_sw_if_index, int is_add)
#define vec_len(v)
Number of elements in vector (rvalue-only, NULL tolerant)
static u8 ip46_address_is_equal(const ip46_address_t *ip46_1, const ip46_address_t *ip46_2)
static void vl_api_l2fib_add_del_t_handler(vl_api_l2fib_add_del_t *mp)
static void * vlib_process_get_event_data(vlib_main_t *vm, uword *return_event_type_opaque)
#define vec_elt_at_index(v, i)
Get vector value at index i checking that i is in bounds.
vnet_main_t * vnet_get_main(void)
vl_api_interface_index_t uu_fwd_sw_if_index
An API client registration, only in vpp/vlib.
static void setup_message_id_table(api_main_t *am)
f64 end
end of the time range
vl_api_interface_index_t sw_if_index
vl_api_interface_index_t rx_sw_if_index
void l2fib_flush_all_mac(vlib_main_t *vm)
Flush all non static MACs - flushes all valid BDs.
L2 bridge domain set mac age.
#define vec_foreach_index(var, v)
Iterate over vector indices.
void l2fib_clear_table(void)
static heap_elt_t * last(heap_header_t *h)
static void vl_api_bridge_domain_set_default_learn_limit_t_handler(vl_api_bridge_domain_set_default_learn_limit_t *mp)
vl_api_interface_index_t tx_sw_if_index
Create BVI interface instance request.
static api_main_t * vlibapi_get_main(void)
@ L2_API_PORT_TYPE_NORMAL
struct l2fib_entry_key_t::@465::@467 fields
bool enable[default=true]
int l2_bvi_delete(u32 sw_if_index)
#define pool_get(P, E)
Allocate an object E from a pool P (unspecified alignment).
#define vec_validate(V, I)
Make sure vector is long enough for given index (no header, unspecified alignment)
static void vl_api_l2_xconnect_dump_t_handler(vl_api_l2_xconnect_dump_t *mp)
static void vl_api_bd_ip_mac_add_del_t_handler(vl_api_bd_ip_mac_add_del_t *mp)
#define BAD_TX_SW_IF_INDEX_LABEL
vl_api_interface_index_t tx_sw_if_index
static u32 bd_find_or_add_bd_index(bd_main_t *bdm, u32 bd_id)
Get or create a bridge domain.
Dump l2 fib (aka bridge domain) table.
vl_api_interface_index_t sw_if_index
u32 bd_set_flags(vlib_main_t *vm, u32 bd_index, bd_flags_t flags, u32 enable)
Set the learn/forward/flood flags for the bridge domain.
#define ALWAYS_ASSERT(truth)
L2 FIB flush bridge domain entries.
static clib_error_t * l2_api_hookup(vlib_main_t *vm)
struct _vlib_node_registration vlib_node_registration_t
Set interface L2 flags (such as L2_LEARN, L2_FWD, L2_FLOOD, L2_UU_FLOOD, or L2_ARP_TERM bits).
L2 interface ethernet flow point filtering enable/disable request.
@ L2_ARP_TERM_EVENT_PUBLISH
static clib_error_t * want_l2_arp_term_events_reaper(u32 client_index)
enum bd_flags_t_ bd_flags_t
u32 l2pbb_configure(vlib_main_t *vlib_main, vnet_main_t *vnet_main, u32 sw_if_index, u32 vtr_op, u8 *b_dmac, u8 *b_smac, u16 b_vlanid, u32 i_sid, u16 vlan_outer_tag)
vl_api_interface_index_t sw_if_index
Set interface L2 flags response.
#define BAD_SW_IF_INDEX_LABEL
vnet_api_error_t api_errno
API main structure, used by both vpp and binary API clients.
l2learn_main_t l2learn_main
bool enable_disable[default=true]
L2 FIB add entry request.
static void vl_api_l2_interface_vlan_tag_rewrite_t_handler(vl_api_l2_interface_vlan_tag_rewrite_t *mp)
static void send_bd_ip_mac_entry(vpe_api_main_t *am, vl_api_registration_t *reg, u32 bd_id, const ip46_address_t *ip, ip46_type_t itype, const mac_address_t *mac, u32 context)
void l2fib_flush_bd_mac(vlib_main_t *vm, u32 bd_index)
Flush all non static MACs in a bridge domain.
#define vec_free(V)
Free vector's memory (no header).
static void vl_api_sw_interface_set_l2_xconnect_t_handler(vl_api_sw_interface_set_l2_xconnect_t *mp)
u16 scan_delay[default=10]
static u32 bd_is_valid(l2_bridge_domain_t *bd_config)
static void vl_api_l2fib_flush_bd_t_handler(vl_api_l2fib_flush_bd_t *mp)
@ BRIDGE_API_FLAG_ARP_UFWD
#define L2LEARN_DEFAULT_LIMIT
u32 bd_find_index(bd_main_t *bdm, u32 bd_id)
Get a bridge domain.
VL_MSG_API_REAPER_FUNCTION(want_l2_arp_term_events_reaper)
static_always_inline void mac_address_from_u64(mac_address_t *mac, u64 u)
static void vl_api_want_l2_macs_events_t_handler(vl_api_want_l2_macs_events_t *mp)
u8 scan_delay[default=10]
void mac_address_encode(const mac_address_t *in, u8 *out)
static int vl_api_can_send_msg(vl_api_registration_t *rp)
static bool l2_arp_term_publish_event_is_equal(const l2_arp_term_publish_event_t *e1, const l2_arp_term_publish_event_t *e2)
#define VALIDATE_RX_SW_IF_INDEX(mp)
#define VALIDATE_BD_ID(mp)
bool is_add[default=true]
static void send_bridge_domain_details(l2input_main_t *l2im, vl_api_registration_t *reg, l2_bridge_domain_t *bd_config, u32 n_sw_ifs, u32 context)
Register for IP4 ARP resolution event on receiving ARP reply or MAC/IP info from ARP requests in L2 B...
u32 l2fib_del_entry(const u8 *mac, u32 bd_index, u32 sw_if_index)
Delete an entry from the l2fib.
bool is_add[default=true]
Interface bridge mode request.
vl_api_interface_index_t rx_sw_if_index
vl_api_interface_index_t rx_sw_if_index
@ BRIDGE_API_FLAG_ARP_TERM
L2 interface pbb tag rewrite configure request.
#define vec_foreach(var, vec)
Vector iterator.
L2 FIB flush all entries.
vl_api_interface_index_t sw_if_index
static uword pool_elts(void *v)
Number of active elements in a pool.
void mac_address_decode(const u8 *in, mac_address_t *out)
Conversion functions to/from (decode/encode) API types to VPP internal types.
l2_arp_term_publish_event_t * publish_events
int vnet_feature_enable_disable(const char *arc_name, const char *node_name, u32 sw_if_index, int enable_disable, void *feature_config, u32 n_feature_config_bytes)
static void vl_api_bridge_flags_t_handler(vl_api_bridge_flags_t *mp)
clib_memset(h->entries, 0, sizeof(h->entries[0]) *entries)
void ip_address_encode(const ip46_address_t *in, ip46_type_t type, vl_api_address_t *out)
static vlib_main_t * vlib_get_main(void)
@ L2_API_PORT_TYPE_UU_FWD
Set L2 XConnect between two interfaces request.
vl_api_interface_index_t sw_if_index
vnet_interface_output_runtime_t * rt
L2 bridge domain set learn limit.
static uword l2_arp_term_process(vlib_main_t *vm, vlib_node_runtime_t *rt, vlib_frame_t *f)
static void vl_api_want_l2_macs_events2_t_handler(vl_api_want_l2_macs_events2_t *mp)
l2_flood_member_t * members
u32 resulting_feature_bitmap
Reply to l2_xconnect_dump.
enum l2fib_entry_result_flags_t_ l2fib_entry_result_flags_t
L2 interface patch add / del request.
static void vl_api_bvi_create_t_handler(vl_api_bvi_create_t *mp)
#define clib_warning(format, args...)
enum l2_bd_port_type_t_ l2_bd_port_type_t
Set bridge flags request.
void bd_set_learn_limit(vlib_main_t *vm, u32 bd_index, u32 learn_limit)
Set learn limit for the bridge domain.
static f64 vlib_time_now(vlib_main_t *vm)
static void vl_api_l2fib_flush_all_t_handler(vl_api_l2fib_flush_all_t *mp)
Dump bridge domain IP to MAC entries.
l2_input_config_t * configs
static void vl_api_bvi_delete_t_handler(vl_api_bvi_delete_t *mp)
void bd_set_mac_age(vlib_main_t *vm, u32 bd_index, u8 age)
Set the mac age for the bridge domain.
static void vl_api_bridge_domain_set_mac_age_t_handler(vl_api_bridge_domain_set_mac_age_t *mp)
void l2fib_table_dump(u32 bd_index, l2fib_entry_key_t **l2fe_key, l2fib_entry_result_t **l2fe_res)
static void send_l2fib_table_entry(vpe_api_main_t *am, vl_api_registration_t *reg, l2fib_entry_key_t *l2fe_key, l2fib_entry_result_t *l2fe_res, u32 context)
vl_api_l2_port_type_t port_type
@ L2FIB_ENTRY_RESULT_FLAG_NONE
vlib_node_registration_t l2_arp_term_process_node
(constructor) VLIB_REGISTER_NODE (l2_arp_term_process_node)
static void vl_api_l2_interface_pbb_tag_rewrite_t_handler(vl_api_l2_interface_pbb_tag_rewrite_t *mp)
vl_api_interface_index_t tx_sw_if_index
u32 learn_limit[default=1000]
vl_api_interface_index_t sw_if_index
vl_api_interface_index_t sw_if_index
#define hash_foreach_mem(key_var, value_var, h, body)
Register to receive L2 MAC events for learned and aged MAC.
uword * bd_index_by_bd_id
vl_api_fib_path_type_t type
static_always_inline int mac_address_equal(const mac_address_t *a, const mac_address_t *b)
vl_api_interface_index_t sw_if_index
L2 bridge domain set default learn limit.
l2_bridge_domain_t * bd_configs
vl_api_interface_index_t sw_if_index
Create BVI interface instance response.
vpe_api_main_t vpe_api_main
static void vl_api_l2_interface_efp_filter_t_handler(vl_api_l2_interface_efp_filter_t *mp)
void * vl_msg_api_alloc(int nbytes)
#define VLIB_REGISTER_NODE(x,...)
L2 bridge domain request operational state details.
vl_api_wireguard_peer_flags_t flags
void l2_efp_filter_configure(vnet_main_t *vnet_main, u32 sw_if_index, u8 enable)
Enable/disable the EFP Filter check on the subinterface.