#include <vlibapi/api_helper_macros.h>
vpe_api_main_t vpe_api_main;
-#define foreach_vpe_api_msg \
-_(SW_INTERFACE_SET_FLAGS, sw_interface_set_flags) \
-_(HW_INTERFACE_SET_MTU, hw_interface_set_mtu) \
-_(SW_INTERFACE_SET_MTU, sw_interface_set_mtu) \
-_(WANT_INTERFACE_EVENTS, want_interface_events) \
-_(SW_INTERFACE_DUMP, sw_interface_dump) \
-_(SW_INTERFACE_ADD_DEL_ADDRESS, sw_interface_add_del_address) \
-_(SW_INTERFACE_SET_RX_MODE, sw_interface_set_rx_mode) \
-_(SW_INTERFACE_RX_PLACEMENT_DUMP, sw_interface_rx_placement_dump) \
-_(SW_INTERFACE_SET_RX_PLACEMENT, sw_interface_set_rx_placement) \
-_(SW_INTERFACE_SET_TABLE, sw_interface_set_table) \
-_(SW_INTERFACE_GET_TABLE, sw_interface_get_table) \
-_(SW_INTERFACE_SET_UNNUMBERED, sw_interface_set_unnumbered) \
-_(SW_INTERFACE_CLEAR_STATS, sw_interface_clear_stats) \
-_(SW_INTERFACE_TAG_ADD_DEL, sw_interface_tag_add_del) \
-_(SW_INTERFACE_ADD_DEL_MAC_ADDRESS, sw_interface_add_del_mac_address) \
-_(SW_INTERFACE_SET_MAC_ADDRESS, sw_interface_set_mac_address) \
-_(SW_INTERFACE_GET_MAC_ADDRESS, sw_interface_get_mac_address) \
-_(CREATE_VLAN_SUBIF, create_vlan_subif) \
-_(CREATE_SUBIF, create_subif) \
-_(DELETE_SUBIF, delete_subif) \
-_(CREATE_LOOPBACK, create_loopback) \
-_(CREATE_LOOPBACK_INSTANCE, create_loopback_instance) \
-_(DELETE_LOOPBACK, delete_loopback) \
-_(INTERFACE_NAME_RENUMBER, interface_name_renumber) \
-_(COLLECT_DETAILED_INTERFACE_STATS, collect_detailed_interface_stats) \
-_(SW_INTERFACE_SET_IP_DIRECTED_BROADCAST, \
- sw_interface_set_ip_directed_broadcast) \
-_(SW_INTERFACE_ADDRESS_REPLACE_BEGIN, \
- sw_interface_address_replace_begin) \
-_(SW_INTERFACE_ADDRESS_REPLACE_END, \
- sw_interface_address_replace_end)
+#define foreach_vpe_api_msg \
+ _ (SW_INTERFACE_SET_FLAGS, sw_interface_set_flags) \
+ _ (SW_INTERFACE_SET_PROMISC, sw_interface_set_promisc) \
+ _ (HW_INTERFACE_SET_MTU, hw_interface_set_mtu) \
+ _ (SW_INTERFACE_SET_MTU, sw_interface_set_mtu) \
+ _ (WANT_INTERFACE_EVENTS, want_interface_events) \
+ _ (SW_INTERFACE_DUMP, sw_interface_dump) \
+ _ (SW_INTERFACE_ADD_DEL_ADDRESS, sw_interface_add_del_address) \
+ _ (SW_INTERFACE_SET_RX_MODE, sw_interface_set_rx_mode) \
+ _ (SW_INTERFACE_RX_PLACEMENT_DUMP, sw_interface_rx_placement_dump) \
+ _ (SW_INTERFACE_SET_RX_PLACEMENT, sw_interface_set_rx_placement) \
+ _ (SW_INTERFACE_SET_TABLE, sw_interface_set_table) \
+ _ (SW_INTERFACE_GET_TABLE, sw_interface_get_table) \
+ _ (SW_INTERFACE_SET_UNNUMBERED, sw_interface_set_unnumbered) \
+ _ (SW_INTERFACE_CLEAR_STATS, sw_interface_clear_stats) \
+ _ (SW_INTERFACE_TAG_ADD_DEL, sw_interface_tag_add_del) \
+ _ (SW_INTERFACE_ADD_DEL_MAC_ADDRESS, sw_interface_add_del_mac_address) \
+ _ (SW_INTERFACE_SET_MAC_ADDRESS, sw_interface_set_mac_address) \
+ _ (SW_INTERFACE_GET_MAC_ADDRESS, sw_interface_get_mac_address) \
+ _ (CREATE_VLAN_SUBIF, create_vlan_subif) \
+ _ (CREATE_SUBIF, create_subif) \
+ _ (DELETE_SUBIF, delete_subif) \
+ _ (CREATE_LOOPBACK, create_loopback) \
+ _ (CREATE_LOOPBACK_INSTANCE, create_loopback_instance) \
+ _ (DELETE_LOOPBACK, delete_loopback) \
+ _ (INTERFACE_NAME_RENUMBER, interface_name_renumber) \
+ _ (COLLECT_DETAILED_INTERFACE_STATS, collect_detailed_interface_stats) \
+ _ (SW_INTERFACE_SET_IP_DIRECTED_BROADCAST, \
+ sw_interface_set_ip_directed_broadcast) \
+ _ (SW_INTERFACE_ADDRESS_REPLACE_BEGIN, sw_interface_address_replace_begin) \
+ _ (SW_INTERFACE_ADDRESS_REPLACE_END, sw_interface_address_replace_end)
static void
vl_api_sw_interface_set_flags_t_handler (vl_api_sw_interface_set_flags_t * mp)
REPLY_MACRO (VL_API_SW_INTERFACE_SET_FLAGS_REPLY);
}
+static void
+vl_api_sw_interface_set_promisc_t_handler (
+ vl_api_sw_interface_set_promisc_t *mp)
+{
+ vl_api_sw_interface_set_promisc_reply_t *rmp;
+ vnet_main_t *vnm = vnet_get_main ();
+ ethernet_main_t *em = ðernet_main;
+ int rv = 0;
+ ethernet_interface_t *eif;
+ vnet_sw_interface_t *swif;
+ u32 flags, sw_if_index;
+
+ VALIDATE_SW_IF_INDEX (mp);
+
+ sw_if_index = ntohl (mp->sw_if_index);
+ swif = vnet_get_sw_interface (vnm, sw_if_index);
+ eif = ethernet_get_interface (em, swif->hw_if_index);
+ if (!eif)
+ {
+ rv = VNET_API_ERROR_INVALID_VALUE;
+ goto done;
+ }
+
+ flags = mp->promisc_on ? ETHERNET_INTERFACE_FLAG_ACCEPT_ALL : 0;
+ rv = ethernet_set_flags (vnm, swif->hw_if_index, flags);
+
+done:
+ BAD_SW_IF_INDEX_LABEL;
+ REPLY_MACRO (VL_API_SW_INTERFACE_SET_PROMISC_REPLY);
+}
+
static void
vl_api_hw_interface_set_mtu_t_handler (vl_api_hw_interface_set_mtu_t * mp)
{
fib_index,
ip6_main.fib_index_by_sw_if_index[sw_if_index]);
- if (0 == table_id)
- {
- /* reset back to default */
- if (0 != ip6_main.fib_index_by_sw_if_index[sw_if_index])
- fib_table_unlock (ip6_main.fib_index_by_sw_if_index[sw_if_index],
- FIB_PROTOCOL_IP6, src);
- if (0 != ip6_main.mfib_index_by_sw_if_index[sw_if_index])
- mfib_table_unlock (ip6_main.mfib_index_by_sw_if_index
- [sw_if_index], FIB_PROTOCOL_IP6, msrc);
+ /* unlock currently assigned tables */
+ if (0 != ip6_main.fib_index_by_sw_if_index[sw_if_index])
+ fib_table_unlock (ip6_main.fib_index_by_sw_if_index[sw_if_index],
+ FIB_PROTOCOL_IP6, src);
+ if (0 != ip6_main.mfib_index_by_sw_if_index[sw_if_index])
+ mfib_table_unlock (ip6_main.mfib_index_by_sw_if_index[sw_if_index],
+ FIB_PROTOCOL_IP6, msrc);
- }
- else
+ if (0 != table_id)
{
/* we need to lock the table now it's inuse */
fib_table_lock (fib_index, FIB_PROTOCOL_IP6, src);
fib_index,
ip4_main.fib_index_by_sw_if_index[sw_if_index]);
- if (0 == table_id)
- {
- /* reset back to default */
- if (0 != ip4_main.fib_index_by_sw_if_index[sw_if_index])
- fib_table_unlock (ip4_main.fib_index_by_sw_if_index[sw_if_index],
- FIB_PROTOCOL_IP4, src);
- if (0 != ip4_main.mfib_index_by_sw_if_index[sw_if_index])
- mfib_table_unlock (ip4_main.mfib_index_by_sw_if_index
- [sw_if_index], FIB_PROTOCOL_IP4, msrc);
+ /* unlock currently assigned tables */
+ if (0 != ip4_main.fib_index_by_sw_if_index[sw_if_index])
+ fib_table_unlock (ip4_main.fib_index_by_sw_if_index[sw_if_index],
+ FIB_PROTOCOL_IP4, src);
+ if (0 != ip4_main.mfib_index_by_sw_if_index[sw_if_index])
+ mfib_table_unlock (ip4_main.mfib_index_by_sw_if_index[sw_if_index],
+ FIB_PROTOCOL_IP4, msrc);
- }
- else
+ if (0 != table_id)
{
/* we need to lock the table now it's inuse */
fib_index = fib_table_find_or_create_and_lock (FIB_PROTOCOL_IP4,
vnet_hw_if_rx_queue_t **all_queues = 0;
vnet_hw_if_rx_queue_t **qptr;
vnet_hw_if_rx_queue_t *q;
- vec_foreach (q, vnm->interface_main.hw_if_rx_queues)
+ pool_foreach (q, vnm->interface_main.hw_if_rx_queues)
vec_add1 (all_queues, q);
vec_sort_with_function (all_queues, vnet_hw_if_rxq_cmp_cli_api);