39 #define vl_api_bridge_domain_details_t_endian vl_noop_handler 40 #define vl_api_bridge_domain_details_t_print vl_noop_handler 43 #define vl_print(handle, ...) vlib_cli_output (handle, __VA_ARGS__) 50 #define foreach_vpe_api_msg \ 51 _(L2_XCONNECT_DUMP, l2_xconnect_dump) \ 52 _(L2_FIB_CLEAR_TABLE, l2_fib_clear_table) \ 53 _(L2_FIB_TABLE_DUMP, l2_fib_table_dump) \ 54 _(L2FIB_FLUSH_ALL, l2fib_flush_all) \ 55 _(L2FIB_FLUSH_INT, l2fib_flush_int) \ 56 _(L2FIB_FLUSH_BD, l2fib_flush_bd) \ 57 _(L2FIB_ADD_DEL, l2fib_add_del) \ 58 _(L2_FLAGS, l2_flags) \ 59 _(BRIDGE_DOMAIN_ADD_DEL, bridge_domain_add_del) \ 60 _(BRIDGE_DOMAIN_DUMP, bridge_domain_dump) \ 61 _(BRIDGE_FLAGS, bridge_flags) \ 62 _(L2_INTERFACE_VLAN_TAG_REWRITE, l2_interface_vlan_tag_rewrite) \ 63 _(L2_INTERFACE_PBB_TAG_REWRITE, l2_interface_pbb_tag_rewrite) \ 64 _(BRIDGE_DOMAIN_SET_MAC_AGE, bridge_domain_set_mac_age) 68 u32 rx_sw_if_index,
u32 tx_sw_if_index)
73 memset (mp, 0,
sizeof (*mp));
74 mp->_vl_msg_id = ntohs (VL_API_L2_XCONNECT_DETAILS);
99 config = vec_elt_at_index (l2im->configs, swif->sw_if_index);
100 if (config->xconnect)
101 send_l2_xconnect_details (q, mp->context, swif->sw_if_index,
102 config->output_sw_if_index);
111 vl_api_l2_fib_clear_table_reply_t *rmp;
128 memset (mp, 0,
sizeof (*mp));
129 mp->_vl_msg_id = ntohs (VL_API_L2_FIB_TABLE_DETAILS);
188 vl_api_l2fib_add_del_reply_t *rmp;
195 rv = VNET_API_ERROR_NO_SUCH_ENTRY;
196 goto bad_sw_if_index;
211 rv = VNET_API_ERROR_INVALID_SW_IF_INDEX;
212 goto bad_sw_if_index;
220 rv = VNET_API_ERROR_INVALID_SW_IF_INDEX;
221 goto bad_sw_if_index;
245 vl_api_l2fib_flush_int_reply_t *rmp;
260 vl_api_l2fib_flush_all_reply_t *rmp;
272 vl_api_l2fib_flush_bd_reply_t *rmp;
278 rv = VNET_API_ERROR_NO_SUCH_ENTRY;
315 vl_api_bridge_domain_set_mac_age_reply_t *rmp;
322 rv = VNET_API_ERROR_BD_NOT_MODIFIABLE;
329 rv = VNET_API_ERROR_NO_SUCH_ENTRY;
334 REPLY_MACRO (VL_API_BRIDGE_DOMAIN_SET_MAC_AGE_REPLY);
348 .bd_id = ntohl (mp->
bd_id),
353 vl_api_bridge_domain_add_del_reply_t *rmp;
361 u32 n_sw_ifs,
u32 context)
370 memset (mp, 0,
sizeof (*mp));
371 mp->_vl_msg_id = ntohs (VL_API_BRIDGE_DOMAIN_DETAILS);
387 sw_ifs->
shg = input_cfg->
shg;
423 for (; bd_index < end; bd_index++)
428 if (bd_config && (bd_config->
bd_id > 0))
447 rv = VNET_API_ERROR_BD_NOT_MODIFIABLE;
454 rv = VNET_API_ERROR_NO_SUCH_ENTRY;
474 vl_api_l2_interface_vlan_tag_rewrite_reply_t *rmp;
481 vtr_op = ntohl (mp->
vtr_op);
498 rv = VNET_API_ERROR_INVALID_VALUE;
499 goto bad_sw_if_index;
508 REPLY_MACRO (VL_API_L2_INTERFACE_VLAN_TAG_REWRITE_REPLY);
515 vl_api_l2_interface_pbb_tag_rewrite_reply_t *rmp;
523 vtr_op = ntohl (mp->
vtr_op);
534 rv = VNET_API_ERROR_INVALID_VALUE;
535 goto bad_sw_if_index;
544 REPLY_MACRO (VL_API_L2_INTERFACE_PBB_TAG_REWRITE_REPLY);
554 #define vl_msg_name_crc_list 556 #undef vl_msg_name_crc_list 561 #define _(id,n,crc) vl_msg_api_add_msg_name_crc (am, #n "_" #crc, id); 562 foreach_vl_msg_name_crc_l2;
572 vl_msg_api_set_handlers(VL_API_##N, #n, \ 573 vl_api_##n##_t_handler, \ 575 vl_api_##n##_t_endian, \ 576 vl_api_##n##_t_print, \ 577 sizeof(vl_api_##n##_t), 1);
static void vl_api_l2_fib_table_dump_t_handler(vl_api_l2_fib_table_dump_t *mp)
u32 bd_set_flags(vlib_main_t *vm, u32 bd_index, u32 flags, u32 enable)
Set the learn/forward/flood flags for the bridge domain.
#define vec_foreach_index(var, v)
Iterate over vector indices.
L2 FIB add entry request.
l2_input_config_t * configs
Set bridge flags response.
l2 fib table details structure
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.
vnet_main_t * vnet_get_main(void)
static void vl_api_l2_flags_t_handler(vl_api_l2_flags_t *mp)
vnet_interface_main_t interface_main
u32 resulting_feature_bitmap
#define REPLY_MACRO2(t, body)
u32 l2fib_del_entry(u64 mac, u32 bd_index)
Delete an entry from the l2fib.
VLIB_API_INIT_FUNCTION(l2_api_hookup)
L2 bridge domain set mac age.
l2_flood_member_t * members
static void vl_api_bridge_domain_add_del_t_handler(vl_api_bridge_domain_add_del_t *mp)
L2 bridge domain request operational state details.
int bd_add_del(l2_bridge_domain_add_del_args_t *a)
static void vl_api_l2fib_add_del_t_handler(vl_api_l2fib_add_del_t *mp)
Reply to l2_xconnect_dump.
static void send_l2_xconnect_details(unix_shared_memory_queue_t *q, u32 context, u32 rx_sw_if_index, u32 tx_sw_if_index)
L2 bridge domain operational state response.
#define pool_foreach(VAR, POOL, BODY)
Iterate through pool.
L2 bridge domain sw interface operational state response.
#define vec_elt_at_index(v, i)
Get vector value at index i checking that i is in bounds.
static void vl_api_l2_fib_clear_table_t_handler(vl_api_l2_fib_clear_table_t *mp)
L2 FIB flush bridge domain entries.
uword * bd_index_by_bd_id
void * vl_msg_api_alloc(int nbytes)
Dump l2 fib (aka bridge domain) table.
Set L2 flags request !!! TODO - need more info, feature bits in l2_input.h.
L2 FIB flush all entries.
L2 fib clear table request, clear all mac entries in the l2 fib.
static void l2fib_add_filter_entry(u64 mac, u32 bd_index)
void l2fib_flush_bd_mac(vlib_main_t *vm, u32 bd_index)
Flush all non static MACs in a bridge domain.
static void l2fib_add_fwd_entry(u64 mac, u32 bd_index, u32 sw_if_index, u32 static_mac, u32 bvi_mac)
void l2fib_flush_all_mac(vlib_main_t *vm)
Flush all non static MACs - flushes all valid BDs.
static clib_error_t * l2_api_hookup(vlib_main_t *vm)
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)
void bd_set_mac_age(vlib_main_t *vm, u32 bd_index, u8 age)
Set the mac age for the bridge domain.
#define BAD_SW_IF_INDEX_LABEL
static void vl_api_l2_xconnect_dump_t_handler(vl_api_l2_xconnect_dump_t *mp)
#define vec_free(V)
Free vector's memory (no header).
#define foreach_vpe_api_msg
unix_shared_memory_queue_t * vl_api_client_index_to_input_queue(u32 index)
static void setup_message_id_table(api_main_t *am)
void l2fib_clear_table(void)
void vl_msg_api_send_shmem(unix_shared_memory_queue_t *q, u8 *elem)
struct l2fib_entry_result_t::@184::@186 fields
static vlib_main_t * vlib_get_main(void)
u32 resulting_feature_bitmap
static void vl_api_l2_interface_vlan_tag_rewrite_t_handler(vl_api_l2_interface_vlan_tag_rewrite_t *mp)
L2 FIB flush interface entries.
static void vl_api_l2fib_flush_bd_t_handler(vl_api_l2fib_flush_bd_t *mp)
#define vec_len(v)
Number of elements in vector (rvalue-only, NULL tolerant)
static void vl_api_bridge_flags_t_handler(vl_api_bridge_flags_t *mp)
vnet_sw_interface_t * sw_interfaces
L2 interface vlan tag rewrite configure request.
static void vl_api_l2fib_flush_all_t_handler(vl_api_l2fib_flush_all_t *mp)
static u64 l2fib_make_key(u8 *mac_address, u16 bd_index)
l2_bridge_domain_t * bd_configs
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)
L2 interface pbb tag rewrite configure request.
#define vec_foreach(var, vec)
Vector iterator.
struct l2fib_entry_key_t::@176::@178 fields
Set bridge flags (such as L2_LEARN, L2_FWD, L2_FLOOD, L2_UU_FLOOD, or L2_ARP_TERM) request...
vl_api_bridge_domain_sw_if_t sw_if_details[n_sw_ifs]
u32 bd_find_index(bd_main_t *bdm, u32 bd_id)
Get a bridge domain.
static void send_bridge_domain_details(l2input_main_t *l2im, unix_shared_memory_queue_t *q, l2_bridge_domain_t *bd_config, u32 n_sw_ifs, u32 context)
vpe_api_main_t vpe_api_main
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_flush_int_t_handler(vl_api_l2fib_flush_int_t *mp)
static void vl_api_l2_interface_pbb_tag_rewrite_t_handler(vl_api_l2_interface_pbb_tag_rewrite_t *mp)
static void send_l2fib_table_entry(vpe_api_main_t *am, unix_shared_memory_queue_t *q, l2fib_entry_key_t *l2fe_key, l2fib_entry_result_t *l2fe_res, u32 context)
#define VALIDATE_SW_IF_INDEX(mp)
struct _unix_shared_memory_queue unix_shared_memory_queue_t
static void vl_api_bridge_domain_dump_t_handler(vl_api_bridge_domain_dump_t *mp)
L2 bridge domain add or delete request.