44 #define vl_api_bridge_domain_details_t_endian vl_noop_handler 45 #define vl_api_bridge_domain_details_t_print vl_noop_handler 48 #define vl_print(handle, ...) vlib_cli_output (handle, __VA_ARGS__) 55 #define foreach_vpe_api_msg \ 56 _(L2_XCONNECT_DUMP, l2_xconnect_dump) \ 57 _(L2_FIB_CLEAR_TABLE, l2_fib_clear_table) \ 58 _(L2_FIB_TABLE_DUMP, l2_fib_table_dump) \ 59 _(L2FIB_FLUSH_ALL, l2fib_flush_all) \ 60 _(L2FIB_FLUSH_INT, l2fib_flush_int) \ 61 _(L2FIB_FLUSH_BD, l2fib_flush_bd) \ 62 _(L2FIB_ADD_DEL, l2fib_add_del) \ 63 _(WANT_L2_MACS_EVENTS, want_l2_macs_events) \ 64 _(L2_FLAGS, l2_flags) \ 65 _(SW_INTERFACE_SET_L2_XCONNECT, sw_interface_set_l2_xconnect) \ 66 _(SW_INTERFACE_SET_L2_BRIDGE, sw_interface_set_l2_bridge) \ 67 _(L2_PATCH_ADD_DEL, l2_patch_add_del) \ 68 _(L2_INTERFACE_EFP_FILTER, l2_interface_efp_filter) \ 69 _(BD_IP_MAC_ADD_DEL, bd_ip_mac_add_del) \ 70 _(BD_IP_MAC_FLUSH, bd_ip_mac_flush) \ 71 _(BD_IP_MAC_DUMP, bd_ip_mac_dump) \ 72 _(BRIDGE_DOMAIN_ADD_DEL, bridge_domain_add_del) \ 73 _(BRIDGE_DOMAIN_DUMP, bridge_domain_dump) \ 74 _(BRIDGE_FLAGS, bridge_flags) \ 75 _(L2_INTERFACE_VLAN_TAG_REWRITE, l2_interface_vlan_tag_rewrite) \ 76 _(L2_INTERFACE_PBB_TAG_REWRITE, l2_interface_pbb_tag_rewrite) \ 77 _(BRIDGE_DOMAIN_SET_MAC_AGE, bridge_domain_set_mac_age) \ 78 _(SW_INTERFACE_SET_VPATH, sw_interface_set_vpath) \ 79 _(BVI_CREATE, bvi_create) \ 80 _(BVI_DELETE, bvi_delete) 84 u32 rx_sw_if_index,
u32 tx_sw_if_index)
90 mp->_vl_msg_id = ntohs (VL_API_L2_XCONNECT_DETAILS);
115 config = vec_elt_at_index (l2im->configs, swif->sw_if_index);
116 if (config->xconnect)
117 send_l2_xconnect_details (reg, mp->context, swif->sw_if_index,
118 config->output_sw_if_index);
127 vl_api_l2_fib_clear_table_reply_t *rmp;
145 mp->_vl_msg_id = ntohs (VL_API_L2_FIB_TABLE_DETAILS);
152 mp->
static_mac = (l2fib_entry_result_is_set_STATIC (l2fe_res) ? 1 : 0);
153 mp->
filter_mac = (l2fib_entry_result_is_set_FILTER (l2fe_res) ? 1 : 0);
154 mp->
bvi_mac = (l2fib_entry_result_is_set_BVI (l2fe_res) ? 1 : 0);
204 vl_api_l2fib_add_del_reply_t *rmp;
211 rv = VNET_API_ERROR_NO_SUCH_ENTRY;
212 goto bad_sw_if_index;
230 rv = VNET_API_ERROR_INVALID_SW_IF_INDEX;
231 goto bad_sw_if_index;
239 rv = VNET_API_ERROR_INVALID_SW_IF_INDEX;
240 goto bad_sw_if_index;
244 flags |= L2FIB_ENTRY_RESULT_FLAG_STATIC;
246 flags |= L2FIB_ENTRY_RESULT_FLAG_BVI;
254 rv = VNET_API_ERROR_NO_SUCH_ENTRY;
266 vl_api_want_l2_macs_events_reply_t *rmp;
269 u32 pid = ntohl (mp->
pid);
299 rv = VNET_API_ERROR_L2_MACS_EVENT_CLINET_PRESENT;
322 vl_api_l2fib_flush_int_reply_t *rmp;
337 vl_api_l2fib_flush_all_reply_t *rmp;
349 vl_api_l2fib_flush_bd_reply_t *rmp;
355 rv = VNET_API_ERROR_NO_SUCH_ENTRY;
377 bitmap |= L2INPUT_FEAT_LEARN;
380 bitmap |= L2INPUT_FEAT_FWD;
383 bitmap |= L2INPUT_FEAT_FLOOD;
386 bitmap |= L2INPUT_FEAT_UU_FLOOD;
389 bitmap |= L2INPUT_FEAT_ARP_TERM;
409 vl_api_bridge_domain_set_mac_age_reply_t *rmp;
416 rv = VNET_API_ERROR_BD_NOT_MODIFIABLE;
423 rv = VNET_API_ERROR_NO_SUCH_ENTRY;
428 REPLY_MACRO (VL_API_BRIDGE_DOMAIN_SET_MAC_AGE_REPLY);
442 .bd_id = ntohl (mp->
bd_id),
448 vl_api_bridge_domain_add_del_reply_t *rmp;
466 mp->_vl_msg_id = ntohs (VL_API_BRIDGE_DOMAIN_DETAILS);
478 strncpy ((
char *) mp->
bd_tag, (
char *) bd_config->
bd_tag,
490 sw_ifs->
shg = input_cfg->
shg;
511 bd_id = ntohl (mp->
bd_id);
526 for (; bd_index < end; bd_index++)
531 if (bd_config && (bd_config->
bd_id > 0))
572 rv = VNET_API_ERROR_BD_NOT_MODIFIABLE;
579 rv = VNET_API_ERROR_NO_SUCH_ENTRY;
599 vl_api_l2_interface_vlan_tag_rewrite_reply_t *rmp;
606 vtr_op = ntohl (mp->
vtr_op);
623 rv = VNET_API_ERROR_INVALID_VALUE;
624 goto bad_sw_if_index;
633 REPLY_MACRO (VL_API_L2_INTERFACE_VLAN_TAG_REWRITE_REPLY);
640 vl_api_l2_interface_pbb_tag_rewrite_reply_t *rmp;
648 vtr_op = ntohl (mp->
vtr_op);
659 rv = VNET_API_ERROR_INVALID_VALUE;
660 goto bad_sw_if_index;
669 REPLY_MACRO (VL_API_L2_INTERFACE_PBB_TAG_REWRITE_REPLY);
676 vl_api_sw_interface_set_l2_xconnect_reply_t *rmp;
701 rv = VNET_API_ERROR_NON_ETHERNET;
704 rv = VNET_API_ERROR_BD_ALREADY_HAS_BVI;
711 REPLY_MACRO (VL_API_SW_INTERFACE_SET_L2_XCONNECT_REPLY);
717 v = clib_net_to_host_u32 (v);
732 return (VNET_API_ERROR_INVALID_VALUE);
740 vl_api_sw_interface_set_l2_bridge_reply_t *rmp;
759 rx_sw_if_index, bd_index, pt, mp->
shg, 0);
769 rv = VNET_API_ERROR_NON_ETHERNET;
772 rv = VNET_API_ERROR_BD_ALREADY_HAS_BVI;
779 REPLY_MACRO (VL_API_SW_INTERFACE_SET_L2_BRIDGE_REPLY);
792 mp->_vl_msg_id = ntohs (VL_API_BD_IP_MAC_DETAILS);
794 mp->
bd_id = ntohl (bd_id);
811 u32 bd_index, start, end;
837 for (bd_index = start; bd_index < end; bd_index++)
845 bd_id = bd_config->
bd_id;
850 send_bd_ip_mac_entry (am, reg, bd_id, 0, (u8 *) &(ip4_addr.as_u8), (u8 *) &mac_addr, mp->context);
855 send_bd_ip_mac_entry (am, reg, bd_id, 1, (u8 *) &(ip6_addr->as_u8), (u8 *) &mac_addr, mp->context);
866 vl_api_bd_ip_mac_add_del_reply_t *rmp;
874 bd_id = ntohl (mp->
bd_id);
878 rv = VNET_API_ERROR_BD_NOT_MODIFIABLE;
885 rv = VNET_API_ERROR_NO_SUCH_ENTRY;
894 rv = VNET_API_ERROR_UNSPECIFIED;
903 vl_api_bd_ip_mac_flush_reply_t *rmp;
909 bd_id = ntohl (mp->
bd_id);
913 rv = VNET_API_ERROR_BD_NOT_MODIFIABLE;
920 rv = VNET_API_ERROR_NO_SUCH_ENTRY;
932 u32 sw_if_index,
u8 enable);
939 vl_api_l2_interface_efp_filter_reply_t *rmp;
949 REPLY_MACRO (VL_API_L2_INTERFACE_EFP_FILTER_REPLY);
957 vl_api_l2_patch_add_del_reply_t *rmp;
978 vl_api_sw_interface_set_vpath_reply_t *rmp;
986 sw_if_index, mp->
enable, 0, 0);
988 sw_if_index, mp->
enable, 0, 0);
990 sw_if_index, mp->
enable, 0, 0);
992 sw_if_index, mp->
enable, 0, 0);
1022 vl_api_bvi_delete_reply_t *rmp;
1037 #define vl_msg_name_crc_list 1039 #undef vl_msg_name_crc_list 1044 #define _(id,n,crc) vl_msg_api_add_msg_name_crc (am, #n "_" #crc, id); 1045 foreach_vl_msg_name_crc_l2;
1055 vl_msg_api_set_handlers(VL_API_##N, #n, \ 1056 vl_api_##n##_t_handler, \ 1058 vl_api_##n##_t_endian, \ 1059 vl_api_##n##_t_print, \ 1060 sizeof(vl_api_##n##_t), 1); 1065 am->
is_mp_safe[VL_API_BRIDGE_DOMAIN_DUMP] = 1;
#define vec_validate(V, I)
Make sure vector is long enough for given index (no header, unspecified alignment) ...
static void vl_api_l2_fib_table_dump_t_handler(vl_api_l2_fib_table_dump_t *mp)
#define BAD_RX_SW_IF_INDEX_LABEL
static bd_flags_t bd_flags_decode(vl_api_bd_flags_t v)
#define vec_foreach_index(var, v)
Iterate over vector indices.
L2 FIB add entry request.
l2_input_config_t * configs
Set bridge flags response.
#define VALIDATE_TX_SW_IF_INDEX(mp)
l2 fib table details structure
static void vl_api_bvi_delete_t_handler(vl_api_bvi_delete_t *mp)
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.
vl_api_l2_port_type_t port_type
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.
vnet_main_t * vnet_get_main(void)
static void vl_api_sw_interface_set_l2_bridge_t_handler(vl_api_sw_interface_set_l2_bridge_t *mp)
Create BVI interface instance request.
static void vl_api_l2_patch_add_del_t_handler(vl_api_l2_patch_add_del_t *mp)
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)
clib_memset(h->entries, 0, sizeof(h->entries[0]) *entries)
static void vl_api_send_msg(vl_api_registration_t *rp, u8 *elem)
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)
static void send_l2_xconnect_details(vl_api_registration_t *reg, u32 context, u32 rx_sw_if_index, u32 tx_sw_if_index)
static void vl_api_bd_ip_mac_dump_t_handler(vl_api_bd_ip_mac_dump_t *mp)
enum l2fib_entry_result_flags_t_ l2fib_entry_result_flags_t
L2 bridge domain request operational state details.
int bd_add_del(l2_bridge_domain_add_del_args_t *a)
bridge domain IP to MAC entry details structure
static void vl_api_l2fib_add_del_t_handler(vl_api_l2fib_add_del_t *mp)
void * vl_msg_api_alloc(int nbytes)
#define clib_memcpy(d, s, n)
Reply to l2_xconnect_dump.
vl_api_mac_address_t mac_address
L2 bridge domain operational state response.
l2learn_main_t l2learn_main
#define pool_foreach(VAR, POOL, BODY)
Iterate through pool.
static void vl_api_bd_ip_mac_flush_t_handler(vl_api_bd_ip_mac_flush_t *mp)
L2 bridge domain sw interface operational state response.
#define hash_foreach(key_var, value_var, h, body)
#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.
static void send_bd_ip_mac_entry(vpe_api_main_t *am, vl_api_registration_t *reg, u32 bd_id, u8 is_ipv6, u8 *ip_address, u8 *mac_address, u32 context)
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.
uword * bd_index_by_bd_id
ip46_type_t ip_address_decode(const vl_api_address_t *in, ip46_address_t *out)
struct l2fib_entry_result_t_::@262::@264 fields
Dump l2 fib (aka bridge domain) table.
vnet_api_error_t api_errno
Set interface L2 flags (such as L2_LEARN, L2_FWD, L2_FLOOD, L2_UU_FLOOD, or L2_ARP_TERM bits)...
L2 FIB flush all entries.
L2 fib clear table request, clear all mac entries in the l2 fib.
Set interface L2 flags response.
Set bridge domain ip to mac entry request.
void l2fib_flush_bd_mac(vlib_main_t *vm, u32 bd_index)
Flush all non static MACs in a bridge domain.
enum l2_bd_port_type_t_ l2_bd_port_type_t
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
void l2fib_flush_all_mac(vlib_main_t *vm)
Flush all non static MACs - flushes all valid BDs.
Create BVI interface instance response.
#define hash_foreach_mem(key_var, value_var, h, body)
static clib_error_t * l2_api_hookup(vlib_main_t *vm)
#define L2FIB_EVENT_MAX_MACS_DEFAULT
static u32 bd_is_valid(l2_bridge_domain_t *bd_config)
#define ip46_address_initializer
API main structure, used by both vpp and binary API clients.
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)
struct l2fib_entry_key_t::@254::@256 fields
void bd_set_mac_age(vlib_main_t *vm, u32 bd_index, u8 age)
Set the mac age for the bridge domain.
An API client registration, only in vpp/vlib.
#define BAD_SW_IF_INDEX_LABEL
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)
u32 l2fib_del_entry(const u8 *mac, u32 bd_index, u32 sw_if_index)
Delete an entry from the l2fib.
int l2_bvi_delete(u32 sw_if_index)
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
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.
static void setup_message_id_table(api_main_t *am)
void l2fib_clear_table(void)
static vl_api_registration_t * vl_api_client_index_to_registration(u32 index)
#define VALIDATE_RX_SW_IF_INDEX(mp)
Dump bridge domain IP to MAC entries.
void bd_flush_ip_mac(u32 bd_index)
Flush IP address to MAC address mapping tables in a BD.
#define L2FIB_EVENT_SCAN_DELAY_DEFAULT
Set L2 XConnect between two interfaces request.
static u32 bd_find_or_add_bd_index(bd_main_t *bdm, u32 bd_id)
Get or create a bridge domain.
Register to receive L2 MAC events for learned and aged MAC.
#define VALIDATE_BD_ID(mp)
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)
Interface bridge mode request.
#define L2FIB_EVENT_LEARN_LIMIT_DEFAULT
static void vl_api_sw_interface_set_l2_xconnect_t_handler(vl_api_sw_interface_set_l2_xconnect_t *mp)
static void vl_api_bvi_create_t_handler(vl_api_bvi_create_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_want_l2_macs_events_t_handler(vl_api_want_l2_macs_events_t *mp)
L2 interface ethernet flow point filtering enable/disable request.
static void vl_api_bridge_flags_t_handler(vl_api_bridge_flags_t *mp)
int vnet_l2_patch_add_del(u32 rx_sw_if_index, u32 tx_sw_if_index, int is_add)
vnet_sw_interface_t * sw_interfaces
static void vl_api_l2_interface_efp_filter_t_handler(vl_api_l2_interface_efp_filter_t *mp)
L2 interface vlan tag rewrite configure request.
static void vl_api_l2fib_flush_all_t_handler(vl_api_l2fib_flush_all_t *mp)
l2_bridge_domain_t * bd_configs
static void l2fib_add_filter_entry(const u8 *mac, u32 bd_index)
static void vl_api_bridge_domain_set_mac_age_t_handler(vl_api_bridge_domain_set_mac_age_t *mp)
L2 interface patch add / del request.
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_address_t ip_address
Interface set vpath request.
static int l2_bd_port_type_decode(vl_api_l2_port_type_t v, l2_bd_port_type_t *l)
u8 * is_mp_safe
Message is mp safe vector.
L2 interface pbb tag rewrite configure request.
#define vec_foreach(var, vec)
Vector iterator.
Set bridge flags request.
Delete BVI interface 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.
vpe_api_main_t vpe_api_main
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.
void mac_address_decode(const u8 *in, mac_address_t *out)
Conversion functions to/from (decode/encode) API types to VPP internal types.
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)
Flush bridge domain IP to MAC entries.
static void vl_api_l2_interface_pbb_tag_rewrite_t_handler(vl_api_l2_interface_pbb_tag_rewrite_t *mp)
#define L2LEARN_DEFAULT_LIMIT
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)
int l2_bvi_create(u32 user_instance, const mac_address_t *mac_in, u32 *sw_if_indexp)
#define VALIDATE_SW_IF_INDEX(mp)
enum bd_flags_t_ bd_flags_t
static void vl_api_bridge_domain_dump_t_handler(vl_api_bridge_domain_dump_t *mp)
L2 bridge domain add or delete request.
static void vl_api_sw_interface_set_vpath_t_handler(vl_api_sw_interface_set_vpath_t *mp)