aboutsummaryrefslogtreecommitdiffstats
path: root/vpp/vpp-api
diff options
context:
space:
mode:
Diffstat (limited to 'vpp/vpp-api')
-rw-r--r--vpp/vpp-api/api.c4921
l---------vpp/vpp-api/api_format.c1
-rw-r--r--vpp/vpp-api/api_main.c192
-rw-r--r--vpp/vpp-api/custom_dump.c3139
-rw-r--r--vpp/vpp-api/gmon.c319
-rw-r--r--vpp/vpp-api/json_format.c304
-rw-r--r--vpp/vpp-api/json_format.h254
-rw-r--r--vpp/vpp-api/summary_stats_client.c302
-rw-r--r--vpp/vpp-api/test_client.c1531
-rw-r--r--vpp/vpp-api/test_ha.c249
l---------vpp/vpp-api/vat.h1
-rw-r--r--vpp/vpp-api/vpe.api2782
-rw-r--r--vpp/vpp-api/vpe_all_api_h.h37
-rw-r--r--vpp/vpp-api/vpe_msg_enum.h37
-rw-r--r--vpp/vpp-api/vpp_get_metrics.c253
15 files changed, 0 insertions, 14322 deletions
diff --git a/vpp/vpp-api/api.c b/vpp/vpp-api/api.c
deleted file mode 100644
index 01022608ac6..00000000000
--- a/vpp/vpp-api/api.c
+++ /dev/null
@@ -1,4921 +0,0 @@
-/*
- *------------------------------------------------------------------
- * api.c - message handler registration
- *
- * Copyright (c) 2010-2016 Cisco and/or its affiliates.
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *------------------------------------------------------------------
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/mman.h>
-#include <sys/stat.h>
-#include <netinet/in.h>
-#include <signal.h>
-#include <pthread.h>
-#include <unistd.h>
-#include <time.h>
-#include <fcntl.h>
-#include <string.h>
-#include <pwd.h>
-#include <grp.h>
-
-#include <vppinfra/clib.h>
-#include <vppinfra/vec.h>
-#include <vppinfra/hash.h>
-#include <vppinfra/bitmap.h>
-#include <vppinfra/fifo.h>
-#include <vppinfra/time.h>
-#include <vppinfra/mheap.h>
-#include <vppinfra/heap.h>
-#include <vppinfra/pool.h>
-#include <vppinfra/format.h>
-#include <vppinfra/error.h>
-
-#include <vnet/api_errno.h>
-#include <vnet/vnet.h>
-#include <vnet/l2/l2_input.h>
-#include <vnet/l2/l2_bd.h>
-#include <vnet/ip/ip.h>
-#include <vnet/ip/ip6.h>
-#include <vnet/ip/ip6_neighbor.h>
-#include <vnet/mpls/mpls.h>
-#include <vnet/mpls/mpls_tunnel.h>
-#include <vnet/dhcp/proxy.h>
-#include <vnet/dhcp/client.h>
-#if IPV6SR > 0
-#include <vnet/sr/sr.h>
-#endif
-#include <vnet/dhcpv6/proxy.h>
-#include <vlib/vlib.h>
-#include <vlib/unix/unix.h>
-#include <vlibapi/api.h>
-#include <vlibmemory/api.h>
-#include <vnet/classify/vnet_classify.h>
-#include <vnet/classify/input_acl.h>
-#include <vnet/classify/policer_classify.h>
-#include <vnet/classify/flow_classify.h>
-#include <vnet/l2/l2_classify.h>
-#include <vnet/vxlan/vxlan.h>
-#include <vnet/l2/l2_vtr.h>
-#include <vnet/vxlan-gpe/vxlan_gpe.h>
-#include <vnet/map/map.h>
-#include <vnet/cop/cop.h>
-#include <vnet/ip/ip6_hop_by_hop.h>
-#include <vnet/ip/ip_source_and_port_range_check.h>
-#include <vnet/policer/policer.h>
-#include <vnet/flow/flow_report.h>
-#include <vnet/flow/flow_report_classify.h>
-#include <vnet/ip/punt.h>
-#include <vnet/feature/feature.h>
-
-#undef BIHASH_TYPE
-#undef __included_bihash_template_h__
-#include <vnet/l2/l2_fib.h>
-
-#if DPDK > 0
-#include <vnet/devices/dpdk/dpdk.h>
-#endif
-
-#include <stats/stats.h>
-#include <oam/oam.h>
-#include <vnet/ethernet/ethernet.h>
-#include <vnet/ethernet/arp_packet.h>
-#include <vnet/interface.h>
-#include <vnet/l2/l2_fib.h>
-#include <vnet/l2/l2_bd.h>
-#include <vpp-api/vpe_msg_enum.h>
-#include <vnet/span/span.h>
-#include <vnet/fib/ip6_fib.h>
-#include <vnet/fib/ip4_fib.h>
-#include <vnet/fib/fib_api.h>
-#include <vnet/dpo/drop_dpo.h>
-#include <vnet/dpo/receive_dpo.h>
-#include <vnet/dpo/lookup_dpo.h>
-#include <vnet/dpo/classify_dpo.h>
-#include <vnet/dpo/ip_null_dpo.h>
-#define vl_typedefs /* define message structures */
-#include <vpp-api/vpe_all_api_h.h>
-#undef vl_typedefs
-#define vl_endianfun /* define message structures */
-#include <vpp-api/vpe_all_api_h.h>
-#undef vl_endianfun
-/* instantiate all the print functions we know about */
-#define vl_print(handle, ...) vlib_cli_output (handle, __VA_ARGS__)
-#define vl_printfun
-#include <vpp-api/vpe_all_api_h.h>
-#undef vl_printfun
-#include <vlibapi/api_helper_macros.h>
-#define foreach_vpe_api_msg \
-_(WANT_OAM_EVENTS, want_oam_events) \
-_(OAM_ADD_DEL, oam_add_del) \
-_(MPLS_ROUTE_ADD_DEL, mpls_route_add_del) \
-_(MPLS_IP_BIND_UNBIND, mpls_ip_bind_unbind) \
-_(IS_ADDRESS_REACHABLE, is_address_reachable) \
-_(SW_INTERFACE_SET_MPLS_ENABLE, sw_interface_set_mpls_enable) \
-_(SW_INTERFACE_SET_VPATH, sw_interface_set_vpath) \
-_(SW_INTERFACE_SET_VXLAN_BYPASS, sw_interface_set_vxlan_bypass) \
-_(SW_INTERFACE_SET_L2_XCONNECT, sw_interface_set_l2_xconnect) \
-_(SW_INTERFACE_SET_L2_BRIDGE, sw_interface_set_l2_bridge) \
-_(SW_INTERFACE_SET_DPDK_HQOS_PIPE, sw_interface_set_dpdk_hqos_pipe) \
-_(SW_INTERFACE_SET_DPDK_HQOS_SUBPORT, sw_interface_set_dpdk_hqos_subport) \
-_(SW_INTERFACE_SET_DPDK_HQOS_TCTBL, sw_interface_set_dpdk_hqos_tctbl) \
-_(BRIDGE_DOMAIN_ADD_DEL, bridge_domain_add_del) \
-_(BRIDGE_DOMAIN_DUMP, bridge_domain_dump) \
-_(BRIDGE_DOMAIN_DETAILS, bridge_domain_details) \
-_(BRIDGE_DOMAIN_SW_IF_DETAILS, bridge_domain_sw_if_details) \
-_(L2FIB_ADD_DEL, l2fib_add_del) \
-_(L2_FLAGS, l2_flags) \
-_(BRIDGE_FLAGS, bridge_flags) \
-_(CREATE_VLAN_SUBIF, create_vlan_subif) \
-_(CREATE_SUBIF, create_subif) \
-_(MPLS_TUNNEL_ADD_DEL, mpls_tunnel_add_del) \
-_(PROXY_ARP_ADD_DEL, proxy_arp_add_del) \
-_(PROXY_ARP_INTFC_ENABLE_DISABLE, proxy_arp_intfc_enable_disable) \
-_(VNET_GET_SUMMARY_STATS, vnet_get_summary_stats) \
-_(RESET_FIB, reset_fib) \
-_(DHCP_PROXY_CONFIG,dhcp_proxy_config) \
-_(DHCP_PROXY_CONFIG_2,dhcp_proxy_config_2) \
-_(DHCP_PROXY_SET_VSS,dhcp_proxy_set_vss) \
-_(DHCP_CLIENT_CONFIG, dhcp_client_config) \
-_(CREATE_LOOPBACK, create_loopback) \
-_(CONTROL_PING, control_ping) \
-_(CLI_REQUEST, cli_request) \
-_(CLI_INBAND, cli_inband) \
-_(SET_ARP_NEIGHBOR_LIMIT, set_arp_neighbor_limit) \
-_(L2_PATCH_ADD_DEL, l2_patch_add_del) \
-_(CLASSIFY_ADD_DEL_TABLE, classify_add_del_table) \
-_(CLASSIFY_ADD_DEL_SESSION, classify_add_del_session) \
-_(CLASSIFY_SET_INTERFACE_IP_TABLE, classify_set_interface_ip_table) \
-_(CLASSIFY_SET_INTERFACE_L2_TABLES, classify_set_interface_l2_tables) \
-_(GET_NODE_INDEX, get_node_index) \
-_(ADD_NODE_NEXT, add_node_next) \
-_(VXLAN_ADD_DEL_TUNNEL, vxlan_add_del_tunnel) \
-_(VXLAN_TUNNEL_DUMP, vxlan_tunnel_dump) \
-_(L2_FIB_CLEAR_TABLE, l2_fib_clear_table) \
-_(L2_INTERFACE_EFP_FILTER, l2_interface_efp_filter) \
-_(L2_INTERFACE_VLAN_TAG_REWRITE, l2_interface_vlan_tag_rewrite) \
-_(SHOW_VERSION, show_version) \
-_(L2_FIB_TABLE_DUMP, l2_fib_table_dump) \
-_(L2_FIB_TABLE_ENTRY, l2_fib_table_entry) \
-_(VXLAN_GPE_ADD_DEL_TUNNEL, vxlan_gpe_add_del_tunnel) \
-_(VXLAN_GPE_TUNNEL_DUMP, vxlan_gpe_tunnel_dump) \
-_(INTERFACE_NAME_RENUMBER, interface_name_renumber) \
-_(WANT_IP4_ARP_EVENTS, want_ip4_arp_events) \
-_(WANT_IP6_ND_EVENTS, want_ip6_nd_events) \
-_(INPUT_ACL_SET_INTERFACE, input_acl_set_interface) \
-_(DELETE_LOOPBACK, delete_loopback) \
-_(BD_IP_MAC_ADD_DEL, bd_ip_mac_add_del) \
-_(COP_INTERFACE_ENABLE_DISABLE, cop_interface_enable_disable) \
-_(COP_WHITELIST_ENABLE_DISABLE, cop_whitelist_enable_disable) \
-_(GET_NODE_GRAPH, get_node_graph) \
-_(IOAM_ENABLE, ioam_enable) \
-_(IOAM_DISABLE, ioam_disable) \
-_(SR_MULTICAST_MAP_ADD_DEL, sr_multicast_map_add_del) \
-_(POLICER_ADD_DEL, policer_add_del) \
-_(POLICER_DUMP, policer_dump) \
-_(POLICER_CLASSIFY_SET_INTERFACE, policer_classify_set_interface) \
-_(POLICER_CLASSIFY_DUMP, policer_classify_dump) \
-_(MPLS_TUNNEL_DUMP, mpls_tunnel_dump) \
-_(MPLS_TUNNEL_DETAILS, mpls_tunnel_details) \
-_(MPLS_FIB_DUMP, mpls_fib_dump) \
-_(MPLS_FIB_DETAILS, mpls_fib_details) \
-_(CLASSIFY_TABLE_IDS,classify_table_ids) \
-_(CLASSIFY_TABLE_BY_INTERFACE, classify_table_by_interface) \
-_(CLASSIFY_TABLE_INFO,classify_table_info) \
-_(CLASSIFY_SESSION_DUMP,classify_session_dump) \
-_(CLASSIFY_SESSION_DETAILS,classify_session_details) \
-_(SET_IPFIX_EXPORTER, set_ipfix_exporter) \
-_(IPFIX_EXPORTER_DUMP, ipfix_exporter_dump) \
-_(SET_IPFIX_CLASSIFY_STREAM, set_ipfix_classify_stream) \
-_(IPFIX_CLASSIFY_STREAM_DUMP, ipfix_classify_stream_dump) \
-_(IPFIX_CLASSIFY_TABLE_ADD_DEL, ipfix_classify_table_add_del) \
-_(IPFIX_CLASSIFY_TABLE_DUMP, ipfix_classify_table_dump) \
-_(GET_NEXT_INDEX, get_next_index) \
-_(PG_CREATE_INTERFACE, pg_create_interface) \
-_(PG_CAPTURE, pg_capture) \
-_(PG_ENABLE_DISABLE, pg_enable_disable) \
-_(IP_SOURCE_AND_PORT_RANGE_CHECK_ADD_DEL, \
- ip_source_and_port_range_check_add_del) \
-_(IP_SOURCE_AND_PORT_RANGE_CHECK_INTERFACE_ADD_DEL, \
- ip_source_and_port_range_check_interface_add_del) \
-_(DELETE_SUBIF, delete_subif) \
-_(L2_INTERFACE_PBB_TAG_REWRITE, l2_interface_pbb_tag_rewrite) \
-_(PUNT, punt) \
-_(FLOW_CLASSIFY_SET_INTERFACE, flow_classify_set_interface) \
-_(FLOW_CLASSIFY_DUMP, flow_classify_dump) \
-_(FEATURE_ENABLE_DISABLE, feature_enable_disable)
-
-#define QUOTE_(x) #x
-#define QUOTE(x) QUOTE_(x)
-typedef enum
-{
- RESOLVE_IP4_ADD_DEL_ROUTE = 1,
- RESOLVE_IP6_ADD_DEL_ROUTE,
-} resolve_t;
-
-static vlib_node_registration_t vpe_resolver_process_node;
-vpe_api_main_t vpe_api_main;
-
-static int arp_change_delete_callback (u32 pool_index, u8 * notused);
-static int nd_change_delete_callback (u32 pool_index, u8 * notused);
-
-/* Clean up all registrations belonging to the indicated client */
-int
-vl_api_memclnt_delete_callback (u32 client_index)
-{
- vpe_api_main_t *vam = &vpe_api_main;
- vpe_client_registration_t *rp;
- uword *p;
- int stats_memclnt_delete_callback (u32 client_index);
-
- stats_memclnt_delete_callback (client_index);
-
-#define _(a) \
- p = hash_get (vam->a##_registration_hash, client_index); \
- if (p) { \
- rp = pool_elt_at_index (vam->a##_registrations, p[0]); \
- pool_put (vam->a##_registrations, rp); \
- hash_unset (vam->a##_registration_hash, client_index); \
- }
- foreach_registration_hash;
-#undef _
- return 0;
-}
-
-pub_sub_handler (oam_events, OAM_EVENTS);
-
-#define RESOLUTION_EVENT 1
-#define RESOLUTION_PENDING_EVENT 2
-#define IP4_ARP_EVENT 3
-#define IP6_ND_EVENT 4
-
-int ip4_add_del_route_t_handler (vl_api_ip_add_del_route_t * mp);
-
-int ip6_add_del_route_t_handler (vl_api_ip_add_del_route_t * mp);
-
-void
-handle_ip4_arp_event (u32 pool_index)
-{
- vpe_api_main_t *vam = &vpe_api_main;
- vnet_main_t *vnm = vam->vnet_main;
- vlib_main_t *vm = vam->vlib_main;
- vl_api_ip4_arp_event_t *event;
- vl_api_ip4_arp_event_t *mp;
- unix_shared_memory_queue_t *q;
-
- /* Client can cancel, die, etc. */
- if (pool_is_free_index (vam->arp_events, pool_index))
- return;
-
- event = pool_elt_at_index (vam->arp_events, pool_index);
-
- q = vl_api_client_index_to_input_queue (event->client_index);
- if (!q)
- {
- (void) vnet_add_del_ip4_arp_change_event
- (vnm, arp_change_delete_callback,
- event->pid, &event->address,
- vpe_resolver_process_node.index, IP4_ARP_EVENT,
- ~0 /* pool index, notused */ , 0 /* is_add */ );
- return;
- }
-
- if (q->cursize < q->maxsize)
- {
- mp = vl_msg_api_alloc (sizeof (*mp));
- clib_memcpy (mp, event, sizeof (*mp));
- vl_msg_api_send_shmem (q, (u8 *) & mp);
- }
- else
- {
- static f64 last_time;
- /*
- * Throttle syslog msgs.
- * It's pretty tempting to just revoke the registration...
- */
- if (vlib_time_now (vm) > last_time + 10.0)
- {
- clib_warning ("arp event for %U to pid %d: queue stuffed!",
- format_ip4_address, &event->address, event->pid);
- last_time = vlib_time_now (vm);
- }
- }
-}
-
-void
-handle_ip6_nd_event (u32 pool_index)
-{
- vpe_api_main_t *vam = &vpe_api_main;
- vnet_main_t *vnm = vam->vnet_main;
- vlib_main_t *vm = vam->vlib_main;
- vl_api_ip6_nd_event_t *event;
- vl_api_ip6_nd_event_t *mp;
- unix_shared_memory_queue_t *q;
-
- /* Client can cancel, die, etc. */
- if (pool_is_free_index (vam->nd_events, pool_index))
- return;
-
- event = pool_elt_at_index (vam->nd_events, pool_index);
-
- q = vl_api_client_index_to_input_queue (event->client_index);
- if (!q)
- {
- (void) vnet_add_del_ip6_nd_change_event
- (vnm, nd_change_delete_callback,
- event->pid, &event->address,
- vpe_resolver_process_node.index, IP6_ND_EVENT,
- ~0 /* pool index, notused */ , 0 /* is_add */ );
- return;
- }
-
- if (q->cursize < q->maxsize)
- {
- mp = vl_msg_api_alloc (sizeof (*mp));
- clib_memcpy (mp, event, sizeof (*mp));
- vl_msg_api_send_shmem (q, (u8 *) & mp);
- }
- else
- {
- static f64 last_time;
- /*
- * Throttle syslog msgs.
- * It's pretty tempting to just revoke the registration...
- */
- if (vlib_time_now (vm) > last_time + 10.0)
- {
- clib_warning ("ip6 nd event for %U to pid %d: queue stuffed!",
- format_ip6_address, &event->address, event->pid);
- last_time = vlib_time_now (vm);
- }
- }
-}
-
-static uword
-resolver_process (vlib_main_t * vm,
- vlib_node_runtime_t * rt, vlib_frame_t * f)
-{
- uword event_type;
- uword *event_data = 0;
- f64 timeout = 100.0;
- int i;
-
- while (1)
- {
- vlib_process_wait_for_event_or_clock (vm, timeout);
-
- event_type = vlib_process_get_events (vm, &event_data);
-
- switch (event_type)
- {
- case RESOLUTION_PENDING_EVENT:
- timeout = 1.0;
- break;
-
- case RESOLUTION_EVENT:
- clib_warning ("resolver: BOGUS TYPE");
- break;
-
- case IP4_ARP_EVENT:
- for (i = 0; i < vec_len (event_data); i++)
- handle_ip4_arp_event (event_data[i]);
- break;
-
- case IP6_ND_EVENT:
- for (i = 0; i < vec_len (event_data); i++)
- handle_ip6_nd_event (event_data[i]);
- break;
-
- case ~0: /* timeout */
- break;
- }
-
- vec_reset_length (event_data);
- }
- return 0; /* or not */
-}
-
-/* *INDENT-OFF* */
-VLIB_REGISTER_NODE (vpe_resolver_process_node,static) = {
- .function = resolver_process,
- .type = VLIB_NODE_TYPE_PROCESS,
- .name = "vpe-route-resolver-process",
-};
-/* *INDENT-ON* */
-
-static int
-mpls_route_add_del_t_handler (vnet_main_t * vnm,
- vl_api_mpls_route_add_del_t * mp)
-{
- u32 fib_index, next_hop_fib_index;
- mpls_label_t *label_stack = NULL;
- int rv, ii, n_labels;;
-
- fib_prefix_t pfx = {
- .fp_len = 21,
- .fp_proto = FIB_PROTOCOL_MPLS,
- .fp_eos = mp->mr_eos,
- .fp_label = ntohl (mp->mr_label),
- };
- if (pfx.fp_eos)
- {
- if (mp->mr_next_hop_proto_is_ip4)
- {
- pfx.fp_payload_proto = DPO_PROTO_IP4;
- }
- else
- {
- pfx.fp_payload_proto = DPO_PROTO_IP6;
- }
- }
- else
- {
- pfx.fp_payload_proto = DPO_PROTO_MPLS;
- }
-
- rv = add_del_route_check (FIB_PROTOCOL_MPLS,
- mp->mr_table_id,
- mp->mr_next_hop_sw_if_index,
- dpo_proto_to_fib (pfx.fp_payload_proto),
- mp->mr_next_hop_table_id,
- mp->mr_create_table_if_needed,
- &fib_index, &next_hop_fib_index);
-
- if (0 != rv)
- return (rv);
-
- ip46_address_t nh;
- memset (&nh, 0, sizeof (nh));
-
- if (mp->mr_next_hop_proto_is_ip4)
- memcpy (&nh.ip4, mp->mr_next_hop, sizeof (nh.ip4));
- else
- memcpy (&nh.ip6, mp->mr_next_hop, sizeof (nh.ip6));
-
- n_labels = mp->mr_next_hop_n_out_labels;
- if (n_labels == 0)
- ;
- else if (1 == n_labels)
- vec_add1 (label_stack, ntohl (mp->mr_next_hop_out_label_stack[0]));
- else
- {
- vec_validate (label_stack, n_labels - 1);
- for (ii = 0; ii < n_labels; ii++)
- label_stack[ii] = ntohl (mp->mr_next_hop_out_label_stack[ii]);
- }
-
- return (add_del_route_t_handler (mp->mr_is_multipath, mp->mr_is_add, 0, // mp->is_drop,
- 0, // mp->is_unreach,
- 0, // mp->is_prohibit,
- 0, // mp->is_local,
- mp->mr_is_classify,
- mp->mr_classify_table_index,
- mp->mr_is_resolve_host,
- mp->mr_is_resolve_attached,
- fib_index, &pfx,
- mp->mr_next_hop_proto_is_ip4,
- &nh, ntohl (mp->mr_next_hop_sw_if_index),
- next_hop_fib_index,
- mp->mr_next_hop_weight,
- ntohl (mp->mr_next_hop_via_label),
- label_stack));
-}
-
-void
-vl_api_mpls_route_add_del_t_handler (vl_api_mpls_route_add_del_t * mp)
-{
- vl_api_mpls_route_add_del_reply_t *rmp;
- vnet_main_t *vnm;
- int rv;
-
- vnm = vnet_get_main ();
- vnm->api_errno = 0;
-
- rv = mpls_route_add_del_t_handler (vnm, mp);
-
- rv = (rv == 0) ? vnm->api_errno : rv;
-
- REPLY_MACRO (VL_API_MPLS_ROUTE_ADD_DEL_REPLY);
-}
-
-static int
-mpls_ip_bind_unbind_handler (vnet_main_t * vnm,
- vl_api_mpls_ip_bind_unbind_t * mp)
-{
- u32 mpls_fib_index, ip_fib_index;
-
- mpls_fib_index =
- fib_table_find (FIB_PROTOCOL_MPLS, ntohl (mp->mb_mpls_table_id));
-
- if (~0 == mpls_fib_index)
- {
- if (mp->mb_create_table_if_needed)
- {
- mpls_fib_index =
- fib_table_find_or_create_and_lock (FIB_PROTOCOL_MPLS,
- ntohl (mp->mb_mpls_table_id));
- }
- else
- return VNET_API_ERROR_NO_SUCH_FIB;
- }
-
- ip_fib_index = fib_table_find ((mp->mb_is_ip4 ?
- FIB_PROTOCOL_IP4 :
- FIB_PROTOCOL_IP6),
- ntohl (mp->mb_ip_table_id));
- if (~0 == ip_fib_index)
- return VNET_API_ERROR_NO_SUCH_FIB;
-
- fib_prefix_t pfx = {
- .fp_len = mp->mb_address_length,
- };
-
- if (mp->mb_is_ip4)
- {
- pfx.fp_proto = FIB_PROTOCOL_IP4;
- clib_memcpy (&pfx.fp_addr.ip4, mp->mb_address,
- sizeof (pfx.fp_addr.ip4));
- }
- else
- {
- pfx.fp_proto = FIB_PROTOCOL_IP6;
- clib_memcpy (&pfx.fp_addr.ip6, mp->mb_address,
- sizeof (pfx.fp_addr.ip6));
- }
-
- if (mp->mb_is_bind)
- fib_table_entry_local_label_add (ip_fib_index, &pfx,
- ntohl (mp->mb_label));
- else
- fib_table_entry_local_label_remove (ip_fib_index, &pfx,
- ntohl (mp->mb_label));
-
- return (0);
-}
-
-void
-vl_api_mpls_ip_bind_unbind_t_handler (vl_api_mpls_ip_bind_unbind_t * mp)
-{
- vl_api_mpls_route_add_del_reply_t *rmp;
- vnet_main_t *vnm;
- int rv;
-
- vnm = vnet_get_main ();
- vnm->api_errno = 0;
-
- rv = mpls_ip_bind_unbind_handler (vnm, mp);
-
- rv = (rv == 0) ? vnm->api_errno : rv;
-
- REPLY_MACRO (VL_API_MPLS_ROUTE_ADD_DEL_REPLY);
-}
-
-static void
-vl_api_sw_interface_set_vpath_t_handler (vl_api_sw_interface_set_vpath_t * mp)
-{
- vl_api_sw_interface_set_vpath_reply_t *rmp;
- int rv = 0;
- u32 sw_if_index = ntohl (mp->sw_if_index);
-
- VALIDATE_SW_IF_INDEX (mp);
-
- l2input_intf_bitmap_enable (sw_if_index, L2INPUT_FEAT_VPATH, mp->enable);
- vnet_feature_enable_disable ("ip4-unicast", "vpath-input-ip4",
- sw_if_index, mp->enable, 0, 0);
- vnet_feature_enable_disable ("ip4-multicast", "vpath-input-ip4",
- sw_if_index, mp->enable, 0, 0);
- vnet_feature_enable_disable ("ip6-unicast", "vpath-input-ip6",
- sw_if_index, mp->enable, 0, 0);
- vnet_feature_enable_disable ("ip6-multicast", "vpath-input-ip6",
- sw_if_index, mp->enable, 0, 0);
-
- BAD_SW_IF_INDEX_LABEL;
-
- REPLY_MACRO (VL_API_SW_INTERFACE_SET_VPATH_REPLY);
-}
-
-static void
- vl_api_sw_interface_set_vxlan_bypass_t_handler
- (vl_api_sw_interface_set_vxlan_bypass_t * mp)
-{
- vl_api_sw_interface_set_vxlan_bypass_reply_t *rmp;
- int rv = 0;
- u32 sw_if_index = ntohl (mp->sw_if_index);
-
- VALIDATE_SW_IF_INDEX (mp);
-
- if (mp->is_ipv6)
- {
- /* not yet implemented */
- }
- else
- vnet_feature_enable_disable ("ip4-unicast", "ip4-vxlan-bypass",
- sw_if_index, mp->enable, 0, 0);
-
- BAD_SW_IF_INDEX_LABEL;
-
- REPLY_MACRO (VL_API_SW_INTERFACE_SET_VXLAN_BYPASS_REPLY);
-}
-
-static void
- vl_api_sw_interface_set_l2_xconnect_t_handler
- (vl_api_sw_interface_set_l2_xconnect_t * mp)
-{
- vl_api_sw_interface_set_l2_xconnect_reply_t *rmp;
- int rv = 0;
- u32 rx_sw_if_index = ntohl (mp->rx_sw_if_index);
- u32 tx_sw_if_index = ntohl (mp->tx_sw_if_index);
- vlib_main_t *vm = vlib_get_main ();
- vnet_main_t *vnm = vnet_get_main ();
-
- VALIDATE_RX_SW_IF_INDEX (mp);
-
- if (mp->enable)
- {
- VALIDATE_TX_SW_IF_INDEX (mp);
- rv = set_int_l2_mode (vm, vnm, MODE_L2_XC,
- rx_sw_if_index, 0, 0, 0, tx_sw_if_index);
- }
- else
- {
- rv = set_int_l2_mode (vm, vnm, MODE_L3, rx_sw_if_index, 0, 0, 0, 0);
- }
-
- BAD_RX_SW_IF_INDEX_LABEL;
- BAD_TX_SW_IF_INDEX_LABEL;
-
- REPLY_MACRO (VL_API_SW_INTERFACE_SET_L2_XCONNECT_REPLY);
-}
-
-static void
- vl_api_sw_interface_set_l2_bridge_t_handler
- (vl_api_sw_interface_set_l2_bridge_t * mp)
-{
- bd_main_t *bdm = &bd_main;
- vl_api_sw_interface_set_l2_bridge_reply_t *rmp;
- int rv = 0;
- u32 rx_sw_if_index = ntohl (mp->rx_sw_if_index);
- u32 bd_id = ntohl (mp->bd_id);
- u32 bd_index;
- u32 bvi = mp->bvi;
- u8 shg = mp->shg;
- vlib_main_t *vm = vlib_get_main ();
- vnet_main_t *vnm = vnet_get_main ();
-
- VALIDATE_RX_SW_IF_INDEX (mp);
-
- bd_index = bd_find_or_add_bd_index (bdm, bd_id);
-
- if (mp->enable)
- {
- //VALIDATE_TX_SW_IF_INDEX(mp);
- rv = set_int_l2_mode (vm, vnm, MODE_L2_BRIDGE,
- rx_sw_if_index, bd_index, bvi, shg, 0);
- }
- else
- {
- rv = set_int_l2_mode (vm, vnm, MODE_L3, rx_sw_if_index, 0, 0, 0, 0);
- }
-
- BAD_RX_SW_IF_INDEX_LABEL;
-
- REPLY_MACRO (VL_API_SW_INTERFACE_SET_L2_BRIDGE_REPLY);
-}
-
-static void
- vl_api_sw_interface_set_dpdk_hqos_pipe_t_handler
- (vl_api_sw_interface_set_dpdk_hqos_pipe_t * mp)
-{
- vl_api_sw_interface_set_dpdk_hqos_pipe_reply_t *rmp;
- int rv = 0;
-
-#if DPDK > 0
- dpdk_main_t *dm = &dpdk_main;
- dpdk_device_t *xd;
-
- u32 sw_if_index = ntohl (mp->sw_if_index);
- u32 subport = ntohl (mp->subport);
- u32 pipe = ntohl (mp->pipe);
- u32 profile = ntohl (mp->profile);
- vnet_hw_interface_t *hw;
-
- VALIDATE_SW_IF_INDEX (mp);
-
- /* hw_if & dpdk device */
- hw = vnet_get_sup_hw_interface (dm->vnet_main, sw_if_index);
-
- xd = vec_elt_at_index (dm->devices, hw->dev_instance);
-
- rv = rte_sched_pipe_config (xd->hqos_ht->hqos, subport, pipe, profile);
-
- BAD_SW_IF_INDEX_LABEL;
-#else
- clib_warning ("setting HQoS pipe parameters without DPDK not implemented");
- rv = VNET_API_ERROR_UNIMPLEMENTED;
-#endif /* DPDK */
-
- REPLY_MACRO (VL_API_SW_INTERFACE_SET_DPDK_HQOS_PIPE_REPLY);
-}
-
-static void
- vl_api_sw_interface_set_dpdk_hqos_subport_t_handler
- (vl_api_sw_interface_set_dpdk_hqos_subport_t * mp)
-{
- vl_api_sw_interface_set_dpdk_hqos_subport_reply_t *rmp;
- int rv = 0;
-
-#if DPDK > 0
- dpdk_main_t *dm = &dpdk_main;
- dpdk_device_t *xd;
- struct rte_sched_subport_params p;
-
- u32 sw_if_index = ntohl (mp->sw_if_index);
- u32 subport = ntohl (mp->subport);
- p.tb_rate = ntohl (mp->tb_rate);
- p.tb_size = ntohl (mp->tb_size);
- p.tc_rate[0] = ntohl (mp->tc_rate[0]);
- p.tc_rate[1] = ntohl (mp->tc_rate[1]);
- p.tc_rate[2] = ntohl (mp->tc_rate[2]);
- p.tc_rate[3] = ntohl (mp->tc_rate[3]);
- p.tc_period = ntohl (mp->tc_period);
-
- vnet_hw_interface_t *hw;
-
- VALIDATE_SW_IF_INDEX (mp);
-
- /* hw_if & dpdk device */
- hw = vnet_get_sup_hw_interface (dm->vnet_main, sw_if_index);
-
- xd = vec_elt_at_index (dm->devices, hw->dev_instance);
-
- rv = rte_sched_subport_config (xd->hqos_ht->hqos, subport, &p);
-
- BAD_SW_IF_INDEX_LABEL;
-#else
- clib_warning
- ("setting HQoS subport parameters without DPDK not implemented");
- rv = VNET_API_ERROR_UNIMPLEMENTED;
-#endif /* DPDK */
-
- REPLY_MACRO (VL_API_SW_INTERFACE_SET_DPDK_HQOS_SUBPORT_REPLY);
-}
-
-static void
- vl_api_sw_interface_set_dpdk_hqos_tctbl_t_handler
- (vl_api_sw_interface_set_dpdk_hqos_tctbl_t * mp)
-{
- vl_api_sw_interface_set_dpdk_hqos_tctbl_reply_t *rmp;
- int rv = 0;
-
-#if DPDK > 0
- dpdk_main_t *dm = &dpdk_main;
- vlib_thread_main_t *tm = vlib_get_thread_main ();
- dpdk_device_t *xd;
-
- u32 sw_if_index = ntohl (mp->sw_if_index);
- u32 entry = ntohl (mp->entry);
- u32 tc = ntohl (mp->tc);
- u32 queue = ntohl (mp->queue);
- u32 val, i;
-
- vnet_hw_interface_t *hw;
-
- VALIDATE_SW_IF_INDEX (mp);
-
- /* hw_if & dpdk device */
- hw = vnet_get_sup_hw_interface (dm->vnet_main, sw_if_index);
-
- xd = vec_elt_at_index (dm->devices, hw->dev_instance);
-
- if (tc >= RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE)
- {
- clib_warning ("invalid traffic class !!");
- rv = VNET_API_ERROR_INVALID_VALUE;
- goto done;
- }
- if (queue >= RTE_SCHED_QUEUES_PER_TRAFFIC_CLASS)
- {
- clib_warning ("invalid queue !!");
- rv = VNET_API_ERROR_INVALID_VALUE;
- goto done;
- }
-
- /* Detect the set of worker threads */
- uword *p = hash_get_mem (tm->thread_registrations_by_name, "workers");
-
- if (p == 0)
- {
- clib_warning ("worker thread registration AWOL !!");
- rv = VNET_API_ERROR_INVALID_VALUE_2;
- goto done;
- }
-
- vlib_thread_registration_t *tr = (vlib_thread_registration_t *) p[0];
- int worker_thread_first = tr->first_index;
- int worker_thread_count = tr->count;
-
- val = tc * RTE_SCHED_QUEUES_PER_TRAFFIC_CLASS + queue;
- for (i = 0; i < worker_thread_count; i++)
- xd->hqos_wt[worker_thread_first + i].hqos_tc_table[entry] = val;
-
- BAD_SW_IF_INDEX_LABEL;
-done:
-#else
- clib_warning ("setting HQoS DSCP table entry without DPDK not implemented");
- rv = VNET_API_ERROR_UNIMPLEMENTED;
-#endif /* DPDK */
-
- REPLY_MACRO (VL_API_SW_INTERFACE_SET_DPDK_HQOS_TCTBL_REPLY);
-}
-
-static void
-vl_api_bridge_domain_add_del_t_handler (vl_api_bridge_domain_add_del_t * mp)
-{
- vlib_main_t *vm = vlib_get_main ();
- bd_main_t *bdm = &bd_main;
- vl_api_bridge_domain_add_del_reply_t *rmp;
- int rv = 0;
- u32 enable_flags = 0, disable_flags = 0;
- u32 bd_id = ntohl (mp->bd_id);
- u32 bd_index;
-
- if (mp->is_add)
- {
- bd_index = bd_find_or_add_bd_index (bdm, bd_id);
-
- if (mp->flood)
- enable_flags |= L2_FLOOD;
- else
- disable_flags |= L2_FLOOD;
-
- if (mp->uu_flood)
- enable_flags |= L2_UU_FLOOD;
- else
- disable_flags |= L2_UU_FLOOD;
-
- if (mp->forward)
- enable_flags |= L2_FWD;
- else
- disable_flags |= L2_FWD;
-
- if (mp->arp_term)
- enable_flags |= L2_ARP_TERM;
- else
- disable_flags |= L2_ARP_TERM;
-
- if (mp->learn)
- enable_flags |= L2_LEARN;
- else
- disable_flags |= L2_LEARN;
-
- if (enable_flags)
- bd_set_flags (vm, bd_index, enable_flags, 1 /* enable */ );
-
- if (disable_flags)
- bd_set_flags (vm, bd_index, disable_flags, 0 /* disable */ );
-
- bd_set_mac_age (vm, bd_index, mp->mac_age);
- }
- else
- rv = bd_delete_bd_index (bdm, bd_id);
-
- REPLY_MACRO (VL_API_BRIDGE_DOMAIN_ADD_DEL_REPLY);
-}
-
-static void
-vl_api_bridge_domain_details_t_handler (vl_api_bridge_domain_details_t * mp)
-{
- clib_warning ("BUG");
-}
-
-static void
- vl_api_bridge_domain_sw_if_details_t_handler
- (vl_api_bridge_domain_sw_if_details_t * mp)
-{
- clib_warning ("BUG");
-}
-
-static void
-send_bridge_domain_details (unix_shared_memory_queue_t * q,
- l2_bridge_domain_t * bd_config,
- u32 n_sw_ifs, u32 context)
-{
- vl_api_bridge_domain_details_t *mp;
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- memset (mp, 0, sizeof (*mp));
- mp->_vl_msg_id = ntohs (VL_API_BRIDGE_DOMAIN_DETAILS);
- mp->bd_id = ntohl (bd_config->bd_id);
- mp->flood = bd_feature_flood (bd_config);
- mp->uu_flood = bd_feature_uu_flood (bd_config);
- mp->forward = bd_feature_forward (bd_config);
- mp->learn = bd_feature_learn (bd_config);
- mp->arp_term = bd_feature_arp_term (bd_config);
- mp->bvi_sw_if_index = ntohl (bd_config->bvi_sw_if_index);
- mp->mac_age = bd_config->mac_age;
- mp->n_sw_ifs = ntohl (n_sw_ifs);
- mp->context = context;
-
- vl_msg_api_send_shmem (q, (u8 *) & mp);
-}
-
-static void
-send_bd_sw_if_details (l2input_main_t * l2im,
- unix_shared_memory_queue_t * q,
- l2_flood_member_t * member, u32 bd_id, u32 context)
-{
- vl_api_bridge_domain_sw_if_details_t *mp;
- l2_input_config_t *input_cfg;
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- memset (mp, 0, sizeof (*mp));
- mp->_vl_msg_id = ntohs (VL_API_BRIDGE_DOMAIN_SW_IF_DETAILS);
- mp->bd_id = ntohl (bd_id);
- mp->sw_if_index = ntohl (member->sw_if_index);
- input_cfg = vec_elt_at_index (l2im->configs, member->sw_if_index);
- mp->shg = input_cfg->shg;
- mp->context = context;
-
- vl_msg_api_send_shmem (q, (u8 *) & mp);
-}
-
-static void
-vl_api_bridge_domain_dump_t_handler (vl_api_bridge_domain_dump_t * mp)
-{
- bd_main_t *bdm = &bd_main;
- l2input_main_t *l2im = &l2input_main;
- unix_shared_memory_queue_t *q;
- l2_bridge_domain_t *bd_config;
- u32 bd_id, bd_index;
- u32 end;
-
- q = vl_api_client_index_to_input_queue (mp->client_index);
-
- if (q == 0)
- return;
-
- bd_id = ntohl (mp->bd_id);
-
- bd_index = (bd_id == ~0) ? 0 : bd_find_or_add_bd_index (bdm, bd_id);
- end = (bd_id == ~0) ? vec_len (l2im->bd_configs) : bd_index + 1;
- for (; bd_index < end; bd_index++)
- {
- bd_config = l2input_bd_config_from_index (l2im, bd_index);
- /* skip dummy bd_id 0 */
- if (bd_config && (bd_config->bd_id > 0))
- {
- u32 n_sw_ifs;
- l2_flood_member_t *m;
-
- n_sw_ifs = vec_len (bd_config->members);
- send_bridge_domain_details (q, bd_config, n_sw_ifs, mp->context);
-
- vec_foreach (m, bd_config->members)
- {
- send_bd_sw_if_details (l2im, q, m, bd_config->bd_id, mp->context);
- }
- }
- }
-}
-
-static void
-vl_api_l2fib_add_del_t_handler (vl_api_l2fib_add_del_t * mp)
-{
- bd_main_t *bdm = &bd_main;
- l2input_main_t *l2im = &l2input_main;
- vl_api_l2fib_add_del_reply_t *rmp;
- int rv = 0;
- u64 mac = 0;
- u32 sw_if_index = ntohl (mp->sw_if_index);
- u32 bd_id = ntohl (mp->bd_id);
- u32 bd_index;
- u32 static_mac;
- u32 filter_mac;
- u32 bvi_mac;
- uword *p;
-
- mac = mp->mac;
-
- p = hash_get (bdm->bd_index_by_bd_id, bd_id);
- if (!p)
- {
- rv = VNET_API_ERROR_NO_SUCH_ENTRY;
- goto bad_sw_if_index;
- }
- bd_index = p[0];
-
- if (mp->is_add)
- {
- filter_mac = mp->filter_mac ? 1 : 0;
- if (filter_mac == 0)
- {
- VALIDATE_SW_IF_INDEX (mp);
- if (vec_len (l2im->configs) <= sw_if_index)
- {
- rv = VNET_API_ERROR_INVALID_SW_IF_INDEX;
- goto bad_sw_if_index;
- }
- else
- {
- l2_input_config_t *config;
- config = vec_elt_at_index (l2im->configs, sw_if_index);
- if (config->bridge == 0)
- {
- rv = VNET_API_ERROR_INVALID_SW_IF_INDEX;
- goto bad_sw_if_index;
- }
- }
- }
- static_mac = mp->static_mac ? 1 : 0;
- bvi_mac = mp->bvi_mac ? 1 : 0;
- l2fib_add_entry (mac, bd_index, sw_if_index, static_mac, filter_mac,
- bvi_mac);
- }
- else
- {
- l2fib_del_entry (mac, bd_index);
- }
-
- BAD_SW_IF_INDEX_LABEL;
-
- REPLY_MACRO (VL_API_L2FIB_ADD_DEL_REPLY);
-}
-
-static void
-vl_api_l2_flags_t_handler (vl_api_l2_flags_t * mp)
-{
- vl_api_l2_flags_reply_t *rmp;
- int rv = 0;
- u32 sw_if_index = ntohl (mp->sw_if_index);
- u32 flags = ntohl (mp->feature_bitmap);
- u32 rbm = 0;
-
- VALIDATE_SW_IF_INDEX (mp);
-
-#define _(a,b) \
- if (flags & L2INPUT_FEAT_ ## a) \
- rbm = l2input_intf_bitmap_enable (sw_if_index, L2INPUT_FEAT_ ## a, mp->is_set);
- foreach_l2input_feat;
-#undef _
-
- BAD_SW_IF_INDEX_LABEL;
-
- /* *INDENT-OFF* */
- REPLY_MACRO2(VL_API_L2_FLAGS_REPLY,
- ({
- rmp->resulting_feature_bitmap = ntohl(rbm);
- }));
- /* *INDENT-ON* */
-}
-
-static void
-vl_api_bridge_flags_t_handler (vl_api_bridge_flags_t * mp)
-{
- vlib_main_t *vm = vlib_get_main ();
- bd_main_t *bdm = &bd_main;
- vl_api_bridge_flags_reply_t *rmp;
- int rv = 0;
- u32 bd_id = ntohl (mp->bd_id);
- u32 bd_index;
- u32 flags = ntohl (mp->feature_bitmap);
- uword *p;
-
- p = hash_get (bdm->bd_index_by_bd_id, bd_id);
- if (p == 0)
- {
- rv = VNET_API_ERROR_NO_SUCH_ENTRY;
- goto out;
- }
-
- bd_index = p[0];
-
- bd_set_flags (vm, bd_index, flags, mp->is_set);
-
-out:
- /* *INDENT-OFF* */
- REPLY_MACRO2(VL_API_BRIDGE_FLAGS_REPLY,
- ({
- rmp->resulting_feature_bitmap = ntohl(flags);
- }));
- /* *INDENT-ON* */
-}
-
-static void
-vl_api_bd_ip_mac_add_del_t_handler (vl_api_bd_ip_mac_add_del_t * mp)
-{
- bd_main_t *bdm = &bd_main;
- vl_api_bd_ip_mac_add_del_reply_t *rmp;
- int rv = 0;
- u32 bd_id = ntohl (mp->bd_id);
- u32 bd_index;
- uword *p;
-
- p = hash_get (bdm->bd_index_by_bd_id, bd_id);
- if (p == 0)
- {
- rv = VNET_API_ERROR_NO_SUCH_ENTRY;
- goto out;
- }
-
- bd_index = p[0];
- if (bd_add_del_ip_mac (bd_index, mp->ip_address,
- mp->mac_address, mp->is_ipv6, mp->is_add))
- rv = VNET_API_ERROR_UNSPECIFIED;
-
-out:
- REPLY_MACRO (VL_API_BD_IP_MAC_ADD_DEL_REPLY);
-}
-
-static void
-vl_api_create_vlan_subif_t_handler (vl_api_create_vlan_subif_t * mp)
-{
- vl_api_create_vlan_subif_reply_t *rmp;
- vnet_main_t *vnm = vnet_get_main ();
- u32 hw_if_index, sw_if_index = (u32) ~ 0;
- vnet_hw_interface_t *hi;
- int rv = 0;
- u32 id;
- vnet_sw_interface_t template;
- uword *p;
- vnet_interface_main_t *im = &vnm->interface_main;
- u64 sup_and_sub_key;
- u64 *kp;
- unix_shared_memory_queue_t *q;
- clib_error_t *error;
-
- VALIDATE_SW_IF_INDEX (mp);
-
- hw_if_index = ntohl (mp->sw_if_index);
- hi = vnet_get_hw_interface (vnm, hw_if_index);
-
- id = ntohl (mp->vlan_id);
- if (id == 0 || id > 4095)
- {
- rv = VNET_API_ERROR_INVALID_VLAN;
- goto out;
- }
-
- sup_and_sub_key = ((u64) (hi->sw_if_index) << 32) | (u64) id;
-
- p = hash_get_mem (im->sw_if_index_by_sup_and_sub, &sup_and_sub_key);
- if (p)
- {
- rv = VNET_API_ERROR_VLAN_ALREADY_EXISTS;
- goto out;
- }
-
- kp = clib_mem_alloc (sizeof (*kp));
- *kp = sup_and_sub_key;
-
- memset (&template, 0, sizeof (template));
- template.type = VNET_SW_INTERFACE_TYPE_SUB;
- template.sup_sw_if_index = hi->sw_if_index;
- template.sub.id = id;
- template.sub.eth.raw_flags = 0;
- template.sub.eth.flags.one_tag = 1;
- template.sub.eth.outer_vlan_id = id;
- template.sub.eth.flags.exact_match = 1;
-
- error = vnet_create_sw_interface (vnm, &template, &sw_if_index);
- if (error)
- {
- clib_error_report (error);
- rv = VNET_API_ERROR_INVALID_REGISTRATION;
- goto out;
- }
- hash_set (hi->sub_interface_sw_if_index_by_id, id, sw_if_index);
- hash_set_mem (im->sw_if_index_by_sup_and_sub, kp, sw_if_index);
-
- BAD_SW_IF_INDEX_LABEL;
-
-out:
- q = vl_api_client_index_to_input_queue (mp->client_index);
- if (!q)
- return;
-
- rmp = vl_msg_api_alloc (sizeof (*rmp));
- rmp->_vl_msg_id = ntohs (VL_API_CREATE_VLAN_SUBIF_REPLY);
- rmp->context = mp->context;
- rmp->retval = ntohl (rv);
- rmp->sw_if_index = ntohl (sw_if_index);
- vl_msg_api_send_shmem (q, (u8 *) & rmp);
-}
-
-static void
-vl_api_create_subif_t_handler (vl_api_create_subif_t * mp)
-{
- vl_api_create_subif_reply_t *rmp;
- vnet_main_t *vnm = vnet_get_main ();
- u32 sw_if_index = ~0;
- int rv = 0;
- u32 sub_id;
- vnet_sw_interface_t *si;
- vnet_hw_interface_t *hi;
- vnet_sw_interface_t template;
- uword *p;
- vnet_interface_main_t *im = &vnm->interface_main;
- u64 sup_and_sub_key;
- u64 *kp;
- clib_error_t *error;
-
- VALIDATE_SW_IF_INDEX (mp);
-
- si = vnet_get_sup_sw_interface (vnm, ntohl (mp->sw_if_index));
- hi = vnet_get_sup_hw_interface (vnm, ntohl (mp->sw_if_index));
-
- if (hi->bond_info == VNET_HW_INTERFACE_BOND_INFO_SLAVE)
- {
- rv = VNET_API_ERROR_BOND_SLAVE_NOT_ALLOWED;
- goto out;
- }
-
- sw_if_index = si->sw_if_index;
- sub_id = ntohl (mp->sub_id);
-
- sup_and_sub_key = ((u64) (sw_if_index) << 32) | (u64) sub_id;
-
- p = hash_get_mem (im->sw_if_index_by_sup_and_sub, &sup_and_sub_key);
- if (p)
- {
- if (CLIB_DEBUG > 0)
- clib_warning ("sup sw_if_index %d, sub id %d already exists\n",
- sw_if_index, sub_id);
- rv = VNET_API_ERROR_SUBIF_ALREADY_EXISTS;
- goto out;
- }
-
- kp = clib_mem_alloc (sizeof (*kp));
- *kp = sup_and_sub_key;
-
- memset (&template, 0, sizeof (template));
- template.type = VNET_SW_INTERFACE_TYPE_SUB;
- template.sup_sw_if_index = sw_if_index;
- template.sub.id = sub_id;
- template.sub.eth.flags.no_tags = mp->no_tags;
- template.sub.eth.flags.one_tag = mp->one_tag;
- template.sub.eth.flags.two_tags = mp->two_tags;
- template.sub.eth.flags.dot1ad = mp->dot1ad;
- template.sub.eth.flags.exact_match = mp->exact_match;
- template.sub.eth.flags.default_sub = mp->default_sub;
- template.sub.eth.flags.outer_vlan_id_any = mp->outer_vlan_id_any;
- template.sub.eth.flags.inner_vlan_id_any = mp->inner_vlan_id_any;
- template.sub.eth.outer_vlan_id = ntohs (mp->outer_vlan_id);
- template.sub.eth.inner_vlan_id = ntohs (mp->inner_vlan_id);
-
- error = vnet_create_sw_interface (vnm, &template, &sw_if_index);
- if (error)
- {
- clib_error_report (error);
- rv = VNET_API_ERROR_SUBIF_CREATE_FAILED;
- goto out;
- }
-
- hash_set (hi->sub_interface_sw_if_index_by_id, sub_id, sw_if_index);
- hash_set_mem (im->sw_if_index_by_sup_and_sub, kp, sw_if_index);
-
- BAD_SW_IF_INDEX_LABEL;
-
-out:
-
- /* *INDENT-OFF* */
- REPLY_MACRO2(VL_API_CREATE_SUBIF_REPLY,
- ({
- rmp->sw_if_index = ntohl(sw_if_index);
- }));
- /* *INDENT-ON* */
-}
-
-static void
-vl_api_mpls_tunnel_add_del_t_handler (vl_api_mpls_tunnel_add_del_t * mp)
-{
- vl_api_mpls_tunnel_add_del_reply_t *rmp;
- int rv = 0;
- stats_main_t *sm = &stats_main;
- u32 tunnel_sw_if_index;
- int ii;
-
- dslock (sm, 1 /* release hint */ , 5 /* tag */ );
-
- if (mp->mt_is_add)
- {
- fib_route_path_t rpath, *rpaths = NULL;
- mpls_label_t *label_stack = NULL;
-
- memset (&rpath, 0, sizeof (rpath));
-
- if (mp->mt_next_hop_proto_is_ip4)
- {
- rpath.frp_proto = FIB_PROTOCOL_IP4;
- clib_memcpy (&rpath.frp_addr.ip4,
- mp->mt_next_hop, sizeof (rpath.frp_addr.ip4));
- }
- else
- {
- rpath.frp_proto = FIB_PROTOCOL_IP6;
- clib_memcpy (&rpath.frp_addr.ip6,
- mp->mt_next_hop, sizeof (rpath.frp_addr.ip6));
- }
- rpath.frp_sw_if_index = ntohl (mp->mt_next_hop_sw_if_index);
-
- for (ii = 0; ii < mp->mt_next_hop_n_out_labels; ii++)
- vec_add1 (label_stack, ntohl (mp->mt_next_hop_out_label_stack[ii]));
-
- vec_add1 (rpaths, rpath);
-
- vnet_mpls_tunnel_add (rpaths, label_stack,
- mp->mt_l2_only, &tunnel_sw_if_index);
- vec_free (rpaths);
- vec_free (label_stack);
- }
- else
- {
- tunnel_sw_if_index = ntohl (mp->mt_sw_if_index);
- vnet_mpls_tunnel_del (tunnel_sw_if_index);
- }
-
- dsunlock (sm);
-
- /* *INDENT-OFF* */
- REPLY_MACRO2(VL_API_MPLS_TUNNEL_ADD_DEL_REPLY,
- ({
- rmp->sw_if_index = ntohl(tunnel_sw_if_index);
- }));
- /* *INDENT-ON* */
-}
-
-static void
-vl_api_proxy_arp_add_del_t_handler (vl_api_proxy_arp_add_del_t * mp)
-{
- vl_api_proxy_arp_add_del_reply_t *rmp;
- u32 fib_index;
- int rv;
- ip4_main_t *im = &ip4_main;
- stats_main_t *sm = &stats_main;
- int vnet_proxy_arp_add_del (ip4_address_t * lo_addr,
- ip4_address_t * hi_addr,
- u32 fib_index, int is_del);
- uword *p;
-
- dslock (sm, 1 /* release hint */ , 6 /* tag */ );
-
- p = hash_get (im->fib_index_by_table_id, ntohl (mp->vrf_id));
-
- if (!p)
- {
- rv = VNET_API_ERROR_NO_SUCH_FIB;
- goto out;
- }
-
- fib_index = p[0];
-
- rv = vnet_proxy_arp_add_del ((ip4_address_t *) mp->low_address,
- (ip4_address_t *) mp->hi_address,
- fib_index, mp->is_add == 0);
-
-out:
- dsunlock (sm);
- REPLY_MACRO (VL_API_PROXY_ARP_ADD_DEL_REPLY);
-}
-
-static void
- vl_api_proxy_arp_intfc_enable_disable_t_handler
- (vl_api_proxy_arp_intfc_enable_disable_t * mp)
-{
- int rv = 0;
- vnet_main_t *vnm = vnet_get_main ();
- vl_api_proxy_arp_intfc_enable_disable_reply_t *rmp;
- vnet_sw_interface_t *si;
- u32 sw_if_index;
-
- VALIDATE_SW_IF_INDEX (mp);
-
- sw_if_index = ntohl (mp->sw_if_index);
-
- if (pool_is_free_index (vnm->interface_main.sw_interfaces, sw_if_index))
- {
- rv = VNET_API_ERROR_INVALID_SW_IF_INDEX;
- goto out;
- }
-
- si = vnet_get_sw_interface (vnm, sw_if_index);
-
- ASSERT (si);
-
- if (mp->enable_disable)
- si->flags |= VNET_SW_INTERFACE_FLAG_PROXY_ARP;
- else
- si->flags &= ~VNET_SW_INTERFACE_FLAG_PROXY_ARP;
-
- BAD_SW_IF_INDEX_LABEL;
-
-out:
- REPLY_MACRO (VL_API_PROXY_ARP_INTFC_ENABLE_DISABLE_REPLY);
-}
-
-static void
-vl_api_is_address_reachable_t_handler (vl_api_is_address_reachable_t * mp)
-{
-#if 0
- vpe_main_t *rm = &vpe_main;
- ip4_main_t *im4 = &ip4_main;
- ip6_main_t *im6 = &ip6_main;
- ip_lookup_main_t *lm;
- union
- {
- ip4_address_t ip4;
- ip6_address_t ip6;
- } addr;
- u32 adj_index, sw_if_index;
- vl_api_is_address_reachable_t *rmp;
- ip_adjacency_t *adj;
- unix_shared_memory_queue_t *q;
-
- q = vl_api_client_index_to_input_queue (mp->client_index);
- if (!q)
- {
- increment_missing_api_client_counter (rm->vlib_main);
- return;
- }
-
- rmp = vl_msg_api_alloc (sizeof (*rmp));
- clib_memcpy (rmp, mp, sizeof (*rmp));
-
- sw_if_index = mp->next_hop_sw_if_index;
- clib_memcpy (&addr, mp->address, sizeof (addr));
- if (mp->is_ipv6)
- {
- lm = &im6->lookup_main;
- adj_index = ip6_fib_lookup (im6, sw_if_index, &addr.ip6);
- }
- else
- {
- lm = &im4->lookup_main;
- // FIXME NOT an ADJ
- adj_index = ip4_fib_lookup (im4, sw_if_index, &addr.ip4);
- }
- if (adj_index == ~0)
- {
- rmp->is_error = 1;
- goto send;
- }
- adj = ip_get_adjacency (lm, adj_index);
-
- if (adj->lookup_next_index == IP_LOOKUP_NEXT_REWRITE
- && adj->rewrite_header.sw_if_index == sw_if_index)
- {
- rmp->is_known = 1;
- }
- else
- {
- if (adj->lookup_next_index == IP_LOOKUP_NEXT_ARP
- && adj->rewrite_header.sw_if_index == sw_if_index)
- {
- if (mp->is_ipv6)
- ip6_probe_neighbor (rm->vlib_main, &addr.ip6, sw_if_index);
- else
- ip4_probe_neighbor (rm->vlib_main, &addr.ip4, sw_if_index);
- }
- else if (adj->lookup_next_index == IP_LOOKUP_NEXT_DROP)
- {
- rmp->is_known = 1;
- goto send;
- }
- rmp->is_known = 0;
- }
-
-send:
- vl_msg_api_send_shmem (q, (u8 *) & rmp);
-#endif
-}
-
-static void
- vl_api_sw_interface_set_mpls_enable_t_handler
- (vl_api_sw_interface_set_mpls_enable_t * mp)
-{
- vl_api_sw_interface_set_mpls_enable_reply_t *rmp;
- int rv = 0;
-
- VALIDATE_SW_IF_INDEX (mp);
-
- mpls_sw_interface_enable_disable (&mpls_main,
- ntohl (mp->sw_if_index), mp->enable);
-
- BAD_SW_IF_INDEX_LABEL;
- REPLY_MACRO (VL_API_SW_INTERFACE_SET_MPLS_ENABLE_REPLY);
-}
-
-void
-send_oam_event (oam_target_t * t)
-{
- vpe_api_main_t *vam = &vpe_api_main;
- unix_shared_memory_queue_t *q;
- vpe_client_registration_t *reg;
- vl_api_oam_event_t *mp;
-
- /* *INDENT-OFF* */
- pool_foreach(reg, vam->oam_events_registrations,
- ({
- q = vl_api_client_index_to_input_queue (reg->client_index);
- if (q)
- {
- mp = vl_msg_api_alloc (sizeof (*mp));
- mp->_vl_msg_id = ntohs (VL_API_OAM_EVENT);
- clib_memcpy (mp->dst_address, &t->dst_address,
- sizeof (mp->dst_address));
- mp->state = t->state;
- vl_msg_api_send_shmem (q, (u8 *)&mp);
- }
- }));
- /* *INDENT-ON* */
-}
-
-static void
-vl_api_oam_add_del_t_handler (vl_api_oam_add_del_t * mp)
-{
- vl_api_oam_add_del_reply_t *rmp;
- int rv;
-
- rv = vpe_oam_add_del_target ((ip4_address_t *) mp->src_address,
- (ip4_address_t *) mp->dst_address,
- ntohl (mp->vrf_id), (int) (mp->is_add));
-
- REPLY_MACRO (VL_API_OAM_ADD_DEL_REPLY);
-}
-
-static void
-vl_api_vnet_get_summary_stats_t_handler (vl_api_vnet_get_summary_stats_t * mp)
-{
- stats_main_t *sm = &stats_main;
- vnet_interface_main_t *im = sm->interface_main;
- vl_api_vnet_summary_stats_reply_t *rmp;
- vlib_combined_counter_main_t *cm;
- vlib_counter_t v;
- int i, which;
- u64 total_pkts[VLIB_N_RX_TX];
- u64 total_bytes[VLIB_N_RX_TX];
-
- unix_shared_memory_queue_t *q =
- vl_api_client_index_to_input_queue (mp->client_index);
-
- if (!q)
- return;
-
- rmp = vl_msg_api_alloc (sizeof (*rmp));
- rmp->_vl_msg_id = ntohs (VL_API_VNET_SUMMARY_STATS_REPLY);
- rmp->context = mp->context;
- rmp->retval = 0;
-
- memset (total_pkts, 0, sizeof (total_pkts));
- memset (total_bytes, 0, sizeof (total_bytes));
-
- vnet_interface_counter_lock (im);
-
- vec_foreach (cm, im->combined_sw_if_counters)
- {
- which = cm - im->combined_sw_if_counters;
-
- for (i = 0; i < vec_len (cm->maxi); i++)
- {
- vlib_get_combined_counter (cm, i, &v);
- total_pkts[which] += v.packets;
- total_bytes[which] += v.bytes;
- }
- }
- vnet_interface_counter_unlock (im);
-
- rmp->total_pkts[VLIB_RX] = clib_host_to_net_u64 (total_pkts[VLIB_RX]);
- rmp->total_bytes[VLIB_RX] = clib_host_to_net_u64 (total_bytes[VLIB_RX]);
- rmp->total_pkts[VLIB_TX] = clib_host_to_net_u64 (total_pkts[VLIB_TX]);
- rmp->total_bytes[VLIB_TX] = clib_host_to_net_u64 (total_bytes[VLIB_TX]);
- rmp->vector_rate =
- clib_host_to_net_u64 (vlib_last_vector_length_per_node (sm->vlib_main));
-
- vl_msg_api_send_shmem (q, (u8 *) & rmp);
-}
-
-/* *INDENT-OFF* */
-typedef CLIB_PACKED (struct {
- ip4_address_t address;
- u32 address_length: 6;
- u32 index:26;
-}) ip4_route_t;
-/* *INDENT-ON* */
-
-static int
-ip4_reset_fib_t_handler (vl_api_reset_fib_t * mp)
-{
- vnet_main_t *vnm = vnet_get_main ();
- vnet_interface_main_t *im = &vnm->interface_main;
- ip4_main_t *im4 = &ip4_main;
- static u32 *sw_if_indices_to_shut;
- stats_main_t *sm = &stats_main;
- fib_table_t *fib_table;
- ip4_fib_t *fib;
- u32 sw_if_index;
- int i;
- int rv = VNET_API_ERROR_NO_SUCH_FIB;
- u32 target_fib_id = ntohl (mp->vrf_id);
-
- dslock (sm, 1 /* release hint */ , 8 /* tag */ );
-
- /* *INDENT-OFF* */
- pool_foreach (fib_table, im4->fibs,
- ({
- fib = &fib_table->v4;
- vnet_sw_interface_t * si;
-
- if (fib->table_id != target_fib_id)
- continue;
-
- /* remove any mpls encap/decap labels */
- mpls_fib_reset_labels (fib->table_id);
-
- /* remove any proxy arps in this fib */
- vnet_proxy_arp_fib_reset (fib->table_id);
-
- /* Set the flow hash for this fib to the default */
- vnet_set_ip4_flow_hash (fib->table_id, IP_FLOW_HASH_DEFAULT);
-
- vec_reset_length (sw_if_indices_to_shut);
-
- /* Shut down interfaces in this FIB / clean out intfc routes */
- pool_foreach (si, im->sw_interfaces,
- ({
- u32 sw_if_index = si->sw_if_index;
-
- if (sw_if_index < vec_len (im4->fib_index_by_sw_if_index)
- && (im4->fib_index_by_sw_if_index[si->sw_if_index] ==
- fib->index))
- vec_add1 (sw_if_indices_to_shut, si->sw_if_index);
- }));
-
- for (i = 0; i < vec_len (sw_if_indices_to_shut); i++) {
- sw_if_index = sw_if_indices_to_shut[i];
- // vec_foreach (sw_if_index, sw_if_indices_to_shut) {
-
- u32 flags = vnet_sw_interface_get_flags (vnm, sw_if_index);
- flags &= ~(VNET_SW_INTERFACE_FLAG_ADMIN_UP);
- vnet_sw_interface_set_flags (vnm, sw_if_index, flags);
- }
-
- fib_table_flush(fib->index, FIB_PROTOCOL_IP4, FIB_SOURCE_API);
- fib_table_flush(fib->index, FIB_PROTOCOL_IP4, FIB_SOURCE_INTERFACE);
-
- rv = 0;
- break;
- })); /* pool_foreach (fib) */
- /* *INDENT-ON* */
-
- dsunlock (sm);
- return rv;
-}
-
-static int
-ip6_reset_fib_t_handler (vl_api_reset_fib_t * mp)
-{
- vnet_main_t *vnm = vnet_get_main ();
- vnet_interface_main_t *im = &vnm->interface_main;
- ip6_main_t *im6 = &ip6_main;
- stats_main_t *sm = &stats_main;
- static u32 *sw_if_indices_to_shut;
- fib_table_t *fib_table;
- ip6_fib_t *fib;
- u32 sw_if_index;
- int i;
- int rv = VNET_API_ERROR_NO_SUCH_FIB;
- u32 target_fib_id = ntohl (mp->vrf_id);
-
- dslock (sm, 1 /* release hint */ , 9 /* tag */ );
-
- /* *INDENT-OFF* */
- pool_foreach (fib_table, im6->fibs,
- ({
- vnet_sw_interface_t * si;
- fib = &(fib_table->v6);
-
- if (fib->table_id != target_fib_id)
- continue;
-
- vec_reset_length (sw_if_indices_to_shut);
-
- /* Shut down interfaces in this FIB / clean out intfc routes */
- pool_foreach (si, im->sw_interfaces,
- ({
- if (im6->fib_index_by_sw_if_index[si->sw_if_index] ==
- fib->index)
- vec_add1 (sw_if_indices_to_shut, si->sw_if_index);
- }));
-
- for (i = 0; i < vec_len (sw_if_indices_to_shut); i++) {
- sw_if_index = sw_if_indices_to_shut[i];
- // vec_foreach (sw_if_index, sw_if_indices_to_shut) {
-
- u32 flags = vnet_sw_interface_get_flags (vnm, sw_if_index);
- flags &= ~(VNET_SW_INTERFACE_FLAG_ADMIN_UP);
- vnet_sw_interface_set_flags (vnm, sw_if_index, flags);
- }
-
- fib_table_flush(fib->index, FIB_PROTOCOL_IP6, FIB_SOURCE_API);
- fib_table_flush(fib->index, FIB_PROTOCOL_IP6, FIB_SOURCE_INTERFACE);
-
- rv = 0;
- break;
- })); /* pool_foreach (fib) */
- /* *INDENT-ON* */
-
- dsunlock (sm);
- return rv;
-}
-
-static void
-vl_api_reset_fib_t_handler (vl_api_reset_fib_t * mp)
-{
- int rv;
- vl_api_reset_fib_reply_t *rmp;
-
- if (mp->is_ipv6)
- rv = ip6_reset_fib_t_handler (mp);
- else
- rv = ip4_reset_fib_t_handler (mp);
-
- REPLY_MACRO (VL_API_RESET_FIB_REPLY);
-}
-
-
-static void
-dhcpv4_proxy_config (vl_api_dhcp_proxy_config_t * mp)
-{
- vl_api_dhcp_proxy_config_reply_t *rmp;
- int rv;
-
- rv = dhcp_proxy_set_server ((ip4_address_t *) (&mp->dhcp_server),
- (ip4_address_t *) (&mp->dhcp_src_address),
- (u32) ntohl (mp->vrf_id),
- (int) mp->insert_circuit_id,
- (int) (mp->is_add == 0));
-
- REPLY_MACRO (VL_API_DHCP_PROXY_CONFIG_REPLY);
-}
-
-
-static void
-dhcpv6_proxy_config (vl_api_dhcp_proxy_config_t * mp)
-{
- vl_api_dhcp_proxy_config_reply_t *rmp;
- int rv = -1;
-
- rv = dhcpv6_proxy_set_server ((ip6_address_t *) (&mp->dhcp_server),
- (ip6_address_t *) (&mp->dhcp_src_address),
- (u32) ntohl (mp->vrf_id),
- (int) mp->insert_circuit_id,
- (int) (mp->is_add == 0));
-
- REPLY_MACRO (VL_API_DHCP_PROXY_CONFIG_REPLY);
-}
-
-static void
-dhcpv4_proxy_config_2 (vl_api_dhcp_proxy_config_2_t * mp)
-{
- vl_api_dhcp_proxy_config_reply_t *rmp;
- int rv;
-
- rv = dhcp_proxy_set_server_2 ((ip4_address_t *) (&mp->dhcp_server),
- (ip4_address_t *) (&mp->dhcp_src_address),
- (u32) ntohl (mp->rx_vrf_id),
- (u32) ntohl (mp->server_vrf_id),
- (int) mp->insert_circuit_id,
- (int) (mp->is_add == 0));
-
- REPLY_MACRO (VL_API_DHCP_PROXY_CONFIG_2_REPLY);
-}
-
-
-static void
-dhcpv6_proxy_config_2 (vl_api_dhcp_proxy_config_2_t * mp)
-{
- vl_api_dhcp_proxy_config_reply_t *rmp;
- int rv = -1;
-
- rv = dhcpv6_proxy_set_server_2 ((ip6_address_t *) (&mp->dhcp_server),
- (ip6_address_t *) (&mp->dhcp_src_address),
- (u32) ntohl (mp->rx_vrf_id),
- (u32) ntohl (mp->server_vrf_id),
- (int) mp->insert_circuit_id,
- (int) (mp->is_add == 0));
-
- REPLY_MACRO (VL_API_DHCP_PROXY_CONFIG_2_REPLY);
-}
-
-
-static void
-vl_api_dhcp_proxy_set_vss_t_handler (vl_api_dhcp_proxy_set_vss_t * mp)
-{
- vl_api_dhcp_proxy_set_vss_reply_t *rmp;
- int rv;
- if (!mp->is_ipv6)
- rv = dhcp_proxy_set_option82_vss (ntohl (mp->tbl_id),
- ntohl (mp->oui),
- ntohl (mp->fib_id),
- (int) mp->is_add == 0);
- else
- rv = dhcpv6_proxy_set_vss (ntohl (mp->tbl_id),
- ntohl (mp->oui),
- ntohl (mp->fib_id), (int) mp->is_add == 0);
-
- REPLY_MACRO (VL_API_DHCP_PROXY_SET_VSS_REPLY);
-}
-
-
-static void vl_api_dhcp_proxy_config_t_handler
- (vl_api_dhcp_proxy_config_t * mp)
-{
- if (mp->is_ipv6 == 0)
- dhcpv4_proxy_config (mp);
- else
- dhcpv6_proxy_config (mp);
-}
-
-static void vl_api_dhcp_proxy_config_2_t_handler
- (vl_api_dhcp_proxy_config_2_t * mp)
-{
- if (mp->is_ipv6 == 0)
- dhcpv4_proxy_config_2 (mp);
- else
- dhcpv6_proxy_config_2 (mp);
-}
-
-void
-dhcp_compl_event_callback (u32 client_index, u32 pid, u8 * hostname,
- u8 is_ipv6, u8 * host_address, u8 * router_address,
- u8 * host_mac)
-{
- unix_shared_memory_queue_t *q;
- vl_api_dhcp_compl_event_t *mp;
-
- q = vl_api_client_index_to_input_queue (client_index);
- if (!q)
- return;
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- mp->client_index = client_index;
- mp->pid = pid;
- mp->is_ipv6 = is_ipv6;
- clib_memcpy (&mp->hostname, hostname, vec_len (hostname));
- mp->hostname[vec_len (hostname) + 1] = '\n';
- clib_memcpy (&mp->host_address[0], host_address, 16);
- clib_memcpy (&mp->router_address[0], router_address, 16);
-
- if (NULL != host_mac)
- clib_memcpy (&mp->host_mac[0], host_mac, 6);
-
- mp->_vl_msg_id = ntohs (VL_API_DHCP_COMPL_EVENT);
-
- vl_msg_api_send_shmem (q, (u8 *) & mp);
-}
-
-static void vl_api_dhcp_client_config_t_handler
- (vl_api_dhcp_client_config_t * mp)
-{
- vlib_main_t *vm = vlib_get_main ();
- vl_api_dhcp_client_config_reply_t *rmp;
- int rv = 0;
-
- VALIDATE_SW_IF_INDEX (mp);
-
- rv = dhcp_client_config (vm, ntohl (mp->sw_if_index),
- mp->hostname, mp->is_add, mp->client_index,
- mp->want_dhcp_event ? dhcp_compl_event_callback :
- NULL, mp->pid);
-
- BAD_SW_IF_INDEX_LABEL;
-
- REPLY_MACRO (VL_API_DHCP_CLIENT_CONFIG_REPLY);
-}
-
-static void
-vl_api_create_loopback_t_handler (vl_api_create_loopback_t * mp)
-{
- vl_api_create_loopback_reply_t *rmp;
- u32 sw_if_index;
- int rv;
-
- rv = vnet_create_loopback_interface (&sw_if_index, mp->mac_address);
-
- /* *INDENT-OFF* */
- REPLY_MACRO2(VL_API_CREATE_LOOPBACK_REPLY,
- ({
- rmp->sw_if_index = ntohl (sw_if_index);
- }));
- /* *INDENT-ON* */
-}
-
-static void
-vl_api_delete_loopback_t_handler (vl_api_delete_loopback_t * mp)
-{
- vl_api_delete_loopback_reply_t *rmp;
- u32 sw_if_index;
- int rv;
-
- sw_if_index = ntohl (mp->sw_if_index);
- rv = vnet_delete_loopback_interface (sw_if_index);
-
- REPLY_MACRO (VL_API_DELETE_LOOPBACK_REPLY);
-}
-
-static void
-vl_api_control_ping_t_handler (vl_api_control_ping_t * mp)
-{
- vl_api_control_ping_reply_t *rmp;
- int rv = 0;
-
- /* *INDENT-OFF* */
- REPLY_MACRO2(VL_API_CONTROL_PING_REPLY,
- ({
- rmp->vpe_pid = ntohl (getpid());
- }));
- /* *INDENT-ON* */
-}
-
-static void
-shmem_cli_output (uword arg, u8 * buffer, uword buffer_bytes)
-{
- u8 **shmem_vecp = (u8 **) arg;
- u8 *shmem_vec;
- void *oldheap;
- api_main_t *am = &api_main;
- u32 offset;
-
- shmem_vec = *shmem_vecp;
-
- offset = vec_len (shmem_vec);
-
- pthread_mutex_lock (&am->vlib_rp->mutex);
- oldheap = svm_push_data_heap (am->vlib_rp);
-
- vec_validate (shmem_vec, offset + buffer_bytes - 1);
-
- clib_memcpy (shmem_vec + offset, buffer, buffer_bytes);
-
- svm_pop_heap (oldheap);
- pthread_mutex_unlock (&am->vlib_rp->mutex);
-
- *shmem_vecp = shmem_vec;
-}
-
-
-static void
-vl_api_cli_request_t_handler (vl_api_cli_request_t * mp)
-{
- vl_api_cli_reply_t *rp;
- unix_shared_memory_queue_t *q;
- vlib_main_t *vm = vlib_get_main ();
- api_main_t *am = &api_main;
- unformat_input_t input;
- u8 *shmem_vec = 0;
- void *oldheap;
-
- q = vl_api_client_index_to_input_queue (mp->client_index);
- if (!q)
- return;
-
- rp = vl_msg_api_alloc (sizeof (*rp));
- rp->_vl_msg_id = ntohs (VL_API_CLI_REPLY);
- rp->context = mp->context;
-
- unformat_init_vector (&input, (u8 *) (uword) mp->cmd_in_shmem);
-
- vlib_cli_input (vm, &input, shmem_cli_output, (uword) & shmem_vec);
-
- pthread_mutex_lock (&am->vlib_rp->mutex);
- oldheap = svm_push_data_heap (am->vlib_rp);
-
- vec_add1 (shmem_vec, 0);
-
- svm_pop_heap (oldheap);
- pthread_mutex_unlock (&am->vlib_rp->mutex);
-
- rp->reply_in_shmem = (uword) shmem_vec;
-
- vl_msg_api_send_shmem (q, (u8 *) & rp);
-}
-
-static void
-inband_cli_output (uword arg, u8 * buffer, uword buffer_bytes)
-{
- u8 **mem_vecp = (u8 **) arg;
- u8 *mem_vec = *mem_vecp;
- u32 offset = vec_len (mem_vec);
-
- vec_validate (mem_vec, offset + buffer_bytes - 1);
- clib_memcpy (mem_vec + offset, buffer, buffer_bytes);
- *mem_vecp = mem_vec;
-}
-
-static void
-vl_api_cli_inband_t_handler (vl_api_cli_inband_t * mp)
-{
- vl_api_cli_inband_reply_t *rmp;
- int rv = 0;
- unix_shared_memory_queue_t *q;
- vlib_main_t *vm = vlib_get_main ();
- unformat_input_t input;
- u8 *out_vec = 0;
-
- q = vl_api_client_index_to_input_queue (mp->client_index);
- if (!q)
- return;
-
- unformat_init_string (&input, (char *) mp->cmd, ntohl (mp->length));
- vlib_cli_input (vm, &input, inband_cli_output, (uword) & out_vec);
-
- u32 len = vec_len (out_vec);
- /* *INDENT-OFF* */
- REPLY_MACRO3(VL_API_CLI_INBAND_REPLY, len,
- ({
- rmp->length = htonl (len);
- clib_memcpy (rmp->reply, out_vec, len);
- }));
- /* *INDENT-ON* */
- vec_free (out_vec);
-}
-
-static void
-vl_api_set_arp_neighbor_limit_t_handler (vl_api_set_arp_neighbor_limit_t * mp)
-{
- int rv;
- vl_api_set_arp_neighbor_limit_reply_t *rmp;
- vnet_main_t *vnm = vnet_get_main ();
- clib_error_t *error;
-
- vnm->api_errno = 0;
-
- if (mp->is_ipv6)
- error = ip6_set_neighbor_limit (ntohl (mp->arp_neighbor_limit));
- else
- error = ip4_set_arp_limit (ntohl (mp->arp_neighbor_limit));
-
- if (error)
- {
- clib_error_report (error);
- rv = VNET_API_ERROR_UNSPECIFIED;
- }
- else
- {
- rv = vnm->api_errno;
- }
-
- REPLY_MACRO (VL_API_SET_ARP_NEIGHBOR_LIMIT_REPLY);
-}
-
-static void vl_api_sr_tunnel_add_del_t_handler
- (vl_api_sr_tunnel_add_del_t * mp)
-{
-#if IP6SR == 0
- clib_warning ("unimplemented");
-#else
- ip6_sr_add_del_tunnel_args_t _a, *a = &_a;
- int rv = 0;
- vl_api_sr_tunnel_add_del_reply_t *rmp;
- ip6_address_t *segments = 0, *seg;
- ip6_address_t *tags = 0, *tag;
- ip6_address_t *this_address;
- int i;
-
- if (mp->n_segments == 0)
- {
- rv = -11;
- goto out;
- }
-
- memset (a, 0, sizeof (*a));
- a->src_address = (ip6_address_t *) & mp->src_address;
- a->dst_address = (ip6_address_t *) & mp->dst_address;
- a->dst_mask_width = mp->dst_mask_width;
- a->flags_net_byte_order = mp->flags_net_byte_order;
- a->is_del = (mp->is_add == 0);
- a->rx_table_id = ntohl (mp->outer_vrf_id);
- a->tx_table_id = ntohl (mp->inner_vrf_id);
-
- a->name = format (0, "%s", mp->name);
- if (!(vec_len (a->name)))
- a->name = 0;
-
- a->policy_name = format (0, "%s", mp->policy_name);
- if (!(vec_len (a->policy_name)))
- a->policy_name = 0;
-
- /* Yank segments and tags out of the API message */
- this_address = (ip6_address_t *) mp->segs_and_tags;
- for (i = 0; i < mp->n_segments; i++)
- {
- vec_add2 (segments, seg, 1);
- clib_memcpy (seg->as_u8, this_address->as_u8, sizeof (*this_address));
- this_address++;
- }
- for (i = 0; i < mp->n_tags; i++)
- {
- vec_add2 (tags, tag, 1);
- clib_memcpy (tag->as_u8, this_address->as_u8, sizeof (*this_address));
- this_address++;
- }
-
- a->segments = segments;
- a->tags = tags;
-
- rv = ip6_sr_add_del_tunnel (a);
-
-out:
-
- REPLY_MACRO (VL_API_SR_TUNNEL_ADD_DEL_REPLY);
-#endif
-}
-
-static void vl_api_sr_policy_add_del_t_handler
- (vl_api_sr_policy_add_del_t * mp)
-{
-#if IP6SR == 0
- clib_warning ("unimplemented");
-#else
- ip6_sr_add_del_policy_args_t _a, *a = &_a;
- int rv = 0;
- vl_api_sr_policy_add_del_reply_t *rmp;
- int i;
-
- memset (a, 0, sizeof (*a));
- a->is_del = (mp->is_add == 0);
-
- a->name = format (0, "%s", mp->name);
- if (!(vec_len (a->name)))
- {
- rv = VNET_API_ERROR_NO_SUCH_NODE2;
- goto out;
- }
-
- if (!(mp->tunnel_names[0]))
- {
- rv = VNET_API_ERROR_NO_SUCH_NODE2;
- goto out;
- }
-
- // start deserializing tunnel_names
- int num_tunnels = mp->tunnel_names[0]; //number of tunnels
- u8 *deser_tun_names = mp->tunnel_names;
- deser_tun_names += 1; //moving along
-
- u8 *tun_name = 0;
- int tun_name_len = 0;
-
- for (i = 0; i < num_tunnels; i++)
- {
- tun_name_len = *deser_tun_names;
- deser_tun_names += 1;
- vec_resize (tun_name, tun_name_len);
- memcpy (tun_name, deser_tun_names, tun_name_len);
- vec_add1 (a->tunnel_names, tun_name);
- deser_tun_names += tun_name_len;
- tun_name = 0;
- }
-
- rv = ip6_sr_add_del_policy (a);
-
-out:
-
- REPLY_MACRO (VL_API_SR_POLICY_ADD_DEL_REPLY);
-#endif
-}
-
-static void vl_api_sr_multicast_map_add_del_t_handler
- (vl_api_sr_multicast_map_add_del_t * mp)
-{
-#if IP6SR == 0
- clib_warning ("unimplemented");
-#else
- ip6_sr_add_del_multicastmap_args_t _a, *a = &_a;
- int rv = 0;
- vl_api_sr_multicast_map_add_del_reply_t *rmp;
-
- memset (a, 0, sizeof (*a));
- a->is_del = (mp->is_add == 0);
-
- a->multicast_address = (ip6_address_t *) & mp->multicast_address;
- a->policy_name = format (0, "%s", mp->policy_name);
-
- if (a->multicast_address == 0)
- {
- rv = -1;
- goto out;
- }
-
- if (!(a->policy_name))
- {
- rv = -2;
- goto out;
- }
-
-#if DPDK > 0 /* Cannot call replicate without DPDK */
- rv = ip6_sr_add_del_multicastmap (a);
-#else
- clib_warning ("multicast replication without DPDK not implemented");
- rv = VNET_API_ERROR_UNIMPLEMENTED;
-#endif /* DPDK */
-
-out:
-
- REPLY_MACRO (VL_API_SR_MULTICAST_MAP_ADD_DEL_REPLY);
-#endif
-}
-
-#define foreach_classify_add_del_table_field \
-_(table_index) \
-_(nbuckets) \
-_(memory_size) \
-_(skip_n_vectors) \
-_(match_n_vectors) \
-_(next_table_index) \
-_(miss_next_index) \
-_(current_data_flag) \
-_(current_data_offset)
-
-static void vl_api_classify_add_del_table_t_handler
- (vl_api_classify_add_del_table_t * mp)
-{
- vl_api_classify_add_del_table_reply_t *rmp;
- vnet_classify_main_t *cm = &vnet_classify_main;
- vnet_classify_table_t *t;
- int rv;
-
-#define _(a) u32 a;
- foreach_classify_add_del_table_field;
-#undef _
-
-#define _(a) a = ntohl(mp->a);
- foreach_classify_add_del_table_field;
-#undef _
-
- /* The underlying API fails silently, on purpose, so check here */
- if (mp->is_add == 0) /* delete */
- {
- if (pool_is_free_index (cm->tables, table_index))
- {
- rv = VNET_API_ERROR_NO_SUCH_TABLE;
- goto out;
- }
- }
- else /* add or update */
- {
- if (table_index != ~0 && pool_is_free_index (cm->tables, table_index))
- table_index = ~0;
- }
-
- rv = vnet_classify_add_del_table
- (cm, mp->mask, nbuckets, memory_size,
- skip_n_vectors, match_n_vectors,
- next_table_index, miss_next_index, &table_index,
- current_data_flag, current_data_offset, mp->is_add, mp->del_chain);
-
-out:
- /* *INDENT-OFF* */
- REPLY_MACRO2(VL_API_CLASSIFY_ADD_DEL_TABLE_REPLY,
- ({
- if (rv == 0 && mp->is_add)
- {
- t = pool_elt_at_index (cm->tables, table_index);
- rmp->skip_n_vectors = ntohl(t->skip_n_vectors);
- rmp->match_n_vectors = ntohl(t->match_n_vectors);
- rmp->new_table_index = ntohl(table_index);
- }
- else
- {
- rmp->skip_n_vectors = ~0;
- rmp->match_n_vectors = ~0;
- rmp->new_table_index = ~0;
- }
- }));
- /* *INDENT-ON* */
-}
-
-static void vl_api_classify_add_del_session_t_handler
- (vl_api_classify_add_del_session_t * mp)
-{
- vnet_classify_main_t *cm = &vnet_classify_main;
- vl_api_classify_add_del_session_reply_t *rmp;
- int rv;
- u32 table_index, hit_next_index, opaque_index, metadata;
- i32 advance;
- u8 action;
-
- table_index = ntohl (mp->table_index);
- hit_next_index = ntohl (mp->hit_next_index);
- opaque_index = ntohl (mp->opaque_index);
- advance = ntohl (mp->advance);
- action = mp->action;
- metadata = ntohl (mp->metadata);
-
- rv = vnet_classify_add_del_session
- (cm, table_index, mp->match, hit_next_index, opaque_index,
- advance, action, metadata, mp->is_add);
-
- REPLY_MACRO (VL_API_CLASSIFY_ADD_DEL_SESSION_REPLY);
-}
-
-static void vl_api_classify_set_interface_ip_table_t_handler
- (vl_api_classify_set_interface_ip_table_t * mp)
-{
- vlib_main_t *vm = vlib_get_main ();
- vl_api_classify_set_interface_ip_table_reply_t *rmp;
- int rv;
- u32 table_index, sw_if_index;
-
- table_index = ntohl (mp->table_index);
- sw_if_index = ntohl (mp->sw_if_index);
-
- VALIDATE_SW_IF_INDEX (mp);
-
- if (mp->is_ipv6)
- rv = vnet_set_ip6_classify_intfc (vm, sw_if_index, table_index);
- else
- rv = vnet_set_ip4_classify_intfc (vm, sw_if_index, table_index);
-
- BAD_SW_IF_INDEX_LABEL;
-
- REPLY_MACRO (VL_API_CLASSIFY_SET_INTERFACE_IP_TABLE_REPLY);
-}
-
-static void vl_api_classify_set_interface_l2_tables_t_handler
- (vl_api_classify_set_interface_l2_tables_t * mp)
-{
- vl_api_classify_set_interface_l2_tables_reply_t *rmp;
- int rv;
- u32 sw_if_index, ip4_table_index, ip6_table_index, other_table_index;
- int enable;
-
- ip4_table_index = ntohl (mp->ip4_table_index);
- ip6_table_index = ntohl (mp->ip6_table_index);
- other_table_index = ntohl (mp->other_table_index);
- sw_if_index = ntohl (mp->sw_if_index);
-
- VALIDATE_SW_IF_INDEX (mp);
-
- if (mp->is_input)
- rv = vnet_l2_input_classify_set_tables (sw_if_index, ip4_table_index,
- ip6_table_index,
- other_table_index);
- else
- rv = vnet_l2_output_classify_set_tables (sw_if_index, ip4_table_index,
- ip6_table_index,
- other_table_index);
-
- if (rv == 0)
- {
- if (ip4_table_index != ~0 || ip6_table_index != ~0
- || other_table_index != ~0)
- enable = 1;
- else
- enable = 0;
-
- if (mp->is_input)
- vnet_l2_input_classify_enable_disable (sw_if_index, enable);
- else
- vnet_l2_output_classify_enable_disable (sw_if_index, enable);
- }
-
- BAD_SW_IF_INDEX_LABEL;
-
- REPLY_MACRO (VL_API_CLASSIFY_SET_INTERFACE_L2_TABLES_REPLY);
-}
-
-static void
-vl_api_l2_fib_clear_table_t_handler (vl_api_l2_fib_clear_table_t * mp)
-{
- int rv = 0;
- vl_api_l2_fib_clear_table_reply_t *rmp;
-
- /* DAW-FIXME: This API should only clear non-static l2fib entries, but
- * that is not currently implemented. When that TODO is fixed
- * this call should be changed to pass 1 instead of 0.
- */
- l2fib_clear_table (0);
-
- REPLY_MACRO (VL_API_L2_FIB_CLEAR_TABLE_REPLY);
-}
-
-extern void l2_efp_filter_configure (vnet_main_t * vnet_main,
- u32 sw_if_index, u32 enable);
-
-static void
-vl_api_l2_interface_efp_filter_t_handler (vl_api_l2_interface_efp_filter_t *
- mp)
-{
- int rv;
- vl_api_l2_interface_efp_filter_reply_t *rmp;
- vnet_main_t *vnm = vnet_get_main ();
-
- // enable/disable the feature
- l2_efp_filter_configure (vnm, mp->sw_if_index, mp->enable_disable);
- rv = vnm->api_errno;
-
- REPLY_MACRO (VL_API_L2_INTERFACE_EFP_FILTER_REPLY);
-}
-
-static void
- vl_api_l2_interface_vlan_tag_rewrite_t_handler
- (vl_api_l2_interface_vlan_tag_rewrite_t * mp)
-{
- int rv = 0;
- vl_api_l2_interface_vlan_tag_rewrite_reply_t *rmp;
- vnet_main_t *vnm = vnet_get_main ();
- vlib_main_t *vm = vlib_get_main ();
- u32 vtr_op;
-
- VALIDATE_SW_IF_INDEX (mp);
-
- vtr_op = ntohl (mp->vtr_op);
-
- /* The L2 code is unsuspicious */
- switch (vtr_op)
- {
- case L2_VTR_DISABLED:
- case L2_VTR_PUSH_1:
- case L2_VTR_PUSH_2:
- case L2_VTR_POP_1:
- case L2_VTR_POP_2:
- case L2_VTR_TRANSLATE_1_1:
- case L2_VTR_TRANSLATE_1_2:
- case L2_VTR_TRANSLATE_2_1:
- case L2_VTR_TRANSLATE_2_2:
- break;
-
- default:
- rv = VNET_API_ERROR_INVALID_VALUE;
- goto bad_sw_if_index;
- }
-
- rv = l2vtr_configure (vm, vnm, ntohl (mp->sw_if_index), vtr_op,
- ntohl (mp->push_dot1q), ntohl (mp->tag1),
- ntohl (mp->tag2));
-
- BAD_SW_IF_INDEX_LABEL;
-
- REPLY_MACRO (VL_API_L2_INTERFACE_VLAN_TAG_REWRITE_REPLY);
-}
-
-static void
-vl_api_l2_fib_table_entry_t_handler (vl_api_l2_fib_table_entry_t * mp)
-{
- clib_warning ("BUG");
-}
-
-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)
-{
- vl_api_l2_fib_table_entry_t *mp;
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- memset (mp, 0, sizeof (*mp));
- mp->_vl_msg_id = ntohs (VL_API_L2_FIB_TABLE_ENTRY);
-
- mp->bd_id =
- ntohl (l2input_main.bd_configs[l2fe_key->fields.bd_index].bd_id);
-
- mp->mac = l2fib_make_key (l2fe_key->fields.mac, 0);
- mp->sw_if_index = ntohl (l2fe_res->fields.sw_if_index);
- mp->static_mac = l2fe_res->fields.static_mac;
- mp->filter_mac = l2fe_res->fields.filter;
- mp->bvi_mac = l2fe_res->fields.bvi;
- mp->context = context;
-
- vl_msg_api_send_shmem (q, (u8 *) & mp);
-}
-
-static void
-vl_api_l2_fib_table_dump_t_handler (vl_api_l2_fib_table_dump_t * mp)
-{
- vpe_api_main_t *am = &vpe_api_main;
- bd_main_t *bdm = &bd_main;
- l2fib_entry_key_t *l2fe_key = NULL;
- l2fib_entry_result_t *l2fe_res = NULL;
- u32 ni, bd_id = ntohl (mp->bd_id);
- u32 bd_index;
- unix_shared_memory_queue_t *q;
- uword *p;
-
- q = vl_api_client_index_to_input_queue (mp->client_index);
- if (q == 0)
- return;
-
- /* see l2fib_table_dump: ~0 means "any" */
- if (bd_id == ~0)
- bd_index = ~0;
- else
- {
- p = hash_get (bdm->bd_index_by_bd_id, bd_id);
- if (p == 0)
- return;
-
- bd_index = p[0];
- }
-
- l2fib_table_dump (bd_index, &l2fe_key, &l2fe_res);
-
- vec_foreach_index (ni, l2fe_key)
- {
- send_l2fib_table_entry (am, q, vec_elt_at_index (l2fe_key, ni),
- vec_elt_at_index (l2fe_res, ni), mp->context);
- }
- vec_free (l2fe_key);
- vec_free (l2fe_res);
-}
-
-static void
-vl_api_show_version_t_handler (vl_api_show_version_t * mp)
-{
- vl_api_show_version_reply_t *rmp;
- int rv = 0;
- char *vpe_api_get_build_directory (void);
- char *vpe_api_get_version (void);
- char *vpe_api_get_build_date (void);
-
- unix_shared_memory_queue_t *q =
- vl_api_client_index_to_input_queue (mp->client_index);
-
- if (!q)
- return;
-
- /* *INDENT-OFF* */
- REPLY_MACRO2(VL_API_SHOW_VERSION_REPLY,
- ({
- strncpy ((char *) rmp->program, "vpe", ARRAY_LEN(rmp->program)-1);
- strncpy ((char *) rmp->build_directory, vpe_api_get_build_directory(),
- ARRAY_LEN(rmp->build_directory)-1);
- strncpy ((char *) rmp->version, vpe_api_get_version(),
- ARRAY_LEN(rmp->version)-1);
- strncpy ((char *) rmp->build_date, vpe_api_get_build_date(),
- ARRAY_LEN(rmp->build_date)-1);
- }));
- /* *INDENT-ON* */
-}
-
-static void
-vl_api_get_node_index_t_handler (vl_api_get_node_index_t * mp)
-{
- vlib_main_t *vm = vlib_get_main ();
- vl_api_get_node_index_reply_t *rmp;
- vlib_node_t *n;
- int rv = 0;
- u32 node_index = ~0;
-
- n = vlib_get_node_by_name (vm, mp->node_name);
-
- if (n == 0)
- rv = VNET_API_ERROR_NO_SUCH_NODE;
- else
- node_index = n->index;
-
- /* *INDENT-OFF* */
- REPLY_MACRO2(VL_API_GET_NODE_INDEX_REPLY,
- ({
- rmp->node_index = ntohl(node_index);
- }));
- /* *INDENT-ON* */
-}
-
-static void
-vl_api_get_next_index_t_handler (vl_api_get_next_index_t * mp)
-{
- vlib_main_t *vm = vlib_get_main ();
- vl_api_get_next_index_reply_t *rmp;
- vlib_node_t *node, *next_node;
- int rv = 0;
- u32 next_node_index = ~0, next_index = ~0;
- uword *p;
-
- node = vlib_get_node_by_name (vm, mp->node_name);
-
- if (node == 0)
- {
- rv = VNET_API_ERROR_NO_SUCH_NODE;
- goto out;
- }
-
- next_node = vlib_get_node_by_name (vm, mp->next_name);
-
- if (next_node == 0)
- {
- rv = VNET_API_ERROR_NO_SUCH_NODE2;
- goto out;
- }
- else
- next_node_index = next_node->index;
-
- p = hash_get (node->next_slot_by_node, next_node_index);
-
- if (p == 0)
- {
- rv = VNET_API_ERROR_NO_SUCH_ENTRY;
- goto out;
- }
- else
- next_index = p[0];
-
-out:
- /* *INDENT-OFF* */
- REPLY_MACRO2(VL_API_GET_NEXT_INDEX_REPLY,
- ({
- rmp->next_index = ntohl(next_index);
- }));
- /* *INDENT-ON* */
-}
-
-static void
-vl_api_add_node_next_t_handler (vl_api_add_node_next_t * mp)
-{
- vlib_main_t *vm = vlib_get_main ();
- vl_api_add_node_next_reply_t *rmp;
- vlib_node_t *n, *next;
- int rv = 0;
- u32 next_index = ~0;
-
- n = vlib_get_node_by_name (vm, mp->node_name);
-
- if (n == 0)
- {
- rv = VNET_API_ERROR_NO_SUCH_NODE;
- goto out;
- }
-
- next = vlib_get_node_by_name (vm, mp->next_name);
-
- if (next == 0)
- rv = VNET_API_ERROR_NO_SUCH_NODE2;
- else
- next_index = vlib_node_add_next (vm, n->index, next->index);
-
-out:
- /* *INDENT-OFF* */
- REPLY_MACRO2(VL_API_GET_NODE_INDEX_REPLY,
- ({
- rmp->next_index = ntohl(next_index);
- }));
- /* *INDENT-ON* */
-}
-
-static void vl_api_vxlan_add_del_tunnel_t_handler
- (vl_api_vxlan_add_del_tunnel_t * mp)
-{
- vl_api_vxlan_add_del_tunnel_reply_t *rmp;
- int rv = 0;
- vnet_vxlan_add_del_tunnel_args_t _a, *a = &_a;
- u32 encap_fib_index;
- uword *p;
- ip4_main_t *im = &ip4_main;
- vnet_main_t *vnm = vnet_get_main ();
- u32 sw_if_index = ~0;
-
- p = hash_get (im->fib_index_by_table_id, ntohl (mp->encap_vrf_id));
- if (!p)
- {
- rv = VNET_API_ERROR_NO_SUCH_FIB;
- goto out;
- }
- encap_fib_index = p[0];
- memset (a, 0, sizeof (*a));
-
- a->is_add = mp->is_add;
- a->is_ip6 = mp->is_ipv6;
-
- /* ip addresses sent in network byte order */
- ip46_from_addr_buf (mp->is_ipv6, mp->dst_address, &a->dst);
- ip46_from_addr_buf (mp->is_ipv6, mp->src_address, &a->src);
-
- /* Check src & dst are different */
- if (ip46_address_cmp (&a->dst, &a->src) == 0)
- {
- rv = VNET_API_ERROR_SAME_SRC_DST;
- goto out;
- }
- a->mcast_sw_if_index = ntohl (mp->mcast_sw_if_index);
- if (ip46_address_is_multicast (&a->dst) &&
- pool_is_free_index (vnm->interface_main.sw_interfaces,
- a->mcast_sw_if_index))
- {
- rv = VNET_API_ERROR_INVALID_SW_IF_INDEX;
- goto out;
- }
- a->encap_fib_index = encap_fib_index;
- a->decap_next_index = ntohl (mp->decap_next_index);
- a->vni = ntohl (mp->vni);
- rv = vnet_vxlan_add_del_tunnel (a, &sw_if_index);
-
-out:
- /* *INDENT-OFF* */
- REPLY_MACRO2(VL_API_VXLAN_ADD_DEL_TUNNEL_REPLY,
- ({
- rmp->sw_if_index = ntohl (sw_if_index);
- }));
- /* *INDENT-ON* */
-}
-
-static void send_vxlan_tunnel_details
- (vxlan_tunnel_t * t, unix_shared_memory_queue_t * q, u32 context)
-{
- vl_api_vxlan_tunnel_details_t *rmp;
- ip4_main_t *im4 = &ip4_main;
- ip6_main_t *im6 = &ip6_main;
- u8 is_ipv6 = !ip46_address_is_ip4 (&t->dst);
-
- rmp = vl_msg_api_alloc (sizeof (*rmp));
- memset (rmp, 0, sizeof (*rmp));
- rmp->_vl_msg_id = ntohs (VL_API_VXLAN_TUNNEL_DETAILS);
- if (is_ipv6)
- {
- memcpy (rmp->src_address, t->src.ip6.as_u8, 16);
- memcpy (rmp->dst_address, t->dst.ip6.as_u8, 16);
- rmp->encap_vrf_id = htonl (im6->fibs[t->encap_fib_index].ft_table_id);
- }
- else
- {
- memcpy (rmp->src_address, t->src.ip4.as_u8, 4);
- memcpy (rmp->dst_address, t->dst.ip4.as_u8, 4);
- rmp->encap_vrf_id = htonl (im4->fibs[t->encap_fib_index].ft_table_id);
- }
- rmp->mcast_sw_if_index = htonl (t->mcast_sw_if_index);
- rmp->vni = htonl (t->vni);
- rmp->decap_next_index = htonl (t->decap_next_index);
- rmp->sw_if_index = htonl (t->sw_if_index);
- rmp->is_ipv6 = is_ipv6;
- rmp->context = context;
-
- vl_msg_api_send_shmem (q, (u8 *) & rmp);
-}
-
-static void vl_api_vxlan_tunnel_dump_t_handler
- (vl_api_vxlan_tunnel_dump_t * mp)
-{
- unix_shared_memory_queue_t *q;
- vxlan_main_t *vxm = &vxlan_main;
- vxlan_tunnel_t *t;
- u32 sw_if_index;
-
- q = vl_api_client_index_to_input_queue (mp->client_index);
- if (q == 0)
- {
- return;
- }
-
- sw_if_index = ntohl (mp->sw_if_index);
-
- if (~0 == sw_if_index)
- {
- /* *INDENT-OFF* */
- pool_foreach (t, vxm->tunnels,
- ({
- send_vxlan_tunnel_details(t, q, mp->context);
- }));
- /* *INDENT-ON* */
- }
- else
- {
- if ((sw_if_index >= vec_len (vxm->tunnel_index_by_sw_if_index)) ||
- (~0 == vxm->tunnel_index_by_sw_if_index[sw_if_index]))
- {
- return;
- }
- t = &vxm->tunnels[vxm->tunnel_index_by_sw_if_index[sw_if_index]];
- send_vxlan_tunnel_details (t, q, mp->context);
- }
-}
-
-static void
-vl_api_l2_patch_add_del_t_handler (vl_api_l2_patch_add_del_t * mp)
-{
- extern int vnet_l2_patch_add_del (u32 rx_sw_if_index, u32 tx_sw_if_index,
- int is_add);
- vl_api_l2_patch_add_del_reply_t *rmp;
- int vnet_l2_patch_add_del (u32 rx_sw_if_index, u32 tx_sw_if_index,
- int is_add);
- int rv = 0;
-
- VALIDATE_RX_SW_IF_INDEX (mp);
- VALIDATE_TX_SW_IF_INDEX (mp);
-
- rv = vnet_l2_patch_add_del (ntohl (mp->rx_sw_if_index),
- ntohl (mp->tx_sw_if_index),
- (int) (mp->is_add != 0));
-
- BAD_RX_SW_IF_INDEX_LABEL;
- BAD_TX_SW_IF_INDEX_LABEL;
-
- REPLY_MACRO (VL_API_L2_PATCH_ADD_DEL_REPLY);
-}
-
-static void
- vl_api_vxlan_gpe_add_del_tunnel_t_handler
- (vl_api_vxlan_gpe_add_del_tunnel_t * mp)
-{
- vl_api_vxlan_gpe_add_del_tunnel_reply_t *rmp;
- int rv = 0;
- vnet_vxlan_gpe_add_del_tunnel_args_t _a, *a = &_a;
- u32 encap_fib_index, decap_fib_index;
- u8 protocol;
- uword *p;
- ip4_main_t *im = &ip4_main;
- u32 sw_if_index = ~0;
-
-
- p = hash_get (im->fib_index_by_table_id, ntohl (mp->encap_vrf_id));
- if (!p)
- {
- rv = VNET_API_ERROR_NO_SUCH_FIB;
- goto out;
- }
- encap_fib_index = p[0];
-
- protocol = mp->protocol;
-
- /* Interpret decap_vrf_id as an opaque if sending to other-than-ip4-input */
- if (protocol == VXLAN_GPE_INPUT_NEXT_IP4_INPUT)
- {
- p = hash_get (im->fib_index_by_table_id, ntohl (mp->decap_vrf_id));
- if (!p)
- {
- rv = VNET_API_ERROR_NO_SUCH_INNER_FIB;
- goto out;
- }
- decap_fib_index = p[0];
- }
- else
- {
- decap_fib_index = ntohl (mp->decap_vrf_id);
- }
-
- /* Check src & dst are different */
- if ((mp->is_ipv6 && memcmp (mp->local, mp->remote, 16) == 0) ||
- (!mp->is_ipv6 && memcmp (mp->local, mp->remote, 4) == 0))
- {
- rv = VNET_API_ERROR_SAME_SRC_DST;
- goto out;
- }
- memset (a, 0, sizeof (*a));
-
- a->is_add = mp->is_add;
- a->is_ip6 = mp->is_ipv6;
- /* ip addresses sent in network byte order */
- if (a->is_ip6)
- {
- clib_memcpy (&(a->local.ip6), mp->local, 16);
- clib_memcpy (&(a->remote.ip6), mp->remote, 16);
- }
- else
- {
- clib_memcpy (&(a->local.ip4), mp->local, 4);
- clib_memcpy (&(a->remote.ip4), mp->remote, 4);
- }
- a->encap_fib_index = encap_fib_index;
- a->decap_fib_index = decap_fib_index;
- a->protocol = protocol;
- a->vni = ntohl (mp->vni);
- rv = vnet_vxlan_gpe_add_del_tunnel (a, &sw_if_index);
-
-out:
- /* *INDENT-OFF* */
- REPLY_MACRO2(VL_API_VXLAN_GPE_ADD_DEL_TUNNEL_REPLY,
- ({
- rmp->sw_if_index = ntohl (sw_if_index);
- }));
- /* *INDENT-ON* */
-}
-
-static void send_vxlan_gpe_tunnel_details
- (vxlan_gpe_tunnel_t * t, unix_shared_memory_queue_t * q, u32 context)
-{
- vl_api_vxlan_gpe_tunnel_details_t *rmp;
- ip4_main_t *im4 = &ip4_main;
- ip6_main_t *im6 = &ip6_main;
- u8 is_ipv6 = !(t->flags & VXLAN_GPE_TUNNEL_IS_IPV4);
-
- rmp = vl_msg_api_alloc (sizeof (*rmp));
- memset (rmp, 0, sizeof (*rmp));
- rmp->_vl_msg_id = ntohs (VL_API_VXLAN_GPE_TUNNEL_DETAILS);
- if (is_ipv6)
- {
- memcpy (rmp->local, &(t->local.ip6), 16);
- memcpy (rmp->remote, &(t->remote.ip6), 16);
- rmp->encap_vrf_id = htonl (im6->fibs[t->encap_fib_index].ft_table_id);
- rmp->decap_vrf_id = htonl (im6->fibs[t->decap_fib_index].ft_table_id);
- }
- else
- {
- memcpy (rmp->local, &(t->local.ip4), 4);
- memcpy (rmp->remote, &(t->remote.ip4), 4);
- rmp->encap_vrf_id = htonl (im4->fibs[t->encap_fib_index].ft_table_id);
- rmp->decap_vrf_id = htonl (im4->fibs[t->decap_fib_index].ft_table_id);
- }
- rmp->vni = htonl (t->vni);
- rmp->protocol = t->protocol;
- rmp->sw_if_index = htonl (t->sw_if_index);
- rmp->is_ipv6 = is_ipv6;
- rmp->context = context;
-
- vl_msg_api_send_shmem (q, (u8 *) & rmp);
-}
-
-static void vl_api_vxlan_gpe_tunnel_dump_t_handler
- (vl_api_vxlan_gpe_tunnel_dump_t * mp)
-{
- unix_shared_memory_queue_t *q;
- vxlan_gpe_main_t *vgm = &vxlan_gpe_main;
- vxlan_gpe_tunnel_t *t;
- u32 sw_if_index;
-
- q = vl_api_client_index_to_input_queue (mp->client_index);
- if (q == 0)
- {
- return;
- }
-
- sw_if_index = ntohl (mp->sw_if_index);
-
- if (~0 == sw_if_index)
- {
- /* *INDENT-OFF* */
- pool_foreach (t, vgm->tunnels,
- ({
- send_vxlan_gpe_tunnel_details(t, q, mp->context);
- }));
- /* *INDENT-ON* */
- }
- else
- {
- if ((sw_if_index >= vec_len (vgm->tunnel_index_by_sw_if_index)) ||
- (~0 == vgm->tunnel_index_by_sw_if_index[sw_if_index]))
- {
- return;
- }
- t = &vgm->tunnels[vgm->tunnel_index_by_sw_if_index[sw_if_index]];
- send_vxlan_gpe_tunnel_details (t, q, mp->context);
- }
-}
-
-static void
-vl_api_interface_name_renumber_t_handler (vl_api_interface_name_renumber_t *
- mp)
-{
- vl_api_interface_name_renumber_reply_t *rmp;
- int rv = 0;
-
- VALIDATE_SW_IF_INDEX (mp);
-
- rv = vnet_interface_name_renumber
- (ntohl (mp->sw_if_index), ntohl (mp->new_show_dev_instance));
-
- BAD_SW_IF_INDEX_LABEL;
-
- REPLY_MACRO (VL_API_INTERFACE_NAME_RENUMBER_REPLY);
-}
-
-static int
-arp_change_data_callback (u32 pool_index, u8 * new_mac,
- u32 sw_if_index, u32 address)
-{
- vpe_api_main_t *am = &vpe_api_main;
- vlib_main_t *vm = am->vlib_main;
- vl_api_ip4_arp_event_t *event;
- static f64 arp_event_last_time;
- f64 now = vlib_time_now (vm);
-
- if (pool_is_free_index (am->arp_events, pool_index))
- return 1;
-
- event = pool_elt_at_index (am->arp_events, pool_index);
- /* *INDENT-OFF* */
- if (memcmp (&event->new_mac, new_mac, sizeof (event->new_mac)))
- {
- clib_memcpy (event->new_mac, new_mac, sizeof (event->new_mac));
- }
- else
- { /* same mac */
- if (sw_if_index == event->sw_if_index &&
- (!event->mac_ip ||
- /* for BD case, also check IP address with 10 sec timeout */
- (address == event->address &&
- (now - arp_event_last_time) < 10.0)))
- return 1;
- }
- /* *INDENT-ON* */
-
- arp_event_last_time = now;
- event->sw_if_index = sw_if_index;
- if (event->mac_ip)
- event->address = address;
- return 0;
-}
-
-static int
-nd_change_data_callback (u32 pool_index, u8 * new_mac,
- u32 sw_if_index, ip6_address_t * address)
-{
- vpe_api_main_t *am = &vpe_api_main;
- vlib_main_t *vm = am->vlib_main;
- vl_api_ip6_nd_event_t *event;
- static f64 nd_event_last_time;
- f64 now = vlib_time_now (vm);
-
- if (pool_is_free_index (am->nd_events, pool_index))
- return 1;
-
- event = pool_elt_at_index (am->nd_events, pool_index);
-
- /* *INDENT-OFF* */
- if (memcmp (&event->new_mac, new_mac, sizeof (event->new_mac)))
- {
- clib_memcpy (event->new_mac, new_mac, sizeof (event->new_mac));
- }
- else
- { /* same mac */
- if (sw_if_index == event->sw_if_index &&
- (!event->mac_ip ||
- /* for BD case, also check IP address with 10 sec timeout */
- (ip6_address_is_equal (address,
- (ip6_address_t *) event->address) &&
- (now - nd_event_last_time) < 10.0)))
- return 1;
- }
- /* *INDENT-ON* */
-
- nd_event_last_time = now;
- event->sw_if_index = sw_if_index;
- if (event->mac_ip)
- clib_memcpy (event->address, address, sizeof (event->address));
- return 0;
-}
-
-static int
-arp_change_delete_callback (u32 pool_index, u8 * notused)
-{
- vpe_api_main_t *am = &vpe_api_main;
-
- if (pool_is_free_index (am->arp_events, pool_index))
- return 1;
-
- pool_put_index (am->arp_events, pool_index);
- return 0;
-}
-
-static int
-nd_change_delete_callback (u32 pool_index, u8 * notused)
-{
- vpe_api_main_t *am = &vpe_api_main;
-
- if (pool_is_free_index (am->nd_events, pool_index))
- return 1;
-
- pool_put_index (am->nd_events, pool_index);
- return 0;
-}
-
-static void
-vl_api_want_ip4_arp_events_t_handler (vl_api_want_ip4_arp_events_t * mp)
-{
- vpe_api_main_t *am = &vpe_api_main;
- vnet_main_t *vnm = vnet_get_main ();
- vl_api_want_ip4_arp_events_reply_t *rmp;
- vl_api_ip4_arp_event_t *event;
- int rv;
-
- if (mp->enable_disable)
- {
- pool_get (am->arp_events, event);
- memset (event, 0, sizeof (*event));
-
- event->_vl_msg_id = ntohs (VL_API_IP4_ARP_EVENT);
- event->client_index = mp->client_index;
- event->context = mp->context;
- event->address = mp->address;
- event->pid = mp->pid;
- if (mp->address == 0)
- event->mac_ip = 1;
-
- rv = vnet_add_del_ip4_arp_change_event
- (vnm, arp_change_data_callback,
- mp->pid, &mp->address /* addr, in net byte order */ ,
- vpe_resolver_process_node.index,
- IP4_ARP_EVENT, event - am->arp_events, 1 /* is_add */ );
- }
- else
- {
- rv = vnet_add_del_ip4_arp_change_event
- (vnm, arp_change_delete_callback,
- mp->pid, &mp->address /* addr, in net byte order */ ,
- vpe_resolver_process_node.index,
- IP4_ARP_EVENT, ~0 /* pool index */ , 0 /* is_add */ );
- }
- REPLY_MACRO (VL_API_WANT_IP4_ARP_EVENTS_REPLY);
-}
-
-static void
-vl_api_want_ip6_nd_events_t_handler (vl_api_want_ip6_nd_events_t * mp)
-{
- vpe_api_main_t *am = &vpe_api_main;
- vnet_main_t *vnm = vnet_get_main ();
- vl_api_want_ip6_nd_events_reply_t *rmp;
- vl_api_ip6_nd_event_t *event;
- int rv;
-
- if (mp->enable_disable)
- {
- pool_get (am->nd_events, event);
- memset (event, 0, sizeof (*event));
-
- event->_vl_msg_id = ntohs (VL_API_IP6_ND_EVENT);
- event->client_index = mp->client_index;
- event->context = mp->context;
- clib_memcpy (event->address, mp->address, 16);
- event->pid = mp->pid;
- if (ip6_address_is_zero ((ip6_address_t *) mp->address))
- event->mac_ip = 1;
-
- rv = vnet_add_del_ip6_nd_change_event
- (vnm, nd_change_data_callback,
- mp->pid, mp->address /* addr, in net byte order */ ,
- vpe_resolver_process_node.index,
- IP6_ND_EVENT, event - am->nd_events, 1 /* is_add */ );
- }
- else
- {
- rv = vnet_add_del_ip6_nd_change_event
- (vnm, nd_change_delete_callback,
- mp->pid, mp->address /* addr, in net byte order */ ,
- vpe_resolver_process_node.index,
- IP6_ND_EVENT, ~0 /* pool index */ , 0 /* is_add */ );
- }
- REPLY_MACRO (VL_API_WANT_IP6_ND_EVENTS_REPLY);
-}
-
-static void vl_api_input_acl_set_interface_t_handler
- (vl_api_input_acl_set_interface_t * mp)
-{
- vlib_main_t *vm = vlib_get_main ();
- vl_api_input_acl_set_interface_reply_t *rmp;
- int rv;
- u32 sw_if_index, ip4_table_index, ip6_table_index, l2_table_index;
-
- ip4_table_index = ntohl (mp->ip4_table_index);
- ip6_table_index = ntohl (mp->ip6_table_index);
- l2_table_index = ntohl (mp->l2_table_index);
- sw_if_index = ntohl (mp->sw_if_index);
-
- VALIDATE_SW_IF_INDEX (mp);
-
- rv = vnet_set_input_acl_intfc (vm, sw_if_index, ip4_table_index,
- ip6_table_index, l2_table_index, mp->is_add);
-
- BAD_SW_IF_INDEX_LABEL;
-
- REPLY_MACRO (VL_API_INPUT_ACL_SET_INTERFACE_REPLY);
-}
-
-static void vl_api_cop_interface_enable_disable_t_handler
- (vl_api_cop_interface_enable_disable_t * mp)
-{
- vl_api_cop_interface_enable_disable_reply_t *rmp;
- int rv;
- u32 sw_if_index = ntohl (mp->sw_if_index);
- int enable_disable;
-
- VALIDATE_SW_IF_INDEX (mp);
-
- enable_disable = (int) mp->enable_disable;
-
- rv = cop_interface_enable_disable (sw_if_index, enable_disable);
-
- BAD_SW_IF_INDEX_LABEL;
-
- REPLY_MACRO (VL_API_COP_INTERFACE_ENABLE_DISABLE_REPLY);
-}
-
-static void vl_api_cop_whitelist_enable_disable_t_handler
- (vl_api_cop_whitelist_enable_disable_t * mp)
-{
- vl_api_cop_whitelist_enable_disable_reply_t *rmp;
- cop_whitelist_enable_disable_args_t _a, *a = &_a;
- u32 sw_if_index = ntohl (mp->sw_if_index);
- int rv;
-
- VALIDATE_SW_IF_INDEX (mp);
-
- a->sw_if_index = sw_if_index;
- a->ip4 = mp->ip4;
- a->ip6 = mp->ip6;
- a->default_cop = mp->default_cop;
- a->fib_id = ntohl (mp->fib_id);
-
- rv = cop_whitelist_enable_disable (a);
-
- BAD_SW_IF_INDEX_LABEL;
-
- REPLY_MACRO (VL_API_COP_WHITELIST_ENABLE_DISABLE_REPLY);
-}
-
-static void
-vl_api_get_node_graph_t_handler (vl_api_get_node_graph_t * mp)
-{
- int rv = 0;
- u8 *vector = 0;
- api_main_t *am = &api_main;
- vlib_main_t *vm = vlib_get_main ();
- void *oldheap;
- vl_api_get_node_graph_reply_t *rmp;
-
- pthread_mutex_lock (&am->vlib_rp->mutex);
- oldheap = svm_push_data_heap (am->vlib_rp);
-
- /*
- * Keep the number of memcpy ops to a minimum (e.g. 1).
- */
- vec_validate (vector, 16384);
- vec_reset_length (vector);
-
- /* $$$$ FIXME */
- vector = vlib_node_serialize (&vm->node_main, vector,
- (u32) ~ 0 /* all threads */ ,
- 1 /* include nexts */ ,
- 1 /* include stats */ );
-
- svm_pop_heap (oldheap);
- pthread_mutex_unlock (&am->vlib_rp->mutex);
-
- /* *INDENT-OFF* */
- REPLY_MACRO2(VL_API_GET_NODE_GRAPH_REPLY,
- ({
- rmp->reply_in_shmem = (uword) vector;
- }));
- /* *INDENT-ON* */
-}
-
-static void
-vl_api_ioam_enable_t_handler (vl_api_ioam_enable_t * mp)
-{
- int rv = 0;
- vl_api_ioam_enable_reply_t *rmp;
- clib_error_t *error;
-
- /* Ignoring the profile id as currently a single profile
- * is supported */
- error = ip6_ioam_enable (mp->trace_enable, mp->pot_enable,
- mp->seqno, mp->analyse);
- if (error)
- {
- clib_error_report (error);
- rv = clib_error_get_code (error);
- }
-
- REPLY_MACRO (VL_API_IOAM_ENABLE_REPLY);
-}
-
-static void
-vl_api_ioam_disable_t_handler (vl_api_ioam_disable_t * mp)
-{
- int rv = 0;
- vl_api_ioam_disable_reply_t *rmp;
- clib_error_t *error;
-
- error = clear_ioam_rewrite_fn ();
- if (error)
- {
- clib_error_report (error);
- rv = clib_error_get_code (error);
- }
-
- REPLY_MACRO (VL_API_IOAM_DISABLE_REPLY);
-}
-
-static void
-vl_api_policer_add_del_t_handler (vl_api_policer_add_del_t * mp)
-{
- vlib_main_t *vm = vlib_get_main ();
- vl_api_policer_add_del_reply_t *rmp;
- int rv = 0;
- u8 *name = NULL;
- sse2_qos_pol_cfg_params_st cfg;
- clib_error_t *error;
- u32 policer_index;
-
- name = format (0, "%s", mp->name);
-
- memset (&cfg, 0, sizeof (cfg));
- cfg.rfc = mp->type;
- cfg.rnd_type = mp->round_type;
- cfg.rate_type = mp->rate_type;
- cfg.rb.kbps.cir_kbps = mp->cir;
- cfg.rb.kbps.eir_kbps = mp->eir;
- cfg.rb.kbps.cb_bytes = mp->cb;
- cfg.rb.kbps.eb_bytes = mp->eb;
- cfg.conform_action.action_type = mp->conform_action_type;
- cfg.conform_action.dscp = mp->conform_dscp;
- cfg.exceed_action.action_type = mp->exceed_action_type;
- cfg.exceed_action.dscp = mp->exceed_dscp;
- cfg.violate_action.action_type = mp->violate_action_type;
- cfg.violate_action.dscp = mp->violate_dscp;
- cfg.color_aware = mp->color_aware;
-
- error = policer_add_del (vm, name, &cfg, &policer_index, mp->is_add);
-
- if (error)
- rv = VNET_API_ERROR_UNSPECIFIED;
-
- /* *INDENT-OFF* */
- REPLY_MACRO2(VL_API_POLICER_ADD_DEL_REPLY,
- ({
- if (rv == 0 && mp->is_add)
- rmp->policer_index = ntohl(policer_index);
- else
- rmp->policer_index = ~0;
- }));
- /* *INDENT-ON* */
-}
-
-static void
-send_policer_details (u8 * name,
- sse2_qos_pol_cfg_params_st * config,
- policer_read_response_type_st * templ,
- unix_shared_memory_queue_t * q, u32 context)
-{
- vl_api_policer_details_t *mp;
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- memset (mp, 0, sizeof (*mp));
- mp->_vl_msg_id = ntohs (VL_API_POLICER_DETAILS);
- mp->context = context;
- mp->cir = htonl (config->rb.kbps.cir_kbps);
- mp->eir = htonl (config->rb.kbps.eir_kbps);
- mp->cb = htonl (config->rb.kbps.cb_bytes);
- mp->eb = htonl (config->rb.kbps.eb_bytes);
- mp->rate_type = config->rate_type;
- mp->round_type = config->rnd_type;
- mp->type = config->rfc;
- mp->conform_action_type = config->conform_action.action_type;
- mp->conform_dscp = config->conform_action.dscp;
- mp->exceed_action_type = config->exceed_action.action_type;
- mp->exceed_dscp = config->exceed_action.dscp;
- mp->violate_action_type = config->violate_action.action_type;
- mp->violate_dscp = config->violate_action.dscp;
- mp->single_rate = templ->single_rate ? 1 : 0;
- mp->color_aware = templ->color_aware ? 1 : 0;
- mp->scale = htonl (templ->scale);
- mp->cir_tokens_per_period = htonl (templ->cir_tokens_per_period);
- mp->pir_tokens_per_period = htonl (templ->pir_tokens_per_period);
- mp->current_limit = htonl (templ->current_limit);
- mp->current_bucket = htonl (templ->current_bucket);
- mp->extended_limit = htonl (templ->extended_limit);
- mp->extended_bucket = htonl (templ->extended_bucket);
- mp->last_update_time = clib_host_to_net_u64 (templ->last_update_time);
-
- strncpy ((char *) mp->name, (char *) name, ARRAY_LEN (mp->name) - 1);
-
- vl_msg_api_send_shmem (q, (u8 *) & mp);
-}
-
-static void
-vl_api_policer_dump_t_handler (vl_api_policer_dump_t * mp)
-{
- unix_shared_memory_queue_t *q;
- vnet_policer_main_t *pm = &vnet_policer_main;
- hash_pair_t *hp;
- uword *p;
- u32 pool_index;
- u8 *match_name = 0;
- u8 *name;
- sse2_qos_pol_cfg_params_st *config;
- policer_read_response_type_st *templ;
-
- q = vl_api_client_index_to_input_queue (mp->client_index);
- if (q == 0)
- return;
-
- if (mp->match_name_valid)
- {
- match_name = format (0, "%s%c", mp->match_name, 0);
- }
-
- if (mp->match_name_valid)
- {
- p = hash_get_mem (pm->policer_config_by_name, match_name);
- if (p)
- {
- pool_index = p[0];
- config = pool_elt_at_index (pm->configs, pool_index);
- templ = pool_elt_at_index (pm->policer_templates, pool_index);
- send_policer_details (match_name, config, templ, q, mp->context);
- }
- }
- else
- {
- /* *INDENT-OFF* */
- hash_foreach_pair (hp, pm->policer_config_by_name,
- ({
- name = (u8 *) hp->key;
- pool_index = hp->value[0];
- config = pool_elt_at_index (pm->configs, pool_index);
- templ = pool_elt_at_index (pm->policer_templates, pool_index);
- send_policer_details(name, config, templ, q, mp->context);
- }));
- /* *INDENT-ON* */
- }
-}
-
-static void
- vl_api_policer_classify_set_interface_t_handler
- (vl_api_policer_classify_set_interface_t * mp)
-{
- vlib_main_t *vm = vlib_get_main ();
- vl_api_policer_classify_set_interface_reply_t *rmp;
- int rv;
- u32 sw_if_index, ip4_table_index, ip6_table_index, l2_table_index;
-
- ip4_table_index = ntohl (mp->ip4_table_index);
- ip6_table_index = ntohl (mp->ip6_table_index);
- l2_table_index = ntohl (mp->l2_table_index);
- sw_if_index = ntohl (mp->sw_if_index);
-
- VALIDATE_SW_IF_INDEX (mp);
-
- rv = vnet_set_policer_classify_intfc (vm, sw_if_index, ip4_table_index,
- ip6_table_index, l2_table_index,
- mp->is_add);
-
- BAD_SW_IF_INDEX_LABEL;
-
- REPLY_MACRO (VL_API_POLICER_CLASSIFY_SET_INTERFACE_REPLY);
-}
-
-static void
-send_policer_classify_details (u32 sw_if_index,
- u32 table_index,
- unix_shared_memory_queue_t * q, u32 context)
-{
- vl_api_policer_classify_details_t *mp;
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- memset (mp, 0, sizeof (*mp));
- mp->_vl_msg_id = ntohs (VL_API_POLICER_CLASSIFY_DETAILS);
- mp->context = context;
- mp->sw_if_index = htonl (sw_if_index);
- mp->table_index = htonl (table_index);
-
- vl_msg_api_send_shmem (q, (u8 *) & mp);
-}
-
-static void
-vl_api_policer_classify_dump_t_handler (vl_api_policer_classify_dump_t * mp)
-{
- unix_shared_memory_queue_t *q;
- policer_classify_main_t *pcm = &policer_classify_main;
- u32 *vec_tbl;
- int i;
-
- q = vl_api_client_index_to_input_queue (mp->client_index);
- if (q == 0)
- return;
-
- vec_tbl = pcm->classify_table_index_by_sw_if_index[mp->type];
-
- if (vec_len (vec_tbl))
- {
- for (i = 0; i < vec_len (vec_tbl); i++)
- {
- if (vec_elt (vec_tbl, i) == ~0)
- continue;
-
- send_policer_classify_details (i, vec_elt (vec_tbl, i), q,
- mp->context);
- }
- }
-}
-
-static void
-vl_api_mpls_tunnel_details_t_handler (vl_api_mpls_fib_details_t * mp)
-{
- clib_warning ("BUG");
-}
-
-typedef struct mpls_tunnel_send_walk_ctx_t_
-{
- unix_shared_memory_queue_t *q;
- u32 index;
- u32 context;
-} mpls_tunnel_send_walk_ctx_t;
-
-static void
-send_mpls_tunnel_entry (u32 mti, void *arg)
-{
- mpls_tunnel_send_walk_ctx_t *ctx;
- vl_api_mpls_tunnel_details_t *mp;
- const mpls_tunnel_t *mt;
- u32 nlabels;
-
- ctx = arg;
-
- if (~0 != ctx->index && mti != ctx->index)
- return;
-
- mt = mpls_tunnel_get (mti);
- nlabels = vec_len (mt->mt_label_stack);
-
- mp = vl_msg_api_alloc (sizeof (*mp) + nlabels * sizeof (u32));
- memset (mp, 0, sizeof (*mp));
- mp->_vl_msg_id = ntohs (VL_API_MPLS_TUNNEL_DETAILS);
- mp->context = ctx->context;
-
- mp->tunnel_index = ntohl (mti);
- memcpy (mp->mt_next_hop_out_labels,
- mt->mt_label_stack, nlabels * sizeof (u32));
-
- // FIXME
-
- vl_msg_api_send_shmem (ctx->q, (u8 *) & mp);
-}
-
-static void
-vl_api_mpls_tunnel_dump_t_handler (vl_api_mpls_tunnel_dump_t * mp)
-{
- unix_shared_memory_queue_t *q;
-
- q = vl_api_client_index_to_input_queue (mp->client_index);
- if (q == 0)
- return;
-
- mpls_tunnel_send_walk_ctx_t ctx = {
- .q = q,
- .index = ntohl (mp->tunnel_index),
- .context = mp->context,
- };
- mpls_tunnel_walk (send_mpls_tunnel_entry, &ctx);
-}
-
-static void
-vl_api_mpls_fib_details_t_handler (vl_api_mpls_fib_details_t * mp)
-{
- clib_warning ("BUG");
-}
-
-static void
-vl_api_mpls_fib_details_t_endian (vl_api_mpls_fib_details_t * mp)
-{
- clib_warning ("BUG");
-}
-
-static void
-vl_api_mpls_fib_details_t_print (vl_api_mpls_fib_details_t * mp)
-{
- clib_warning ("BUG");
-}
-
-static void
-send_mpls_fib_details (vpe_api_main_t * am,
- unix_shared_memory_queue_t * q,
- u32 table_id, u32 label, u32 eos,
- fib_route_path_encode_t * api_rpaths, u32 context)
-{
- vl_api_mpls_fib_details_t *mp;
- fib_route_path_encode_t *api_rpath;
- vl_api_fib_path2_t *fp;
- int path_count;
-
- path_count = vec_len (api_rpaths);
- mp = vl_msg_api_alloc (sizeof (*mp) + path_count * sizeof (*fp));
- if (!mp)
- return;
- memset (mp, 0, sizeof (*mp));
- mp->_vl_msg_id = ntohs (VL_API_MPLS_FIB_DETAILS);
- mp->context = context;
-
- mp->table_id = htonl (table_id);
- mp->eos_bit = eos;
- mp->label = htonl (label);
-
- mp->count = htonl (path_count);
- fp = mp->path;
- vec_foreach (api_rpath, api_rpaths)
- {
- memset (fp, 0, sizeof (*fp));
- fp->weight = htonl (api_rpath->rpath.frp_weight);
- fp->sw_if_index = htonl (api_rpath->rpath.frp_sw_if_index);
- copy_fib_next_hop (api_rpath, fp);
- fp++;
- }
-
- vl_msg_api_send_shmem (q, (u8 *) & mp);
-}
-
-static void
-vl_api_mpls_fib_dump_t_handler (vl_api_mpls_fib_dump_t * mp)
-{
- vpe_api_main_t *am = &vpe_api_main;
- unix_shared_memory_queue_t *q;
- mpls_main_t *mm = &mpls_main;
- fib_table_t *fib_table;
- fib_node_index_t lfei, *lfeip, *lfeis = NULL;
- mpls_label_t key;
- fib_prefix_t pfx;
- u32 fib_index;
- fib_route_path_encode_t *api_rpaths;
-
- q = vl_api_client_index_to_input_queue (mp->client_index);
- if (q == 0)
- return;
-
- /* *INDENT-OFF* */
- pool_foreach (fib_table, mm->fibs,
- ({
- hash_foreach(key, lfei, fib_table->mpls.mf_entries,
- ({
- vec_add1(lfeis, lfei);
- }));
- }));
- vec_sort_with_function(lfeis, fib_entry_cmp_for_sort);
-
- vec_foreach(lfeip, lfeis)
- {
- fib_entry_get_prefix(*lfeip, &pfx);
- fib_index = fib_entry_get_fib_index(*lfeip);
- fib_table = fib_table_get(fib_index, pfx.fp_proto);
- api_rpaths = NULL;
- fib_entry_encode(*lfeip, &api_rpaths);
- send_mpls_fib_details (am, q,
- fib_table->ft_table_id,
- pfx.fp_label,
- pfx.fp_eos,
- api_rpaths,
- mp->context);
- vec_free(api_rpaths);
- }
-
- vec_free (lfeis);
-}
-
-static void
-vl_api_classify_table_ids_t_handler (vl_api_classify_table_ids_t * mp)
-{
- unix_shared_memory_queue_t *q;
-
- q = vl_api_client_index_to_input_queue (mp->client_index);
- if (q == 0)
- return;
-
- vnet_classify_main_t *cm = &vnet_classify_main;
- vnet_classify_table_t *t;
- u32 *table_ids = 0;
- u32 count;
-
- /* *INDENT-OFF* */
- pool_foreach (t, cm->tables,
- ({
- vec_add1 (table_ids, ntohl(t - cm->tables));
- }));
- /* *INDENT-ON* */
- count = vec_len (table_ids);
-
- vl_api_classify_table_ids_reply_t *rmp;
- rmp = vl_msg_api_alloc_as_if_client (sizeof (*rmp) + count * sizeof (u32));
- rmp->_vl_msg_id = ntohs (VL_API_CLASSIFY_TABLE_IDS_REPLY);
- rmp->context = mp->context;
- rmp->count = ntohl (count);
- clib_memcpy (rmp->ids, table_ids, count * sizeof (u32));
- rmp->retval = 0;
-
- vl_msg_api_send_shmem (q, (u8 *) & rmp);
-
- vec_free (table_ids);
-}
-
-static void
- vl_api_classify_table_by_interface_t_handler
- (vl_api_classify_table_by_interface_t * mp)
-{
- vl_api_classify_table_by_interface_reply_t *rmp;
- int rv = 0;
-
- u32 sw_if_index = ntohl (mp->sw_if_index);
- u32 *acl = 0;
-
- vec_validate (acl, INPUT_ACL_N_TABLES - 1);
- vec_set (acl, ~0);
-
- VALIDATE_SW_IF_INDEX (mp);
-
- input_acl_main_t *am = &input_acl_main;
-
- int if_idx;
- u32 type;
-
- for (type = 0; type < INPUT_ACL_N_TABLES; type++)
- {
- u32 *vec_tbl = am->classify_table_index_by_sw_if_index[type];
- if (vec_len (vec_tbl))
- {
- for (if_idx = 0; if_idx < vec_len (vec_tbl); if_idx++)
- {
- if (vec_elt (vec_tbl, if_idx) == ~0 || sw_if_index != if_idx)
- {
- continue;
- }
- acl[type] = vec_elt (vec_tbl, if_idx);
- }
- }
- }
-
- BAD_SW_IF_INDEX_LABEL;
-
- /* *INDENT-OFF* */
- REPLY_MACRO2(VL_API_CLASSIFY_TABLE_BY_INTERFACE_REPLY,
- ({
- rmp->sw_if_index = ntohl(sw_if_index);
- rmp->l2_table_id = ntohl(acl[INPUT_ACL_TABLE_L2]);
- rmp->ip4_table_id = ntohl(acl[INPUT_ACL_TABLE_IP4]);
- rmp->ip6_table_id = ntohl(acl[INPUT_ACL_TABLE_IP6]);
- }));
- /* *INDENT-ON* */
- vec_free (acl);
-}
-
-static void
-vl_api_classify_table_info_t_handler (vl_api_classify_table_info_t * mp)
-{
- unix_shared_memory_queue_t *q;
-
- q = vl_api_client_index_to_input_queue (mp->client_index);
- if (q == 0)
- return;
-
- vl_api_classify_table_info_reply_t *rmp = 0;
-
- vnet_classify_main_t *cm = &vnet_classify_main;
- u32 table_id = ntohl (mp->table_id);
- vnet_classify_table_t *t;
-
- /* *INDENT-OFF* */
- pool_foreach (t, cm->tables,
- ({
- if (table_id == t - cm->tables)
- {
- rmp = vl_msg_api_alloc_as_if_client
- (sizeof (*rmp) + t->match_n_vectors * sizeof (u32x4));
- rmp->_vl_msg_id = ntohs (VL_API_CLASSIFY_TABLE_INFO_REPLY);
- rmp->context = mp->context;
- rmp->table_id = ntohl(table_id);
- rmp->nbuckets = ntohl(t->nbuckets);
- rmp->match_n_vectors = ntohl(t->match_n_vectors);
- rmp->skip_n_vectors = ntohl(t->skip_n_vectors);
- rmp->active_sessions = ntohl(t->active_elements);
- rmp->next_table_index = ntohl(t->next_table_index);
- rmp->miss_next_index = ntohl(t->miss_next_index);
- rmp->mask_length = ntohl(t->match_n_vectors * sizeof (u32x4));
- clib_memcpy(rmp->mask, t->mask, t->match_n_vectors * sizeof(u32x4));
- rmp->retval = 0;
- break;
- }
- }));
- /* *INDENT-ON* */
-
- if (rmp == 0)
- {
- rmp = vl_msg_api_alloc (sizeof (*rmp));
- rmp->_vl_msg_id = ntohs ((VL_API_CLASSIFY_TABLE_INFO_REPLY));
- rmp->context = mp->context;
- rmp->retval = ntohl (VNET_API_ERROR_CLASSIFY_TABLE_NOT_FOUND);
- }
-
- vl_msg_api_send_shmem (q, (u8 *) & rmp);
-}
-
-static void
-vl_api_classify_session_details_t_handler (vl_api_classify_session_details_t *
- mp)
-{
- clib_warning ("BUG");
-}
-
-static void
-send_classify_session_details (unix_shared_memory_queue_t * q,
- u32 table_id,
- u32 match_length,
- vnet_classify_entry_t * e, u32 context)
-{
- vl_api_classify_session_details_t *rmp;
-
- rmp = vl_msg_api_alloc (sizeof (*rmp));
- memset (rmp, 0, sizeof (*rmp));
- rmp->_vl_msg_id = ntohs (VL_API_CLASSIFY_SESSION_DETAILS);
- rmp->context = context;
- rmp->table_id = ntohl (table_id);
- rmp->hit_next_index = ntohl (e->next_index);
- rmp->advance = ntohl (e->advance);
- rmp->opaque_index = ntohl (e->opaque_index);
- rmp->match_length = ntohl (match_length);
- clib_memcpy (rmp->match, e->key, match_length);
-
- vl_msg_api_send_shmem (q, (u8 *) & rmp);
-}
-
-static void
-vl_api_classify_session_dump_t_handler (vl_api_classify_session_dump_t * mp)
-{
- vnet_classify_main_t *cm = &vnet_classify_main;
- unix_shared_memory_queue_t *q;
-
- u32 table_id = ntohl (mp->table_id);
- vnet_classify_table_t *t;
-
- q = vl_api_client_index_to_input_queue (mp->client_index);
- if (!q)
- return;
-
- /* *INDENT-OFF* */
- pool_foreach (t, cm->tables,
- ({
- if (table_id == t - cm->tables)
- {
- vnet_classify_bucket_t * b;
- vnet_classify_entry_t * v, * save_v;
- int i, j, k;
-
- for (i = 0; i < t->nbuckets; i++)
- {
- b = &t->buckets [i];
- if (b->offset == 0)
- continue;
-
- save_v = vnet_classify_get_entry (t, b->offset);
- for (j = 0; j < (1<<b->log2_pages); j++)
- {
- for (k = 0; k < t->entries_per_page; k++)
- {
- v = vnet_classify_entry_at_index
- (t, save_v, j*t->entries_per_page + k);
- if (vnet_classify_entry_is_free (v))
- continue;
-
- send_classify_session_details
- (q, table_id, t->match_n_vectors * sizeof (u32x4),
- v, mp->context);
- }
- }
- }
- break;
- }
- }));
- /* *INDENT-ON* */
-}
-
-static void
-vl_api_set_ipfix_exporter_t_handler (vl_api_set_ipfix_exporter_t * mp)
-{
- vlib_main_t *vm = vlib_get_main ();
- flow_report_main_t *frm = &flow_report_main;
- vl_api_set_ipfix_exporter_reply_t *rmp;
- ip4_address_t collector, src;
- u16 collector_port = UDP_DST_PORT_ipfix;
- u32 path_mtu;
- u32 template_interval;
- u8 udp_checksum;
- u32 fib_id;
- u32 fib_index = ~0;
- int rv = 0;
-
- memcpy (collector.data, mp->collector_address, sizeof (collector.data));
- collector_port = ntohs (mp->collector_port);
- if (collector_port == (u16) ~ 0)
- collector_port = UDP_DST_PORT_ipfix;
- memcpy (src.data, mp->src_address, sizeof (src.data));
- fib_id = ntohl (mp->vrf_id);
-
- ip4_main_t *im = &ip4_main;
- if (fib_id == ~0)
- {
- fib_index = ~0;
- }
- else
- {
- uword *p = hash_get (im->fib_index_by_table_id, fib_id);
- if (!p)
- {
- rv = VNET_API_ERROR_NO_SUCH_FIB;
- goto out;
- }
- fib_index = p[0];
- }
-
- path_mtu = ntohl (mp->path_mtu);
- if (path_mtu == ~0)
- path_mtu = 512; // RFC 7011 section 10.3.3.
- template_interval = ntohl (mp->template_interval);
- if (template_interval == ~0)
- template_interval = 20;
- udp_checksum = mp->udp_checksum;
-
- if (collector.as_u32 == 0)
- {
- rv = VNET_API_ERROR_INVALID_VALUE;
- goto out;
- }
-
- if (src.as_u32 == 0)
- {
- rv = VNET_API_ERROR_INVALID_VALUE;
- goto out;
- }
-
- if (path_mtu > 1450 /* vpp does not support fragmentation */ )
- {
- rv = VNET_API_ERROR_INVALID_VALUE;
- goto out;
- }
-
- if (path_mtu < 68)
- {
- rv = VNET_API_ERROR_INVALID_VALUE;
- goto out;
- }
-
- /* Reset report streams if we are reconfiguring IP addresses */
- if (frm->ipfix_collector.as_u32 != collector.as_u32 ||
- frm->src_address.as_u32 != src.as_u32 ||
- frm->collector_port != collector_port)
- vnet_flow_reports_reset (frm);
-
- frm->ipfix_collector.as_u32 = collector.as_u32;
- frm->collector_port = collector_port;
- frm->src_address.as_u32 = src.as_u32;
- frm->fib_index = fib_index;
- frm->path_mtu = path_mtu;
- frm->template_interval = template_interval;
- frm->udp_checksum = udp_checksum;
-
- /* Turn on the flow reporting process */
- vlib_process_signal_event (vm, flow_report_process_node.index, 1, 0);
-
-out:
- REPLY_MACRO (VL_API_SET_IPFIX_EXPORTER_REPLY);
-}
-
-static void
-vl_api_ipfix_exporter_dump_t_handler (vl_api_ipfix_exporter_dump_t * mp)
-{
- flow_report_main_t *frm = &flow_report_main;
- unix_shared_memory_queue_t *q;
- vl_api_ipfix_exporter_details_t *rmp;
- ip4_main_t *im = &ip4_main;
- u32 vrf_id;
-
- q = vl_api_client_index_to_input_queue (mp->client_index);
- if (!q)
- return;
-
- rmp = vl_msg_api_alloc (sizeof (*rmp));
- memset (rmp, 0, sizeof (*rmp));
- rmp->_vl_msg_id = ntohs (VL_API_IPFIX_EXPORTER_DETAILS);
- rmp->context = mp->context;
- memcpy (rmp->collector_address, frm->ipfix_collector.data,
- sizeof (frm->ipfix_collector.data));
- rmp->collector_port = htons (frm->collector_port);
- memcpy (rmp->src_address, frm->src_address.data,
- sizeof (frm->src_address.data));
- if (frm->fib_index == ~0)
- vrf_id = ~0;
- else
- vrf_id = im->fibs[frm->fib_index].ft_table_id;
- rmp->vrf_id = htonl (vrf_id);
- rmp->path_mtu = htonl (frm->path_mtu);
- rmp->template_interval = htonl (frm->template_interval);
- rmp->udp_checksum = (frm->udp_checksum != 0);
-
- vl_msg_api_send_shmem (q, (u8 *) & rmp);
-}
-
-static void
- vl_api_set_ipfix_classify_stream_t_handler
- (vl_api_set_ipfix_classify_stream_t * mp)
-{
- vl_api_set_ipfix_classify_stream_reply_t *rmp;
- flow_report_classify_main_t *fcm = &flow_report_classify_main;
- flow_report_main_t *frm = &flow_report_main;
- u32 domain_id = 0;
- u32 src_port = UDP_DST_PORT_ipfix;
- int rv = 0;
-
- domain_id = ntohl (mp->domain_id);
- src_port = ntohs (mp->src_port);
-
- if (fcm->src_port != 0 &&
- (fcm->domain_id != domain_id || fcm->src_port != (u16) src_port))
- {
- int rv = vnet_stream_change (frm, fcm->domain_id, fcm->src_port,
- domain_id, (u16) src_port);
- ASSERT (rv == 0);
- }
-
- fcm->domain_id = domain_id;
- fcm->src_port = (u16) src_port;
-
- REPLY_MACRO (VL_API_SET_IPFIX_CLASSIFY_STREAM_REPLY);
-}
-
-static void
- vl_api_ipfix_classify_stream_dump_t_handler
- (vl_api_ipfix_classify_stream_dump_t * mp)
-{
- flow_report_classify_main_t *fcm = &flow_report_classify_main;
- unix_shared_memory_queue_t *q;
- vl_api_ipfix_classify_stream_details_t *rmp;
-
- q = vl_api_client_index_to_input_queue (mp->client_index);
- if (!q)
- return;
-
- rmp = vl_msg_api_alloc (sizeof (*rmp));
- memset (rmp, 0, sizeof (*rmp));
- rmp->_vl_msg_id = ntohs (VL_API_IPFIX_CLASSIFY_STREAM_DETAILS);
- rmp->context = mp->context;
- rmp->domain_id = htonl (fcm->domain_id);
- rmp->src_port = htons (fcm->src_port);
-
- vl_msg_api_send_shmem (q, (u8 *) & rmp);
-}
-
-static void
- vl_api_ipfix_classify_table_add_del_t_handler
- (vl_api_ipfix_classify_table_add_del_t * mp)
-{
- vl_api_ipfix_classify_table_add_del_reply_t *rmp;
- flow_report_classify_main_t *fcm = &flow_report_classify_main;
- flow_report_main_t *frm = &flow_report_main;
- vnet_flow_report_add_del_args_t args;
- ipfix_classify_table_t *table;
- int is_add;
- u32 classify_table_index;
- u8 ip_version;
- u8 transport_protocol;
- int rv = 0;
-
- classify_table_index = ntohl (mp->table_id);
- ip_version = mp->ip_version;
- transport_protocol = mp->transport_protocol;
- is_add = mp->is_add;
-
- if (fcm->src_port == 0)
- {
- /* call set_ipfix_classify_stream first */
- rv = VNET_API_ERROR_UNSPECIFIED;
- goto out;
- }
-
- memset (&args, 0, sizeof (args));
-
- table = 0;
- int i;
- for (i = 0; i < vec_len (fcm->tables); i++)
- if (ipfix_classify_table_index_valid (i))
- if (fcm->tables[i].classify_table_index == classify_table_index)
- {
- table = &fcm->tables[i];
- break;
- }
-
- if (is_add)
- {
- if (table)
- {
- rv = VNET_API_ERROR_VALUE_EXIST;
- goto out;
- }
- table = ipfix_classify_add_table ();
- table->classify_table_index = classify_table_index;
- }
- else
- {
- if (!table)
- {
- rv = VNET_API_ERROR_NO_SUCH_ENTRY;
- goto out;
- }
- }
-
- table->ip_version = ip_version;
- table->transport_protocol = transport_protocol;
-
- args.opaque.as_uword = table - fcm->tables;
- args.rewrite_callback = ipfix_classify_template_rewrite;
- args.flow_data_callback = ipfix_classify_send_flows;
- args.is_add = is_add;
- args.domain_id = fcm->domain_id;
- args.src_port = fcm->src_port;
-
- rv = vnet_flow_report_add_del (frm, &args);
-
- /* If deleting, or add failed */
- if (is_add == 0 || (rv && is_add))
- ipfix_classify_delete_table (table - fcm->tables);
-
-out:
- REPLY_MACRO (VL_API_SET_IPFIX_CLASSIFY_STREAM_REPLY);
-}
-
-static void
-send_ipfix_classify_table_details (u32 table_index,
- unix_shared_memory_queue_t * q,
- u32 context)
-{
- flow_report_classify_main_t *fcm = &flow_report_classify_main;
- vl_api_ipfix_classify_table_details_t *mp;
-
- ipfix_classify_table_t *table = &fcm->tables[table_index];
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- memset (mp, 0, sizeof (*mp));
- mp->_vl_msg_id = ntohs (VL_API_IPFIX_CLASSIFY_TABLE_DETAILS);
- mp->context = context;
- mp->table_id = htonl (table->classify_table_index);
- mp->ip_version = table->ip_version;
- mp->transport_protocol = table->transport_protocol;
-
- vl_msg_api_send_shmem (q, (u8 *) & mp);
-}
-
-static void
- vl_api_ipfix_classify_table_dump_t_handler
- (vl_api_ipfix_classify_table_dump_t * mp)
-{
- flow_report_classify_main_t *fcm = &flow_report_classify_main;
- unix_shared_memory_queue_t *q;
- u32 i;
-
- q = vl_api_client_index_to_input_queue (mp->client_index);
- if (!q)
- return;
-
- for (i = 0; i < vec_len (fcm->tables); i++)
- if (ipfix_classify_table_index_valid (i))
- send_ipfix_classify_table_details (i, q, mp->context);
-}
-
-static void
-vl_api_pg_create_interface_t_handler (vl_api_pg_create_interface_t * mp)
-{
- vl_api_pg_create_interface_reply_t *rmp;
- int rv = 0;
-
- pg_main_t *pg = &pg_main;
- u32 pg_if_id = pg_interface_add_or_get (pg, ntohl (mp->interface_id));
- pg_interface_t *pi = pool_elt_at_index (pg->interfaces, pg_if_id);
-
- /* *INDENT-OFF* */
- REPLY_MACRO2(VL_API_PG_CREATE_INTERFACE_REPLY,
- ({
- rmp->sw_if_index = ntohl(pi->sw_if_index);
- }));
- /* *INDENT-ON* */
-}
-
-static void
-vl_api_pg_capture_t_handler (vl_api_pg_capture_t * mp)
-{
- vl_api_pg_capture_reply_t *rmp;
- int rv = 0;
-
- vnet_main_t *vnm = vnet_get_main ();
- vnet_interface_main_t *im = &vnm->interface_main;
- vnet_hw_interface_t *hi = 0;
-
- u8 *intf_name = format (0, "pg%d", ntohl (mp->interface_id), 0);
- u32 hw_if_index = ~0;
- uword *p = hash_get_mem (im->hw_interface_by_name, intf_name);
- if (p)
- hw_if_index = *p;
- vec_free (intf_name);
-
- if (hw_if_index != ~0)
- {
- pg_capture_args_t _a, *a = &_a;
-
- u32 len = ntohl (mp->pcap_name_length);
- u8 *pcap_file_name = vec_new (u8, len);
- clib_memcpy (pcap_file_name, mp->pcap_file_name, len);
-
- hi = vnet_get_sup_hw_interface (vnm, hw_if_index);
- a->hw_if_index = hw_if_index;
- a->dev_instance = hi->dev_instance;
- a->is_enabled = mp->is_enabled;
- a->pcap_file_name = pcap_file_name;
- a->count = ntohl (mp->count);
-
- clib_error_t *e = pg_capture (a);
- if (e)
- {
- clib_error_report (e);
- rv = VNET_API_ERROR_CANNOT_CREATE_PCAP_FILE;
- }
-
- vec_free (pcap_file_name);
- }
- REPLY_MACRO (VL_API_PG_CAPTURE_REPLY);
-}
-
-static void
-vl_api_pg_enable_disable_t_handler (vl_api_pg_enable_disable_t * mp)
-{
- vl_api_pg_enable_disable_reply_t *rmp;
- int rv = 0;
-
- pg_main_t *pg = &pg_main;
- u32 stream_index = ~0;
-
- int is_enable = mp->is_enabled != 0;
- u32 len = ntohl (mp->stream_name_length) - 1;
-
- if (len > 0)
- {
- u8 *stream_name = vec_new (u8, len);
- clib_memcpy (stream_name, mp->stream_name, len);
- uword *p = hash_get_mem (pg->stream_index_by_name, stream_name);
- if (p)
- stream_index = *p;
- vec_free (stream_name);
- }
-
- pg_enable_disable (stream_index, is_enable);
-
- REPLY_MACRO (VL_API_PG_ENABLE_DISABLE_REPLY);
-}
-
-static void
- vl_api_ip_source_and_port_range_check_add_del_t_handler
- (vl_api_ip_source_and_port_range_check_add_del_t * mp)
-{
- vl_api_ip_source_and_port_range_check_add_del_reply_t *rmp;
- int rv = 0;
-
- u8 is_ipv6 = mp->is_ipv6;
- u8 is_add = mp->is_add;
- u8 mask_length = mp->mask_length;
- ip4_address_t ip4_addr;
- ip6_address_t ip6_addr;
- u16 *low_ports = 0;
- u16 *high_ports = 0;
- u32 vrf_id;
- u16 tmp_low, tmp_high;
- u8 num_ranges;
- int i;
-
- // Validate port range
- num_ranges = mp->number_of_ranges;
- if (num_ranges > 32)
- { // This is size of array in VPE.API
- rv = VNET_API_ERROR_EXCEEDED_NUMBER_OF_RANGES_CAPACITY;
- goto reply;
- }
-
- vec_reset_length (low_ports);
- vec_reset_length (high_ports);
-
- for (i = 0; i < num_ranges; i++)
- {
- tmp_low = mp->low_ports[i];
- tmp_high = mp->high_ports[i];
- // If tmp_low <= tmp_high then only need to check tmp_low = 0
- // If tmp_low <= tmp_high then only need to check tmp_high > 65535
- if (tmp_low > tmp_high || tmp_low == 0 || tmp_high > 65535)
- {
- rv = VNET_API_ERROR_INVALID_VALUE;
- goto reply;
- }
- vec_add1 (low_ports, tmp_low);
- vec_add1 (high_ports, tmp_high + 1);
- }
-
- // Validate mask_length
- if ((is_ipv6 && mask_length > 128) || (!is_ipv6 && mask_length > 32))
- {
- rv = VNET_API_ERROR_ADDRESS_LENGTH_MISMATCH;
- goto reply;
- }
-
- vrf_id = ntohl (mp->vrf_id);
-
- if (vrf_id < 1)
- {
- rv = VNET_API_ERROR_INVALID_VALUE;
- goto reply;
- }
-
-
- if (is_ipv6)
- {
- clib_memcpy (ip6_addr.as_u8, mp->address, sizeof (ip6_addr.as_u8));
- rv = ip6_source_and_port_range_check_add_del (&ip6_addr,
- mask_length,
- vrf_id,
- low_ports,
- high_ports, is_add);
- }
- else
- {
- clib_memcpy (ip4_addr.data, mp->address, sizeof (ip4_addr));
- rv = ip4_source_and_port_range_check_add_del (&ip4_addr,
- mask_length,
- vrf_id,
- low_ports,
- high_ports, is_add);
- }
-
-reply:
- vec_free (low_ports);
- vec_free (high_ports);
- REPLY_MACRO (VL_API_IP_SOURCE_AND_PORT_RANGE_CHECK_ADD_DEL_REPLY);
-}
-
-static void
- vl_api_ip_source_and_port_range_check_interface_add_del_t_handler
- (vl_api_ip_source_and_port_range_check_interface_add_del_t * mp)
-{
- vlib_main_t *vm = vlib_get_main ();
- vl_api_ip_source_and_port_range_check_interface_add_del_reply_t *rmp;
- ip4_main_t *im = &ip4_main;
- int rv;
- u32 sw_if_index;
- u32 fib_index[IP_SOURCE_AND_PORT_RANGE_CHECK_N_PROTOCOLS];
- u32 vrf_id[IP_SOURCE_AND_PORT_RANGE_CHECK_N_PROTOCOLS];
- uword *p = 0;
- int i;
-
- vrf_id[IP_SOURCE_AND_PORT_RANGE_CHECK_PROTOCOL_TCP_OUT] =
- ntohl (mp->tcp_out_vrf_id);
- vrf_id[IP_SOURCE_AND_PORT_RANGE_CHECK_PROTOCOL_UDP_OUT] =
- ntohl (mp->udp_out_vrf_id);
- vrf_id[IP_SOURCE_AND_PORT_RANGE_CHECK_PROTOCOL_TCP_IN] =
- ntohl (mp->tcp_in_vrf_id);
- vrf_id[IP_SOURCE_AND_PORT_RANGE_CHECK_PROTOCOL_UDP_IN] =
- ntohl (mp->udp_in_vrf_id);
-
-
- for (i = 0; i < IP_SOURCE_AND_PORT_RANGE_CHECK_N_PROTOCOLS; i++)
- {
- if (vrf_id[i] != 0 && vrf_id[i] != ~0)
- {
- p = hash_get (im->fib_index_by_table_id, vrf_id[i]);
-
- if (p == 0)
- {
- rv = VNET_API_ERROR_INVALID_VALUE;
- goto reply;
- }
-
- fib_index[i] = p[0];
- }
- else
- fib_index[i] = ~0;
- }
- sw_if_index = ntohl (mp->sw_if_index);
-
- VALIDATE_SW_IF_INDEX (mp);
-
- rv =
- set_ip_source_and_port_range_check (vm, fib_index, sw_if_index,
- mp->is_add);
-
- BAD_SW_IF_INDEX_LABEL;
-reply:
-
- REPLY_MACRO (VL_API_IP_SOURCE_AND_PORT_RANGE_CHECK_INTERFACE_ADD_DEL_REPLY);
-}
-
-static void
-vl_api_delete_subif_t_handler (vl_api_delete_subif_t * mp)
-{
- vl_api_delete_subif_reply_t *rmp;
- int rv;
-
- rv = vnet_delete_sub_interface (ntohl (mp->sw_if_index));
-
- REPLY_MACRO (VL_API_DELETE_SUBIF_REPLY);
-}
-
-static void
- vl_api_l2_interface_pbb_tag_rewrite_t_handler
- (vl_api_l2_interface_pbb_tag_rewrite_t * mp)
-{
- vl_api_l2_interface_pbb_tag_rewrite_reply_t *rmp;
- vnet_main_t *vnm = vnet_get_main ();
- vlib_main_t *vm = vlib_get_main ();
- u32 vtr_op;
- int rv = 0;
-
- VALIDATE_SW_IF_INDEX (mp);
-
- vtr_op = ntohl (mp->vtr_op);
-
- switch (vtr_op)
- {
- case L2_VTR_DISABLED:
- case L2_VTR_PUSH_2:
- case L2_VTR_POP_2:
- case L2_VTR_TRANSLATE_2_1:
- break;
-
- default:
- rv = VNET_API_ERROR_INVALID_VALUE;
- goto bad_sw_if_index;
- }
-
- rv = l2pbb_configure (vm, vnm, ntohl (mp->sw_if_index), vtr_op,
- mp->b_dmac, mp->b_smac, ntohs (mp->b_vlanid),
- ntohl (mp->i_sid), ntohs (mp->outer_tag));
-
- BAD_SW_IF_INDEX_LABEL;
-
- REPLY_MACRO (VL_API_L2_INTERFACE_PBB_TAG_REWRITE_REPLY);
-
-}
-
-static void
-vl_api_punt_t_handler (vl_api_punt_t * mp)
-{
- vl_api_punt_reply_t *rmp;
- vlib_main_t *vm = vlib_get_main ();
- int rv = 0;
- clib_error_t *error;
-
- error = vnet_punt_add_del (vm, mp->ipv, mp->l4_protocol,
- ntohs (mp->l4_port), mp->is_add);
- if (error)
- {
- rv = -1;
- clib_error_report (error);
- }
-
- REPLY_MACRO (VL_API_PUNT_REPLY);
-}
-
-static void
- vl_api_flow_classify_set_interface_t_handler
- (vl_api_flow_classify_set_interface_t * mp)
-{
- vlib_main_t *vm = vlib_get_main ();
- vl_api_flow_classify_set_interface_reply_t *rmp;
- int rv;
- u32 sw_if_index, ip4_table_index, ip6_table_index;
-
- ip4_table_index = ntohl (mp->ip4_table_index);
- ip6_table_index = ntohl (mp->ip6_table_index);
- sw_if_index = ntohl (mp->sw_if_index);
-
- VALIDATE_SW_IF_INDEX (mp);
-
- rv = vnet_set_flow_classify_intfc (vm, sw_if_index, ip4_table_index,
- ip6_table_index, mp->is_add);
-
- BAD_SW_IF_INDEX_LABEL;
-
- REPLY_MACRO (VL_API_FLOW_CLASSIFY_SET_INTERFACE_REPLY);
-}
-
-static void
-send_flow_classify_details (u32 sw_if_index,
- u32 table_index,
- unix_shared_memory_queue_t * q, u32 context)
-{
- vl_api_flow_classify_details_t *mp;
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- memset (mp, 0, sizeof (*mp));
- mp->_vl_msg_id = ntohs (VL_API_FLOW_CLASSIFY_DETAILS);
- mp->context = context;
- mp->sw_if_index = htonl (sw_if_index);
- mp->table_index = htonl (table_index);
-
- vl_msg_api_send_shmem (q, (u8 *) & mp);
-}
-
-static void
-vl_api_flow_classify_dump_t_handler (vl_api_flow_classify_dump_t * mp)
-{
- unix_shared_memory_queue_t *q;
- flow_classify_main_t *pcm = &flow_classify_main;
- u32 *vec_tbl;
- int i;
-
- q = vl_api_client_index_to_input_queue (mp->client_index);
- if (q == 0)
- return;
-
- vec_tbl = pcm->classify_table_index_by_sw_if_index[mp->type];
-
- if (vec_len (vec_tbl))
- {
- for (i = 0; i < vec_len (vec_tbl); i++)
- {
- if (vec_elt (vec_tbl, i) == ~0)
- continue;
-
- send_flow_classify_details (i, vec_elt (vec_tbl, i), q,
- mp->context);
- }
- }
-}
-
-static void
-vl_api_feature_enable_disable_t_handler (vl_api_feature_enable_disable_t * mp)
-{
- vl_api_feature_enable_disable_reply_t *rmp;
- int rv = 0;
- u8 *arc_name, *feature_name;
-
- VALIDATE_SW_IF_INDEX (mp);
-
- arc_name = format (0, "%s%c", mp->arc_name, 0);
- feature_name = format (0, "%s%c", mp->feature_name, 0);
-
- vnet_feature_registration_t *reg;
- reg =
- vnet_get_feature_reg ((const char *) arc_name,
- (const char *) feature_name);
- if (reg == 0)
- rv = VNET_API_ERROR_INVALID_VALUE;
- else
- {
- u32 sw_if_index;
- clib_error_t *error = 0;
-
- sw_if_index = ntohl (mp->sw_if_index);
- if (reg->enable_disable_cb)
- error = reg->enable_disable_cb (sw_if_index, mp->enable);
- if (!error)
- vnet_feature_enable_disable ((const char *) arc_name,
- (const char *) feature_name,
- sw_if_index, mp->enable, 0, 0);
- else
- {
- clib_error_report (error);
- rv = VNET_API_ERROR_CANNOT_ENABLE_DISABLE_FEATURE;
- }
- }
-
- vec_free (feature_name);
- vec_free (arc_name);
-
- BAD_SW_IF_INDEX_LABEL;
-
- REPLY_MACRO (VL_API_FEATURE_ENABLE_DISABLE_REPLY);
-}
-
-#define BOUNCE_HANDLER(nn) \
-static void vl_api_##nn##_t_handler ( \
- vl_api_##nn##_t *mp) \
-{ \
- vpe_client_registration_t *reg; \
- vpe_api_main_t * vam = &vpe_api_main; \
- unix_shared_memory_queue_t * q; \
- \
- /* One registration only... */ \
- pool_foreach(reg, vam->nn##_registrations, \
- ({ \
- q = vl_api_client_index_to_input_queue (reg->client_index); \
- if (q) { \
- /* \
- * If the queue is stuffed, turf the msg and complain \
- * It's unlikely that the intended recipient is \
- * alive; avoid deadlock at all costs. \
- */ \
- if (q->cursize == q->maxsize) { \
- clib_warning ("ERROR: receiver queue full, drop msg"); \
- vl_msg_api_free (mp); \
- return; \
- } \
- vl_msg_api_send_shmem (q, (u8 *)&mp); \
- return; \
- } \
- })); \
- vl_msg_api_free (mp); \
-}
-
-static void setup_message_id_table (api_main_t * am);
-
-/*
- * vpe_api_hookup
- * Add vpe's API message handlers to the table.
- * vlib has alread mapped shared memory and
- * added the client registration handlers.
- * See .../open-repo/vlib/memclnt_vlib.c:memclnt_process()
- */
-static clib_error_t *
-vpe_api_hookup (vlib_main_t * vm)
-{
- api_main_t *am = &api_main;
-
-#define _(N,n) \
- vl_msg_api_set_handlers(VL_API_##N, #n, \
- vl_api_##n##_t_handler, \
- vl_noop_handler, \
- vl_api_##n##_t_endian, \
- vl_api_##n##_t_print, \
- sizeof(vl_api_##n##_t), 1);
- foreach_vpe_api_msg;
-#undef _
-
- /*
- * Manually register the sr tunnel add del msg, so we trace
- * enough bytes to capture a typical segment list
- */
- vl_msg_api_set_handlers (VL_API_SR_TUNNEL_ADD_DEL,
- "sr_tunnel_add_del",
- vl_api_sr_tunnel_add_del_t_handler,
- vl_noop_handler,
- vl_api_sr_tunnel_add_del_t_endian,
- vl_api_sr_tunnel_add_del_t_print, 256, 1);
-
-
- /*
- * Manually register the sr policy add del msg, so we trace
- * enough bytes to capture a typical tunnel name list
- */
- vl_msg_api_set_handlers (VL_API_SR_POLICY_ADD_DEL,
- "sr_policy_add_del",
- vl_api_sr_policy_add_del_t_handler,
- vl_noop_handler,
- vl_api_sr_policy_add_del_t_endian,
- vl_api_sr_policy_add_del_t_print, 256, 1);
-
- /*
- * Trace space for 8 MPLS encap labels, classifier mask+match
- */
- am->api_trace_cfg[VL_API_MPLS_TUNNEL_ADD_DEL].size += 8 * sizeof (u32);
- am->api_trace_cfg[VL_API_CLASSIFY_ADD_DEL_TABLE].size += 5 * sizeof (u32x4);
- am->api_trace_cfg[VL_API_CLASSIFY_ADD_DEL_SESSION].size
- += 5 * sizeof (u32x4);
- am->api_trace_cfg[VL_API_VXLAN_ADD_DEL_TUNNEL].size += 16 * sizeof (u32);
-
- /*
- * Thread-safe API messages
- */
- am->is_mp_safe[VL_API_IP_ADD_DEL_ROUTE] = 1;
- am->is_mp_safe[VL_API_GET_NODE_GRAPH] = 1;
-
- /*
- * Set up the (msg_name, crc, message-id) table
- */
- setup_message_id_table (am);
-
- return 0;
-}
-
-VLIB_API_INIT_FUNCTION (vpe_api_hookup);
-
-static clib_error_t *
-vpe_api_init (vlib_main_t * vm)
-{
- vpe_api_main_t *am = &vpe_api_main;
-
- am->vlib_main = vm;
- am->vnet_main = vnet_get_main ();
- am->interface_events_registration_hash = hash_create (0, sizeof (uword));
- am->to_netconf_server_registration_hash = hash_create (0, sizeof (uword));
- am->from_netconf_server_registration_hash = hash_create (0, sizeof (uword));
- am->to_netconf_client_registration_hash = hash_create (0, sizeof (uword));
- am->from_netconf_client_registration_hash = hash_create (0, sizeof (uword));
- am->oam_events_registration_hash = hash_create (0, sizeof (uword));
- am->bfd_events_registration_hash = hash_create (0, sizeof (uword));
-
- vl_api_init (vm);
- vl_set_memory_region_name ("/vpe-api");
- vl_enable_disable_memory_api (vm, 1 /* enable it */ );
-
- return 0;
-}
-
-VLIB_INIT_FUNCTION (vpe_api_init);
-
-
-static clib_error_t *
-api_segment_config (vlib_main_t * vm, unformat_input_t * input)
-{
- u8 *chroot_path;
- u64 baseva, size, pvt_heap_size;
- int uid, gid, rv;
- const int max_buf_size = 4096;
- char *s, *buf;
- struct passwd _pw, *pw;
- struct group _grp, *grp;
- clib_error_t *e;
- buf = vec_new (char, 128);
- while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
- {
- if (unformat (input, "prefix %s", &chroot_path))
- {
- vec_add1 (chroot_path, 0);
- vl_set_memory_root_path ((char *) chroot_path);
- }
- else if (unformat (input, "uid %d", &uid))
- vl_set_memory_uid (uid);
- else if (unformat (input, "gid %d", &gid))
- vl_set_memory_gid (gid);
- else if (unformat (input, "baseva %llx", &baseva))
- vl_set_global_memory_baseva (baseva);
- else if (unformat (input, "global-size %lldM", &size))
- vl_set_global_memory_size (size * (1ULL << 20));
- else if (unformat (input, "global-size %lldG", &size))
- vl_set_global_memory_size (size * (1ULL << 30));
- else if (unformat (input, "global-size %lld", &size))
- vl_set_global_memory_size (size);
- else if (unformat (input, "global-pvt-heap-size %lldM", &pvt_heap_size))
- vl_set_global_pvt_heap_size (pvt_heap_size * (1ULL << 20));
- else if (unformat (input, "global-pvt-heap-size size %lld",
- &pvt_heap_size))
- vl_set_global_pvt_heap_size (pvt_heap_size);
- else if (unformat (input, "api-pvt-heap-size %lldM", &pvt_heap_size))
- vl_set_api_pvt_heap_size (pvt_heap_size * (1ULL << 20));
- else if (unformat (input, "api-pvt-heap-size size %lld",
- &pvt_heap_size))
- vl_set_api_pvt_heap_size (pvt_heap_size);
- else if (unformat (input, "api-size %lldM", &size))
- vl_set_api_memory_size (size * (1ULL << 20));
- else if (unformat (input, "api-size %lldG", &size))
- vl_set_api_memory_size (size * (1ULL << 30));
- else if (unformat (input, "api-size %lld", &size))
- vl_set_api_memory_size (size);
- else if (unformat (input, "uid %s", &s))
- {
- /* lookup the username */
- pw = NULL;
- while (((rv =
- getpwnam_r (s, &_pw, buf, vec_len (buf), &pw)) == ERANGE)
- && (vec_len (buf) <= max_buf_size))
- {
- vec_resize (buf, vec_len (buf) * 2);
- }
- if (rv < 0)
- {
- e = clib_error_return_code (0, rv,
- CLIB_ERROR_ERRNO_VALID |
- CLIB_ERROR_FATAL,
- "cannot fetch username %s", s);
- vec_free (s);
- vec_free (buf);
- return e;
- }
- if (pw == NULL)
- {
- e =
- clib_error_return_fatal (0, "username %s does not exist", s);
- vec_free (s);
- vec_free (buf);
- return e;
- }
- vec_free (s);
- vl_set_memory_uid (pw->pw_uid);
- }
- else if (unformat (input, "gid %s", &s))
- {
- /* lookup the group name */
- grp = NULL;
- while (((rv =
- getgrnam_r (s, &_grp, buf, vec_len (buf), &grp)) == ERANGE)
- && (vec_len (buf) <= max_buf_size))
- {
- vec_resize (buf, vec_len (buf) * 2);
- }
- if (rv != 0)
- {
- e = clib_error_return_code (0, rv,
- CLIB_ERROR_ERRNO_VALID |
- CLIB_ERROR_FATAL,
- "cannot fetch group %s", s);
- vec_free (s);
- vec_free (buf);
- return e;
- }
- if (grp == NULL)
- {
- e = clib_error_return_fatal (0, "group %s does not exist", s);
- vec_free (s);
- vec_free (buf);
- return e;
- }
- vec_free (s);
- vec_free (buf);
- vl_set_memory_gid (grp->gr_gid);
- }
- else
- return clib_error_return (0, "unknown input `%U'",
- format_unformat_error, input);
- }
- return 0;
-}
-
-VLIB_EARLY_CONFIG_FUNCTION (api_segment_config, "api-segment");
-
-void *
-get_unformat_vnet_sw_interface (void)
-{
- return (void *) &unformat_vnet_sw_interface;
-}
-
-static u8 *
-format_arp_event (u8 * s, va_list * args)
-{
- vl_api_ip4_arp_event_t *event = va_arg (*args, vl_api_ip4_arp_event_t *);
-
- s = format (s, "pid %d: ", event->pid);
- if (event->mac_ip)
- s = format (s, "bd mac/ip4 binding events");
- else
- s = format (s, "resolution for %U", format_ip4_address, &event->address);
- return s;
-}
-
-static u8 *
-format_nd_event (u8 * s, va_list * args)
-{
- vl_api_ip6_nd_event_t *event = va_arg (*args, vl_api_ip6_nd_event_t *);
-
- s = format (s, "pid %d: ", event->pid);
- if (event->mac_ip)
- s = format (s, "bd mac/ip6 binding events");
- else
- s = format (s, "resolution for %U", format_ip6_address, event->address);
- return s;
-}
-
-static clib_error_t *
-show_ip_arp_nd_events_fn (vlib_main_t * vm,
- unformat_input_t * input, vlib_cli_command_t * cmd)
-{
- vpe_api_main_t *am = &vpe_api_main;
- vl_api_ip4_arp_event_t *arp_event;
- vl_api_ip6_nd_event_t *nd_event;
-
- if ((pool_elts (am->arp_events) == 0) && (pool_elts (am->nd_events) == 0))
- {
- vlib_cli_output (vm, "No active arp or nd event registrations");
- return 0;
- }
-
- /* *INDENT-OFF* */
- pool_foreach (arp_event, am->arp_events,
- ({
- vlib_cli_output (vm, "%U", format_arp_event, arp_event);
- }));
-
- pool_foreach (nd_event, am->nd_events,
- ({
- vlib_cli_output (vm, "%U", format_nd_event, nd_event);
- }));
- /* *INDENT-ON* */
-
- return 0;
-}
-
-/* *INDENT-OFF* */
-VLIB_CLI_COMMAND (show_ip_arp_nd_events, static) = {
- .path = "show arp-nd-event registrations",
- .function = show_ip_arp_nd_events_fn,
- .short_help = "Show ip4 arp and ip6 nd event registrations",
-};
-/* *INDENT-ON* */
-
-#define vl_msg_name_crc_list
-#include <vpp-api/vpe_all_api_h.h>
-#undef vl_msg_name_crc_list
-
-static void
-setup_message_id_table (api_main_t * am)
-{
-#define _(id,n,crc) vl_msg_api_add_msg_name_crc (am, #n "_" #crc, id);
- foreach_vl_msg_name_crc_memclnt;
- foreach_vl_msg_name_crc_vpe;
-#undef _
-}
-
-
-/*
- * fd.io coding-style-patch-verification: ON
- *
- * Local Variables:
- * eval: (c-set-style "gnu")
- * End:
- */
diff --git a/vpp/vpp-api/api_format.c b/vpp/vpp-api/api_format.c
deleted file mode 120000
index f37e6575b2d..00000000000
--- a/vpp/vpp-api/api_format.c
+++ /dev/null
@@ -1 +0,0 @@
-../../vpp-api-test/vat/api_format.c \ No newline at end of file
diff --git a/vpp/vpp-api/api_main.c b/vpp/vpp-api/api_main.c
deleted file mode 100644
index db532061484..00000000000
--- a/vpp/vpp-api/api_main.c
+++ /dev/null
@@ -1,192 +0,0 @@
-#include "vat.h"
-
-vat_main_t vat_main;
-
-void
-vat_suspend (vlib_main_t * vm, f64 interval)
-{
- vlib_process_suspend (vm, interval);
-}
-
-static u8 *
-format_api_error (u8 * s, va_list * args)
-{
- vat_main_t *vam = va_arg (*args, vat_main_t *);
- i32 error = va_arg (*args, u32);
- uword *p;
-
- p = hash_get (vam->error_string_by_error_number, -error);
-
- if (p)
- s = format (s, "%s", p[0]);
- else
- s = format (s, "%d", error);
- return s;
-}
-
-
-static void
-init_error_string_table (vat_main_t * vam)
-{
-
- vam->error_string_by_error_number = hash_create (0, sizeof (uword));
-
-#define _(n,v,s) hash_set (vam->error_string_by_error_number, -v, s);
- foreach_vnet_api_error;
-#undef _
-
- hash_set (vam->error_string_by_error_number, 99, "Misc");
-}
-
-static clib_error_t *
-api_main_init (vlib_main_t * vm)
-{
- vat_main_t *vam = &vat_main;
-
- vam->vlib_main = vm;
- vam->my_client_index = (u32) ~ 0;
- init_error_string_table (vam);
- vat_api_hookup (vam);
- return 0;
-}
-
-VLIB_INIT_FUNCTION (api_main_init);
-
-static clib_error_t *
-api_command_fn (vlib_main_t * vm,
- unformat_input_t * input, vlib_cli_command_t * cmd)
-{
- vat_main_t *vam = &vat_main;
- unformat_input_t _input;
- uword c;
- u8 *cmdp, *argsp, *this_cmd;
- uword *p;
- u32 arg_len;
- int rv;
- int (*fp) (vat_main_t *);
- api_main_t *am = &api_main;
-
- vam->vl_input_queue = am->shmem_hdr->vl_input_queue;
-
- vec_reset_length (vam->inbuf);
- vam->input = &_input;
-
- while (((c = unformat_get_input (input)) != '\n') &&
- (c != UNFORMAT_END_OF_INPUT))
- vec_add1 (vam->inbuf, c);
-
- /* Add 1 octet's worth of extra space in case there are no args... */
- vec_add1 (vam->inbuf, 0);
-
- /*$$$$ reinstall macro evaluator */
-
- /* Split input into cmd + args */
- this_cmd = cmdp = vam->inbuf;
-
- while (cmdp < (this_cmd + vec_len (this_cmd)))
- {
- if (*cmdp == ' ' || *cmdp == '\t' || *cmdp == '\n')
- {
- cmdp++;
- }
- else
- break;
- }
-
- argsp = cmdp;
- while (argsp < (this_cmd + vec_len (this_cmd)))
- {
- if (*argsp != ' ' && *argsp != '\t' && *argsp != '\n')
- {
- argsp++;
- }
- else
- break;
- }
- *argsp++ = 0;
-
- while (argsp < (this_cmd + vec_len (this_cmd)))
- {
- if (*argsp == ' ' || *argsp == '\t' || *argsp == '\n')
- {
- argsp++;
- }
- else
- break;
- }
-
- /* Blank input line? */
- if (*cmdp == 0)
- return 0;
-
- p = hash_get_mem (vam->function_by_name, cmdp);
- if (p == 0)
- {
- return clib_error_return (0, "'%s': function not found\n", cmdp);
- }
-
- arg_len = strlen ((char *) argsp);
-
- unformat_init_string (vam->input, (char *) argsp, arg_len);
- fp = (void *) p[0];
-
- rv = (*fp) (vam);
-
- if (rv < 0)
- {
- unformat_free (vam->input);
- return clib_error_return (0,
- "%s error: %U\n", cmdp,
- format_api_error, vam, rv);
-
- if (vam->regenerate_interface_table)
- {
- vam->regenerate_interface_table = 0;
- api_sw_interface_dump (vam);
- }
- }
- unformat_free (vam->input);
- return 0;
-}
-
-/* *INDENT-OFF* */
-VLIB_CLI_COMMAND (api_command, static) =
-{
- .path = "binary-api",
- .short_help = "binary-api <name> [<args>]",
- .function = api_command_fn,
-};
-/* *INDENT-ON* */
-
-void
-api_cli_output (void *notused, const char *fmt, ...)
-{
- va_list va;
- vat_main_t *vam = &vat_main;
- vlib_main_t *vm = vam->vlib_main;
- vlib_process_t *cp = vlib_get_current_process (vm);
- u8 *s;
-
- va_start (va, fmt);
- s = va_format (0, fmt, &va);
- va_end (va);
-
- /* Terminate with \n if not present. */
- if (vec_len (s) > 0 && s[vec_len (s) - 1] != '\n')
- vec_add1 (s, '\n');
-
- if ((!cp) || (!cp->output_function))
- fformat (stdout, "%v", s);
- else
- cp->output_function (cp->output_function_arg, s, vec_len (s));
-
- vec_free (s);
-}
-
-/*
- * fd.io coding-style-patch-verification: ON
- *
- * Local Variables:
- * eval: (c-set-style "gnu")
- * End:
- */
diff --git a/vpp/vpp-api/custom_dump.c b/vpp/vpp-api/custom_dump.c
deleted file mode 100644
index bfebf49fdd8..00000000000
--- a/vpp/vpp-api/custom_dump.c
+++ /dev/null
@@ -1,3139 +0,0 @@
-/*
- *------------------------------------------------------------------
- * custom_dump.c - pretty-print API messages for replay
- *
- * Copyright (c) 2014-2016 Cisco and/or its affiliates.
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *------------------------------------------------------------------
- */
-
-#include <vnet/vnet.h>
-#include <vnet/ip/ip.h>
-#include <vnet/unix/tuntap.h>
-#include <vnet/mpls/mpls.h>
-#include <vnet/dhcp/proxy.h>
-#include <vnet/dhcpv6/proxy.h>
-#include <vnet/l2tp/l2tp.h>
-#include <vnet/l2/l2_input.h>
-#include <vnet/sr/sr_packet.h>
-#include <vnet/vxlan-gpe/vxlan_gpe.h>
-#include <vnet/classify/policer_classify.h>
-#include <vnet/policer/xlate.h>
-#include <vnet/policer/policer.h>
-#include <vnet/classify/flow_classify.h>
-#include <vlib/vlib.h>
-#include <vlib/unix/unix.h>
-#include <vlibapi/api.h>
-#include <vlibmemory/api.h>
-#include <vnet/lisp-cp/lisp_types.h>
-
-#include <stats/stats.h>
-#include <oam/oam.h>
-
-#include <vnet/ethernet/ethernet.h>
-#include <vnet/l2/l2_vtr.h>
-
-#include <vpp-api/vpe_msg_enum.h>
-
-#define vl_typedefs /* define message structures */
-#include <vpp-api/vpe_all_api_h.h>
-#undef vl_typedefs
-
-#define vl_endianfun /* define message structures */
-#include <vpp-api/vpe_all_api_h.h>
-#undef vl_endianfun
-
-#define vl_print(handle, ...) vlib_cli_output (handle, __VA_ARGS__)
-
-#define FINISH \
- vec_add1 (s, 0); \
- vl_print (handle, (char *)s); \
- vec_free (s); \
- return handle;
-
-
-static void *vl_api_create_loopback_t_print
- (vl_api_create_loopback_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: create_loopback ");
- s = format (s, "mac %U ", format_ethernet_address, &mp->mac_address);
-
- FINISH;
-}
-
-static void *vl_api_delete_loopback_t_print
- (vl_api_delete_loopback_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: delete_loopback ");
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
-
- FINISH;
-}
-
-static void *vl_api_sw_interface_set_flags_t_print
- (vl_api_sw_interface_set_flags_t * mp, void *handle)
-{
- u8 *s;
- s = format (0, "SCRIPT: sw_interface_set_flags ");
-
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
-
- if (mp->admin_up_down)
- s = format (s, "admin-up ");
- else
- s = format (s, "admin-down ");
-
- if (mp->link_up_down)
- s = format (s, "link-up");
- else
- s = format (s, "link-down");
-
- FINISH;
-}
-
-static void *vl_api_sw_interface_add_del_address_t_print
- (vl_api_sw_interface_add_del_address_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: sw_interface_add_del_address ");
-
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
-
- if (mp->is_ipv6)
- s = format (s, "%U/%d ", format_ip6_address,
- (ip6_address_t *) mp->address, mp->address_length);
- else
- s = format (s, "%U/%d ", format_ip4_address,
- (ip4_address_t *) mp->address, mp->address_length);
-
- if (mp->is_add == 0)
- s = format (s, "del ");
- if (mp->del_all)
- s = format (s, "del-all ");
-
- FINISH;
-}
-
-static void *vl_api_sw_interface_set_table_t_print
- (vl_api_sw_interface_set_table_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: sw_interface_set_table ");
-
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
-
- if (mp->vrf_id)
- s = format (s, "vrf %d ", ntohl (mp->vrf_id));
-
- if (mp->is_ipv6)
- s = format (s, "ipv6 ");
-
- FINISH;
-}
-
-static void *vl_api_sw_interface_set_mpls_enable_t_print
- (vl_api_sw_interface_set_mpls_enable_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: sw_interface_set_mpls_enable ");
-
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
-
- if (mp->enable == 0)
- s = format (s, "disable");
-
- FINISH;
-}
-
-static void *vl_api_sw_interface_set_vpath_t_print
- (vl_api_sw_interface_set_vpath_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: sw_interface_set_vpath ");
-
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
-
- if (mp->enable)
- s = format (s, "enable ");
- else
- s = format (s, "disable ");
-
- FINISH;
-}
-
-static void *vl_api_sw_interface_set_vxlan_bypass_t_print
- (vl_api_sw_interface_set_vxlan_bypass_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: sw_interface_set_vxlan_bypass ");
-
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
-
- if (mp->is_ipv6)
- s = format (s, "ip6");
-
- if (mp->enable)
- s = format (s, "enable ");
- else
- s = format (s, "disable ");
-
- FINISH;
-}
-
-static void *vl_api_sw_interface_set_l2_xconnect_t_print
- (vl_api_sw_interface_set_l2_xconnect_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: sw_interface_set_l2_xconnect ");
-
- s = format (s, "sw_if_index %d ", ntohl (mp->rx_sw_if_index));
-
- if (mp->enable)
- {
- s = format (s, "tx_sw_if_index %d ", ntohl (mp->tx_sw_if_index));
- }
- else
- s = format (s, "delete ");
-
- FINISH;
-}
-
-static void *vl_api_sw_interface_set_l2_bridge_t_print
- (vl_api_sw_interface_set_l2_bridge_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: sw_interface_set_l2_bridge ");
-
- s = format (s, "sw_if_index %d ", ntohl (mp->rx_sw_if_index));
-
- if (mp->enable)
- {
- s = format (s, "bd_id %d shg %d %senable ", ntohl (mp->bd_id),
- mp->shg, ((mp->bvi) ? "bvi " : " "));
- }
- else
- s = format (s, "disable ");
-
- FINISH;
-}
-
-static void *vl_api_sw_interface_set_dpdk_hqos_pipe_t_print
- (vl_api_sw_interface_set_dpdk_hqos_pipe_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: sw_interface_set_dpdk_hqos_pipe ");
-
- s = format (s, "sw_if_index %u ", ntohl (mp->sw_if_index));
-
- s = format (s, "subport %u pipe %u profile %u ",
- ntohl (mp->subport), ntohl (mp->pipe), ntohl (mp->profile));
-
- FINISH;
-}
-
-static void *vl_api_sw_interface_set_dpdk_hqos_subport_t_print
- (vl_api_sw_interface_set_dpdk_hqos_subport_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: sw_interface_set_dpdk_hqos_subport ");
-
- s = format (s, "sw_if_index %u ", ntohl (mp->sw_if_index));
-
- s =
- format (s,
- "subport %u rate %u bkt_size %u tc0 %u tc1 %u tc2 %u tc3 %u period %u",
- ntohl (mp->subport), ntohl (mp->tb_rate), ntohl (mp->tb_size),
- ntohl (mp->tc_rate[0]), ntohl (mp->tc_rate[1]),
- ntohl (mp->tc_rate[2]), ntohl (mp->tc_rate[3]),
- ntohl (mp->tc_period));
-
- FINISH;
-}
-
-static void *vl_api_sw_interface_set_dpdk_hqos_tctbl_t_print
- (vl_api_sw_interface_set_dpdk_hqos_tctbl_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: sw_interface_set_dpdk_hqos_tctbl ");
-
- s = format (s, "sw_if_index %u ", ntohl (mp->sw_if_index));
-
- s = format (s, "entry %u tc %u queue %u",
- ntohl (mp->entry), ntohl (mp->tc), ntohl (mp->queue));
-
- FINISH;
-}
-
-static void *vl_api_bridge_domain_add_del_t_print
- (vl_api_bridge_domain_add_del_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: bridge_domain_add_del ");
-
- s = format (s, "bd_id %d ", ntohl (mp->bd_id));
-
- if (mp->is_add)
- {
- s = format (s, "flood %d uu-flood %d forward %d learn %d arp-term %d",
- mp->flood, mp->uu_flood, mp->forward, mp->learn,
- mp->arp_term);
- }
- else
- s = format (s, "del ");
-
- FINISH;
-}
-
-static void *vl_api_bridge_domain_dump_t_print
- (vl_api_bridge_domain_dump_t * mp, void *handle)
-{
- u8 *s;
- u32 bd_id = ntohl (mp->bd_id);
-
- s = format (0, "SCRIPT: bridge_domain_dump ");
-
- if (bd_id != ~0)
- s = format (s, "bd_id %d ", bd_id);
-
- FINISH;
-}
-
-static void *vl_api_l2fib_add_del_t_print
- (vl_api_l2fib_add_del_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: l2fib_add_del ");
-
- s = format (s, "mac %U ", format_ethernet_address, &mp->mac);
-
- s = format (s, "bd_id %d ", ntohl (mp->bd_id));
-
-
- if (mp->is_add)
- {
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
- if (mp->static_mac)
- s = format (s, "%s", "static ");
- if (mp->filter_mac)
- s = format (s, "%s", "filter ");
- if (mp->bvi_mac)
- s = format (s, "%s", "bvi ");
- }
- else
- {
- s = format (s, "del ");
- }
-
- FINISH;
-}
-
-static void *
-vl_api_l2_flags_t_print (vl_api_l2_flags_t * mp, void *handle)
-{
- u8 *s;
- u32 flags = ntohl (mp->feature_bitmap);
-
- s = format (0, "SCRIPT: l2_flags ");
-
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
-
-#define _(a,b) \
- if (flags & L2INPUT_FEAT_ ## a) s = format (s, #a " ");
- foreach_l2input_feat;
-#undef _
-
- FINISH;
-}
-
-static void *vl_api_bridge_flags_t_print
- (vl_api_bridge_flags_t * mp, void *handle)
-{
- u8 *s;
- u32 flags = ntohl (mp->feature_bitmap);
-
- s = format (0, "SCRIPT: bridge_flags ");
-
- s = format (s, "bd_id %d ", ntohl (mp->bd_id));
-
- if (flags & L2_LEARN)
- s = format (s, "learn ");
- if (flags & L2_FWD)
- s = format (s, "forward ");
- if (flags & L2_FLOOD)
- s = format (s, "flood ");
- if (flags & L2_UU_FLOOD)
- s = format (s, "uu-flood ");
- if (flags & L2_ARP_TERM)
- s = format (s, "arp-term ");
-
- if (mp->is_set == 0)
- s = format (s, "clear ");
-
- FINISH;
-}
-
-static void *vl_api_bd_ip_mac_add_del_t_print
- (vl_api_bd_ip_mac_add_del_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: bd_ip_mac_add_del ");
- s = format (s, "bd_id %d ", ntohl (mp->bd_id));
-
- if (mp->is_ipv6)
- s = format (s, "%U ", format_ip6_address,
- (ip6_address_t *) mp->ip_address);
- else
- s = format (s, "%U ", format_ip4_address,
- (ip4_address_t *) mp->ip_address);
-
- s = format (s, "%U ", format_ethernet_address, mp->mac_address);
- if (mp->is_add == 0)
- s = format (s, "del ");
-
- FINISH;
-}
-
-static void *vl_api_tap_connect_t_print
- (vl_api_tap_connect_t * mp, void *handle)
-{
- u8 *s;
- u8 null_mac[6];
-
- memset (null_mac, 0, sizeof (null_mac));
-
- s = format (0, "SCRIPT: tap_connect ");
- s = format (s, "tapname %s ", mp->tap_name);
- if (mp->use_random_mac)
- s = format (s, "random-mac ");
- if (mp->tag[0])
- s = format (s, "tag %s ", mp->tag);
- if (memcmp (mp->mac_address, null_mac, 6))
- s = format (s, "mac %U ", format_ethernet_address, mp->mac_address);
-
- FINISH;
-}
-
-static void *vl_api_tap_modify_t_print
- (vl_api_tap_modify_t * mp, void *handle)
-{
- u8 *s;
- u8 null_mac[6];
-
- memset (null_mac, 0, sizeof (null_mac));
-
- s = format (0, "SCRIPT: tap_modify ");
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
- s = format (s, "tapname %s ", mp->tap_name);
- if (mp->use_random_mac)
- s = format (s, "random-mac ");
-
- if (memcmp (mp->mac_address, null_mac, 6))
- s = format (s, "mac %U ", format_ethernet_address, mp->mac_address);
-
- FINISH;
-}
-
-static void *vl_api_tap_delete_t_print
- (vl_api_tap_delete_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: tap_delete ");
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
-
- FINISH;
-}
-
-static void *vl_api_sw_interface_tap_dump_t_print
- (vl_api_sw_interface_tap_dump_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: sw_interface_tap_dump ");
-
- FINISH;
-}
-
-
-static void *vl_api_ip_add_del_route_t_print
- (vl_api_ip_add_del_route_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: ip_add_del_route ");
- if (mp->is_add == 0)
- s = format (s, "del ");
-
- if (mp->next_hop_sw_if_index)
- s = format (s, "sw_if_index %d ", ntohl (mp->next_hop_sw_if_index));
-
- if (mp->is_ipv6)
- s = format (s, "%U/%d ", format_ip6_address, mp->dst_address,
- mp->dst_address_length);
- else
- s = format (s, "%U/%d ", format_ip4_address, mp->dst_address,
- mp->dst_address_length);
- if (mp->is_local)
- s = format (s, "local ");
- else if (mp->is_drop)
- s = format (s, "drop ");
- else if (mp->is_classify)
- s = format (s, "classify %d", ntohl (mp->classify_table_index));
- else
- {
- if (mp->is_ipv6)
- s = format (s, "via %U ", format_ip6_address, mp->next_hop_address);
- else
- s = format (s, "via %U ", format_ip4_address, mp->next_hop_address);
- }
-
- if (mp->table_id != 0)
- s = format (s, "vrf %d ", ntohl (mp->table_id));
-
- if (mp->create_vrf_if_needed)
- s = format (s, "create-vrf ");
-
- if (mp->next_hop_weight != 1)
- s = format (s, "weight %d ", mp->next_hop_weight);
-
- if (mp->not_last)
- s = format (s, "not-last ");
-
- if (mp->is_multipath)
- s = format (s, "multipath ");
-
- if (mp->is_multipath)
- s = format (s, "multipath ");
-
- if (mp->next_hop_table_id)
- s = format (s, "lookup-in-vrf %d ", ntohl (mp->next_hop_table_id));
-
- FINISH;
-}
-
-static void *vl_api_proxy_arp_add_del_t_print
- (vl_api_proxy_arp_add_del_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: proxy_arp_add_del ");
-
- s = format (s, "%U - %U ", format_ip4_address, mp->low_address,
- format_ip4_address, mp->hi_address);
-
- if (mp->vrf_id)
- s = format (s, "vrf %d ", ntohl (mp->vrf_id));
-
- if (mp->is_add == 0)
- s = format (s, "del ");
-
- FINISH;
-}
-
-static void *vl_api_proxy_arp_intfc_enable_disable_t_print
- (vl_api_proxy_arp_intfc_enable_disable_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: proxy_arp_intfc_enable_disable ");
-
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
-
- s = format (s, "enable %d ", mp->enable_disable);
-
- FINISH;
-}
-
-static void *vl_api_mpls_tunnel_add_del_t_print
- (vl_api_mpls_tunnel_add_del_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: mpls_tunnel_add_del ");
-
- if (mp->mt_next_hop_sw_if_index)
- s = format (s, "sw_if_index %d ", ntohl (mp->mt_next_hop_sw_if_index));
-
- if (mp->mt_next_hop_proto_is_ip4)
- s = format (s, "%U ", format_ip4_address, mp->mt_next_hop);
- else
- s = format (s, "%U ", format_ip6_address, mp->mt_next_hop);
-
- if (mp->mt_l2_only)
- s = format (s, "l2-only ");
-
- if (mp->mt_is_add == 0)
- s = format (s, "del ");
-
- FINISH;
-}
-
-static void *vl_api_sw_interface_set_unnumbered_t_print
- (vl_api_sw_interface_set_unnumbered_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: sw_interface_set_unnumbered ");
-
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
-
- s = format (s, "unnum_if_index %d ", ntohl (mp->unnumbered_sw_if_index));
-
- if (mp->is_add == 0)
- s = format (s, "del ");
-
- FINISH;
-}
-
-static void *vl_api_ip_neighbor_add_del_t_print
- (vl_api_ip_neighbor_add_del_t * mp, void *handle)
-{
- u8 *s;
- u8 null_mac[6];
-
- memset (null_mac, 0, sizeof (null_mac));
-
- s = format (0, "SCRIPT: ip_neighbor_add_del ");
-
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
-
- if (mp->is_static)
- s = format (s, "is_static ");
-
- s = format (s, "vrf_id %d ", ntohl (mp->vrf_id));
-
- if (memcmp (mp->mac_address, null_mac, 6))
- s = format (s, "mac %U ", format_ethernet_address, mp->mac_address);
-
- if (mp->is_ipv6)
- s =
- format (s, "dst %U ", format_ip6_address,
- (ip6_address_t *) mp->dst_address);
- else
- s =
- format (s, "dst %U ", format_ip4_address,
- (ip4_address_t *) mp->dst_address);
-
- if (mp->is_add == 0)
- s = format (s, "del ");
-
- FINISH;
-}
-
-static void *
-vl_api_reset_vrf_t_print (vl_api_reset_vrf_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: reset_vrf ");
-
- if (mp->vrf_id)
- s = format (s, "vrf %d ", ntohl (mp->vrf_id));
-
- if (mp->is_ipv6 != 0)
- s = format (s, "ipv6 ");
-
- FINISH;
-}
-
-static void *vl_api_create_vlan_subif_t_print
- (vl_api_create_vlan_subif_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: create_vlan_subif ");
-
- if (mp->sw_if_index)
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
-
- if (mp->vlan_id)
- s = format (s, "vlan_id %d ", ntohl (mp->vlan_id));
-
- FINISH;
-}
-
-#define foreach_create_subif_bit \
-_(no_tags) \
-_(one_tag) \
-_(two_tags) \
-_(dot1ad) \
-_(exact_match) \
-_(default_sub) \
-_(outer_vlan_id_any) \
-_(inner_vlan_id_any)
-
-static void *vl_api_create_subif_t_print
- (vl_api_create_subif_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: create_subif ");
-
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
-
- s = format (s, "sub_id %d ", ntohl (mp->sub_id));
-
- if (mp->outer_vlan_id)
- s = format (s, "outer_vlan_id %d ", ntohs (mp->outer_vlan_id));
-
- if (mp->inner_vlan_id)
- s = format (s, "inner_vlan_id %d ", ntohs (mp->inner_vlan_id));
-
-#define _(a) if (mp->a) s = format (s, "%s ", #a);
- foreach_create_subif_bit;
-#undef _
-
- FINISH;
-}
-
-static void *vl_api_delete_subif_t_print
- (vl_api_delete_subif_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: delete_subif ");
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
-
- FINISH;
-}
-
-static void *vl_api_oam_add_del_t_print
- (vl_api_oam_add_del_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: oam_add_del ");
-
- if (mp->vrf_id)
- s = format (s, "vrf %d ", ntohl (mp->vrf_id));
-
- s = format (s, "src %U ", format_ip4_address, mp->src_address);
-
- s = format (s, "dst %U ", format_ip4_address, mp->dst_address);
-
- if (mp->is_add == 0)
- s = format (s, "del ");
-
- FINISH;
-}
-
-static void *
-vl_api_reset_fib_t_print (vl_api_reset_fib_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: reset_fib ");
-
- if (mp->vrf_id)
- s = format (s, "vrf %d ", ntohl (mp->vrf_id));
-
- if (mp->is_ipv6 != 0)
- s = format (s, "ipv6 ");
-
- FINISH;
-}
-
-static void *vl_api_dhcp_proxy_config_t_print
- (vl_api_dhcp_proxy_config_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: dhcp_proxy_config ");
-
- s = format (s, "vrf_id %d ", ntohl (mp->vrf_id));
-
- if (mp->is_ipv6)
- {
- s = format (s, "svr %U ", format_ip6_address,
- (ip6_address_t *) mp->dhcp_server);
- s = format (s, "src %U ", format_ip6_address,
- (ip6_address_t *) mp->dhcp_src_address);
- }
- else
- {
- s = format (s, "svr %U ", format_ip4_address,
- (ip4_address_t *) mp->dhcp_server);
- s = format (s, "src %U ", format_ip4_address,
- (ip4_address_t *) mp->dhcp_src_address);
- }
- if (mp->is_add == 0)
- s = format (s, "del ");
-
- s = format (s, "insert-cid %d ", mp->insert_circuit_id);
-
- FINISH;
-}
-
-static void *vl_api_dhcp_proxy_config_2_t_print
- (vl_api_dhcp_proxy_config_2_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: dhcp_proxy_config_2 ");
-
- s = format (s, "rx_vrf_id %d ", ntohl (mp->rx_vrf_id));
- s = format (s, "server_vrf_id %d ", ntohl (mp->server_vrf_id));
-
- if (mp->is_ipv6)
- {
- s = format (s, "svr %U ", format_ip6_address,
- (ip6_address_t *) mp->dhcp_server);
- s = format (s, "src %U ", format_ip6_address,
- (ip6_address_t *) mp->dhcp_src_address);
- }
- else
- {
- s = format (s, "svr %U ", format_ip4_address,
- (ip4_address_t *) mp->dhcp_server);
- s = format (s, "src %U ", format_ip4_address,
- (ip4_address_t *) mp->dhcp_src_address);
- }
- if (mp->is_add == 0)
- s = format (s, "del ");
-
- s = format (s, "insert-cid %d ", mp->insert_circuit_id);
-
- FINISH;
-}
-
-static void *vl_api_dhcp_proxy_set_vss_t_print
- (vl_api_dhcp_proxy_set_vss_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: dhcp_proxy_set_vss ");
-
- s = format (s, "tbl_id %d ", ntohl (mp->tbl_id));
-
- s = format (s, "fib_id %d ", ntohl (mp->fib_id));
-
- s = format (s, "oui %d ", ntohl (mp->oui));
-
- if (mp->is_ipv6 != 0)
- s = format (s, "ipv6 ");
-
- if (mp->is_add == 0)
- s = format (s, "del ");
-
- FINISH;
-}
-
-static void *vl_api_dhcp_client_config_t_print
- (vl_api_dhcp_client_config_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: dhcp_client_config ");
-
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
-
- s = format (s, "hostname %s ", mp->hostname);
-
- s = format (s, "want_dhcp_event %d ", mp->want_dhcp_event);
-
- s = format (s, "pid %d ", mp->pid);
-
- if (mp->is_add == 0)
- s = format (s, "del ");
-
- FINISH;
-}
-
-
-static void *vl_api_set_ip_flow_hash_t_print
- (vl_api_set_ip_flow_hash_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: set_ip_flow_hash ");
-
- s = format (s, "vrf_id %d ", ntohl (mp->vrf_id));
-
- if (mp->src)
- s = format (s, "src ");
-
- if (mp->dst)
- s = format (s, "dst ");
-
- if (mp->sport)
- s = format (s, "sport ");
-
- if (mp->dport)
- s = format (s, "dport ");
-
- if (mp->proto)
- s = format (s, "proto ");
-
- if (mp->reverse)
- s = format (s, "reverse ");
-
- if (mp->is_ipv6 != 0)
- s = format (s, "ipv6 ");
-
- FINISH;
-}
-
-static void *vl_api_sw_interface_ip6_set_link_local_address_t_print
- (vl_api_sw_interface_ip6_set_link_local_address_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: sw_interface_ip6_set_link_local_address ");
-
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
-
- s = format (s, "%U/%d ", format_ip6_address, mp->address,
- mp->address_length);
-
- FINISH;
-}
-
-static void *vl_api_sw_interface_ip6nd_ra_prefix_t_print
- (vl_api_sw_interface_ip6nd_ra_prefix_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: sw_interface_ip6nd_ra_prefix ");
-
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
-
- s = format (s, "%U/%d ", format_ip6_address, mp->address,
- mp->address_length);
-
- s = format (s, "val_life %d ", ntohl (mp->val_lifetime));
-
- s = format (s, "pref_life %d ", ntohl (mp->pref_lifetime));
-
- if (mp->use_default)
- s = format (s, "def ");
-
- if (mp->no_advertise)
- s = format (s, "noadv ");
-
- if (mp->off_link)
- s = format (s, "offl ");
-
- if (mp->no_autoconfig)
- s = format (s, "noauto ");
-
- if (mp->no_onlink)
- s = format (s, "nolink ");
-
- if (mp->is_no)
- s = format (s, "isno ");
-
- FINISH;
-}
-
-static void *vl_api_sw_interface_ip6nd_ra_config_t_print
- (vl_api_sw_interface_ip6nd_ra_config_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: sw_interface_ip6nd_ra_config ");
-
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
-
- s = format (s, "maxint %d ", ntohl (mp->max_interval));
-
- s = format (s, "minint %d ", ntohl (mp->min_interval));
-
- s = format (s, "life %d ", ntohl (mp->lifetime));
-
- s = format (s, "count %d ", ntohl (mp->initial_count));
-
- s = format (s, "interval %d ", ntohl (mp->initial_interval));
-
- if (mp->suppress)
- s = format (s, "suppress ");
-
- if (mp->managed)
- s = format (s, "managed ");
-
- if (mp->other)
- s = format (s, "other ");
-
- if (mp->ll_option)
- s = format (s, "ll ");
-
- if (mp->send_unicast)
- s = format (s, "send ");
-
- if (mp->cease)
- s = format (s, "cease ");
-
- if (mp->is_no)
- s = format (s, "isno ");
-
- if (mp->default_router)
- s = format (s, "def ");
-
- FINISH;
-}
-
-static void *vl_api_set_arp_neighbor_limit_t_print
- (vl_api_set_arp_neighbor_limit_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: set_arp_neighbor_limit ");
-
- s = format (s, "arp_nbr_limit %d ", ntohl (mp->arp_neighbor_limit));
-
- if (mp->is_ipv6 != 0)
- s = format (s, "ipv6 ");
-
- FINISH;
-}
-
-static void *vl_api_l2_patch_add_del_t_print
- (vl_api_l2_patch_add_del_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: l2_patch_add_del ");
-
- s = format (s, "rx_sw_if_index %d ", ntohl (mp->rx_sw_if_index));
-
- s = format (s, "tx_sw_if_index %d ", ntohl (mp->tx_sw_if_index));
-
- if (mp->is_add == 0)
- s = format (s, "del ");
-
- FINISH;
-}
-
-static void *vl_api_sr_tunnel_add_del_t_print
- (vl_api_sr_tunnel_add_del_t * mp, void *handle)
-{
- u8 *s;
- ip6_address_t *this_address;
- int i;
- u16 flags_host_byte_order;
- u8 pl_flag;
-
- s = format (0, "SCRIPT: sr_tunnel_add_del ");
-
- if (mp->name[0])
- s = format (s, "name %s ", mp->name);
-
- s = format (s, "src %U dst %U/%d ", format_ip6_address,
- (ip6_address_t *) mp->src_address,
- format_ip6_address,
- (ip6_address_t *) mp->dst_address, mp->dst_mask_width);
-
- this_address = (ip6_address_t *) mp->segs_and_tags;
- for (i = 0; i < mp->n_segments; i++)
- {
- s = format (s, "next %U ", format_ip6_address, this_address);
- this_address++;
- }
- for (i = 0; i < mp->n_tags; i++)
- {
- s = format (s, "tag %U ", format_ip6_address, this_address);
- this_address++;
- }
-
- flags_host_byte_order = clib_net_to_host_u16 (mp->flags_net_byte_order);
-
- if (flags_host_byte_order & IP6_SR_HEADER_FLAG_CLEANUP)
- s = format (s, " clean ");
-
- if (flags_host_byte_order & IP6_SR_HEADER_FLAG_PROTECTED)
- s = format (s, "protected ");
-
- for (i = 1; i <= 4; i++)
- {
- pl_flag = ip6_sr_policy_list_flags (flags_host_byte_order, i);
-
- switch (pl_flag)
- {
- case IP6_SR_HEADER_FLAG_PL_ELT_NOT_PRESENT:
- continue;
-
- case IP6_SR_HEADER_FLAG_PL_ELT_INGRESS_PE:
- s = format (s, "InPE %d ", i);
- break;
-
- case IP6_SR_HEADER_FLAG_PL_ELT_EGRESS_PE:
- s = format (s, "EgPE %d ", i);
- break;
-
- case IP6_SR_HEADER_FLAG_PL_ELT_ORIG_SRC_ADDR:
- s = format (s, "OrgSrc %d ", i);
- break;
-
- default:
- clib_warning ("BUG: pl elt %d value %d", i, pl_flag);
- break;
- }
- }
-
- if (mp->policy_name[0])
- s = format (s, "policy_name %s ", mp->policy_name);
-
- if (mp->is_add == 0)
- s = format (s, "del ");
-
- FINISH;
-}
-
-static void *vl_api_sr_policy_add_del_t_print
- (vl_api_sr_policy_add_del_t * mp, void *handle)
-{
- u8 *s;
- int i;
-
- s = format (0, "SCRIPT: sr_policy_add_del ");
-
- if (mp->name[0])
- s = format (s, "name %s ", mp->name);
-
-
- if (mp->tunnel_names[0])
- {
- // start deserializing tunnel_names
- int num_tunnels = mp->tunnel_names[0]; //number of tunnels
- u8 *deser_tun_names = mp->tunnel_names;
- deser_tun_names += 1; //moving along
-
- u8 *tun_name = 0;
- int tun_name_len = 0;
-
- for (i = 0; i < num_tunnels; i++)
- {
- tun_name_len = *deser_tun_names;
- deser_tun_names += 1;
- vec_resize (tun_name, tun_name_len);
- memcpy (tun_name, deser_tun_names, tun_name_len);
- s = format (s, "tunnel %s ", tun_name);
- deser_tun_names += tun_name_len;
- tun_name = 0;
- }
- }
-
- if (mp->is_add == 0)
- s = format (s, "del ");
-
- FINISH;
-}
-
-static void *vl_api_sr_multicast_map_add_del_t_print
- (vl_api_sr_multicast_map_add_del_t * mp, void *handle)
-{
-
- u8 *s = 0;
- /* int i; */
-
- s = format (0, "SCRIPT: sr_multicast_map_add_del ");
-
- if (mp->multicast_address[0])
- s = format (s, "address %U ", format_ip6_address, &mp->multicast_address);
-
- if (mp->policy_name[0])
- s = format (s, "sr-policy %s ", &mp->policy_name);
-
-
- if (mp->is_add == 0)
- s = format (s, "del ");
-
- FINISH;
-}
-
-
-static void *vl_api_classify_add_del_table_t_print
- (vl_api_classify_add_del_table_t * mp, void *handle)
-{
- u8 *s;
- int i;
-
- s = format (0, "SCRIPT: classify_add_del_table ");
-
- if (mp->is_add == 0)
- {
- s = format (s, "table %d ", ntohl (mp->table_index));
- s = format (s, "%s ", mp->del_chain ? "del-chain" : "del");
- }
- else
- {
- s = format (s, "nbuckets %d ", ntohl (mp->nbuckets));
- s = format (s, "memory_size %d ", ntohl (mp->memory_size));
- s = format (s, "skip %d ", ntohl (mp->skip_n_vectors));
- s = format (s, "match %d ", ntohl (mp->match_n_vectors));
- s = format (s, "next-table %d ", ntohl (mp->next_table_index));
- s = format (s, "miss-next %d ", ntohl (mp->miss_next_index));
- s = format (s, "current-data-flag %d ", ntohl (mp->current_data_flag));
- if (mp->current_data_flag)
- s = format (s, "current-data-offset %d ",
- ntohl (mp->current_data_offset));
- s = format (s, "mask hex ");
- for (i = 0; i < ntohl (mp->match_n_vectors) * sizeof (u32x4); i++)
- s = format (s, "%02x", mp->mask[i]);
- vec_add1 (s, ' ');
- }
-
- FINISH;
-}
-
-static void *vl_api_classify_add_del_session_t_print
- (vl_api_classify_add_del_session_t * mp, void *handle)
-{
- u8 *s;
- int i, limit = 0;
-
- s = format (0, "SCRIPT: classify_add_del_session ");
-
- s = format (s, "table_index %d ", ntohl (mp->table_index));
- s = format (s, "hit_next_index %d ", ntohl (mp->hit_next_index));
- s = format (s, "opaque_index %d ", ntohl (mp->opaque_index));
- s = format (s, "advance %d ", ntohl (mp->advance));
- s = format (s, "action %d ", mp->action);
- if (mp->action)
- s = format (s, "metadata %d ", ntohl (mp->metadata));
- if (mp->is_add == 0)
- s = format (s, "del ");
-
- s = format (s, "match hex ");
- for (i = 5 * sizeof (u32x4) - 1; i > 0; i--)
- {
- if (mp->match[i] != 0)
- {
- limit = i + 1;
- break;
- }
- }
-
- for (i = 0; i < limit; i++)
- s = format (s, "%02x", mp->match[i]);
-
- FINISH;
-}
-
-static void *vl_api_classify_set_interface_ip_table_t_print
- (vl_api_classify_set_interface_ip_table_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: classify_set_interface_ip_table ");
-
- if (mp->is_ipv6)
- s = format (s, "ipv6 ");
-
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
- s = format (s, "table %d ", ntohl (mp->table_index));
-
- FINISH;
-}
-
-static void *vl_api_classify_set_interface_l2_tables_t_print
- (vl_api_classify_set_interface_l2_tables_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: classify_set_interface_l2_tables ");
-
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
- s = format (s, "ip4-table %d ", ntohl (mp->ip4_table_index));
- s = format (s, "ip6-table %d ", ntohl (mp->ip6_table_index));
- s = format (s, "other-table %d ", ntohl (mp->other_table_index));
- s = format (s, "is-input %d ", mp->is_input);
-
- FINISH;
-}
-
-static void *vl_api_add_node_next_t_print
- (vl_api_add_node_next_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: add_node_next ");
-
- s = format (0, "node %s next %s ", mp->node_name, mp->next_name);
-
- FINISH;
-}
-
-static void *vl_api_l2tpv3_create_tunnel_t_print
- (vl_api_l2tpv3_create_tunnel_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: l2tpv3_create_tunnel ");
-
- s = format (s, "client_address %U our_address %U ",
- format_ip6_address, (ip6_address_t *) (mp->client_address),
- format_ip6_address, (ip6_address_t *) (mp->our_address));
- s = format (s, "local_session_id %d ", ntohl (mp->local_session_id));
- s = format (s, "remote_session_id %d ", ntohl (mp->remote_session_id));
- s = format (s, "local_cookie %lld ",
- clib_net_to_host_u64 (mp->local_cookie));
- s = format (s, "remote_cookie %lld ",
- clib_net_to_host_u64 (mp->remote_cookie));
- if (mp->l2_sublayer_present)
- s = format (s, "l2-sublayer-present ");
-
- FINISH;
-}
-
-static void *vl_api_l2tpv3_set_tunnel_cookies_t_print
- (vl_api_l2tpv3_set_tunnel_cookies_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: l2tpv3_set_tunnel_cookies ");
-
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
-
- s = format (s, "new_local_cookie %llu ",
- clib_net_to_host_u64 (mp->new_local_cookie));
-
- s = format (s, "new_remote_cookie %llu ",
- clib_net_to_host_u64 (mp->new_remote_cookie));
-
- FINISH;
-}
-
-static void *vl_api_l2tpv3_interface_enable_disable_t_print
- (vl_api_l2tpv3_interface_enable_disable_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: l2tpv3_interface_enable_disable ");
-
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
-
- if (mp->enable_disable == 0)
- s = format (s, "del ");
-
- FINISH;
-}
-
-static void *vl_api_l2tpv3_set_lookup_key_t_print
- (vl_api_l2tpv3_set_lookup_key_t * mp, void *handle)
-{
- u8 *s;
- char *str = "unknown";
-
- s = format (0, "SCRIPT: l2tpv3_set_lookup_key ");
-
- switch (mp->key)
- {
- case L2T_LOOKUP_SRC_ADDRESS:
- str = "lookup_v6_src";
- break;
- case L2T_LOOKUP_DST_ADDRESS:
- str = "lookup_v6_dst";
- break;
- case L2T_LOOKUP_SESSION_ID:
- str = "lookup_session_id";
- break;
- default:
- break;
- }
-
- s = format (s, "%s ", str);
-
- FINISH;
-}
-
-static void *vl_api_sw_if_l2tpv3_tunnel_dump_t_print
- (vl_api_sw_if_l2tpv3_tunnel_dump_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: sw_if_l2tpv3_tunnel_dump ");
-
- FINISH;
-}
-
-static void *vl_api_vxlan_add_del_tunnel_t_print
- (vl_api_vxlan_add_del_tunnel_t * mp, void *handle)
-{
- u8 *s;
- s = format (0, "SCRIPT: vxlan_add_del_tunnel ");
-
- ip46_address_t src, dst;
-
- ip46_from_addr_buf (mp->is_ipv6, mp->dst_address, &dst);
- ip46_from_addr_buf (mp->is_ipv6, mp->src_address, &src);
-
- u8 is_grp = ip46_address_is_multicast (&dst);
- char *dst_name = is_grp ? "group" : "dst";
-
- s = format (s, "src %U ", format_ip46_address, &src, IP46_TYPE_ANY);
- s = format (s, "%s %U ", dst_name, format_ip46_address,
- &dst, IP46_TYPE_ANY);
-
- if (is_grp)
- s = format (s, "mcast_sw_if_index %d ", ntohl (mp->mcast_sw_if_index));
-
- if (mp->encap_vrf_id)
- s = format (s, "encap-vrf-id %d ", ntohl (mp->encap_vrf_id));
-
- s = format (s, "decap-next %d ", ntohl (mp->decap_next_index));
-
- s = format (s, "vni %d ", ntohl (mp->vni));
-
- if (mp->is_add == 0)
- s = format (s, "del ");
-
- if (mp->is_add == 0)
- s = format (s, "del ");
-
- FINISH;
-}
-
-static void *vl_api_vxlan_tunnel_dump_t_print
- (vl_api_vxlan_tunnel_dump_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: vxlan_tunnel_dump ");
-
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
-
- FINISH;
-}
-
-static void *vl_api_gre_add_del_tunnel_t_print
- (vl_api_gre_add_del_tunnel_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: gre_add_del_tunnel ");
-
- s = format (s, "dst %U ", format_ip46_address,
- (ip46_address_t *) & (mp->dst_address),
- mp->is_ipv6 ? IP46_TYPE_IP6 : IP46_TYPE_IP4);
-
- s = format (s, "src %U ", format_ip46_address,
- (ip46_address_t *) & (mp->src_address),
- mp->is_ipv6 ? IP46_TYPE_IP6 : IP46_TYPE_IP4);
-
- if (mp->teb)
- s = format (s, "teb ");
-
- if (mp->outer_fib_id)
- s = format (s, "outer-fib-id %d ", ntohl (mp->outer_fib_id));
-
- if (mp->is_add == 0)
- s = format (s, "del ");
-
- FINISH;
-}
-
-static void *vl_api_gre_tunnel_dump_t_print
- (vl_api_gre_tunnel_dump_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: gre_tunnel_dump ");
-
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
-
- FINISH;
-}
-
-static void *vl_api_l2_fib_clear_table_t_print
- (vl_api_l2_fib_clear_table_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: l2_fib_clear_table ");
-
- FINISH;
-}
-
-static void *vl_api_l2_interface_efp_filter_t_print
- (vl_api_l2_interface_efp_filter_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: l2_interface_efp_filter ");
-
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
- if (mp->enable_disable)
- s = format (s, "enable ");
- else
- s = format (s, "disable ");
-
- FINISH;
-}
-
-static void *vl_api_l2_interface_vlan_tag_rewrite_t_print
- (vl_api_l2_interface_vlan_tag_rewrite_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: l2_interface_vlan_tag_rewrite ");
-
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
- s = format (s, "vtr_op %d ", ntohl (mp->vtr_op));
- s = format (s, "push_dot1q %d ", ntohl (mp->push_dot1q));
- s = format (s, "tag1 %d ", ntohl (mp->tag1));
- s = format (s, "tag2 %d ", ntohl (mp->tag2));
-
- FINISH;
-}
-
-static void *vl_api_create_vhost_user_if_t_print
- (vl_api_create_vhost_user_if_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: create_vhost_user_if ");
-
- s = format (s, "socket %s ", mp->sock_filename);
- if (mp->is_server)
- s = format (s, "server ");
- if (mp->renumber)
- s = format (s, "renumber %d ", ntohl (mp->custom_dev_instance));
- if (mp->tag[0])
- s = format (s, "tag %s", mp->tag);
-
- FINISH;
-}
-
-static void *vl_api_modify_vhost_user_if_t_print
- (vl_api_modify_vhost_user_if_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: modify_vhost_user_if ");
-
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
- s = format (s, "socket %s ", mp->sock_filename);
- if (mp->is_server)
- s = format (s, "server ");
- if (mp->renumber)
- s = format (s, "renumber %d ", ntohl (mp->custom_dev_instance));
-
- FINISH;
-}
-
-static void *vl_api_delete_vhost_user_if_t_print
- (vl_api_delete_vhost_user_if_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: delete_vhost_user_if ");
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
-
- FINISH;
-}
-
-static void *vl_api_sw_interface_vhost_user_dump_t_print
- (vl_api_sw_interface_vhost_user_dump_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: sw_interface_vhost_user_dump ");
-
- FINISH;
-}
-
-static void *vl_api_sw_interface_dump_t_print
- (vl_api_sw_interface_dump_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: sw_interface_dump ");
-
- if (mp->name_filter_valid)
- s = format (s, "name_filter %s ", mp->name_filter);
- else
- s = format (s, "all ");
-
- FINISH;
-}
-
-static void *vl_api_l2_fib_table_dump_t_print
- (vl_api_l2_fib_table_dump_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: l2_fib_table_dump ");
-
- s = format (s, "bd_id %d ", ntohl (mp->bd_id));
-
- FINISH;
-}
-
-static void *vl_api_control_ping_t_print
- (vl_api_control_ping_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: control_ping ");
-
- FINISH;
-}
-
-static void *vl_api_want_interface_events_t_print
- (vl_api_want_interface_events_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: want_interface_events pid %d enable %d ",
- ntohl (mp->pid), ntohl (mp->enable_disable));
-
- FINISH;
-}
-
-static void *vl_api_cli_request_t_print
- (vl_api_cli_request_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: cli_request ");
-
- FINISH;
-}
-
-static void *vl_api_cli_inband_t_print
- (vl_api_cli_inband_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: cli_inband ");
-
- FINISH;
-}
-
-static void *vl_api_memclnt_create_t_print
- (vl_api_memclnt_create_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: memclnt_create name %s ", mp->name);
-
- FINISH;
-}
-
-static void *vl_api_show_version_t_print
- (vl_api_show_version_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: show_version ");
-
- FINISH;
-}
-
-static void *vl_api_vxlan_gpe_add_del_tunnel_t_print
- (vl_api_vxlan_gpe_add_del_tunnel_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: vxlan_gpe_add_del_tunnel ");
-
- s = format (s, "local %U ", format_ip46_address, &mp->local, mp->is_ipv6);
-
- s = format (s, "remote %U ", format_ip46_address, &mp->remote, mp->is_ipv6);
-
- s = format (s, "protocol %d ", ntohl (mp->protocol));
-
- s = format (s, "vni %d ", ntohl (mp->vni));
-
- if (mp->is_add == 0)
- s = format (s, "del ");
-
- if (mp->encap_vrf_id)
- s = format (s, "encap-vrf-id %d ", ntohl (mp->encap_vrf_id));
-
- if (mp->decap_vrf_id)
- s = format (s, "decap-vrf-id %d ", ntohl (mp->decap_vrf_id));
-
- FINISH;
-}
-
-static void *vl_api_vxlan_gpe_tunnel_dump_t_print
- (vl_api_vxlan_gpe_tunnel_dump_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: vxlan_gpe_tunnel_dump ");
-
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
-
- FINISH;
-}
-
-static void *vl_api_interface_name_renumber_t_print
- (vl_api_interface_name_renumber_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: interface_renumber ");
-
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
-
- s = format (s, "new_show_dev_instance %d ",
- ntohl (mp->new_show_dev_instance));
-
- FINISH;
-}
-
-static void *vl_api_want_ip4_arp_events_t_print
- (vl_api_want_ip4_arp_events_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: want_ip4_arp_events ");
- s = format (s, "pid %d address %U ", mp->pid,
- format_ip4_address, &mp->address);
- if (mp->enable_disable == 0)
- s = format (s, "del ");
-
- FINISH;
-}
-
-static void *vl_api_want_ip6_nd_events_t_print
- (vl_api_want_ip6_nd_events_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: want_ip6_nd_events ");
- s = format (s, "pid %d address %U ", mp->pid,
- format_ip6_address, mp->address);
- if (mp->enable_disable == 0)
- s = format (s, "del ");
-
- FINISH;
-}
-
-static void *vl_api_input_acl_set_interface_t_print
- (vl_api_input_acl_set_interface_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: input_acl_set_interface ");
-
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
- s = format (s, "ip4-table %d ", ntohl (mp->ip4_table_index));
- s = format (s, "ip6-table %d ", ntohl (mp->ip6_table_index));
- s = format (s, "l2-table %d ", ntohl (mp->l2_table_index));
-
- if (mp->is_add == 0)
- s = format (s, "del ");
-
- FINISH;
-}
-
-static void *vl_api_ip_address_dump_t_print
- (vl_api_ip_address_dump_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: ip6_address_dump ");
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
- s = format (s, "is_ipv6 %d ", mp->is_ipv6 != 0);
-
- FINISH;
-}
-
-static void *
-vl_api_ip_dump_t_print (vl_api_ip_dump_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: ip_dump ");
- s = format (s, "is_ipv6 %d ", mp->is_ipv6 != 0);
-
- FINISH;
-}
-
-static void *vl_api_cop_interface_enable_disable_t_print
- (vl_api_cop_interface_enable_disable_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: cop_interface_enable_disable ");
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
- if (mp->enable_disable)
- s = format (s, "enable ");
- else
- s = format (s, "disable ");
-
- FINISH;
-}
-
-static void *vl_api_cop_whitelist_enable_disable_t_print
- (vl_api_cop_whitelist_enable_disable_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: cop_whitelist_enable_disable ");
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
- s = format (s, "fib-id %d ", ntohl (mp->fib_id));
- if (mp->ip4)
- s = format (s, "ip4 ");
- if (mp->ip6)
- s = format (s, "ip6 ");
- if (mp->default_cop)
- s = format (s, "default ");
-
- FINISH;
-}
-
-static void *vl_api_af_packet_create_t_print
- (vl_api_af_packet_create_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: af_packet_create ");
- s = format (s, "host_if_name %s ", mp->host_if_name);
- if (mp->use_random_hw_addr)
- s = format (s, "hw_addr random ");
- else
- s = format (s, "hw_addr %U ", format_ethernet_address, mp->hw_addr);
-
- FINISH;
-}
-
-static void *vl_api_af_packet_delete_t_print
- (vl_api_af_packet_delete_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: af_packet_delete ");
- s = format (s, "host_if_name %s ", mp->host_if_name);
-
- FINISH;
-}
-
-static u8 *
-format_policer_action (u8 * s, va_list * va)
-{
- u32 action = va_arg (*va, u32);
- u32 dscp = va_arg (*va, u32);
- char *t = 0;
-
- if (action == SSE2_QOS_ACTION_DROP)
- s = format (s, "drop");
- else if (action == SSE2_QOS_ACTION_TRANSMIT)
- s = format (s, "transmit");
- else if (action == SSE2_QOS_ACTION_MARK_AND_TRANSMIT)
- {
- s = format (s, "mark-and-transmit ");
- switch (dscp)
- {
-#define _(v,f,str) case VNET_DSCP_##f: t = str; break;
- foreach_vnet_dscp
-#undef _
- default:
- break;
- }
- s = format (s, "%s", t);
- }
-
- return s;
-}
-
-static void *vl_api_policer_add_del_t_print
- (vl_api_policer_add_del_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: policer_add_del ");
- s = format (s, "name %s ", mp->name);
- s = format (s, "cir %d ", mp->cir);
- s = format (s, "eir %d ", mp->eir);
- s = format (s, "cb %d ", mp->cb);
- s = format (s, "eb %d ", mp->eb);
-
- switch (mp->rate_type)
- {
- case SSE2_QOS_RATE_KBPS:
- s = format (s, "rate_type kbps ");
- break;
- case SSE2_QOS_RATE_PPS:
- s = format (s, "rate_type pps ");
- break;
- default:
- break;
- }
-
- switch (mp->round_type)
- {
- case SSE2_QOS_ROUND_TO_CLOSEST:
- s = format (s, "round_type closest ");
- break;
- case SSE2_QOS_ROUND_TO_UP:
- s = format (s, "round_type up ");
- break;
- case SSE2_QOS_ROUND_TO_DOWN:
- s = format (s, "round_type down ");
- break;
- default:
- break;
- }
-
- switch (mp->type)
- {
- case SSE2_QOS_POLICER_TYPE_1R2C:
- s = format (s, "type 1r2c ");
- break;
- case SSE2_QOS_POLICER_TYPE_1R3C_RFC_2697:
- s = format (s, "type 1r3c ");
- break;
- case SSE2_QOS_POLICER_TYPE_2R3C_RFC_2698:
- s = format (s, "type 2r3c-2698 ");
- break;
- case SSE2_QOS_POLICER_TYPE_2R3C_RFC_4115:
- s = format (s, "type 2r3c-4115 ");
- break;
- case SSE2_QOS_POLICER_TYPE_2R3C_RFC_MEF5CF1:
- s = format (s, "type 2r3c-mef5cf1 ");
- break;
- default:
- break;
- }
-
- s = format (s, "conform_action %U ", format_policer_action,
- mp->conform_action_type, mp->conform_dscp);
- s = format (s, "exceed_action %U ", format_policer_action,
- mp->exceed_action_type, mp->exceed_dscp);
- s = format (s, "violate_action %U ", format_policer_action,
- mp->violate_action_type, mp->violate_dscp);
-
- if (mp->color_aware)
- s = format (s, "color-aware ");
- if (mp->is_add == 0)
- s = format (s, "del ");
-
- FINISH;
-}
-
-static void *vl_api_policer_dump_t_print
- (vl_api_policer_dump_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: policer_dump ");
- if (mp->match_name_valid)
- s = format (s, "name %s ", mp->match_name);
-
- FINISH;
-}
-
-static void *vl_api_policer_classify_set_interface_t_print
- (vl_api_policer_classify_set_interface_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: policer_classify_set_interface ");
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
- if (mp->ip4_table_index != ~0)
- s = format (s, "ip4-table %d ", ntohl (mp->ip4_table_index));
- if (mp->ip6_table_index != ~0)
- s = format (s, "ip6-table %d ", ntohl (mp->ip6_table_index));
- if (mp->l2_table_index != ~0)
- s = format (s, "l2-table %d ", ntohl (mp->l2_table_index));
- if (mp->is_add == 0)
- s = format (s, "del ");
-
- FINISH;
-}
-
-static void *vl_api_policer_classify_dump_t_print
- (vl_api_policer_classify_dump_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: policer_classify_dump ");
- switch (mp->type)
- {
- case POLICER_CLASSIFY_TABLE_IP4:
- s = format (s, "type ip4 ");
- break;
- case POLICER_CLASSIFY_TABLE_IP6:
- s = format (s, "type ip6 ");
- break;
- case POLICER_CLASSIFY_TABLE_L2:
- s = format (s, "type l2 ");
- break;
- default:
- break;
- }
-
- FINISH;
-}
-
-static void *vl_api_sw_interface_clear_stats_t_print
- (vl_api_sw_interface_clear_stats_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: sw_interface_clear_stats ");
- if (mp->sw_if_index != ~0)
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
-
- FINISH;
-}
-
-static void *vl_api_mpls_tunnel_dump_t_print
- (vl_api_mpls_tunnel_dump_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: mpls_tunnel_dump ");
-
- s = format (s, "tunnel_index %d ", ntohl (mp->tunnel_index));
-
- FINISH;
-}
-
-static void *vl_api_mpls_fib_dump_t_print
- (vl_api_mpls_fib_dump_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: mpls_fib_decap_dump ");
-
- FINISH;
-}
-
-static void *vl_api_ip_fib_dump_t_print
- (vl_api_ip_fib_dump_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: ip_fib_dump ");
-
- FINISH;
-}
-
-static void *vl_api_ip6_fib_dump_t_print
- (vl_api_ip6_fib_dump_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: ip6_fib_dump ");
-
- FINISH;
-}
-
-static void *vl_api_classify_table_ids_t_print
- (vl_api_classify_table_ids_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: classify_table_ids ");
-
- FINISH;
-}
-
-static void *vl_api_classify_table_by_interface_t_print
- (vl_api_classify_table_by_interface_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: classify_table_by_interface ");
- if (mp->sw_if_index != ~0)
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
-
- FINISH;
-}
-
-static void *vl_api_classify_table_info_t_print
- (vl_api_classify_table_info_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: classify_table_info ");
- if (mp->table_id != ~0)
- s = format (s, "table_id %d ", ntohl (mp->table_id));
-
- FINISH;
-}
-
-static void *vl_api_classify_session_dump_t_print
- (vl_api_classify_session_dump_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: classify_session_dump ");
- if (mp->table_id != ~0)
- s = format (s, "table_id %d ", ntohl (mp->table_id));
-
- FINISH;
-}
-
-static void *vl_api_set_ipfix_exporter_t_print
- (vl_api_set_ipfix_exporter_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: set_ipfix_exporter ");
-
- s = format (s, "collector-address %U ", format_ip4_address,
- (ip4_address_t *) mp->collector_address);
- s = format (s, "collector-port %d ", ntohs (mp->collector_port));
- s = format (s, "src-address %U ", format_ip4_address,
- (ip4_address_t *) mp->src_address);
- s = format (s, "vrf-id %d ", ntohl (mp->vrf_id));
- s = format (s, "path-mtu %d ", ntohl (mp->path_mtu));
- s = format (s, "template-interval %d ", ntohl (mp->template_interval));
- s = format (s, "udp-checksum %d ", mp->udp_checksum);
-
- FINISH;
-}
-
-static void *vl_api_ipfix_exporter_dump_t_print
- (vl_api_ipfix_exporter_dump_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: ipfix_exporter_dump ");
-
- FINISH;
-}
-
-static void *vl_api_set_ipfix_classify_stream_t_print
- (vl_api_set_ipfix_classify_stream_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: set_ipfix_classify_stream ");
-
- s = format (s, "domain-id %d ", ntohl (mp->domain_id));
- s = format (s, "src-port %d ", ntohs (mp->src_port));
-
- FINISH;
-}
-
-static void *vl_api_ipfix_classify_stream_dump_t_print
- (vl_api_ipfix_classify_stream_dump_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: ipfix_classify_stream_dump ");
-
- FINISH;
-}
-
-static void *vl_api_ipfix_classify_table_add_del_t_print
- (vl_api_ipfix_classify_table_add_del_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: ipfix_classify_table_add_del ");
-
- s = format (s, "table-id %d ", ntohl (mp->table_id));
- s = format (s, "ip-version %d ", mp->ip_version);
- s = format (s, "transport-protocol %d ", mp->transport_protocol);
-
- FINISH;
-}
-
-static void *vl_api_ipfix_classify_table_dump_t_print
- (vl_api_ipfix_classify_table_dump_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: ipfix_classify_table_dump ");
-
- FINISH;
-}
-
-static void *vl_api_sw_interface_span_enable_disable_t_print
- (vl_api_sw_interface_span_enable_disable_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: sw_interface_span_enable_disable ");
- s = format (s, "src_sw_if_index %u ", ntohl (mp->sw_if_index_from));
- s = format (s, "dst_sw_if_index %u ", ntohl (mp->sw_if_index_to));
-
- switch (mp->state)
- {
- case 0:
- s = format (s, "disable ");
- break;
- case 1:
- s = format (s, "rx ");
- break;
- case 2:
- s = format (s, "tx ");
- break;
- case 3:
- default:
- s = format (s, "both ");
- break;
- }
-
- FINISH;
-}
-
-static void *
-vl_api_sw_interface_span_dump_t_print (vl_api_sw_interface_span_dump_t * mp,
- void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: sw_interface_span_dump ");
-
- FINISH;
-}
-
-static void *vl_api_get_next_index_t_print
- (vl_api_get_next_index_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: get_next_index ");
- s = format (s, "node-name %s ", mp->node_name);
- s = format (s, "next-node-name %s ", mp->next_name);
-
- FINISH;
-}
-
-static void *vl_api_pg_create_interface_t_print
- (vl_api_pg_create_interface_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: pg_create_interface ");
- s = format (0, "if_id %d", ntohl (mp->interface_id));
-
- FINISH;
-}
-
-static void *vl_api_pg_capture_t_print
- (vl_api_pg_capture_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: pg_capture ");
- s = format (0, "if_id %d ", ntohl (mp->interface_id));
- s = format (0, "pcap %s", mp->pcap_file_name);
- if (mp->count != ~0)
- s = format (s, "count %d ", ntohl (mp->count));
- if (!mp->is_enabled)
- s = format (s, "disable");
-
- FINISH;
-}
-
-static void *vl_api_pg_enable_disable_t_print
- (vl_api_pg_enable_disable_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: pg_enable_disable ");
- if (ntohl (mp->stream_name_length) > 0)
- s = format (s, "stream %s", mp->stream_name);
- if (!mp->is_enabled)
- s = format (s, "disable");
-
- FINISH;
-}
-
-static void *vl_api_ip_source_and_port_range_check_add_del_t_print
- (vl_api_ip_source_and_port_range_check_add_del_t * mp, void *handle)
-{
- u8 *s;
- int i;
-
- s = format (0, "SCRIPT: ip_source_and_port_range_check_add_del ");
- if (mp->is_ipv6)
- s = format (s, "%U/%d ", format_ip6_address, mp->address,
- mp->mask_length);
- else
- s = format (s, "%U/%d ", format_ip4_address, mp->address,
- mp->mask_length);
-
- for (i = 0; i < mp->number_of_ranges; i++)
- {
- s = format (s, "range %d - %d ", mp->low_ports[i], mp->high_ports[i]);
- }
-
- s = format (s, "vrf %d ", ntohl (mp->vrf_id));
-
- if (mp->is_add == 0)
- s = format (s, "del ");
-
- FINISH;
-}
-
-static void *vl_api_ip_source_and_port_range_check_interface_add_del_t_print
- (vl_api_ip_source_and_port_range_check_interface_add_del_t * mp,
- void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: ip_source_and_port_range_check_interface_add_del ");
-
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
-
- if (mp->tcp_out_vrf_id != ~0)
- s = format (s, "tcp-out-vrf %d ", ntohl (mp->tcp_out_vrf_id));
-
- if (mp->udp_out_vrf_id != ~0)
- s = format (s, "udp-out-vrf %d ", ntohl (mp->udp_out_vrf_id));
-
- if (mp->tcp_in_vrf_id != ~0)
- s = format (s, "tcp-in-vrf %d ", ntohl (mp->tcp_in_vrf_id));
-
- if (mp->udp_in_vrf_id != ~0)
- s = format (s, "udp-in-vrf %d ", ntohl (mp->udp_in_vrf_id));
-
- if (mp->is_add == 0)
- s = format (s, "del ");
-
- FINISH;
-}
-
-static void *vl_api_lisp_enable_disable_t_print
- (vl_api_lisp_enable_disable_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: lisp_enable_disable %s",
- mp->is_en ? "enable" : "disable");
-
- FINISH;
-}
-
-static void *vl_api_lisp_gpe_add_del_iface_t_print
- (vl_api_lisp_gpe_add_del_iface_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: lisp_gpe_add_del_iface ");
-
- s = format (s, "%s ", mp->is_add ? "up" : "down");
- s = format (s, "vni %d ", mp->vni);
- s = format (s, "%s %d ", mp->is_l2 ? "bd_id" : "table_id", mp->dp_table);
-
- FINISH;
-}
-
-static void *vl_api_lisp_pitr_set_locator_set_t_print
- (vl_api_lisp_pitr_set_locator_set_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: lisp_pitr_set_locator_set ");
-
- if (mp->is_add)
- s = format (s, "locator-set %s ", mp->ls_name);
- else
- s = format (s, "del");
-
- FINISH;
-}
-
-static u8 *
-format_lisp_flat_eid (u8 * s, va_list * args)
-{
- u32 type = va_arg (*args, u32);
- u8 *eid = va_arg (*args, u8 *);
- u32 eid_len = va_arg (*args, u32);
-
- switch (type)
- {
- case 0:
- return format (s, "%U/%d", format_ip4_address, eid, eid_len);
- case 1:
- return format (s, "%U/%d", format_ip6_address, eid, eid_len);
- case 3:
- return format (s, "%U", format_ethernet_address, eid);
- }
- return 0;
-}
-
-/** Used for transferring locators via VPP API */
-typedef CLIB_PACKED (struct
- {
- u8 is_ip4;
- /**< is locator an IPv4 address */
- u8 priority;
- /**< locator priority */
- u8 weight;
- /**< locator weight */
- u8 addr[16];
- /**< IPv4/IPv6 address */
- }) rloc_t;
-
-static u8 *
-format_rloc (u8 * s, va_list * args)
-{
- rloc_t *rloc = va_arg (*args, rloc_t *);
-
- if (rloc->is_ip4)
- s = format (s, "%U ", format_ip4_address, rloc->addr);
- else
- s = format (s, "%U ", format_ip6_address, rloc->addr);
-
- s = format (s, "p %d w %d", rloc->priority, rloc->weight);
-
- return s;
-}
-
-static void *vl_api_lisp_add_del_remote_mapping_t_print
- (vl_api_lisp_add_del_remote_mapping_t * mp, void *handle)
-{
- u8 *s;
- u32 i, rloc_num = 0;
-
- s = format (0, "SCRIPT: lisp_add_del_remote_mapping ");
-
- if (mp->del_all)
- s = format (s, "del-all ");
-
- s = format (s, "%s ", mp->is_add ? "add" : "del");
- s = format (s, "vni %d ", clib_net_to_host_u32 (mp->vni));
-
- s = format (s, "eid %U ", format_lisp_flat_eid,
- mp->eid_type, mp->eid, mp->eid_len);
-
- if (mp->is_src_dst)
- {
- s = format (s, "seid %U ", format_lisp_flat_eid,
- mp->eid_type, mp->seid, mp->seid_len);
- }
-
- rloc_num = clib_net_to_host_u32 (mp->rloc_num);
-
- if (0 == rloc_num)
- s = format (s, "action %d", mp->action);
- else
- {
- rloc_t *rloc = (rloc_t *) mp->rlocs;
- for (i = 0; i < rloc_num; i++)
- s = format (s, "%U ", format_rloc, &rloc[i]);
- }
-
- FINISH;
-}
-
-static void *vl_api_lisp_add_del_adjacency_t_print
- (vl_api_lisp_add_del_adjacency_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: lisp_add_del_adjacency ");
-
- s = format (s, "%s ", mp->is_add ? "add" : "del");
- s = format (s, "vni %d ", clib_net_to_host_u32 (mp->vni));
- s = format (s, "reid %U leid %U ",
- format_lisp_flat_eid, mp->eid_type, mp->reid, mp->reid_len,
- format_lisp_flat_eid, mp->eid_type, mp->leid, mp->leid_len);
-
- FINISH;
-}
-
-static void *vl_api_lisp_add_del_map_request_itr_rlocs_t_print
- (vl_api_lisp_add_del_map_request_itr_rlocs_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: lisp_add_del_map_request_itr_rlocs ");
-
- if (mp->is_add)
- s = format (s, "%s", mp->locator_set_name);
- else
- s = format (s, "del");
-
- FINISH;
-}
-
-static void *vl_api_lisp_eid_table_add_del_map_t_print
- (vl_api_lisp_eid_table_add_del_map_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: lisp_eid_table_add_del_map ");
-
- if (!mp->is_add)
- s = format (s, "del ");
-
- s = format (s, "vni %d ", clib_net_to_host_u32 (mp->vni));
- s = format (s, "%s %d ",
- mp->is_l2 ? "bd_index" : "vrf",
- clib_net_to_host_u32 (mp->dp_table));
- FINISH;
-}
-
-static void *vl_api_lisp_add_del_local_eid_t_print
- (vl_api_lisp_add_del_local_eid_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: lisp_add_del_local_eid ");
-
- if (!mp->is_add)
- s = format (s, "del ");
-
- s = format (s, "vni %d ", clib_net_to_host_u32 (mp->vni));
- s = format (s, "eid %U ", format_lisp_flat_eid, mp->eid_type, mp->eid,
- mp->prefix_len);
- s = format (s, "locator-set %s ", mp->locator_set_name);
- if (*mp->key)
- {
- u32 key_id = mp->key_id;
- s = format (s, "key-id %U", format_hmac_key_id, key_id);
- s = format (s, "secret-key %s", mp->key);
- }
- FINISH;
-}
-
-static void *vl_api_lisp_gpe_add_del_fwd_entry_t_print
- (vl_api_lisp_gpe_add_del_fwd_entry_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: lisp_gpe_add_del_fwd_entry TODO");
-
- FINISH;
-}
-
-static void *vl_api_lisp_add_del_map_resolver_t_print
- (vl_api_lisp_add_del_map_resolver_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: lisp_add_del_map_resolver ");
-
- if (!mp->is_add)
- s = format (s, "del ");
-
- if (mp->is_ipv6)
- s = format (s, "%U ", format_ip6_address, mp->ip_address);
- else
- s = format (s, "%U ", format_ip4_address, mp->ip_address);
-
- FINISH;
-}
-
-static void *vl_api_lisp_gpe_enable_disable_t_print
- (vl_api_lisp_gpe_enable_disable_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: lisp_gpe_enable_disable ");
-
- s = format (s, "%s ", mp->is_en ? "enable" : "disable");
-
- FINISH;
-}
-
-typedef CLIB_PACKED (struct
- {
- u32 sw_if_index;
- /**< locator sw_if_index */
- u8 priority;
- /**< locator priority */
- u8 weight;
- /**< locator weight */
- }) ls_locator_t;
-
-static u8 *
-format_locator (u8 * s, va_list * args)
-{
- ls_locator_t *l = va_arg (*args, ls_locator_t *);
-
- return format (s, "sw_if_index %d p %d w %d",
- l->sw_if_index, l->priority, l->weight);
-}
-
-static void *vl_api_lisp_add_del_locator_set_t_print
- (vl_api_lisp_add_del_locator_set_t * mp, void *handle)
-{
- u8 *s;
- u32 loc_num = 0, i;
- ls_locator_t *locs;
-
- s = format (0, "SCRIPT: lisp_add_del_locator_set ");
-
- if (!mp->is_add)
- s = format (s, "del ");
-
- s = format (s, "locator-set %s ", mp->locator_set_name);
-
- loc_num = clib_net_to_host_u32 (mp->locator_num);
- locs = (ls_locator_t *) mp->locators;
-
- for (i = 0; i < loc_num; i++)
- s = format (s, "%U ", format_locator, &locs[i]);
-
- FINISH;
-}
-
-static void *vl_api_lisp_add_del_locator_t_print
- (vl_api_lisp_add_del_locator_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: lisp_add_del_locator ");
-
- if (!mp->is_add)
- s = format (s, "del ");
-
- s = format (s, "locator-set %s ", mp->locator_set_name);
- s = format (s, "sw_if_index %d ", mp->sw_if_index);
- s = format (s, "p %d w %d ", mp->priority, mp->weight);
-
- FINISH;
-}
-
-static void *vl_api_lisp_locator_set_dump_t_print
- (vl_api_lisp_locator_set_dump_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: lisp_locator_set_dump ");
- if (mp->filter == 1)
- s = format (s, "local");
- else if (mp->filter == 2)
- s = format (s, "remote");
-
- FINISH;
-}
-
-static void *vl_api_lisp_locator_dump_t_print
- (vl_api_lisp_locator_dump_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: lisp_locator_dump ");
- if (mp->is_index_set)
- s = format (s, "ls_index %d", clib_net_to_host_u32 (mp->ls_index));
- else
- s = format (s, "ls_name %s", mp->ls_name);
-
- FINISH;
-}
-
-static void *vl_api_lisp_map_request_mode_t_print
- (vl_api_lisp_map_request_mode_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: lisp_map_request_mode ");
-
- switch (mp->mode)
- {
- case 0:
- s = format (s, "dst-only");
- break;
- case 1:
- s = format (s, "src-dst");
- default:
- break;
- }
-
- FINISH;
-}
-
-static void *vl_api_lisp_eid_table_dump_t_print
- (vl_api_lisp_eid_table_dump_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: lisp_eid_table_dump ");
-
- if (mp->eid_set)
- {
- s = format (s, "vni %d ", clib_net_to_host_u32 (mp->vni));
- s = format (s, "eid %U ", format_lisp_flat_eid, mp->eid_type,
- mp->eid, mp->prefix_length);
- switch (mp->filter)
- {
- case 1:
- s = format (s, "local ");
- break;
- case 2:
- s = format (s, "remote ");
- break;
- }
- }
-
- FINISH;
-}
-
-static void *vl_api_lisp_rloc_probe_enable_disable_t_print
- (vl_api_lisp_rloc_probe_enable_disable_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: lisp_rloc_probe_enable_disable ");
- if (mp->is_enabled)
- s = format (s, "enable");
- else
- s = format (s, "disable");
-
- FINISH;
-}
-
-static void *vl_api_lisp_map_register_enable_disable_t_print
- (vl_api_lisp_map_register_enable_disable_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: lisp_map_register_enable_disable ");
- if (mp->is_enabled)
- s = format (s, "enable");
- else
- s = format (s, "disable");
-
- FINISH;
-}
-
-static void *vl_api_lisp_adjacencies_get_t_print
- (vl_api_lisp_adjacencies_get_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: lisp_adjacencies_get ");
- s = format (s, "vni %d", clib_net_to_host_u32 (mp->vni));
-
- FINISH;
-}
-
-static void *vl_api_lisp_eid_table_map_dump_t_print
- (vl_api_lisp_eid_table_map_dump_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: lisp_eid_table_map_dump ");
-
- if (mp->is_l2)
- s = format (s, "l2");
- else
- s = format (s, "l3");
-
- FINISH;
-}
-
-static void *vl_api_ipsec_gre_add_del_tunnel_t_print
- (vl_api_ipsec_gre_add_del_tunnel_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: ipsec_gre_add_del_tunnel ");
-
- s = format (s, "dst %U ", format_ip4_address,
- (ip4_address_t *) & (mp->dst_address));
-
- s = format (s, "src %U ", format_ip4_address,
- (ip4_address_t *) & (mp->src_address));
-
- s = format (s, "local_sa %d ", ntohl (mp->local_sa_id));
-
- s = format (s, "remote_sa %d ", ntohl (mp->remote_sa_id));
-
- if (mp->is_add == 0)
- s = format (s, "del ");
-
- FINISH;
-}
-
-static void *vl_api_ipsec_gre_tunnel_dump_t_print
- (vl_api_ipsec_gre_tunnel_dump_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: ipsec_gre_tunnel_dump ");
-
- if (mp->sw_if_index != ~0)
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
-
- FINISH;
-}
-
-static void *vl_api_l2_interface_pbb_tag_rewrite_t_print
- (vl_api_l2_interface_pbb_tag_rewrite_t * mp, void *handle)
-{
- u8 *s;
- u32 vtr_op = ntohl (mp->vtr_op);
-
- s = format (0, "SCRIPT: l2_interface_pbb_tag_rewrite ");
-
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
- s = format (s, "vtr_op %d ", vtr_op);
- if (vtr_op != L2_VTR_DISABLED && vtr_op != L2_VTR_POP_2)
- {
- if (vtr_op == L2_VTR_TRANSLATE_2_2)
- s = format (s, "%d ", ntohs (mp->outer_tag));
- s = format (s, "dmac %U ", format_ethernet_address, &mp->b_dmac);
- s = format (s, "smac %U ", format_ethernet_address, &mp->b_smac);
- s = format (s, "sid %d ", ntohl (mp->i_sid));
- s = format (s, "vlanid %d ", ntohs (mp->b_vlanid));
- }
-
- FINISH;
-}
-
-static void *vl_api_flow_classify_set_interface_t_print
- (vl_api_flow_classify_set_interface_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: flow_classify_set_interface ");
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
- if (mp->ip4_table_index != ~0)
- s = format (s, "ip4-table %d ", ntohl (mp->ip4_table_index));
- if (mp->ip6_table_index != ~0)
- s = format (s, "ip6-table %d ", ntohl (mp->ip6_table_index));
- if (mp->is_add == 0)
- s = format (s, "del ");
-
- FINISH;
-}
-
-static void *
-vl_api_punt_t_print (vl_api_punt_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: punt ");
-
- if (mp->ipv != (u8) ~ 0)
- s = format (s, "ip %d ", mp->ipv);
-
- s = format (s, "protocol %d ", mp->l4_protocol);
-
- if (mp->l4_port != (u16) ~ 0)
- s = format (s, "port %d ", ntohs (mp->l4_port));
-
- if (!mp->is_add)
- s = format (s, "del ");
-
- FINISH;
-}
-
-static void *vl_api_flow_classify_dump_t_print
- (vl_api_flow_classify_dump_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: flow_classify_dump ");
- switch (mp->type)
- {
- case FLOW_CLASSIFY_TABLE_IP4:
- s = format (s, "type ip4 ");
- break;
- case FLOW_CLASSIFY_TABLE_IP6:
- s = format (s, "type ip6 ");
- break;
- default:
- break;
- }
-
- FINISH;
-}
-
-static void *vl_api_get_first_msg_id_t_print
- (vl_api_get_first_msg_id_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: get_first_msg_id %s ", mp->name);
-
- FINISH;
-}
-
-static void *vl_api_ioam_enable_t_print
- (vl_api_ioam_enable_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: ioam_enable ");
-
- if (mp->trace_enable)
- s = format (s, "trace enabled");
-
- if (mp->pot_enable)
- s = format (s, "POT enabled");
-
- if (mp->seqno)
- s = format (s, "Seqno enabled");
-
- if (mp->analyse)
- s = format (s, "Analyse enabled");
-
- FINISH;
-}
-
-static void *vl_api_ioam_disable_t_print
- (vl_api_ioam_disable_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: ioam_disable ");
- s = format (s, "trace disabled");
- s = format (s, "POT disabled");
- s = format (s, "Seqno disabled");
- s = format (s, "Analyse disabled");
-
- FINISH;
-}
-
-static void *vl_api_feature_enable_disable_t_print
- (vl_api_feature_enable_disable_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: feature_enable_disable ");
- s = format (s, "arc_name %s ", mp->arc_name);
- s = format (s, "feature_name %s ", mp->feature_name);
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
- if (!mp->enable)
- s = format (s, "disable");
-
- FINISH;
-}
-
-static void *vl_api_sw_interface_tag_add_del_t_print
- (vl_api_sw_interface_tag_add_del_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: sw_interface_tag_add_del ");
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
- if (mp->is_add)
- s = format (s, "tag %s ", mp->tag);
- else
- s = format (s, "del ");
-
- FINISH;
-}
-
-static void *vl_api_sw_interface_set_mtu_t_print
- (vl_api_sw_interface_set_mtu_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: sw_interface_set_mtu ");
- s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
- s = format (s, "tag %d ", ntohs (mp->mtu));
-
- FINISH;
-}
-
-#define foreach_custom_print_no_arg_function \
-_(lisp_eid_table_vni_dump) \
-_(lisp_map_resolver_dump) \
-_(lisp_map_server_dump) \
-_(show_lisp_rloc_probe_state) \
-_(show_lisp_map_register_state) \
-_(show_lisp_map_request_mode) \
-_(lisp_gpe_tunnel_dump)
-
-#define _(f) \
-static void * vl_api_ ## f ## _t_print \
- (vl_api_ ## f ## _t * mp, void * handle) \
-{ \
- u8 * s; \
- s = format (0, "SCRIPT: " #f ); \
- FINISH; \
-}
-foreach_custom_print_no_arg_function
-#undef _
-#define foreach_custom_print_function \
-_(CREATE_LOOPBACK, create_loopback) \
-_(SW_INTERFACE_SET_FLAGS, sw_interface_set_flags) \
-_(SW_INTERFACE_ADD_DEL_ADDRESS, sw_interface_add_del_address) \
-_(SW_INTERFACE_SET_TABLE, sw_interface_set_table) \
-_(SW_INTERFACE_SET_MPLS_ENABLE, sw_interface_set_mpls_enable) \
-_(SW_INTERFACE_SET_VPATH, sw_interface_set_vpath) \
-_(SW_INTERFACE_SET_VXLAN_BYPASS, sw_interface_set_vxlan_bypass) \
-_(TAP_CONNECT, tap_connect) \
-_(TAP_MODIFY, tap_modify) \
-_(TAP_DELETE, tap_delete) \
-_(SW_INTERFACE_TAP_DUMP, sw_interface_tap_dump) \
-_(IP_ADD_DEL_ROUTE, ip_add_del_route) \
-_(PROXY_ARP_ADD_DEL, proxy_arp_add_del) \
-_(PROXY_ARP_INTFC_ENABLE_DISABLE, proxy_arp_intfc_enable_disable) \
-_(MPLS_TUNNEL_ADD_DEL, mpls_tunnel_add_del) \
-_(SW_INTERFACE_SET_UNNUMBERED, sw_interface_set_unnumbered) \
-_(IP_NEIGHBOR_ADD_DEL, ip_neighbor_add_del) \
-_(RESET_VRF, reset_vrf) \
-_(CREATE_VLAN_SUBIF, create_vlan_subif) \
-_(CREATE_SUBIF, create_subif) \
-_(OAM_ADD_DEL, oam_add_del) \
-_(RESET_FIB, reset_fib) \
-_(DHCP_PROXY_CONFIG, dhcp_proxy_config) \
-_(DHCP_PROXY_SET_VSS, dhcp_proxy_set_vss) \
-_(SET_IP_FLOW_HASH, set_ip_flow_hash) \
-_(SW_INTERFACE_IP6_SET_LINK_LOCAL_ADDRESS, \
- sw_interface_ip6_set_link_local_address) \
-_(SW_INTERFACE_IP6ND_RA_PREFIX, sw_interface_ip6nd_ra_prefix) \
-_(SW_INTERFACE_IP6ND_RA_CONFIG, sw_interface_ip6nd_ra_config) \
-_(SET_ARP_NEIGHBOR_LIMIT, set_arp_neighbor_limit) \
-_(L2_PATCH_ADD_DEL, l2_patch_add_del) \
-_(SR_TUNNEL_ADD_DEL, sr_tunnel_add_del) \
-_(SR_POLICY_ADD_DEL, sr_policy_add_del) \
-_(SR_MULTICAST_MAP_ADD_DEL, sr_multicast_map_add_del) \
-_(SW_INTERFACE_SET_L2_XCONNECT, sw_interface_set_l2_xconnect) \
-_(L2FIB_ADD_DEL, l2fib_add_del) \
-_(L2_FLAGS, l2_flags) \
-_(BRIDGE_FLAGS, bridge_flags) \
-_(CLASSIFY_ADD_DEL_TABLE, classify_add_del_table) \
-_(CLASSIFY_ADD_DEL_SESSION, classify_add_del_session) \
-_(SW_INTERFACE_SET_L2_BRIDGE, sw_interface_set_l2_bridge) \
-_(SW_INTERFACE_SET_DPDK_HQOS_PIPE, sw_interface_set_dpdk_hqos_pipe) \
-_(SW_INTERFACE_SET_DPDK_HQOS_SUBPORT, sw_interface_set_dpdk_hqos_subport)\
-_(SW_INTERFACE_SET_DPDK_HQOS_TCTBL, sw_interface_set_dpdk_hqos_tctbl) \
-_(BRIDGE_DOMAIN_ADD_DEL, bridge_domain_add_del) \
-_(BRIDGE_DOMAIN_DUMP, bridge_domain_dump) \
-_(CLASSIFY_SET_INTERFACE_IP_TABLE, classify_set_interface_ip_table) \
-_(CLASSIFY_SET_INTERFACE_L2_TABLES, classify_set_interface_l2_tables) \
-_(ADD_NODE_NEXT, add_node_next) \
-_(DHCP_PROXY_CONFIG_2, dhcp_proxy_config_2) \
-_(DHCP_CLIENT_CONFIG, dhcp_client_config) \
-_(L2TPV3_CREATE_TUNNEL, l2tpv3_create_tunnel) \
-_(L2TPV3_SET_TUNNEL_COOKIES, l2tpv3_set_tunnel_cookies) \
-_(L2TPV3_INTERFACE_ENABLE_DISABLE, l2tpv3_interface_enable_disable) \
-_(L2TPV3_SET_LOOKUP_KEY, l2tpv3_set_lookup_key) \
-_(SW_IF_L2TPV3_TUNNEL_DUMP, sw_if_l2tpv3_tunnel_dump) \
-_(VXLAN_ADD_DEL_TUNNEL, vxlan_add_del_tunnel) \
-_(VXLAN_TUNNEL_DUMP, vxlan_tunnel_dump) \
-_(GRE_ADD_DEL_TUNNEL, gre_add_del_tunnel) \
-_(GRE_TUNNEL_DUMP, gre_tunnel_dump) \
-_(L2_FIB_CLEAR_TABLE, l2_fib_clear_table) \
-_(L2_INTERFACE_EFP_FILTER, l2_interface_efp_filter) \
-_(L2_INTERFACE_VLAN_TAG_REWRITE, l2_interface_vlan_tag_rewrite) \
-_(CREATE_VHOST_USER_IF, create_vhost_user_if) \
-_(MODIFY_VHOST_USER_IF, modify_vhost_user_if) \
-_(DELETE_VHOST_USER_IF, delete_vhost_user_if) \
-_(SW_INTERFACE_DUMP, sw_interface_dump) \
-_(CONTROL_PING, control_ping) \
-_(WANT_INTERFACE_EVENTS, want_interface_events) \
-_(CLI_REQUEST, cli_request) \
-_(CLI_INBAND, cli_inband) \
-_(MEMCLNT_CREATE, memclnt_create) \
-_(SW_INTERFACE_VHOST_USER_DUMP, sw_interface_vhost_user_dump) \
-_(SHOW_VERSION, show_version) \
-_(L2_FIB_TABLE_DUMP, l2_fib_table_dump) \
-_(VXLAN_GPE_ADD_DEL_TUNNEL, vxlan_gpe_add_del_tunnel) \
-_(VXLAN_GPE_TUNNEL_DUMP, vxlan_gpe_tunnel_dump) \
-_(INTERFACE_NAME_RENUMBER, interface_name_renumber) \
-_(WANT_IP4_ARP_EVENTS, want_ip4_arp_events) \
-_(WANT_IP6_ND_EVENTS, want_ip6_nd_events) \
-_(INPUT_ACL_SET_INTERFACE, input_acl_set_interface) \
-_(IP_ADDRESS_DUMP, ip_address_dump) \
-_(IP_DUMP, ip_dump) \
-_(DELETE_LOOPBACK, delete_loopback) \
-_(BD_IP_MAC_ADD_DEL, bd_ip_mac_add_del) \
-_(COP_INTERFACE_ENABLE_DISABLE, cop_interface_enable_disable) \
-_(COP_WHITELIST_ENABLE_DISABLE, cop_whitelist_enable_disable) \
-_(AF_PACKET_CREATE, af_packet_create) \
-_(AF_PACKET_DELETE, af_packet_delete) \
-_(SW_INTERFACE_CLEAR_STATS, sw_interface_clear_stats) \
-_(MPLS_FIB_DUMP, mpls_fib_dump) \
-_(MPLS_TUNNEL_DUMP, mpls_tunnel_dump) \
-_(CLASSIFY_TABLE_IDS,classify_table_ids) \
-_(CLASSIFY_TABLE_BY_INTERFACE, classify_table_by_interface) \
-_(CLASSIFY_TABLE_INFO,classify_table_info) \
-_(CLASSIFY_SESSION_DUMP,classify_session_dump) \
-_(SET_IPFIX_EXPORTER, set_ipfix_exporter) \
-_(IPFIX_EXPORTER_DUMP, ipfix_exporter_dump) \
-_(SET_IPFIX_CLASSIFY_STREAM, set_ipfix_classify_stream) \
-_(IPFIX_CLASSIFY_STREAM_DUMP, ipfix_classify_stream_dump) \
-_(IPFIX_CLASSIFY_TABLE_ADD_DEL, ipfix_classify_table_add_del) \
-_(IPFIX_CLASSIFY_TABLE_DUMP, ipfix_classify_table_dump) \
-_(SW_INTERFACE_SPAN_ENABLE_DISABLE, sw_interface_span_enable_disable) \
-_(SW_INTERFACE_SPAN_DUMP, sw_interface_span_dump) \
-_(GET_NEXT_INDEX, get_next_index) \
-_(PG_CREATE_INTERFACE,pg_create_interface) \
-_(PG_CAPTURE, pg_capture) \
-_(PG_ENABLE_DISABLE, pg_enable_disable) \
-_(POLICER_ADD_DEL, policer_add_del) \
-_(POLICER_DUMP, policer_dump) \
-_(POLICER_CLASSIFY_SET_INTERFACE, policer_classify_set_interface) \
-_(POLICER_CLASSIFY_DUMP, policer_classify_dump) \
-_(IP_SOURCE_AND_PORT_RANGE_CHECK_ADD_DEL, \
- ip_source_and_port_range_check_add_del) \
-_(IP_SOURCE_AND_PORT_RANGE_CHECK_INTERFACE_ADD_DEL, \
- ip_source_and_port_range_check_interface_add_del) \
-_(LISP_ENABLE_DISABLE, lisp_enable_disable) \
-_(LISP_GPE_ENABLE_DISABLE, lisp_gpe_enable_disable) \
-_(LISP_GPE_ADD_DEL_IFACE, lisp_gpe_add_del_iface) \
-_(LISP_PITR_SET_LOCATOR_SET, lisp_pitr_set_locator_set) \
-_(LISP_MAP_REQUEST_MODE, lisp_map_request_mode) \
-_(SHOW_LISP_MAP_REQUEST_MODE, show_lisp_map_request_mode) \
-_(LISP_ADD_DEL_REMOTE_MAPPING, lisp_add_del_remote_mapping) \
-_(LISP_ADD_DEL_ADJACENCY, lisp_add_del_adjacency) \
-_(LISP_ADD_DEL_MAP_REQUEST_ITR_RLOCS, \
- lisp_add_del_map_request_itr_rlocs) \
-_(LISP_EID_TABLE_ADD_DEL_MAP, lisp_eid_table_add_del_map) \
-_(LISP_ADD_DEL_LOCAL_EID, lisp_add_del_local_eid) \
-_(LISP_GPE_ADD_DEL_FWD_ENTRY, lisp_gpe_add_del_fwd_entry) \
-_(LISP_ADD_DEL_LOCATOR_SET, lisp_add_del_locator_set) \
-_(LISP_ADD_DEL_MAP_RESOLVER, lisp_add_del_map_resolver) \
-_(LISP_ADD_DEL_LOCATOR, lisp_add_del_locator) \
-_(LISP_EID_TABLE_DUMP, lisp_eid_table_dump) \
-_(LISP_EID_TABLE_MAP_DUMP, lisp_eid_table_map_dump) \
-_(LISP_EID_TABLE_VNI_DUMP, lisp_eid_table_vni_dump) \
-_(LISP_GPE_TUNNEL_DUMP, lisp_gpe_tunnel_dump) \
-_(LISP_MAP_RESOLVER_DUMP, lisp_map_resolver_dump) \
-_(LISP_MAP_SERVER_DUMP, lisp_map_server_dump) \
-_(LISP_LOCATOR_SET_DUMP, lisp_locator_set_dump) \
-_(LISP_LOCATOR_DUMP, lisp_locator_dump) \
-_(LISP_ADJACENCIES_GET, lisp_adjacencies_get) \
-_(SHOW_LISP_RLOC_PROBE_STATE, show_lisp_rloc_probe_state) \
-_(SHOW_LISP_MAP_REGISTER_STATE, show_lisp_map_register_state) \
-_(LISP_RLOC_PROBE_ENABLE_DISABLE, lisp_rloc_probe_enable_disable) \
-_(LISP_MAP_REGISTER_ENABLE_DISABLE, lisp_map_register_enable_disable) \
-_(IPSEC_GRE_ADD_DEL_TUNNEL, ipsec_gre_add_del_tunnel) \
-_(IPSEC_GRE_TUNNEL_DUMP, ipsec_gre_tunnel_dump) \
-_(DELETE_SUBIF, delete_subif) \
-_(L2_INTERFACE_PBB_TAG_REWRITE, l2_interface_pbb_tag_rewrite) \
-_(PUNT, punt) \
-_(FLOW_CLASSIFY_SET_INTERFACE, flow_classify_set_interface) \
-_(FLOW_CLASSIFY_DUMP, flow_classify_dump) \
-_(GET_FIRST_MSG_ID, get_first_msg_id) \
-_(IOAM_ENABLE, ioam_enable) \
-_(IOAM_DISABLE, ioam_disable) \
-_(IP_FIB_DUMP, ip_fib_dump) \
-_(IP6_FIB_DUMP, ip6_fib_dump) \
-_(FEATURE_ENABLE_DISABLE, feature_enable_disable) \
-_(SW_INTERFACE_TAG_ADD_DEL, sw_interface_tag_add_del) \
-_(SW_INTERFACE_SET_MTU, sw_interface_set_mtu)
- void
-vl_msg_api_custom_dump_configure (api_main_t * am)
-{
-#define _(n,f) am->msg_print_handlers[VL_API_##n] \
- = (void *) vl_api_##f##_t_print;
- foreach_custom_print_function;
-#undef _
-}
-
-/*
- * fd.io coding-style-patch-verification: ON
- *
- * Local Variables:
- * eval: (c-set-style "gnu")
- * End:
- */
diff --git a/vpp/vpp-api/gmon.c b/vpp/vpp-api/gmon.c
deleted file mode 100644
index e5cb1271f6b..00000000000
--- a/vpp/vpp-api/gmon.c
+++ /dev/null
@@ -1,319 +0,0 @@
-/*
- * Copyright (c) 2012 Cisco and/or its affiliates.
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <sys/mman.h>
-#include <sys/stat.h>
-#include <netinet/in.h>
-#include <signal.h>
-#include <pthread.h>
-#include <unistd.h>
-#include <time.h>
-#include <fcntl.h>
-#include <string.h>
-#include <vppinfra/clib.h>
-#include <vppinfra/vec.h>
-#include <vppinfra/hash.h>
-#include <vppinfra/bitmap.h>
-#include <vppinfra/fifo.h>
-#include <vppinfra/time.h>
-#include <vppinfra/mheap.h>
-#include <vppinfra/heap.h>
-#include <vppinfra/pool.h>
-#include <vppinfra/format.h>
-#include <vlibapi/api.h>
-#include <vlibmemory/api.h>
-
-#include <vlib/vlib.h>
-#include <vlib/unix/unix.h>
-#include <vnet/api_errno.h>
-
-#include <svmdb.h>
-
-typedef struct
-{
- svmdb_client_t *svmdb_client;
- f64 *vector_rate_ptr;
- f64 *input_rate_ptr;
- f64 *sig_error_rate_ptr;
- pid_t *vpef_pid_ptr;
- u64 last_sig_errors;
- u64 current_sig_errors;
- uword *sig_error_bitmap;
- vlib_main_t *vlib_main;
- vlib_main_t **my_vlib_mains;
-
-} gmon_main_t;
-
-#if DPDK == 0
-static inline u64
-vnet_get_aggregate_rx_packets (void)
-{
- return 0;
-}
-#else
-#include <vlib/vlib.h>
-#include <vnet/vnet.h>
-#include <vnet/devices/dpdk/dpdk.h>
-#endif
-
-gmon_main_t gmon_main;
-
-static u64
-get_significant_errors (gmon_main_t * gm)
-{
- vlib_main_t *this_vlib_main;
- vlib_error_main_t *em;
- uword code;
- int vm_index;
- u64 significant_errors = 0;
-
- /* *INDENT-OFF* */
- clib_bitmap_foreach (code, gm->sig_error_bitmap,
- ({
- for (vm_index = 0; vm_index < vec_len (gm->my_vlib_mains); vm_index++)
- {
- this_vlib_main = gm->my_vlib_mains[vm_index];
- em = &this_vlib_main->error_main;
- significant_errors += em->counters[code] -
- ((vec_len(em->counters_last_clear) > code) ?
- em->counters_last_clear[code] : 0);
- }
- }));
- /* *INDENT-ON* */
-
- return (significant_errors);
-}
-
-static clib_error_t *
-publish_pid (vlib_main_t * vm)
-{
- gmon_main_t *gm = &gmon_main;
-
- *gm->vpef_pid_ptr = getpid ();
-
- return 0;
-}
-
-VLIB_API_INIT_FUNCTION (publish_pid);
-
-
-static uword
-gmon_process (vlib_main_t * vm, vlib_node_runtime_t * rt, vlib_frame_t * f)
-{
- f64 vector_rate;
- u64 input_packets, last_input_packets, new_sig_errors;
- f64 last_runtime, dt, now;
- gmon_main_t *gm = &gmon_main;
- int i;
-
- last_runtime = 0.0;
- last_input_packets = 0;
-
- last_runtime = 0.0;
- last_input_packets = 0;
-
- /* Initial wait for the world to settle down */
- vlib_process_suspend (vm, 5.0);
-
- if (vec_len (vlib_mains) == 0)
- vec_add1 (gm->my_vlib_mains, &vlib_global_main);
- else
- {
- for (i = 0; i < vec_len (vlib_mains); i++)
- vec_add1 (gm->my_vlib_mains, vlib_mains[i]);
- }
-
- while (1)
- {
- vlib_process_suspend (vm, 5.0);
- vector_rate = vlib_last_vector_length_per_node (vm);
- *gm->vector_rate_ptr = vector_rate;
- now = vlib_time_now (vm);
- dt = now - last_runtime;
- input_packets = vnet_get_aggregate_rx_packets ();
- *gm->input_rate_ptr = (f64) (input_packets - last_input_packets) / dt;
- last_runtime = now;
- last_input_packets = input_packets;
-
- new_sig_errors = get_significant_errors (gm);
- *gm->sig_error_rate_ptr =
- ((f64) (new_sig_errors - gm->last_sig_errors)) / dt;
- gm->last_sig_errors = new_sig_errors;
- }
-
- return 0; /* not so much */
-}
-
-/* *INDENT-OFF* */
-VLIB_REGISTER_NODE (gmon_process_node,static) = {
- .function = gmon_process,
- .type = VLIB_NODE_TYPE_PROCESS,
- .name = "gmon-process",
-};
-/* *INDENT-ON* */
-
-static clib_error_t *
-gmon_init (vlib_main_t * vm)
-{
- gmon_main_t *gm = &gmon_main;
- api_main_t *am = &api_main;
- pid_t *swp = 0;
- f64 *v = 0;
- clib_error_t *error;
- svmdb_map_args_t _ma, *ma = &_ma;
-
- if ((error = vlib_call_init_function (vm, vpe_api_init)))
- return (error);
-
- if ((error = vlib_call_init_function (vm, vlibmemory_init)))
- return (error);
-
- gm->vlib_main = vm;
-
- memset (ma, 0, sizeof (*ma));
- ma->root_path = am->root_path;
- ma->uid = am->api_uid;
- ma->gid = am->api_gid;
-
- gm->svmdb_client = svmdb_map (ma);
-
- /* Find or create, set to zero */
- vec_add1 (v, 0.0);
- svmdb_local_set_vec_variable (gm->svmdb_client,
- "vpp_vector_rate", (char *) v, sizeof (*v));
- vec_free (v);
- vec_add1 (v, 0.0);
- svmdb_local_set_vec_variable (gm->svmdb_client,
- "vpp_input_rate", (char *) v, sizeof (*v));
- vec_free (v);
- vec_add1 (v, 0.0);
- svmdb_local_set_vec_variable (gm->svmdb_client,
- "vpp_sig_error_rate",
- (char *) v, sizeof (*v));
- vec_free (v);
-
- vec_add1 (swp, 0.0);
- svmdb_local_set_vec_variable (gm->svmdb_client,
- "vpp_pid", (char *) swp, sizeof (*swp));
- vec_free (swp);
-
- /* the value cells will never move, so acquire references to them */
- gm->vector_rate_ptr =
- svmdb_local_get_variable_reference (gm->svmdb_client,
- SVMDB_NAMESPACE_VEC,
- "vpp_vector_rate");
- gm->input_rate_ptr =
- svmdb_local_get_variable_reference (gm->svmdb_client,
- SVMDB_NAMESPACE_VEC,
- "vpp_input_rate");
- gm->sig_error_rate_ptr =
- svmdb_local_get_variable_reference (gm->svmdb_client,
- SVMDB_NAMESPACE_VEC,
- "vpp_sig_error_rate");
- gm->vpef_pid_ptr =
- svmdb_local_get_variable_reference (gm->svmdb_client,
- SVMDB_NAMESPACE_VEC, "vpp_pid");
- return 0;
-}
-
-VLIB_INIT_FUNCTION (gmon_init);
-
-static clib_error_t *
-gmon_exit (vlib_main_t * vm)
-{
- gmon_main_t *gm = &gmon_main;
-
- if (gm->vector_rate_ptr)
- {
- *gm->vector_rate_ptr = 0.0;
- *gm->vpef_pid_ptr = 0;
- *gm->input_rate_ptr = 0.0;
- *gm->sig_error_rate_ptr = 0.0;
- svm_region_unmap ((void *) gm->svmdb_client->db_rp);
- vec_free (gm->svmdb_client);
- }
- return 0;
-}
-
-VLIB_MAIN_LOOP_EXIT_FUNCTION (gmon_exit);
-
-static int
-significant_error_enable_disable (gmon_main_t * gm, u32 index, int enable)
-{
- vlib_main_t *vm = gm->vlib_main;
- vlib_error_main_t *em = &vm->error_main;
-
- if (index >= vec_len (em->counters))
- return VNET_API_ERROR_NO_SUCH_ENTRY;
-
- gm->sig_error_bitmap =
- clib_bitmap_set (gm->sig_error_bitmap, index, enable);
- return 0;
-}
-
-static clib_error_t *
-set_significant_error_command_fn (vlib_main_t * vm,
- unformat_input_t * input,
- vlib_cli_command_t * cmd)
-{
- u32 index;
- int enable = 1;
- int rv;
- gmon_main_t *gm = &gmon_main;
-
- while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
- {
- if (unformat (input, "%d", &index))
- ;
- else if (unformat (input, "disable"))
- enable = 0;
- else
- return clib_error_return (0, "unknown input `%U'",
- format_unformat_error, input);
- }
-
- rv = significant_error_enable_disable (gm, index, enable);
-
- switch (rv)
- {
- case 0:
- break;
-
- default:
- return clib_error_return
- (0, "significant_error_enable_disable returned %d", rv);
- }
-
- return 0;
-}
-
-/* *INDENT-OFF* */
-VLIB_CLI_COMMAND (set_significant_error_command, static) = {
- .path = "set significant error",
- .short_help = "set significant error <counter-index-nnn> [disable]",
- .function = set_significant_error_command_fn,
-};
-/* *INDENT-ON* */
-
-/*
- * fd.io coding-style-patch-verification: ON
- *
- * Local Variables:
- * eval: (c-set-style "gnu")
- * End:
- */
diff --git a/vpp/vpp-api/json_format.c b/vpp/vpp-api/json_format.c
deleted file mode 100644
index 63454b87ac7..00000000000
--- a/vpp/vpp-api/json_format.c
+++ /dev/null
@@ -1,304 +0,0 @@
-/*
- *------------------------------------------------------------------
- * json_format.c
- *
- * Copyright (c) 2015 Cisco and/or its affiliates.
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *------------------------------------------------------------------
-
-*/
-#include <inttypes.h>
-#include "json_format.h"
-#include <vnet/ip/ip.h>
-#include <vppinfra/vec.h>
-
-#define VAT_TAB_WIDTH 2
-
-typedef struct vat_print_ctx_s
-{
- FILE *ofp;
- u32 indent;
-} vat_print_ctx_t;
-
-/* Format an IP4 address. */
-static u8 *
-vat_json_format_ip4_address (u8 * s, va_list * args)
-{
- u8 *a = va_arg (*args, u8 *);
- return format (s, "%d.%d.%d.%d", a[0], a[1], a[2], a[3]);
-}
-
-/* Format an IP6 address. */
-static u8 *
-vat_json_format_ip6_address (u8 * s, va_list * args)
-{
- ip6_address_t *a = va_arg (*args, ip6_address_t *);
- u32 i, i_max_n_zero, max_n_zeros, i_first_zero, n_zeros, last_double_colon;
-
- i_max_n_zero = ARRAY_LEN (a->as_u16);
- max_n_zeros = 0;
- i_first_zero = i_max_n_zero;
- n_zeros = 0;
- for (i = 0; i < ARRAY_LEN (a->as_u16); i++)
- {
- u32 is_zero = a->as_u16[i] == 0;
- if (is_zero && i_first_zero >= ARRAY_LEN (a->as_u16))
- {
- i_first_zero = i;
- n_zeros = 0;
- }
- n_zeros += is_zero;
- if ((!is_zero && n_zeros > max_n_zeros)
- || (i + 1 >= ARRAY_LEN (a->as_u16) && n_zeros > max_n_zeros))
- {
- i_max_n_zero = i_first_zero;
- max_n_zeros = n_zeros;
- i_first_zero = ARRAY_LEN (a->as_u16);
- n_zeros = 0;
- }
- }
-
- last_double_colon = 0;
- for (i = 0; i < ARRAY_LEN (a->as_u16); i++)
- {
- if (i == i_max_n_zero && max_n_zeros > 1)
- {
- s = format (s, "::");
- i += max_n_zeros - 1;
- last_double_colon = 1;
- }
- else
- {
- s = format (s, "%s%x",
- (last_double_colon || i == 0) ? "" : ":",
- clib_net_to_host_u16 (a->as_u16[i]));
- last_double_colon = 0;
- }
- }
-
- return s;
-}
-
-static void
-vat_json_indent_print (vat_print_ctx_t * ctx)
-{
- int i;
- for (i = 0; i < ctx->indent * VAT_TAB_WIDTH; i++)
- {
- fformat (ctx->ofp, " ");
- }
-}
-
-static void
-vat_json_indent_line (vat_print_ctx_t * ctx, char *fmt, ...)
-{
- va_list va;
-
- vat_json_indent_print (ctx);
- va_start (va, fmt);
- va_fformat (ctx->ofp, fmt, &va);
- va_end (va);
-}
-
-static u8
-is_num_only (vat_json_node_t * p)
-{
- vat_json_node_t *elem;
- vec_foreach (elem, p)
- {
- if (VAT_JSON_INT != elem->type && VAT_JSON_UINT != elem->type)
- {
- return 0;
- }
- }
- return 1;
-}
-
-static void
-vat_json_print_internal (vat_print_ctx_t * ctx, vat_json_node_t * node)
-{
-#define P(fmt,...) fformat(ctx->ofp, fmt, ##__VA_ARGS__)
-#define PL(fmt,...) fformat(ctx->ofp, fmt"\n", ##__VA_ARGS__)
-#define PPL(fmt,...) vat_json_indent_line(ctx, fmt"\n", ##__VA_ARGS__)
-#define PP(fmt,...) vat_json_indent_line(ctx, fmt, ##__VA_ARGS__)
-#define INCR (ctx->indent++)
-#define DECR (ctx->indent--)
-
- vat_json_pair_t *pair;
- u32 i, count;
- vat_json_node_t *elem;
- u8 num_only = 0;
-
- if (!node)
- {
- return;
- }
-
- switch (node->type)
- {
- case VAT_JSON_OBJECT:
- count = vec_len (node->pairs);
- if (count >= 1)
- {
- PL ("{");
- INCR;
- for (i = 0; i < count; i++)
- {
- pair = &node->pairs[i];
- PP ("\"%s\": ", pair->name);
- vat_json_print_internal (ctx, &pair->value);
- if (i < count - 1)
- {
- P (",");
- }
- PL ();
- }
- DECR;
- PP ("}");
- }
- else
- {
- P ("{}");
- }
- break;
- case VAT_JSON_ARRAY:
- num_only = is_num_only (node->array);
- count = vec_len (node->array);
- if (count >= 1)
- {
- if (num_only)
- P ("[");
- else
- PL ("[ ");
- INCR;
- for (i = 0; i < count; i++)
- {
- elem = &node->array[i];
- if (!num_only)
- {
- vat_json_indent_print (ctx);
- }
- vat_json_print_internal (ctx, elem);
- if (i < count - 1)
- {
- if (num_only)
- {
- P (", ");
- }
- else
- {
- P (",");
- }
- }
- if (!num_only)
- PL ();
- }
- DECR;
- if (!num_only)
- PP ("]");
- else
- P ("]");
- }
- else
- {
- P ("[]");
- }
- break;
- case VAT_JSON_INT:
- P ("%d", node->sint);
- break;
- case VAT_JSON_UINT:
- P ("%" PRIu64, node->uint);
- break;
- case VAT_JSON_REAL:
- P ("%f", node->real);
- break;
- case VAT_JSON_STRING:
- P ("\"%s\"", node->string);
- break;
- case VAT_JSON_IPV4:
- P ("\"%U\"", vat_json_format_ip4_address, &node->ip4);
- break;
- case VAT_JSON_IPV6:
- P ("\"%U\"", vat_json_format_ip6_address, &node->ip6);
- break;
- default:
- break;
- }
-#undef PPL
-#undef PP
-#undef PL
-#undef P
-}
-
-void
-vat_json_print (FILE * ofp, vat_json_node_t * node)
-{
- vat_print_ctx_t ctx;
- memset (&ctx, 0, sizeof ctx);
- ctx.indent = 0;
- ctx.ofp = ofp;
- fformat (ofp, "\n");
- vat_json_print_internal (&ctx, node);
- fformat (ofp, "\n");
-}
-
-void
-vat_json_free (vat_json_node_t * node)
-{
- int i = 0;
-
- if (NULL == node)
- {
- return;
- }
- switch (node->type)
- {
- case VAT_JSON_OBJECT:
- for (i = 0; i < vec_len (node->pairs); i++)
- {
- vat_json_free (&node->pairs[i].value);
- }
- if (NULL != node->pairs)
- {
- vec_free (node->pairs);
- }
- break;
- case VAT_JSON_ARRAY:
- for (i = 0; i < vec_len (node->array); i++)
- {
- vat_json_free (&node->array[i]);
- }
- if (NULL != node->array)
- {
- vec_free (node->array);
- }
- break;
- case VAT_JSON_STRING:
- if (NULL != node->string)
- {
- vec_free (node->string);
- }
- break;
- default:
- break;
- }
-}
-
-/*
- * fd.io coding-style-patch-verification: ON
- *
- * Local Variables:
- * eval: (c-set-style "gnu")
- * End:
- */
diff --git a/vpp/vpp-api/json_format.h b/vpp/vpp-api/json_format.h
deleted file mode 100644
index 154fb3df04b..00000000000
--- a/vpp/vpp-api/json_format.h
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
- *------------------------------------------------------------------
- * json_format.h
- *
- * Copyright (c) 2015 Cisco and/or its affiliates.
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *------------------------------------------------------------------
- */
-
-#ifndef __JSON_FORMAT_H__
-#define __JSON_FORMAT_H__
-
-#include <vppinfra/clib.h>
-#include <vppinfra/format.h>
-#include <netinet/ip.h>
-
-/* JSON value type */
-typedef enum
-{
- VAT_JSON_NONE,
- VAT_JSON_OBJECT,
- VAT_JSON_ARRAY,
- VAT_JSON_STRING,
- VAT_JSON_REAL,
- VAT_JSON_UINT,
- VAT_JSON_INT,
- VAT_JSON_IPV4,
- VAT_JSON_IPV6,
- VAT_JSON_MAX
-} vat_json_val_type_t;
-
-typedef struct vat_json_node_s vat_json_node_t;
-typedef struct vat_json_pair_s vat_json_pair_t;
-
-/* JSON object structure */
-struct vat_json_node_s
-{
- vat_json_val_type_t type;
- union
- {
- vat_json_pair_t *pairs;
- vat_json_node_t *array;
- u8 *string;
- struct in_addr ip4;
- struct in6_addr ip6;
- u64 uint;
- i64 sint;
- f64 real;
- };
-};
-
-struct vat_json_pair_s
-{
- const char *name;
- vat_json_node_t value;
-};
-
-void vat_json_print (FILE * ofp, vat_json_node_t * node);
-void vat_json_free (vat_json_node_t * node);
-
-static_always_inline void
-vat_json_init_object (vat_json_node_t * json)
-{
- json->type = VAT_JSON_OBJECT;
- json->pairs = NULL;
-}
-
-static_always_inline void
-vat_json_init_array (vat_json_node_t * json)
-{
- json->type = VAT_JSON_ARRAY;
- json->array = NULL;
-}
-
-static_always_inline void
-vat_json_set_string (vat_json_node_t * json, u8 * str)
-{
- json->type = VAT_JSON_STRING;
- json->string = str;
-}
-
-static_always_inline void
-vat_json_set_string_copy (vat_json_node_t * json, const u8 * str)
-{
- u8 *ns = NULL;
- vec_validate (ns, strlen ((const char *) str));
- strcpy ((char *) ns, (const char *) str);
- vec_add1 (ns, '\0');
- vat_json_set_string (json, ns);
-}
-
-static_always_inline void
-vat_json_set_int (vat_json_node_t * json, i64 num)
-{
- json->type = VAT_JSON_INT;
- json->sint = num;
-}
-
-static_always_inline void
-vat_json_set_uint (vat_json_node_t * json, u64 num)
-{
- json->type = VAT_JSON_UINT;
- json->uint = num;
-}
-
-static_always_inline void
-vat_json_set_real (vat_json_node_t * json, f64 real)
-{
- json->type = VAT_JSON_REAL;
- json->real = real;
-}
-
-static_always_inline void
-vat_json_set_ip4 (vat_json_node_t * json, struct in_addr ip4)
-{
- json->type = VAT_JSON_IPV4;
- json->ip4 = ip4;
-}
-
-static_always_inline void
-vat_json_set_ip6 (vat_json_node_t * json, struct in6_addr ip6)
-{
- json->type = VAT_JSON_IPV6;
- json->ip6 = ip6;
-}
-
-static_always_inline vat_json_node_t *
-vat_json_object_add (vat_json_node_t * json, const char *name)
-{
- ASSERT (VAT_JSON_OBJECT == json->type);
- uword pos = vec_len (json->pairs);
- vec_validate (json->pairs, pos);
- json->pairs[pos].name = name;
- return &json->pairs[pos].value;
-}
-
-static_always_inline vat_json_node_t *
-vat_json_array_add (vat_json_node_t * json)
-{
- ASSERT (VAT_JSON_ARRAY == json->type);
- uword pos = vec_len (json->array);
- vec_validate (json->array, pos);
- return &json->array[pos];
-}
-
-static_always_inline vat_json_node_t *
-vat_json_object_add_list (vat_json_node_t * json, const char *name)
-{
- vat_json_node_t *array_node = vat_json_object_add (json, name);
- vat_json_init_array (array_node);
- return array_node;
-}
-
-static_always_inline void
-vat_json_object_add_string_copy (vat_json_node_t * json,
- const char *name, u8 * str)
-{
- vat_json_set_string_copy (vat_json_object_add (json, name), str);
-}
-
-static_always_inline void
-vat_json_object_add_uint (vat_json_node_t * json,
- const char *name, u64 number)
-{
- vat_json_set_uint (vat_json_object_add (json, name), number);
-}
-
-static_always_inline void
-vat_json_object_add_int (vat_json_node_t * json, const char *name, i64 number)
-{
- vat_json_set_int (vat_json_object_add (json, name), number);
-}
-
-static_always_inline void
-vat_json_object_add_real (vat_json_node_t * json, const char *name, f64 real)
-{
- vat_json_set_real (vat_json_object_add (json, name), real);
-}
-
-static_always_inline void
-vat_json_object_add_ip4 (vat_json_node_t * json,
- const char *name, struct in_addr ip4)
-{
- vat_json_set_ip4 (vat_json_object_add (json, name), ip4);
-}
-
-static_always_inline void
-vat_json_object_add_ip6 (vat_json_node_t * json,
- const char *name, struct in6_addr ip6)
-{
- vat_json_set_ip6 (vat_json_object_add (json, name), ip6);
-}
-
-static_always_inline void
-vat_json_array_add_int (vat_json_node_t * json, i64 number)
-{
- vat_json_set_int (vat_json_array_add (json), number);
-}
-
-static_always_inline void
-vat_json_array_add_uint (vat_json_node_t * json, u64 number)
-{
- vat_json_set_uint (vat_json_array_add (json), number);
-}
-
-static_always_inline void
-vat_json_object_add_bytes (vat_json_node_t * json,
- const char *name, u8 * array, uword size)
-{
- ASSERT (VAT_JSON_OBJECT == json->type);
- vat_json_node_t *json_array = vat_json_object_add (json, name);
- vat_json_init_array (json_array);
- int i;
- for (i = 0; i < size; i++)
- {
- vat_json_array_add_uint (json_array, array[i]);
- }
-}
-
-static_always_inline vat_json_node_t *
-vat_json_object_get_element (vat_json_node_t * json, const char *name)
-{
- int i = 0;
-
- ASSERT (VAT_JSON_OBJECT == json->type);
- for (i = 0; i < vec_len (json->pairs); i++)
- {
- if (0 == strcmp (json->pairs[i].name, name))
- {
- return &json->pairs[i].value;
- }
- }
- return NULL;
-}
-
-#endif /* __JSON_FORMAT_H__ */
-
-/*
- * fd.io coding-style-patch-verification: ON
- *
- * Local Variables:
- * eval: (c-set-style "gnu")
- * End:
- */
diff --git a/vpp/vpp-api/summary_stats_client.c b/vpp/vpp-api/summary_stats_client.c
deleted file mode 100644
index 54e16669c86..00000000000
--- a/vpp/vpp-api/summary_stats_client.c
+++ /dev/null
@@ -1,302 +0,0 @@
-/*
- *------------------------------------------------------------------
- * summary_stats_client -
- *
- * Copyright (c) 2010 Cisco and/or its affiliates.
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *------------------------------------------------------------------
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/mman.h>
-#include <sys/stat.h>
-#include <netinet/in.h>
-#include <netdb.h>
-#include <signal.h>
-#include <pthread.h>
-#include <unistd.h>
-#include <time.h>
-#include <fcntl.h>
-#include <string.h>
-#include <vppinfra/clib.h>
-#include <vppinfra/vec.h>
-#include <vppinfra/hash.h>
-#include <vppinfra/bitmap.h>
-#include <vppinfra/fifo.h>
-#include <vppinfra/time.h>
-#include <vppinfra/mheap.h>
-#include <vppinfra/heap.h>
-#include <vppinfra/pool.h>
-#include <vppinfra/format.h>
-#include <vppinfra/error.h>
-
-#include <vnet/vnet.h>
-#include <vlib/vlib.h>
-#include <vlib/unix/unix.h>
-#include <vlibapi/api.h>
-#include <vlibmemory/api.h>
-
-#include <vpp-api/vpe_msg_enum.h>
-
-#include <vnet/ip/ip.h>
-
-#define f64_endian(a)
-#define f64_print(a,b)
-
-#define vl_typedefs /* define message structures */
-#include <vpp-api/vpe_all_api_h.h>
-#undef vl_typedefs
-
-#define vl_endianfun /* define message structures */
-#include <vpp-api/vpe_all_api_h.h>
-#undef vl_endianfun
-
-/* instantiate all the print functions we know about */
-#define vl_print(handle, ...)
-#define vl_printfun
-#include <vpp-api/vpe_all_api_h.h>
-#undef vl_printfun
-
-vl_shmem_hdr_t *shmem_hdr;
-
-typedef struct
-{
- volatile int sigterm_received;
-
- struct sockaddr_in send_data_addr;
- int send_data_socket;
- u8 *display_name;
-
- /* convenience */
- unix_shared_memory_queue_t *vl_input_queue;
- u32 my_client_index;
-} test_main_t;
-
-test_main_t test_main;
-
-/*
- * Satisfy external references when -lvlib is not available.
- */
-vlib_main_t vlib_global_main;
-vlib_main_t **vlib_mains;
-
-void
-vlib_cli_output (struct vlib_main_t *vm, char *fmt, ...)
-{
- clib_warning ("vlib_cli_output callled...");
-}
-
-
-static void
-vl_api_vnet_summary_stats_reply_t_handler (vl_api_vnet_summary_stats_reply_t *
- mp)
-{
- test_main_t *tm = &test_main;
- static u8 *sb;
- int n;
-
- printf ("total rx pkts %llu, total rx bytes %llu\n",
- (unsigned long long) mp->total_pkts[0],
- (unsigned long long) mp->total_bytes[0]);
- printf ("total tx pkts %llu, total tx bytes %llu\n",
- (unsigned long long) mp->total_pkts[1],
- (unsigned long long) mp->total_bytes[1]);
- printf ("vector rate %.2f\n", mp->vector_rate);
-
- vec_reset_length (sb);
- sb = format (sb, "%v,%.0f,%llu,%llu,%llu,%llu\n%c",
- tm->display_name, mp->vector_rate,
- (unsigned long long) mp->total_pkts[0],
- (unsigned long long) mp->total_bytes[0],
- (unsigned long long) mp->total_pkts[1],
- (unsigned long long) mp->total_bytes[1], 0);
-
- n = sendto (tm->send_data_socket, sb, vec_len (sb),
- 0, (struct sockaddr *) &tm->send_data_addr,
- sizeof (tm->send_data_addr));
-
- if (n != vec_len (sb))
- clib_unix_warning ("sendto");
-
-}
-
-#define foreach_api_msg \
-_(VNET_SUMMARY_STATS_REPLY, vnet_summary_stats_reply)
-
-int
-connect_to_vpe (char *name)
-{
- int rv = 0;
-
- rv = vl_client_connect_to_vlib ("/vpe-api", name, 32);
-
-#define _(N,n) \
- vl_msg_api_set_handlers(VL_API_##N, #n, \
- vl_api_##n##_t_handler, \
- vl_noop_handler, \
- vl_api_##n##_t_endian, \
- vl_api_##n##_t_print, \
- sizeof(vl_api_##n##_t), 1);
- foreach_api_msg;
-#undef _
-
- shmem_hdr = api_main.shmem_hdr;
-
- return rv;
-}
-
-int
-disconnect_from_vpe (void)
-{
- vl_client_disconnect_from_vlib ();
- return 0;
-}
-
-static void
-sigterm_handler (int sig)
-{
- test_main_t *tm = &test_main;
- tm->sigterm_received = 1;
-}
-
-/* Parse an IP4 address %d.%d.%d.%d. */
-uword
-unformat_ip4_address (unformat_input_t * input, va_list * args)
-{
- u8 *result = va_arg (*args, u8 *);
- unsigned a[4];
-
- if (!unformat (input, "%d.%d.%d.%d", &a[0], &a[1], &a[2], &a[3]))
- return 0;
-
- if (a[0] >= 256 || a[1] >= 256 || a[2] >= 256 || a[3] >= 256)
- return 0;
-
- result[0] = a[0];
- result[1] = a[1];
- result[2] = a[2];
- result[3] = a[3];
-
- return 1;
-}
-
-int
-main (int argc, char **argv)
-{
- api_main_t *am = &api_main;
- test_main_t *tm = &test_main;
- vl_api_vnet_get_summary_stats_t *mp;
- unformat_input_t _input, *input = &_input;
- clib_error_t *error = 0;
- ip4_address_t collector_ip;
- u8 *display_name = 0;
- u16 collector_port = 7654;
-
- collector_ip.as_u32 = (u32) ~ 0;
-
- unformat_init_command_line (input, argv);
-
- while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
- {
- if (unformat (input, "collector-ip %U",
- unformat_ip4_address, &collector_ip))
- ;
- else if (unformat (input, "display-name %v", &display_name))
- ;
- else if (unformat (input, "collector-port %d", &collector_port))
- ;
- else
- {
- error =
- clib_error_return
- (0, "Usage: %s collector-ip <ip>\n"
- " [display-name <string>] [collector-port <num>]\n"
- " port defaults to 7654", argv[0]);
- break;
- }
- }
-
- if (error == 0 && collector_ip.as_u32 == (u32) ~ 0)
- error = clib_error_return (0, "collector-ip not set...\n");
-
-
- if (error)
- {
- clib_error_report (error);
- exit (1);
- }
-
- if (display_name == 0)
- {
- display_name = format (0, "vpe-to-%d.%d.%d.%d",
- collector_ip.as_u8[0],
- collector_ip.as_u8[1],
- collector_ip.as_u8[2], collector_ip.as_u8[3]);
- }
-
-
- connect_to_vpe ("test_client");
-
- tm->vl_input_queue = shmem_hdr->vl_input_queue;
- tm->my_client_index = am->my_client_index;
- tm->display_name = display_name;
-
- signal (SIGTERM, sigterm_handler);
- signal (SIGINT, sigterm_handler);
- signal (SIGQUIT, sigterm_handler);
-
- /* data (multicast) RX socket */
- tm->send_data_socket = socket (PF_INET, SOCK_DGRAM, IPPROTO_UDP);
- if (tm->send_data_socket < 0)
- {
- clib_unix_warning (0, "data_rx_socket");
- exit (1);
- }
-
- memset (&tm->send_data_addr, 0, sizeof (tm->send_data_addr));
- tm->send_data_addr.sin_family = AF_INET;
- tm->send_data_addr.sin_addr.s_addr = collector_ip.as_u32;
- tm->send_data_addr.sin_port = htons (collector_port);
-
- fformat (stdout, "Send SIGINT or SIGTERM to quit...\n");
-
- while (1)
- {
- sleep (5);
-
- if (tm->sigterm_received)
- break;
- /* Poll for stats */
- mp = vl_msg_api_alloc (sizeof (*mp));
- memset (mp, 0, sizeof (*mp));
- mp->_vl_msg_id = ntohs (VL_API_VNET_GET_SUMMARY_STATS);
- mp->client_index = tm->my_client_index;
- vl_msg_api_send_shmem (tm->vl_input_queue, (u8 *) & mp);
- }
-
- fformat (stdout, "Exiting...\n");
-
- disconnect_from_vpe ();
- exit (0);
-}
-
-/*
- * fd.io coding-style-patch-verification: ON
- *
- * Local Variables:
- * eval: (c-set-style "gnu")
- * End:
- */
diff --git a/vpp/vpp-api/test_client.c b/vpp/vpp-api/test_client.c
deleted file mode 100644
index e0d7054a686..00000000000
--- a/vpp/vpp-api/test_client.c
+++ /dev/null
@@ -1,1531 +0,0 @@
-/*
- *------------------------------------------------------------------
- * api.c - message handler registration
- *
- * Copyright (c) 2010 Cisco and/or its affiliates.
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *------------------------------------------------------------------
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <sys/mman.h>
-#include <sys/stat.h>
-#include <netinet/in.h>
-#include <signal.h>
-#include <pthread.h>
-#include <unistd.h>
-#include <time.h>
-#include <fcntl.h>
-#include <string.h>
-#include <vppinfra/clib.h>
-#include <vppinfra/vec.h>
-#include <vppinfra/hash.h>
-#include <vppinfra/bitmap.h>
-#include <vppinfra/fifo.h>
-#include <vppinfra/time.h>
-#include <vppinfra/mheap.h>
-#include <vppinfra/heap.h>
-#include <vppinfra/pool.h>
-#include <vppinfra/format.h>
-#include <vppinfra/error.h>
-
-#include <vnet/vnet.h>
-#include <vlib/vlib.h>
-#include <vlib/unix/unix.h>
-#include <vlibapi/api.h>
-#include <vlibmemory/api.h>
-
-#include <vpp-api/vpe_msg_enum.h>
-
-#include <vnet/ip/ip.h>
-#include <vnet/interface.h>
-
-#define f64_endian(a)
-#define f64_print(a,b)
-
-#define vl_typedefs /* define message structures */
-#include <vpp-api/vpe_all_api_h.h>
-#undef vl_typedefs
-
-#define vl_endianfun /* define message structures */
-#include <vpp-api/vpe_all_api_h.h>
-#undef vl_endianfun
-
-/* instantiate all the print functions we know about */
-#define vl_print(handle, ...)
-#define vl_printfun
-#include <vpp-api/vpe_all_api_h.h>
-#undef vl_printfun
-
-vl_shmem_hdr_t *shmem_hdr;
-
-typedef struct
-{
- int link_events_on;
- int stats_on;
- int oam_events_on;
-
- /* convenience */
- unix_shared_memory_queue_t *vl_input_queue;
- u32 my_client_index;
-} test_main_t;
-
-test_main_t test_main;
-
-/*
- * Satisfy external references when -lvlib is not available.
- */
-vlib_main_t vlib_global_main;
-vlib_main_t **vlib_mains;
-
-void
-vlib_cli_output (struct vlib_main_t *vm, char *fmt, ...)
-{
- clib_warning ("vlib_cli_output callled...");
-}
-
-u8 *
-format_ethernet_address (u8 * s, va_list * args)
-{
- u8 *a = va_arg (*args, u8 *);
-
- return format (s, "%02x:%02x:%02x:%02x:%02x:%02x",
- a[0], a[1], a[2], a[3], a[4], a[5]);
-}
-
-static void
-vl_api_sw_interface_details_t_handler (vl_api_sw_interface_details_t * mp)
-{
- char *duplex, *speed;
-
- switch (mp->link_duplex << VNET_HW_INTERFACE_FLAG_DUPLEX_SHIFT)
- {
- case VNET_HW_INTERFACE_FLAG_HALF_DUPLEX:
- duplex = "half";
- break;
- case VNET_HW_INTERFACE_FLAG_FULL_DUPLEX:
- duplex = "full";
- break;
- default:
- duplex = "bogus";
- break;
- }
- switch (mp->link_speed << VNET_HW_INTERFACE_FLAG_SPEED_SHIFT)
- {
- case VNET_HW_INTERFACE_FLAG_SPEED_10M:
- speed = "10Mbps";
- break;
- case VNET_HW_INTERFACE_FLAG_SPEED_100M:
- speed = "100Mbps";
- break;
- case VNET_HW_INTERFACE_FLAG_SPEED_1G:
- speed = "1Gbps";
- break;
- case VNET_HW_INTERFACE_FLAG_SPEED_10G:
- speed = "10Gbps";
- break;
- case VNET_HW_INTERFACE_FLAG_SPEED_40G:
- speed = "40Gbps";
- break;
- case VNET_HW_INTERFACE_FLAG_SPEED_100G:
- speed = "100Gbps";
- break;
- default:
- speed = "bogus";
- break;
- }
- fformat (stdout, "details: %s sw_if_index %d sup_sw_if_index %d "
- "link_duplex %s link_speed %s",
- mp->interface_name, ntohl (mp->sw_if_index),
- ntohl (mp->sup_sw_if_index), duplex, speed);
-
- if (mp->l2_address_length)
- fformat (stdout, " l2 address: %U\n",
- format_ethernet_address, mp->l2_address);
- else
- fformat (stdout, "\n");
-}
-
-static void
-vl_api_sw_interface_set_flags_t_handler (vl_api_sw_interface_set_flags_t * mp)
-{
- fformat (stdout, "set flags: sw_if_index %d, admin %s link %s\n",
- ntohl (mp->sw_if_index),
- mp->admin_up_down ? "up" : "down",
- mp->link_up_down ? "up" : "down");
-}
-
-static void
- vl_api_sw_interface_set_flags_reply_t_handler
- (vl_api_sw_interface_set_flags_reply_t * mp)
-{
- fformat (stdout, "set flags reply: reply %d\n", ntohl (mp->retval));
-}
-
-static void
- vl_api_want_interface_events_reply_t_handler
- (vl_api_want_interface_events_reply_t * mp)
-{
-}
-
-static void
-vl_api_want_stats_reply_t_handler (vl_api_want_stats_reply_t * mp)
-{
- fformat (stdout, "want stats reply %d\n", ntohl (mp->retval));
-}
-
-static void
-vl_api_want_oam_events_reply_t_handler (vl_api_want_oam_events_reply_t * mp)
-{
- fformat (stdout, "want oam reply %d\n", ntohl (mp->retval));
-}
-
-static void
-vl_api_ip_add_del_route_reply_t_handler (vl_api_ip_add_del_route_reply_t * mp)
-{
- fformat (stdout, "add_route reply %d\n", ntohl (mp->retval));
-}
-
-static void
- vl_api_sw_interface_add_del_address_reply_t_handler
- (vl_api_sw_interface_add_del_address_reply_t * mp)
-{
- fformat (stdout, "add_del_address reply %d\n", ntohl (mp->retval));
-}
-
-static void
- vl_api_sw_interface_set_table_reply_t_handler
- (vl_api_sw_interface_set_table_reply_t * mp)
-{
- fformat (stdout, "set_table reply %d\n", ntohl (mp->retval));
-}
-
-static void
-vl_api_tap_connect_reply_t_handler (vl_api_tap_connect_reply_t * mp)
-{
- fformat (stdout, "tap connect reply %d, sw_if_index %d\n",
- ntohl (mp->retval), ntohl (mp->sw_if_index));
-}
-
-static void
-vl_api_create_vlan_subif_reply_t_handler (vl_api_create_vlan_subif_reply_t *
- mp)
-{
- fformat (stdout, "create vlan subif reply %d, sw_if_index %d\n",
- ntohl (mp->retval), ntohl (mp->sw_if_index));
-}
-
-static void vl_api_proxy_arp_add_del_reply_t_handler
- (vl_api_proxy_arp_add_del_reply_t * mp)
-{
- fformat (stdout, "add del proxy arp reply %d\n", ntohl (mp->retval));
-}
-
-static void vl_api_proxy_arp_intfc_enable_disable_reply_t_handler
- (vl_api_proxy_arp_intfc_enable_disable_reply_t * mp)
-{
- fformat (stdout, "proxy arp intfc ena/dis reply %d\n", ntohl (mp->retval));
-}
-
-static void vl_api_ip_neighbor_add_del_reply_t_handler
- (vl_api_ip_neighbor_add_del_reply_t * mp)
-{
- fformat (stdout, "ip neighbor add del reply %d\n", ntohl (mp->retval));
-}
-
-static void
-vl_api_vnet_interface_counters_t_handler (vl_api_vnet_interface_counters_t *
- mp)
-{
- char *counter_name;
- u32 count, sw_if_index;
- int i;
-
- count = ntohl (mp->count);
- sw_if_index = ntohl (mp->first_sw_if_index);
- if (mp->is_combined == 0)
- {
- u64 *vp, v;
- vp = (u64 *) mp->data;
-
- switch (mp->vnet_counter_type)
- {
- case VNET_INTERFACE_COUNTER_DROP:
- counter_name = "drop";
- break;
- case VNET_INTERFACE_COUNTER_PUNT:
- counter_name = "punt";
- break;
- case VNET_INTERFACE_COUNTER_IP4:
- counter_name = "ip4";
- break;
- case VNET_INTERFACE_COUNTER_IP6:
- counter_name = "ip6";
- break;
- case VNET_INTERFACE_COUNTER_RX_NO_BUF:
- counter_name = "rx-no-buf";
- break;
- case VNET_INTERFACE_COUNTER_RX_MISS:
- counter_name = "rx-miss";
- break;
- case VNET_INTERFACE_COUNTER_RX_ERROR:
- counter_name = "rx-error";
- break;
- case VNET_INTERFACE_COUNTER_TX_ERROR:
- counter_name = "tx-error (fifo-full)";
- break;
- default:
- counter_name = "bogus";
- break;
- }
- for (i = 0; i < count; i++)
- {
- v = clib_mem_unaligned (vp, u64);
- v = clib_net_to_host_u64 (v);
- vp++;
- fformat (stdout, "%d.%s %lld\n", sw_if_index, counter_name, v);
- sw_if_index++;
- }
- }
- else
- {
- vlib_counter_t *vp;
- u64 packets, bytes;
- vp = (vlib_counter_t *) mp->data;
-
- switch (mp->vnet_counter_type)
- {
- case VNET_INTERFACE_COUNTER_RX:
- counter_name = "rx";
- break;
- case VNET_INTERFACE_COUNTER_TX:
- counter_name = "tx";
- break;
- default:
- counter_name = "bogus";
- break;
- }
- for (i = 0; i < count; i++)
- {
- packets = clib_mem_unaligned (&vp->packets, u64);
- packets = clib_net_to_host_u64 (packets);
- bytes = clib_mem_unaligned (&vp->bytes, u64);
- bytes = clib_net_to_host_u64 (bytes);
- vp++;
- fformat (stdout, "%d.%s.packets %lld\n",
- sw_if_index, counter_name, packets);
- fformat (stdout, "%d.%s.bytes %lld\n",
- sw_if_index, counter_name, bytes);
- sw_if_index++;
- }
- }
-}
-
-/* Format an IP4 address. */
-u8 *
-format_ip4_address (u8 * s, va_list * args)
-{
- u8 *a = va_arg (*args, u8 *);
- return format (s, "%d.%d.%d.%d", a[0], a[1], a[2], a[3]);
-}
-
-/* Format an IP4 route destination and length. */
-u8 *
-format_ip4_address_and_length (u8 * s, va_list * args)
-{
- u8 *a = va_arg (*args, u8 *);
- u8 l = va_arg (*args, u32);
- return format (s, "%U/%d", format_ip4_address, a, l);
-}
-
-static void
-vl_api_vnet_ip4_fib_counters_t_handler (vl_api_vnet_ip4_fib_counters_t * mp)
-{
- int i;
- vl_api_ip4_fib_counter_t *ctrp;
- u32 count;
-
- count = ntohl (mp->count);
-
- fformat (stdout, "fib id %d, count this msg %d\n",
- ntohl (mp->vrf_id), count);
-
- ctrp = mp->c;
- for (i = 0; i < count; i++)
- {
- fformat (stdout, "%U: %lld packets, %lld bytes\n",
- format_ip4_address_and_length, &ctrp->address,
- (u32) ctrp->address_length,
- clib_net_to_host_u64 (ctrp->packets),
- clib_net_to_host_u64 (ctrp->bytes));
- ctrp++;
- }
-}
-
-/* Format an IP6 address. */
-u8 *
-format_ip6_address (u8 * s, va_list * args)
-{
- ip6_address_t *a = va_arg (*args, ip6_address_t *);
- u32 i, i_max_n_zero, max_n_zeros, i_first_zero, n_zeros, last_double_colon;
-
- i_max_n_zero = ARRAY_LEN (a->as_u16);
- max_n_zeros = 0;
- i_first_zero = i_max_n_zero;
- n_zeros = 0;
- for (i = 0; i < ARRAY_LEN (a->as_u16); i++)
- {
- u32 is_zero = a->as_u16[i] == 0;
- if (is_zero && i_first_zero >= ARRAY_LEN (a->as_u16))
- {
- i_first_zero = i;
- n_zeros = 0;
- }
- n_zeros += is_zero;
- if ((!is_zero && n_zeros > max_n_zeros)
- || (i + 1 >= ARRAY_LEN (a->as_u16) && n_zeros > max_n_zeros))
- {
- i_max_n_zero = i_first_zero;
- max_n_zeros = n_zeros;
- i_first_zero = ARRAY_LEN (a->as_u16);
- n_zeros = 0;
- }
- }
-
- last_double_colon = 0;
- for (i = 0; i < ARRAY_LEN (a->as_u16); i++)
- {
- if (i == i_max_n_zero && max_n_zeros > 1)
- {
- s = format (s, "::");
- i += max_n_zeros - 1;
- last_double_colon = 1;
- }
- else
- {
- s = format (s, "%s%x",
- (last_double_colon || i == 0) ? "" : ":",
- clib_net_to_host_u16 (a->as_u16[i]));
- last_double_colon = 0;
- }
- }
-
- return s;
-}
-
-/* Format an IP6 route destination and length. */
-u8 *
-format_ip6_address_and_length (u8 * s, va_list * args)
-{
- ip6_address_t *a = va_arg (*args, ip6_address_t *);
- u8 l = va_arg (*args, u32);
- return format (s, "%U/%d", format_ip6_address, a, l);
-}
-
-static void
-vl_api_vnet_ip6_fib_counters_t_handler (vl_api_vnet_ip6_fib_counters_t * mp)
-{
- int i;
- vl_api_ip6_fib_counter_t *ctrp;
- u32 count;
-
- count = ntohl (mp->count);
-
- fformat (stdout, "fib id %d, count this msg %d\n",
- ntohl (mp->vrf_id), count);
-
- ctrp = mp->c;
- for (i = 0; i < count; i++)
- {
- fformat (stdout, "%U: %lld packets, %lld bytes\n",
- format_ip6_address_and_length, &ctrp->address,
- (u32) ctrp->address_length,
- clib_net_to_host_u64 (ctrp->packets),
- clib_net_to_host_u64 (ctrp->bytes));
- ctrp++;
- }
-}
-
-static void
-vl_api_oam_event_t_handler (vl_api_oam_event_t * mp)
-{
- fformat (stdout, "OAM: %U now %s\n",
- format_ip4_address, &mp->dst_address,
- mp->state == 1 ? "alive" : "dead");
-}
-
-static void
-vl_api_oam_add_del_reply_t_handler (vl_api_oam_add_del_reply_t * mp)
-{
- fformat (stdout, "oam add del reply %d\n", ntohl (mp->retval));
-}
-
-static void
-vl_api_reset_fib_reply_t_handler (vl_api_reset_fib_reply_t * mp)
-{
- fformat (stdout, "fib reset reply %d\n", ntohl (mp->retval));
-}
-
-static void
-vl_api_dhcp_proxy_set_vss_reply_t_handler (vl_api_dhcp_proxy_set_vss_reply_t *
- mp)
-{
- fformat (stdout, "dhcp proxy set vss reply %d\n", ntohl (mp->retval));
-}
-
-static void
-vl_api_dhcp_proxy_config_reply_t_handler (vl_api_dhcp_proxy_config_reply_t *
- mp)
-{
- fformat (stdout, "dhcp proxy config reply %d\n", ntohl (mp->retval));
-}
-
-static void
-vl_api_set_ip_flow_hash_reply_t_handler (vl_api_set_ip_flow_hash_reply_t * mp)
-{
- fformat (stdout, "set ip flow hash reply %d\n", ntohl (mp->retval));
-}
-
-static void
- vl_api_sw_interface_ip6nd_ra_config_reply_t_handler
- (vl_api_sw_interface_ip6nd_ra_config_reply_t * mp)
-{
- fformat (stdout, "ip6 nd ra-config reply %d\n", ntohl (mp->retval));
-}
-
-static void
- vl_api_sw_interface_ip6nd_ra_prefix_reply_t_handler
- (vl_api_sw_interface_ip6nd_ra_prefix_reply_t * mp)
-{
- fformat (stdout, "ip6 nd ra-prefix reply %d\n", ntohl (mp->retval));
-}
-
-static void
- vl_api_sw_interface_ip6_enable_disable_reply_t_handler
- (vl_api_sw_interface_ip6_enable_disable_reply_t * mp)
-{
- fformat (stdout, "ip6 enable/disable reply %d\n", ntohl (mp->retval));
-}
-
-static void
- vl_api_sw_interface_ip6_set_link_local_address_reply_t_handler
- (vl_api_sw_interface_ip6_set_link_local_address_reply_t * mp)
-{
- fformat (stdout, "ip6 set link-local address reply %d\n",
- ntohl (mp->retval));
-}
-
-static void vl_api_create_loopback_reply_t_handler
- (vl_api_create_loopback_reply_t * mp)
-{
- fformat (stdout, "create loopback status %d, sw_if_index %d\n",
- ntohl (mp->retval), ntohl (mp->sw_if_index));
-}
-
-static void
-vl_api_sr_tunnel_add_del_reply_t_handler (vl_api_sr_tunnel_add_del_reply_t *
- mp)
-{
- fformat (stdout, "sr tunnel add/del reply %d\n", ntohl (mp->retval));
-}
-
-static void vl_api_l2_patch_add_del_reply_t_handler
- (vl_api_l2_patch_add_del_reply_t * mp)
-{
- fformat (stdout, "l2 patch reply %d\n", ntohl (mp->retval));
-}
-
-static void vl_api_sw_interface_set_l2_xconnect_reply_t_handler
- (vl_api_sw_interface_set_l2_xconnect_reply_t * mp)
-{
- fformat (stdout, "l2_xconnect reply %d\n", ntohl (mp->retval));
-}
-
-static void vl_api_sw_interface_set_l2_bridge_reply_t_handler
- (vl_api_sw_interface_set_l2_bridge_reply_t * mp)
-{
- fformat (stdout, "l2_bridge reply %d\n", ntohl (mp->retval));
-}
-
-static void
-noop_handler (void *notused)
-{
-}
-
-#define vl_api_vnet_ip4_fib_counters_t_endian noop_handler
-#define vl_api_vnet_ip4_fib_counters_t_print noop_handler
-#define vl_api_vnet_ip6_fib_counters_t_endian noop_handler
-#define vl_api_vnet_ip6_fib_counters_t_print noop_handler
-
-#define foreach_api_msg \
-_(SW_INTERFACE_DETAILS, sw_interface_details) \
-_(SW_INTERFACE_SET_FLAGS, sw_interface_set_flags) \
-_(SW_INTERFACE_SET_FLAGS_REPLY, sw_interface_set_flags_reply) \
-_(WANT_INTERFACE_EVENTS_REPLY, want_interface_events_reply) \
-_(WANT_STATS_REPLY, want_stats_reply) \
-_(WANT_OAM_EVENTS_REPLY, want_oam_events_reply) \
-_(OAM_EVENT, oam_event) \
-_(OAM_ADD_DEL_REPLY, oam_add_del_reply) \
-_(VNET_INTERFACE_COUNTERS, vnet_interface_counters) \
-_(VNET_IP4_FIB_COUNTERS, vnet_ip4_fib_counters) \
-_(VNET_IP6_FIB_COUNTERS, vnet_ip6_fib_counters) \
-_(IP_ADD_DEL_ROUTE_REPLY, ip_add_del_route_reply) \
-_(SW_INTERFACE_ADD_DEL_ADDRESS_REPLY, sw_interface_add_del_address_reply) \
-_(SW_INTERFACE_SET_TABLE_REPLY, sw_interface_set_table_reply) \
-_(TAP_CONNECT_REPLY, tap_connect_reply) \
-_(CREATE_VLAN_SUBIF_REPLY, create_vlan_subif_reply) \
-_(PROXY_ARP_ADD_DEL_REPLY, proxy_arp_add_del_reply) \
-_(PROXY_ARP_INTFC_ENABLE_DISABLE_REPLY, proxy_arp_intfc_enable_disable_reply) \
-_(IP_NEIGHBOR_ADD_DEL_REPLY, ip_neighbor_add_del_reply) \
-_(RESET_FIB_REPLY, reset_fib_reply) \
-_(DHCP_PROXY_CONFIG_REPLY, dhcp_proxy_config_reply) \
-_(DHCP_PROXY_SET_VSS_REPLY, dhcp_proxy_set_vss_reply) \
-_(SET_IP_FLOW_HASH_REPLY, set_ip_flow_hash_reply) \
-_(SW_INTERFACE_IP6ND_RA_CONFIG_REPLY, sw_interface_ip6nd_ra_config_reply) \
-_(SW_INTERFACE_IP6ND_RA_PREFIX_REPLY, sw_interface_ip6nd_ra_prefix_reply) \
-_(SW_INTERFACE_IP6_ENABLE_DISABLE_REPLY, sw_interface_ip6_enable_disable_reply) \
-_(SW_INTERFACE_IP6_SET_LINK_LOCAL_ADDRESS_REPLY, sw_interface_ip6_set_link_local_address_reply) \
- _(CREATE_LOOPBACK_REPLY, create_loopback_reply) \
-_(L2_PATCH_ADD_DEL_REPLY, l2_patch_add_del_reply) \
-_(SR_TUNNEL_ADD_DEL_REPLY,sr_tunnel_add_del_reply) \
-_(SW_INTERFACE_SET_L2_XCONNECT_REPLY, sw_interface_set_l2_xconnect_reply) \
-_(SW_INTERFACE_SET_L2_BRIDGE_REPLY, sw_interface_set_l2_bridge_reply)
-
-int
-connect_to_vpe (char *name)
-{
- int rv = 0;
-
- rv = vl_client_connect_to_vlib ("/vpe-api", name, 32);
-
-#define _(N,n) \
- vl_msg_api_set_handlers(VL_API_##N, #n, \
- vl_api_##n##_t_handler, \
- noop_handler, \
- vl_api_##n##_t_endian, \
- vl_api_##n##_t_print, \
- sizeof(vl_api_##n##_t), 1);
- foreach_api_msg;
-#undef _
-
- shmem_hdr = api_main.shmem_hdr;
-
- return rv;
-}
-
-int
-disconnect_from_vpe (void)
-{
- vl_client_disconnect_from_vlib ();
- return 0;
-}
-
-void
-link_up_down_enable_disable (test_main_t * tm, int enable)
-{
- vl_api_want_interface_events_t *mp;
-
- /* Request admin / link up down messages */
- mp = vl_msg_api_alloc (sizeof (*mp));
- memset (mp, 0, sizeof (*mp));
- mp->_vl_msg_id = ntohs (VL_API_WANT_INTERFACE_EVENTS);
- mp->client_index = tm->my_client_index;
- mp->context = 0xdeadbeef;
- mp->enable_disable = enable;
- mp->pid = getpid ();
- vl_msg_api_send_shmem (tm->vl_input_queue, (u8 *) & mp);
- tm->link_events_on = enable;
-}
-
-void
-stats_enable_disable (test_main_t * tm, int enable)
-{
- vl_api_want_stats_t *mp;
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- memset (mp, 0, sizeof (*mp));
- mp->_vl_msg_id = ntohs (VL_API_WANT_STATS);
- mp->client_index = tm->my_client_index;
- mp->context = 0xdeadbeef;
- mp->enable_disable = enable;
- mp->pid = getpid ();
- vl_msg_api_send_shmem (tm->vl_input_queue, (u8 *) & mp);
- tm->stats_on = enable;
-}
-
-void
-oam_events_enable_disable (test_main_t * tm, int enable)
-{
- vl_api_want_oam_events_t *mp;
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- memset (mp, 0, sizeof (*mp));
- mp->_vl_msg_id = ntohs (VL_API_WANT_OAM_EVENTS);
- mp->client_index = tm->my_client_index;
- mp->context = 0xdeadbeef;
- mp->enable_disable = enable;
- mp->pid = getpid ();
- vl_msg_api_send_shmem (tm->vl_input_queue, (u8 *) & mp);
- tm->oam_events_on = enable;
-}
-
-void
-oam_add_del (test_main_t * tm, int is_add)
-{
- vl_api_oam_add_del_t *mp;
- ip4_address_t tmp;
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- memset (mp, 0, sizeof (*mp));
- mp->_vl_msg_id = ntohs (VL_API_OAM_ADD_DEL);
- mp->client_index = tm->my_client_index;
- mp->context = 0xdeadbeef;
- mp->is_add = is_add;
-
- tmp.as_u32 = ntohl (0xc0a80101); /* 192.168.1.1 */
- clib_memcpy (mp->src_address, tmp.as_u8, 4);
-
- tmp.as_u32 = ntohl (0xc0a80103); /* 192.168.1.3 */
- clib_memcpy (mp->dst_address, tmp.as_u8, 4);
-
- mp->vrf_id = 0;
- vl_msg_api_send_shmem (tm->vl_input_queue, (u8 *) & mp);
-}
-
-void
-dump (test_main_t * tm)
-{
- vl_api_sw_interface_dump_t *mp;
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- memset (mp, 0, sizeof (*mp));
- mp->_vl_msg_id = ntohs (VL_API_SW_INTERFACE_DUMP);
- mp->client_index = tm->my_client_index;
- mp->name_filter_valid = 1;
- strncpy ((char *) mp->name_filter, "eth", sizeof (mp->name_filter) - 1);
-
- vl_msg_api_send_shmem (tm->vl_input_queue, (u8 *) & mp);
-}
-
-void
-add_del_ip4_route (test_main_t * tm, int enable_disable)
-{
- vl_api_ip_add_del_route_t *mp;
- u32 tmp;
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- memset (mp, 0, sizeof (*mp));
- mp->_vl_msg_id = ntohs (VL_API_IP_ADD_DEL_ROUTE);
- mp->client_index = tm->my_client_index;
- mp->context = 0xdeadbeef;
- mp->table_id = ntohl (0);
- mp->create_vrf_if_needed = 1;
-
- mp->next_hop_sw_if_index = ntohl (5);
- mp->is_add = enable_disable;
- mp->next_hop_weight = 1;
-
- /* Next hop: 6.0.0.1 */
- tmp = ntohl (0x06000001);
- clib_memcpy (mp->next_hop_address, &tmp, sizeof (tmp));
-
- /* Destination: 10.0.0.1/32 */
- tmp = ntohl (0x0);
- clib_memcpy (mp->dst_address, &tmp, sizeof (tmp));
- mp->dst_address_length = 0;
-
- vl_msg_api_send_shmem (tm->vl_input_queue, (u8 *) & mp);
-}
-
-void
-add_del_ip6_route (test_main_t * tm, int enable_disable)
-{
- vl_api_ip_add_del_route_t *mp;
- u64 tmp[2];
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- memset (mp, 0, sizeof (*mp));
- mp->_vl_msg_id = ntohs (VL_API_IP_ADD_DEL_ROUTE);
- mp->client_index = tm->my_client_index;
- mp->context = 0xdeadbeef;
- mp->next_hop_sw_if_index = ntohl (5);
- mp->is_add = enable_disable;
- mp->is_ipv6 = 1;
- mp->next_hop_weight = 1;
- mp->dst_address_length = 64;
-
- /* add/del dabe::/64 via db01::11 */
-
- tmp[0] = clib_host_to_net_u64 (0xdabe000000000000ULL);
- tmp[1] = clib_host_to_net_u64 (0x0ULL);
- clib_memcpy (mp->dst_address, &tmp[0], 8);
- clib_memcpy (&mp->dst_address[8], &tmp[1], 8);
-
- tmp[0] = clib_host_to_net_u64 (0xdb01000000000000ULL);
- tmp[1] = clib_host_to_net_u64 (0x11ULL);
- clib_memcpy (mp->next_hop_address, &tmp[0], 8);
- clib_memcpy (&mp->next_hop_address[8], &tmp[1], 8);
-
- vl_msg_api_send_shmem (tm->vl_input_queue, (u8 *) & mp);
-}
-
-void
-add_del_interface_address (test_main_t * tm, int enable_disable)
-{
- vl_api_sw_interface_add_del_address_t *mp;
- u32 tmp;
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- memset (mp, 0, sizeof (*mp));
- mp->_vl_msg_id = ntohs (VL_API_SW_INTERFACE_ADD_DEL_ADDRESS);
- mp->client_index = tm->my_client_index;
- mp->context = 0xdeadbeef;
- mp->sw_if_index = ntohl (5);
- mp->is_add = enable_disable;
- mp->address_length = 8;
-
- tmp = ntohl (0x01020304);
- clib_memcpy (mp->address, &tmp, 4);
-
- vl_msg_api_send_shmem (tm->vl_input_queue, (u8 *) & mp);
-}
-
-void
-add_del_v6_interface_address (test_main_t * tm, int enable_disable)
-{
- vl_api_sw_interface_add_del_address_t *mp;
- u64 tmp[2];
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- memset (mp, 0, sizeof (*mp));
- mp->_vl_msg_id = ntohs (VL_API_SW_INTERFACE_ADD_DEL_ADDRESS);
- mp->client_index = tm->my_client_index;
- mp->context = 0xdeadbeef;
- mp->is_ipv6 = 1;
- mp->sw_if_index = ntohl (5);
- mp->is_add = enable_disable;
- mp->address_length = 64;
-
- tmp[0] = clib_host_to_net_u64 (0xdb01000000000000ULL);
- tmp[1] = clib_host_to_net_u64 (0x11ULL);
-
- clib_memcpy (mp->address, &tmp[0], 8);
- clib_memcpy (&mp->address[8], &tmp[1], 8);
-
- vl_msg_api_send_shmem (tm->vl_input_queue, (u8 *) & mp);
-}
-
-void
-del_all_interface_addresses (test_main_t * tm)
-{
- vl_api_sw_interface_add_del_address_t *mp;
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- memset (mp, 0, sizeof (*mp));
- mp->_vl_msg_id = ntohs (VL_API_SW_INTERFACE_ADD_DEL_ADDRESS);
- mp->client_index = tm->my_client_index;
- mp->context = 0xdeadbeef;
- mp->sw_if_index = ntohl (5);
- mp->del_all = 1;
-
- vl_msg_api_send_shmem (tm->vl_input_queue, (u8 *) & mp);
-}
-
-void
-set_interface_table (test_main_t * tm, int is_ipv6, u32 vrf_id)
-{
- vl_api_sw_interface_set_table_t *mp;
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- memset (mp, 0, sizeof (*mp));
- mp->_vl_msg_id = ntohs (VL_API_SW_INTERFACE_SET_TABLE);
- mp->client_index = tm->my_client_index;
- mp->context = 0xdeadbeef;
- mp->sw_if_index = ntohl (5);
- mp->is_ipv6 = is_ipv6;
- mp->vrf_id = ntohl (vrf_id);
-
- vl_msg_api_send_shmem (tm->vl_input_queue, (u8 *) & mp);
-}
-
-void
-connect_unix_tap (test_main_t * tm, char *name)
-{
- vl_api_tap_connect_t *mp;
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- memset (mp, 0, sizeof (*mp));
- mp->_vl_msg_id = ntohs (VL_API_TAP_CONNECT);
- mp->client_index = tm->my_client_index;
- mp->context = 0xdeadbeef;
- strncpy ((char *) mp->tap_name, name, sizeof (mp->tap_name) - 1);
- mp->use_random_mac = 1;
- vl_msg_api_send_shmem (tm->vl_input_queue, (u8 *) & mp);
-}
-
-void
-create_vlan_subif (test_main_t * tm, u32 vlan_id)
-{
- vl_api_create_vlan_subif_t *mp;
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- memset (mp, 0, sizeof (*mp));
- mp->_vl_msg_id = ntohs (VL_API_CREATE_VLAN_SUBIF);
- mp->client_index = tm->my_client_index;
- mp->context = 0xdeadbeef;
- mp->sw_if_index = ntohl (5);
- mp->vlan_id = ntohl (vlan_id);
-
- vl_msg_api_send_shmem (tm->vl_input_queue, (u8 *) & mp);
-}
-
-void
-add_del_proxy_arp (test_main_t * tm, int is_add)
-{
- vl_api_proxy_arp_add_del_t *mp;
- u32 tmp;
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- memset (mp, 0, sizeof (*mp));
- mp->_vl_msg_id = ntohs (VL_API_PROXY_ARP_ADD_DEL);
- mp->client_index = tm->my_client_index;
- mp->context = 0xdeadbeef;
- mp->vrf_id = ntohl (11);
- mp->is_add = is_add;
-
- /* proxy fib 11, 1.1.1.1 -> 1.1.1.10 */
- tmp = ntohl (0x01010101);
- clib_memcpy (mp->low_address, &tmp, 4);
-
- tmp = ntohl (0x0101010a);
- clib_memcpy (mp->hi_address, &tmp, 4);
-
- vl_msg_api_send_shmem (tm->vl_input_queue, (u8 *) & mp);
-}
-
-void
-proxy_arp_intfc_enable_disable (test_main_t * tm, int enable_disable)
-{
- vl_api_proxy_arp_intfc_enable_disable_t *mp;
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- memset (mp, 0, sizeof (*mp));
- mp->_vl_msg_id = ntohs (VL_API_PROXY_ARP_INTFC_ENABLE_DISABLE);
- mp->client_index = tm->my_client_index;
- mp->context = 0xdeadbeef;
- mp->sw_if_index = ntohl (6);
- mp->enable_disable = enable_disable;
-
- vl_msg_api_send_shmem (tm->vl_input_queue, (u8 *) & mp);
-}
-
-void
-add_ip4_neighbor (test_main_t * tm, int add_del)
-{
- vl_api_ip_neighbor_add_del_t *mp;
- u32 tmp;
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- memset (mp, 0, sizeof (*mp));
- mp->_vl_msg_id = ntohs (VL_API_IP_NEIGHBOR_ADD_DEL);
- mp->client_index = tm->my_client_index;
- mp->context = 0xdeadbeef;
- mp->vrf_id = ntohl (11);
- mp->sw_if_index = ntohl (6);
- mp->is_add = add_del;
-
- memset (mp->mac_address, 0xbe, sizeof (mp->mac_address));
-
- tmp = ntohl (0x0101010a);
- clib_memcpy (mp->dst_address, &tmp, 4);
-
- vl_msg_api_send_shmem (tm->vl_input_queue, (u8 *) & mp);
-}
-
-void
-add_ip6_neighbor (test_main_t * tm, int add_del)
-{
- vl_api_ip_neighbor_add_del_t *mp;
- u64 tmp[2];
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- memset (mp, 0, sizeof (*mp));
- mp->_vl_msg_id = ntohs (VL_API_IP_NEIGHBOR_ADD_DEL);
- mp->client_index = tm->my_client_index;
- mp->context = 0xdeadbeef;
- mp->vrf_id = ntohl (11);
- mp->sw_if_index = ntohl (6);
- mp->is_add = add_del;
- mp->is_ipv6 = 1;
-
- memset (mp->mac_address, 0xbe, sizeof (mp->mac_address));
-
- tmp[0] = clib_host_to_net_u64 (0xdb01000000000000ULL);
- tmp[1] = clib_host_to_net_u64 (0x11ULL);
-
- clib_memcpy (mp->dst_address, &tmp[0], 8);
- clib_memcpy (&mp->dst_address[8], &tmp[1], 8);
-
- vl_msg_api_send_shmem (tm->vl_input_queue, (u8 *) & mp);
-}
-
-void
-reset_fib (test_main_t * tm, u8 is_ip6)
-{
- vl_api_reset_fib_t *mp;
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- memset (mp, 0, sizeof (*mp));
- mp->_vl_msg_id = ntohs (VL_API_RESET_FIB);
- mp->client_index = tm->my_client_index;
- mp->context = 0xdeadbeef;
- mp->vrf_id = ntohl (11);
- mp->is_ipv6 = is_ip6;
-
- vl_msg_api_send_shmem (tm->vl_input_queue, (u8 *) & mp);
-}
-
-void
-dhcpv6_set_vss (test_main_t * tm)
-{
- vl_api_dhcp_proxy_set_vss_t *mp;
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- memset (mp, 0, sizeof (*mp));
- mp->_vl_msg_id = ntohs (VL_API_DHCP_PROXY_SET_VSS);
- mp->client_index = tm->my_client_index;
- mp->context = 0xdeadbeef;
- mp->oui = ntohl (6);
- mp->fib_id = ntohl (60);
- mp->is_add = 1;
- mp->is_ipv6 = 1;
- vl_msg_api_send_shmem (tm->vl_input_queue, (u8 *) & mp);
-}
-
-void
-dhcpv4_set_vss (test_main_t * tm)
-{
- vl_api_dhcp_proxy_set_vss_t *mp;
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- memset (mp, 0, sizeof (*mp));
- mp->_vl_msg_id = ntohs (VL_API_DHCP_PROXY_SET_VSS);
- mp->client_index = tm->my_client_index;
- mp->context = 0xdeadbeef;
- mp->oui = ntohl (4);
- mp->fib_id = ntohl (40);
- mp->is_add = 1;
- mp->is_ipv6 = 0;
- vl_msg_api_send_shmem (tm->vl_input_queue, (u8 *) & mp);
-}
-
-void
-dhcp_set_vss (test_main_t * tm)
-{
- dhcpv4_set_vss (tm);
- dhcpv6_set_vss (tm);
-}
-
-void
-dhcp_set_proxy (test_main_t * tm, int ipv6)
-{
- vl_api_dhcp_proxy_config_t *mp;
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- memset (mp, 0, sizeof (*mp));
- mp->_vl_msg_id = ntohs (VL_API_DHCP_PROXY_CONFIG);
- mp->client_index = tm->my_client_index;
- mp->context = 0xdeadbeef;
- mp->vrf_id = ntohl (0);
- mp->is_ipv6 = ipv6;
- mp->insert_circuit_id = 1;
- mp->is_add = 1;
- mp->dhcp_server[0] = 0x20;
- mp->dhcp_server[1] = 0x01;
- mp->dhcp_server[2] = 0xab;
- mp->dhcp_server[3] = 0xcd;
- mp->dhcp_server[4] = 0x12;
- mp->dhcp_server[5] = 0x34;
- mp->dhcp_server[6] = 0xfe;
- mp->dhcp_server[7] = 0xdc;
- mp->dhcp_server[14] = 0;
- mp->dhcp_server[15] = 0x2;
-
- mp->dhcp_src_address[0] = 0x20;
- mp->dhcp_src_address[1] = 0x01;
- mp->dhcp_src_address[2] = 0xab;
- mp->dhcp_src_address[3] = 0xcd;
- mp->dhcp_src_address[4] = 0x12;
- mp->dhcp_src_address[5] = 0x34;
- mp->dhcp_src_address[6] = 0x56;
- mp->dhcp_src_address[7] = 0x78;
- mp->dhcp_src_address[14] = 0;
- mp->dhcp_src_address[15] = 0x2;
-
- vl_msg_api_send_shmem (tm->vl_input_queue, (u8 *) & mp);
-}
-
-void
-set_ip_flow_hash (test_main_t * tm, u8 is_ip6)
-{
- vl_api_set_ip_flow_hash_t *mp;
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- memset (mp, 0, sizeof (*mp));
- mp->_vl_msg_id = ntohs (VL_API_SET_IP_FLOW_HASH);
- mp->client_index = tm->my_client_index;
- mp->context = 0xdeadbeef;
- mp->vrf_id = 0;
- mp->is_ipv6 = is_ip6;
- mp->dst = 1;
- mp->reverse = 1;
-
- vl_msg_api_send_shmem (tm->vl_input_queue, (u8 *) & mp);
-}
-
-void
-ip6nd_ra_config (test_main_t * tm, int is_no)
-{
- vl_api_sw_interface_ip6nd_ra_config_t *mp;
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- memset (mp, 0, sizeof (*mp));
-
- mp->client_index = tm->my_client_index;
- mp->context = 0xdeadbeef;
- mp->sw_if_index = ntohl (5);
- mp->is_no = is_no;
-
- mp->suppress = 1;
-
-
- mp->_vl_msg_id = ntohs (VL_API_SW_INTERFACE_IP6ND_RA_CONFIG);
- vl_msg_api_send_shmem (tm->vl_input_queue, (u8 *) & mp);
-}
-
-void
-ip6nd_ra_prefix (test_main_t * tm, int is_no)
-{
- vl_api_sw_interface_ip6nd_ra_prefix_t *mp;
- u64 tmp[2];
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- memset (mp, 0, sizeof (*mp));
-
- mp->client_index = tm->my_client_index;
- mp->context = 0xdeadbeef;
- mp->sw_if_index = ntohl (5);
- mp->is_no = is_no;
-
- mp->use_default = 1;
-
-
- tmp[0] = clib_host_to_net_u64 (0xdb01000000000000ULL);
- tmp[1] = clib_host_to_net_u64 (0x11ULL);
-
-
- clib_memcpy (mp->address, &tmp[0], 8);
- clib_memcpy (&mp->address[8], &tmp[1], 8);
-
- mp->address_length = 64;
-
-
- mp->_vl_msg_id = ntohs (VL_API_SW_INTERFACE_IP6ND_RA_PREFIX);
- vl_msg_api_send_shmem (tm->vl_input_queue, (u8 *) & mp);
-}
-
-void
-ip6_enable_disable (test_main_t * tm, int enable)
-{
- vl_api_sw_interface_ip6_enable_disable_t *mp;
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- memset (mp, 0, sizeof (*mp));
-
- mp->client_index = tm->my_client_index;
- mp->context = 0xdeadbeef;
- mp->sw_if_index = ntohl (5);
- mp->enable = (enable == 1);;
-
- mp->_vl_msg_id = ntohs (VL_API_SW_INTERFACE_IP6_ENABLE_DISABLE);
- vl_msg_api_send_shmem (tm->vl_input_queue, (u8 *) & mp);
-}
-
-void
-loop_create (test_main_t * tm)
-{
- vl_api_create_loopback_t *mp;
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- memset (mp, 0, sizeof (*mp));
-
- mp->_vl_msg_id = ntohs (VL_API_CREATE_LOOPBACK);
- mp->client_index = tm->my_client_index;
- mp->context = 0xdeadbeef;
- vl_msg_api_send_shmem (tm->vl_input_queue, (u8 *) & mp);
-}
-
-void
-ip6_set_link_local_address (test_main_t * tm)
-{
- vl_api_sw_interface_ip6_set_link_local_address_t *mp;
- u64 tmp[2];
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- memset (mp, 0, sizeof (*mp));
-
- mp->client_index = tm->my_client_index;
- mp->context = 0xdeadbeef;
- mp->sw_if_index = ntohl (5);
-
- tmp[0] = clib_host_to_net_u64 (0xfe80000000000000ULL);
- tmp[1] = clib_host_to_net_u64 (0x11ULL);
-
- clib_memcpy (mp->address, &tmp[0], 8);
- clib_memcpy (&mp->address[8], &tmp[1], 8);
-
- mp->address_length = 64;
-
- mp->_vl_msg_id = ntohs (VL_API_SW_INTERFACE_IP6_SET_LINK_LOCAL_ADDRESS);
-
- vl_msg_api_send_shmem (tm->vl_input_queue, (u8 *) & mp);
-}
-
-
-void
-set_flags (test_main_t * tm, int up_down)
-{
- vl_api_sw_interface_set_flags_t *mp;
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- memset (mp, 0, sizeof (*mp));
-
- mp->_vl_msg_id = ntohs (VL_API_SW_INTERFACE_SET_FLAGS);
- mp->client_index = tm->my_client_index;
- mp->context = 0xdeadbeef;
- mp->sw_if_index = ntohl (5);
- mp->admin_up_down = up_down;
- vl_msg_api_send_shmem (tm->vl_input_queue, (u8 *) & mp);
-
-}
-
-void
-l2_patch_add_del (test_main_t * tm, int is_add)
-{
- vl_api_l2_patch_add_del_t *mp;
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- memset (mp, 0, sizeof (*mp));
- mp->_vl_msg_id = ntohs (VL_API_L2_PATCH_ADD_DEL);
- mp->client_index = tm->my_client_index;
- mp->context = 0xdeadbeef;
- mp->is_add = is_add;
- mp->rx_sw_if_index = ntohl (1);
- mp->tx_sw_if_index = ntohl (2);
-
- vl_msg_api_send_shmem (tm->vl_input_queue, (u8 *) & mp);
-}
-
-void
-l2_xconnect (test_main_t * tm)
-{
- vl_api_sw_interface_set_l2_xconnect_t *mp;
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- memset (mp, 0, sizeof (*mp));
- mp->_vl_msg_id = ntohs (VL_API_SW_INTERFACE_SET_L2_XCONNECT);
- mp->client_index = tm->my_client_index;
- mp->context = 0xdeadbeef;
- mp->rx_sw_if_index = ntohl (5);
- mp->tx_sw_if_index = ntohl (6);
- mp->enable = 1;
-
- vl_msg_api_send_shmem (tm->vl_input_queue, (u8 *) & mp);
-}
-
-void
-l2_bridge (test_main_t * tm)
-{
- vl_api_sw_interface_set_l2_bridge_t *mp;
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- memset (mp, 0, sizeof (*mp));
- mp->_vl_msg_id = ntohs (VL_API_SW_INTERFACE_SET_L2_BRIDGE);
- mp->client_index = tm->my_client_index;
- mp->context = 0xdeadbeef;
- mp->rx_sw_if_index = ntohl (5);
- mp->bd_id = ntohl (6);
- mp->bvi = ntohl (1);
- mp->shg = ntohl (0);
- mp->enable = 1;
-
- vl_msg_api_send_shmem (tm->vl_input_queue, (u8 *) & mp);
-}
-
-int
-main (int argc, char **argv)
-{
- api_main_t *am = &api_main;
- test_main_t *tm = &test_main;
- int ch;
-
- connect_to_vpe ("test_client");
-
- tm->vl_input_queue = shmem_hdr->vl_input_queue;
- tm->my_client_index = am->my_client_index;
-
- fformat (stdout, "Type 'h' for help, 'q' to quit...\n");
-
- while (1)
- {
- ch = getchar ();
- switch (ch)
- {
- case 'q':
- goto done;
- case 'd':
- dump (tm);
- break;
- case 'L':
- link_up_down_enable_disable (tm, 1 /* enable_disable */ );
- break;
- case 'l':
- link_up_down_enable_disable (tm, 0 /* enable_disable */ );
- break;
- case 'S':
- stats_enable_disable (tm, 1 /* enable_disable */ );
- break;
- case 's':
- stats_enable_disable (tm, 0 /* enable_disable */ );
- break;
- case '3':
- add_del_ip4_route (tm, 0 /* add */ );
- break;
- case '4':
- add_del_ip4_route (tm, 1 /* add */ );
- break;
- case '5':
- add_del_ip6_route (tm, 0 /* add */ );
- break;
- case '6':
- add_del_ip6_route (tm, 1 /* add */ );
- break;
- case 'A':
- add_del_interface_address (tm, 1 /* add */ );
- break;
- case 'a':
- add_del_interface_address (tm, 0 /* add */ );
- break;
- case 'B':
- add_del_v6_interface_address (tm, 1 /* add */ );
- break;
- case 'b':
- add_del_v6_interface_address (tm, 0 /* add */ );
- break;
- case 'E':
- l2_patch_add_del (tm, 1 /* is_add */ );
- break;
- case 'e':
- l2_patch_add_del (tm, 0 /* is_add */ );
- break;
- case 'z':
- del_all_interface_addresses (tm);
- break;
- case 't':
- set_interface_table (tm, 0 /* is_ipv6 */ ,
- 11 /* my amp goes to 11 */ );
- break;
- case 'T':
- set_interface_table (tm, 1 /* is_ipv6 */ ,
- 12 /* my amp goes to 12 */ );
- break;
-
- case 'u':
- create_vlan_subif (tm, 123);
- break;
-
- case 'c':
- connect_unix_tap (tm, "foo");
- break;
-
- case 'n':
- add_ip4_neighbor (tm, 1 /* is_add */ );
- add_ip6_neighbor (tm, 1 /* is_add */ );
- break;
-
- case 'N':
- add_ip4_neighbor (tm, 0 /* is_add */ );
- add_ip6_neighbor (tm, 0 /* is_add */ );
- break;
-
- case 'p':
- add_del_proxy_arp (tm, 1 /* add */ );
- break;
-
- case 'i':
- proxy_arp_intfc_enable_disable (tm, 1 /* enable */ );
- break;
-
- case 'O':
- oam_events_enable_disable (tm, 0 /* enable */ );
- break;
-
- case 'o':
- oam_events_enable_disable (tm, 1 /* enable */ );
- break;
-
- case '0':
- oam_add_del (tm, 0 /* is_add */ );
- break;
-
- case '1':
- oam_add_del (tm, 1 /* is_add */ );
- break;
-
- case 'r':
- reset_fib (tm, 0 /* is_ip6 */ );
- break;
-
- case 'R':
- reset_fib (tm, 1 /* is_ip6 */ );
- break;
-
- case 'j':
- dhcp_set_vss (tm);
- break;
-
- case 'k':
- dhcp_set_proxy (tm, 0);
- break;
-
- case 'K':
- dhcp_set_proxy (tm, 1 /*ipv6 */ );
- break;
-
- case 'v':
- set_ip_flow_hash (tm, 0 /* is_ip6 */ );
- break;
-
- case 'V':
- ip6_set_link_local_address (tm);
- break;
-
- case 'w':
- ip6_enable_disable (tm, 1 /* enable */ );
- break;
-
- case 'W':
- ip6_enable_disable (tm, 0 /* disable */ );
- break;
-
- case 'x':
- ip6nd_ra_config (tm, 0 /* is_no */ );
- break;
- case 'X':
- ip6nd_ra_config (tm, 1 /* is_no */ );
- break;
- case 'y':
- ip6nd_ra_prefix (tm, 0 /* is_no */ );
- break;
- case 'Y':
- ip6nd_ra_prefix (tm, 1 /* is_no */ );
- break;
-
- case '7':
- loop_create (tm);
- break;
-
- case 'F':
- set_flags (tm, 1 /* up_down */ );
- break;
-
- case 'f':
- set_flags (tm, 0 /* up_down */ );
- break;
-
- case '@':
- l2_xconnect (tm);
- break;
-
- case '#':
- l2_bridge (tm);
- break;
-
- case 'h':
- fformat (stdout, "q=quit,d=dump,L=link evts on,l=link evts off\n");
- fformat (stdout, "S=stats on,s=stats off\n");
- fformat (stdout, "4=add v4 route, 3=del v4 route\n");
- fformat (stdout, "6=add v6 route, 5=del v6 route\n");
- fformat (stdout, "A=add v4 intfc route, a=del v4 intfc route\n");
- fformat (stdout, "B=add v6 intfc route, b=del v6 intfc route\n");
- fformat (stdout, "z=del all intfc routes\n");
- fformat (stdout, "t=set v4 intfc table, T=set v6 intfc table\n");
- fformat (stdout, "c=connect unix tap\n");
- fformat (stdout,
- "j=set dhcpv4 and v6 link-address/option-82 params\n");
- fformat (stdout, "k=set dhcpv4 relay agent params\n");
- fformat (stdout, "K=set dhcpv6 relay agent params\n");
- fformat (stdout, "E=add l2 patch, e=del l2 patch\n");
- fformat (stdout, "V=ip6 set link-local address \n");
- fformat (stdout, "w=ip6 enable \n");
- fformat (stdout, "W=ip6 disable \n");
- fformat (stdout, "x=ip6 nd config \n");
- fformat (stdout, "X=no ip6 nd config\n");
- fformat (stdout, "y=ip6 nd prefix \n");
- fformat (stdout, "Y=no ip6 nd prefix\n");
- fformat (stdout, "@=l2 xconnect\n");
- fformat (stdout, "#=l2 bridge\n");
-
- default:
- break;
- }
-
- }
-
-done:
-
- if (tm->link_events_on)
- link_up_down_enable_disable (tm, 0 /* enable */ );
- if (tm->stats_on)
- stats_enable_disable (tm, 0 /* enable */ );
- if (tm->oam_events_on)
- oam_events_enable_disable (tm, 0 /* enable */ );
-
- disconnect_from_vpe ();
- exit (0);
-}
-
-#undef vl_api_version
-#define vl_api_version(n,v) static u32 vpe_api_version = v;
-#include <vpp-api/vpe.api.h>
-#undef vl_api_version
-
-void
-vl_client_add_api_signatures (vl_api_memclnt_create_t * mp)
-{
- /*
- * Send the main API signature in slot 0. This bit of code must
- * match the checks in ../vpe/api/api.c: vl_msg_api_version_check().
- */
- mp->api_versions[0] = clib_host_to_net_u32 (vpe_api_version);
-}
-
-/*
- * fd.io coding-style-patch-verification: ON
- *
- * Local Variables:
- * eval: (c-set-style "gnu")
- * End:
- */
diff --git a/vpp/vpp-api/test_ha.c b/vpp/vpp-api/test_ha.c
deleted file mode 100644
index 91364d8bc63..00000000000
--- a/vpp/vpp-api/test_ha.c
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
- *------------------------------------------------------------------
- * api.c - message handler registration
- *
- * Copyright (c) 2010 Cisco and/or its affiliates.
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *------------------------------------------------------------------
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <sys/mman.h>
-#include <sys/stat.h>
-#include <netinet/in.h>
-#include <signal.h>
-#include <pthread.h>
-#include <unistd.h>
-#include <time.h>
-#include <fcntl.h>
-#include <string.h>
-#include <vppinfra/clib.h>
-#include <vppinfra/vec.h>
-#include <vppinfra/hash.h>
-#include <vppinfra/bitmap.h>
-#include <vppinfra/fifo.h>
-#include <vppinfra/time.h>
-#include <vppinfra/mheap.h>
-#include <vppinfra/heap.h>
-#include <vppinfra/pool.h>
-#include <vppinfra/format.h>
-#include <vppinfra/error.h>
-
-#include <vnet/vnet.h>
-#include <vlib/vlib.h>
-#include <vlib/unix/unix.h>
-#include <vlibapi/api.h>
-#include <vlibmemory/api.h>
-#include <svm.h>
-#include <svmdb.h>
-
-#include <vpp-api/vpe_msg_enum.h>
-
-#include <vnet/ip/ip.h>
-
-#define f64_endian(a)
-#define f64_print(a,b)
-
-#define vl_typedefs /* define message structures */
-#include <vpp-api/vpe_all_api_h.h>
-#undef vl_typedefs
-
-#define vl_endianfun /* define message structures */
-#include <vpp-api/vpe_all_api_h.h>
-#undef vl_endianfun
-
-/* instantiate all the print functions we know about */
-#define vl_print(handle, ...)
-#define vl_printfun
-#include <vpp-api/vpe_all_api_h.h>
-#undef vl_printfun
-
-vl_shmem_hdr_t *shmem_hdr;
-
-typedef struct
-{
- u32 pings_sent;
- u32 pings_replied;
- volatile u32 signal_received;
-
- /* convenience */
- unix_shared_memory_queue_t *vl_input_queue;
- u32 my_client_index;
- svmdb_client_t *svmdb_client;
-} test_main_t;
-
-test_main_t test_main;
-
-static void vl_api_control_ping_reply_t_handler
- (vl_api_control_ping_reply_t * mp)
-{
- test_main_t *tm = &test_main;
-
- fformat (stdout, "control ping reply from pid %d\n", ntohl (mp->vpe_pid));
- tm->pings_replied++;
-}
-
-vlib_main_t vlib_global_main;
-vlib_main_t **vlib_mains;
-
-void
-vlib_cli_output (struct vlib_main_t *vm, char *fmt, ...)
-{
- clib_warning ("BUG: vlib_cli_output callled...");
-}
-
-#define foreach_api_msg \
-_(CONTROL_PING_REPLY,control_ping_reply)
-
-void
-ping (test_main_t * tm)
-{
- vl_api_control_ping_t *mp;
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- memset (mp, 0, sizeof (*mp));
- mp->_vl_msg_id = ntohs (VL_API_CONTROL_PING);
- mp->client_index = tm->my_client_index;
- mp->context = 0xdeadbeef;
-
- vl_msg_api_send_shmem (tm->vl_input_queue, (u8 *) & mp);
-}
-
-static void
-noop_handler (void *notused)
-{
-}
-
-int
-connect_to_vpe (char *name)
-{
- int rv = 0;
- test_main_t *tm = &test_main;
- api_main_t *am = &api_main;
-
- rv = vl_client_connect_to_vlib ("/vpe-api", name, 32);
- if (rv < 0)
- return rv;
-
-#define _(N,n) \
- vl_msg_api_set_handlers(VL_API_##N, #n, \
- vl_api_##n##_t_handler, \
- noop_handler, \
- vl_api_##n##_t_endian, \
- vl_api_##n##_t_print, \
- sizeof(vl_api_##n##_t), 1);
- foreach_api_msg;
-#undef _
-
- shmem_hdr = api_main.shmem_hdr;
- tm->vl_input_queue = shmem_hdr->vl_input_queue;
- tm->my_client_index = am->my_client_index;
- return 0;
-}
-
-int
-disconnect_from_vpe (void)
-{
- vl_client_disconnect_from_vlib ();
-
- return 0;
-}
-
-void
-signal_handler (int signo)
-{
- test_main_t *tm = &test_main;
-
- tm->signal_received = 1;
-}
-
-
-int
-main (int argc, char **argv)
-{
- test_main_t *tm = &test_main;
- api_main_t *am = &api_main;
- u32 swt_pid = 0;
- int connected = 0;
-
- signal (SIGINT, signal_handler);
-
- while (1)
- {
- if (tm->signal_received)
- break;
-
- if (am->shmem_hdr)
- swt_pid = am->shmem_hdr->vl_pid;
-
- /* If kill returns 0, the vpe-f process is alive */
- if (kill (swt_pid, 0) == 0)
- {
- /* Try to connect */
- if (connected == 0)
- {
- fformat (stdout, "Connect to VPE-f\n");
- if (connect_to_vpe ("test_ha_client") >= 0)
- {
- tm->pings_sent = 0;
- tm->pings_replied = 0;
- connected = 1;
- }
- else
- {
- fformat (stdout, "Connect failed, sleep and retry...\n");
- sleep (1);
- continue;
- }
- }
- tm->pings_sent++;
- ping (tm);
-
- sleep (1);
-
- /* havent heard back in 3 seconds, disco / reco */
- if ((tm->pings_replied + 3) <= tm->pings_sent)
- {
- fformat (stdout, "VPE-f pid %d not responding\n", swt_pid);
- swt_pid = 0;
- disconnect_from_vpe ();
- connected = 0;
- }
- }
- else
- {
- if (connected)
- {
- fformat (stdout, "VPE-f pid %d died\n", swt_pid);
- swt_pid = 0;
- disconnect_from_vpe ();
- connected = 0;
- }
- sleep (1);
- }
- }
-
- fformat (stdout, "Signal received, graceful exit\n");
- disconnect_from_vpe ();
- exit (0);
-}
-
-/*
- * fd.io coding-style-patch-verification: ON
- *
- * Local Variables:
- * eval: (c-set-style "gnu")
- * End:
- */
diff --git a/vpp/vpp-api/vat.h b/vpp/vpp-api/vat.h
deleted file mode 120000
index b7a00e900f5..00000000000
--- a/vpp/vpp-api/vat.h
+++ /dev/null
@@ -1 +0,0 @@
-../../vpp-api-test/vat/vat.h \ No newline at end of file
diff --git a/vpp/vpp-api/vpe.api b/vpp/vpp-api/vpe.api
deleted file mode 100644
index abd0e8f1cba..00000000000
--- a/vpp/vpp-api/vpe.api
+++ /dev/null
@@ -1,2782 +0,0 @@
-/*
- * Copyright (c) 2015-2016 Cisco and/or its affiliates.
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/** \file
-
- This file defines vpe control-plane API messages which are generally
- called through a shared memory interface.
-*/
-
-/*
- * Note: API placement cleanup in progress
- * If you're looking for interface APIs, please
- * see .../vnet/vnet/{interface.api,interface_api.c}
- * IP APIs: see .../vnet/vnet/ip/{ip.api, ip_api.c}
- * TAP APIs: see .../vnet/vnet/unix/{tap.api, tap_api.c}
- * VXLAN APIs: see .../vnet/vnet/vxlan/{vxlan.api, vxlan_api.c}
- * AF-PACKET APIs: ... see /vnet/devices/af_packet/{af_packet.api, af_packet_api.c}
- * NETMAP APIs: see ... /vnet/vnet/devices/netmap/{netmap.api, netmap_api.c}
- * VHOST-USER APIs: see .../vnet/devices/virtio/{vhost_user.api, vhost_user_api.c}
- * VXLAN GPE APIs: see .../vnet/vnet/vxlan-gpe/{vxlan_gpe.api, vxlan_gpe_api.c}
- * GRE APIs: see .../vnet/vnet/gre/{gre.api, gre_api.c}
- * L2TP APIs: see .../vnet/vnet/l2tp/{l2tp.api, l2tp_api.c}
- * BFD APIs: see .../vnet/vnet/bfd/{bfd.api, bfd_api.c}
- * IPSEC APIs: see .../vnet/vnet/ipsec/{ipsec.api, ipsec_api.c}
- * IPSEC-GRE APIs: see .../vnet/vnet/ipsec-gre/{ipsec_gre.api, ipsec_gre_api.c}
- * LISP APIs: see .../vnet/vnet/lisp/{lisp.api, lisp_api.c}
- * LISP-GPE APIs: see .../vnet/vnet/lisp-gpe/{lisp_gpe.api, lisp_gpe_api.c}
- */
-
-/** \brief Create a new subinterface with the given vlan id
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param sw_if_index - software index of the new vlan's parent interface
- @param vlan_id - vlan tag of the new interface
-*/
-define create_vlan_subif
-{
- u32 client_index;
- u32 context;
- u32 sw_if_index;
- u32 vlan_id;
-};
-
-/** \brief Reply for the vlan subinterface create request
- @param context - returned sender context, to match reply w/ request
- @param retval - return code
- @param sw_if_index - software index allocated for the new subinterface
-*/
-define create_vlan_subif_reply
-{
- u32 context;
- i32 retval;
- u32 sw_if_index;
-};
-
-/** \brief Enable or Disable MPLS on and interface
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param sw_if_index - index of the interface
- @param enable - if non-zero enable, else disable
-*/
-define sw_interface_set_mpls_enable
-{
- u32 client_index;
- u32 context;
- u32 sw_if_index;
- u8 enable;
-};
-
-/** \brief Reply for MPLS state on an interface
- @param context - returned sender context, to match reply w/ request
- @param retval - return code
-*/
-define sw_interface_set_mpls_enable_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief MPLS Route Add / del route
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param mr_label - The MPLS label value
- @param mr_eos - The End of stack bit
- @param mr_table_id - The MPLS table-id the route is added in
- @param mr_classify_table_index - If this is a classify route,
- this is the classify table index
- @param mr_create_table_if_needed - If the MPLS or IP tables do not exist,
- create them
- @param mr_is_add - Is this a route add or delete
- @param mr_is_classify - Is this route result a classify
- @param mr_is_multipath - Is this route update a multipath - i.e. is this
- a path addition to an existing route
- @param mr_is_resolve_host - Recurse resolution constraint via a host prefix
- @param mr_is_resolve_attached - Recurse resolution constraint via attached prefix
- @param mr_next_hop_proto_is_ip4 - The next-hop is IPV4
- @param mr_next_hop_weight - The weight, for UCMP
- @param mr_next_hop[16] - the nextop address
- @param mr_next_hop_sw_if_index - the next-hop SW interface
- @param mr_next_hop_table_id - the next-hop table-id (if appropriate)
- @param mr_next_hop_n_out_labels - the number of labels in the label stack
- @param mr_next_hop_out_label_stack - the next-hop output label stack, outer most first
- @param next_hop_via_label - The next-hop is a resolved via a local label
-*/
-define mpls_route_add_del
-{
- u32 client_index;
- u32 context;
- u32 mr_label;
- u8 mr_eos;
- u32 mr_table_id;
- u32 mr_classify_table_index;
- u8 mr_create_table_if_needed;
- u8 mr_is_add;
- u8 mr_is_classify;
- u8 mr_is_multipath;
- u8 mr_is_resolve_host;
- u8 mr_is_resolve_attached;
- u8 mr_next_hop_proto_is_ip4;
- u8 mr_next_hop_weight;
- u8 mr_next_hop[16];
- u8 mr_next_hop_n_out_labels;
- u32 mr_next_hop_sw_if_index;
- u32 mr_next_hop_table_id;
- u32 mr_next_hop_via_label;
- u32 mr_next_hop_out_label_stack[mr_next_hop_n_out_labels];
-};
-
-/** \brief Reply for MPLS route add / del request
- @param context - returned sender context, to match reply w/ request
- @param retval - return code
-*/
-define mpls_route_add_del_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief Dump MPLS fib table
- @param client_index - opaque cookie to identify the sender
-*/
-define mpls_fib_dump
-{
- u32 client_index;
- u32 context;
-};
-
-/** \brief FIB path
- @param sw_if_index - index of the interface
- @param weight - The weight, for UCMP
- @param is_local - local if non-zero, else remote
- @param is_drop - Drop the packet
- @param is_unreach - Drop the packet and rate limit send ICMP unreachable
- @param is_prohibit - Drop the packet and rate limit send ICMP prohibited
- @param afi - the afi of the next hop, IP46_TYPE_IP4=1, IP46_TYPE_IP6=2
- @param next_hop[16] - the next hop address
-
- WARNING: this type is replicated, pending cleanup completion
-
-*/
-typeonly manual_print manual_endian define fib_path2
-{
- u32 sw_if_index;
- u32 weight;
- u8 is_local;
- u8 is_drop;
- u8 is_unreach;
- u8 is_prohibit;
- u8 afi;
- u8 next_hop[16];
-};
-
-/** \brief mpls FIB table response
- @param table_id - MPLS fib table id
- @param s_bit - End-of-stack bit
- @param label - MPLS label value
- @param count - the number of fib_path in path
- @param path - array of of fib_path structures
-*/
-manual_endian manual_print define mpls_fib_details
-{
- u32 context;
- u32 table_id;
- u8 eos_bit;
- u32 label;
- u32 count;
- vl_api_fib_path2_t path[count];
-};
-
-/** \brief Bind/Unbind an MPLS local label to an IP prefix. i.e. create
- a per-prefix label entry.
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param mb_mpls_table_id - The MPLS table-id the MPLS entry will be added in
- @param mb_label - The MPLS label value to bind
- @param mb_ip_table_id - The IP table-id of the IP prefix to bind to.
- @param mb_create_table_if_needed - Create either/both tables if required.
- @param mb_is_bind - Bind or unbind
- @param mb_is_ip4 - The prefix to bind to is IPv4
- @param mb_address_length - Length of IP prefix
- @param mb_address[16] - IP prefix/
-*/
-define mpls_ip_bind_unbind
-{
- u32 client_index;
- u32 context;
- u32 mb_mpls_table_id;
- u32 mb_label;
- u32 mb_ip_table_id;
- u8 mb_create_table_if_needed;
- u8 mb_is_bind;
- u8 mb_is_ip4;
- u8 mb_address_length;
- u8 mb_address[16];
-};
-
-/** \brief Reply for MPLS IP bind/unbind request
- @param context - returned sender context, to match reply w/ request
- @param retval - return code
-*/
-define mpls_ip_bind_unbind_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief MPLS tunnel Add / del route
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param mt_is_add - Is this a route add or delete
- @param mt_sw_if_index - The SW interface index of the tunnel to delete
- @param mt_next_hop_proto_is_ip4 - The next-hop is IPV4
- @param mt_next_hop_weight - The weight, for UCMP
- @param mt_next_hop[16] - the nextop address
- @param mt_next_hop_sw_if_index - the next-hop SW interface
- @param mt_next_hop_table_id - the next-hop table-id (if appropriate)
- @param mt_next_hop_n_out_labels - the number of next-hop output labels
- @param mt_next_hop_out_label_stack - the next-hop output label stack, outer most first
-*/
-define mpls_tunnel_add_del
-{
- u32 client_index;
- u32 context;
- u32 mt_sw_if_index;
- u8 mt_is_add;
- u8 mt_l2_only;
- u8 mt_next_hop_proto_is_ip4;
- u8 mt_next_hop_weight;
- u8 mt_next_hop[16];
- u8 mt_next_hop_n_out_labels;
- u32 mt_next_hop_sw_if_index;
- u32 mt_next_hop_table_id;
- u32 mt_next_hop_out_label_stack[mt_next_hop_n_out_labels];
-};
-
-/** \brief Reply for MPLS tunnel add / del request
- @param context - returned sender context, to match reply w/ request
- @param retval - return code
- @param sw_if_index - SW interface index of the tunnel created
-*/
-define mpls_tunnel_add_del_reply
-{
- u32 context;
- i32 retval;
- u32 sw_if_index;
-};
-
-/** \brief Dump mpls eth tunnel table
- @param client_index - opaque cookie to identify the sender
- @param tunnel_index - eth tunnel identifier or -1 in case of all tunnels
-*/
-define mpls_tunnel_dump
-{
- u32 client_index;
- u32 context;
- i32 tunnel_index;
-};
-
-/** \brief mpls eth tunnel operational state response
- @param tunnel_index - eth tunnel identifier
- @param intfc_address - interface ipv4 addr
- @param mask_width - interface ipv4 addr mask
- @param hw_if_index - interface id
- @param l2_only -
- @param tunnel_dst_mac -
- @param tx_sw_if_index -
- @param encap_index - reference to mpls label table
- @param nlabels - number of resolved labels
- @param labels - resolved labels
-*/
-define mpls_tunnel_details
-{
- u32 context;
- u32 tunnel_index;
- u8 mt_l2_only;
- u8 mt_sw_if_index;
- u8 mt_next_hop_proto_is_ip4;
- u8 mt_next_hop[16];
- u32 mt_next_hop_sw_if_index;
- u32 mt_next_hop_table_id;
- u32 mt_next_hop_n_labels;
- u32 mt_next_hop_out_labels[mt_next_hop_n_labels];
-};
-
-/** \brief Proxy ARP add / del request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param vrf_id - VRF / Fib table ID
- @param is_add - 1 if adding the Proxy ARP range, 0 if deleting
- @param low_address[4] - Low address of the Proxy ARP range
- @param hi_address[4] - High address of the Proxy ARP range
-*/
-define proxy_arp_add_del
-{
- u32 client_index;
- u32 context;
- u32 vrf_id;
- u8 is_add;
- u8 low_address[4];
- u8 hi_address[4];
-};
-
-/** \brief Reply for proxy arp add / del request
- @param context - returned sender context, to match reply w/ request
- @param retval - return code
-*/
-define proxy_arp_add_del_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief Proxy ARP add / del request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param sw_if_index - Which interface to enable / disable Proxy Arp on
- @param enable_disable - 1 to enable Proxy ARP on interface, 0 to disable
-*/
-define proxy_arp_intfc_enable_disable
-{
- u32 client_index;
- u32 context;
- u32 sw_if_index;
- /* 1 = on, 0 = off */
- u8 enable_disable;
-};
-
-/** \brief Reply for Proxy ARP interface enable / disable request
- @param context - returned sender context, to match reply w/ request
- @param retval - return code
-*/
-define proxy_arp_intfc_enable_disable_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief Reset VRF (remove all routes etc) request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param is_ipv6 - 1 for IPv6 neighbor, 0 for IPv4
- @param vrf_id - ID of th FIB table / VRF to reset
-*/
-define reset_vrf
-{
- u32 client_index;
- u32 context;
- u8 is_ipv6;
- u32 vrf_id;
-};
-
-/** \brief Reply for Reset VRF request
- @param context - returned sender context, to match reply w/ request
- @param retval - return code
-*/
-define reset_vrf_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief Is Address Reachable request - DISABLED
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param next_hop_sw_if_index - index of interface used to get to next hop
- @param is_ipv6 - 1 for IPv6, 0 for IPv4
- @param is_error - address not found or does not match intf
- @param address[] - Address in question
-*/
-define is_address_reachable
-{
- u32 client_index; /* (api_main_t *) am->my_client_index */
- u32 context;
- u32 next_hop_sw_if_index;
- u8 is_known; /* on reply, this is the answer */
- u8 is_ipv6;
- u8 is_error; /* address not found or does not match intf */
- u8 address[16];
-};
-
-/** \brief Want Stats, register for stats updates
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param enable_disable - 1 = enable stats, 0 = disable
- @param pid - pid of process requesting stats updates
-*/
-define want_stats
-{
- u32 client_index;
- u32 context;
- u32 enable_disable;
- u32 pid;
-};
-
-/** \brief Reply for Want Stats request
- @param context - returned sender context, to match reply w/ request
- @param retval - return code
-*/
-define want_stats_reply
-{
- u32 context;
- i32 retval;
-};
-
-typeonly manual_print manual_endian define ip4_fib_counter
-{
- u32 address;
- u8 address_length;
- u64 packets;
- u64 bytes;
-};
-
-manual_print manual_endian define vnet_ip4_fib_counters
-{
- u32 vrf_id;
- u32 count;
- vl_api_ip4_fib_counter_t c[count];
-};
-
-typeonly manual_print manual_endian define ip6_fib_counter
-{
- u64 address[2];
- u8 address_length;
- u64 packets;
- u64 bytes;
-};
-
-manual_print manual_endian define vnet_ip6_fib_counters
-{
- u32 vrf_id;
- u32 count;
- vl_api_ip6_fib_counter_t c[count];
-};
-
-/** \brief Request for a single block of summary stats
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
-*/
-define vnet_get_summary_stats
-{
- u32 client_index;
- u32 context;
-};
-
-/** \brief Reply for vnet_get_summary_stats request
- @param context - sender context, to match reply w/ request
- @param retval - return code for request
- @param total_pkts -
- @param total_bytes -
- @param vector_rate -
-*/
-define vnet_summary_stats_reply
-{
- u32 context;
- i32 retval;
- u64 total_pkts[2];
- u64 total_bytes[2];
- f64 vector_rate;
-};
-
-/** \brief OAM event structure
- @param dst_address[] -
- @param state
-*/
-define oam_event
-{
- u8 dst_address[4];
- u8 state;
-};
-
-/** \brief Want OAM events request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param enable_disable- enable if non-zero, else disable
- @param pid - pid of the requesting process
-*/
-define want_oam_events
-{
- u32 client_index;
- u32 context;
- u32 enable_disable;
- u32 pid;
-};
-
-/** \brief Want OAM events response
- @param context - sender context, to match reply w/ request
- @param retval - return code for the want oam stats request
-*/
-define want_oam_events_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief OAM add / del target request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param vrf_id - vrf_id of the target
- @param src_address[] - source address to use for the updates
- @param dst_address[] - destination address of the target
- @param is_add - add target if non-zero, else delete
-*/
-define oam_add_del
-{
- u32 client_index;
- u32 context;
- u32 vrf_id;
- u8 src_address[4];
- u8 dst_address[4];
- u8 is_add;
-};
-
-/** \brief OAM add / del target response
- @param context - sender context, to match reply w/ request
- @param retval - return code of the request
-*/
-define oam_add_del_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief Reset fib table request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param vrf_id - vrf/table id of the fib table to reset
- @param is_ipv6 - an ipv6 fib to reset if non-zero, else ipv4
-*/
-define reset_fib
-{
- u32 client_index;
- u32 context;
- u32 vrf_id;
- u8 is_ipv6;
-};
-
-/** \brief Reset fib response
- @param context - sender context, to match reply w/ request
- @param retval - return code for the reset bfib request
-*/
-define reset_fib_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief DHCP Proxy config add / del request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param vrf_id - vrf id
- @param if_ipv6 - ipv6 if non-zero, else ipv4
- @param is_add - add the config if non-zero, else delete
- @param insert_circuit_id - option82 suboption 1 fib number
- @param dhcp_server[] - server address
- @param dhcp_src_address[] - <fix this, need details>
-*/
-define dhcp_proxy_config
-{
- u32 client_index;
- u32 context;
- u32 vrf_id;
- u8 is_ipv6;
- u8 is_add;
- u8 insert_circuit_id;
- u8 dhcp_server[16];
- u8 dhcp_src_address[16];
-};
-
-/** \brief DHCP Proxy config response
- @param context - sender context, to match reply w/ request
- @param retval - return code for the request
-*/
-define dhcp_proxy_config_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief DHCP Proxy set / unset vss request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param tbl_id - table id
- @param oui - first part of vpn id
- @param fib_id - second part of vpn id
- @param is_ipv6 - ip6 if non-zero, else ip4
- @param is_add - set vss if non-zero, else delete
-*/
-define dhcp_proxy_set_vss
-{
- u32 client_index;
- u32 context;
- u32 tbl_id;
- u32 oui;
- u32 fib_id;
- u8 is_ipv6;
- u8 is_add;
-};
-
-/** \brief DHCP proxy set / unset vss response
- @param context - sender context, to match reply w/ request
- @param retval - return code for the request
-*/
-define dhcp_proxy_set_vss_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief Create loopback interface request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param mac_address - mac addr to assign to the interface if none-zero
-*/
-define create_loopback
-{
- u32 client_index;
- u32 context;
- u8 mac_address[6];
-};
-
-/** \brief Create loopback interface response
- @param context - sender context, to match reply w/ request
- @param sw_if_index - sw index of the interface that was created
- @param retval - return code for the request
-*/
-define create_loopback_reply
-{
- u32 context;
- i32 retval;
- u32 sw_if_index;
-};
-
-/** \brief Delete loopback interface request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param sw_if_index - sw index of the interface that was created
-*/
-define delete_loopback
-{
- u32 client_index;
- u32 context;
- u32 sw_if_index;
-};
-
-/** \brief Delete loopback interface response
- @param context - sender context, to match reply w/ request
- @param retval - return code for the request
-*/
-define delete_loopback_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief Control ping from client to api server request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
-*/
-define control_ping
-{
- u32 client_index;
- u32 context;
-};
-
-/** \brief Control ping from the client to the server response
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param retval - return code for the request
- @param vpe_pid - the pid of the vpe, returned by the server
-*/
-define control_ping_reply
-{
- u32 context;
- i32 retval;
- u32 client_index;
- u32 vpe_pid;
-};
-
-/** \brief Process a vpe parser cli string request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param cmd_in_shmem - pointer to cli command string
-*/
-define cli_request
-{
- u32 client_index;
- u32 context;
- u64 cmd_in_shmem;
-};
-define cli_inband
-{
- u32 client_index;
- u32 context;
- u32 length;
- u8 cmd[length];
-};
-
-/** \brief vpe parser cli string response
- @param context - sender context, to match reply w/ request
- @param retval - return code for request
- @param reply_in_shmem - Reply string from cli processing if any
-*/
-define cli_reply
-{
- u32 context;
- i32 retval;
- u64 reply_in_shmem;
-};
-define cli_inband_reply
-{
- u32 context;
- i32 retval;
- u32 length;
- u8 reply[length];
-};
-
-/** \brief Set max allowed ARP or ip6 neighbor entries request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param is_ipv6 - neighbor limit if non-zero, else ARP limit
- @param arp_neighbor_limit - the new limit, defaults are ~ 50k
-*/
-define set_arp_neighbor_limit
-{
- u32 client_index;
- u32 context;
- u8 is_ipv6;
- u32 arp_neighbor_limit;
-};
-
-/** \brief Set max allowed ARP or ip6 neighbor entries response
- @param context - sender context, to match reply w/ request
- @param retval - return code for request
-*/
-define set_arp_neighbor_limit_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief L2 interface patch add / del request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param rx_sw_if_index - receive side interface
- @param tx_sw_if_index - transmit side interface
- @param is_add - if non-zero set up the interface patch, else remove it
-*/
-define l2_patch_add_del
-{
- u32 client_index;
- u32 context;
- u32 rx_sw_if_index;
- u32 tx_sw_if_index;
- u8 is_add;
-};
-
-/** \brief L2 interface patch add / del response
- @param context - sender context, to match reply w/ request
- @param retval - return code for the request
-*/
-define l2_patch_add_del_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief IPv6 segment routing tunnel add / del request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param is_add - add the tunnel if non-zero, else delete it
- @param name[] - tunnel name (len. 64)
- @param src_address[] -
- @param dst_address[] -
- @param dst_mask_width -
- @param inner_vrf_id -
- @param outer_vrf_id -
- @param flags_net_byte_order -
- @param n_segments -
- @param n_tags -
- @param segs_and_tags[] -
- @param policy_name[] - name of policy to associate this tunnel to (len. 64)
-*/
-define sr_tunnel_add_del
-{
- u32 client_index;
- u32 context;
- u8 is_add;
- u8 name[64];
- u8 src_address[16];
- u8 dst_address[16];
- u8 dst_mask_width;
- u32 inner_vrf_id;
- u32 outer_vrf_id;
- u16 flags_net_byte_order;
- u8 n_segments;
- u8 n_tags;
- u8 policy_name[64];
- u8 segs_and_tags[0];
-};
-
-/** \brief IPv6 segment routing tunnel add / del response
- @param context - sender context, to match reply w/ request
- @param retval - return value for request
-*/
-define sr_tunnel_add_del_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief IPv6 segment routing policy add / del request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param is_add - add the tunnel if non-zero, else delete it
- @param name[] - policy name (len. 64)
- @param tunnel_names[] -
-*/
-define sr_policy_add_del
-{
- u32 client_index;
- u32 context;
- u8 is_add;
- u8 name[64];
- u8 tunnel_names[0];
-};
-
-/** \brief IPv6 segment routing policy add / del response
- @param context - sender context, to match reply w/ request
- @param retval - return value for request
-*/
-define sr_policy_add_del_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief IPv6 segment routing multicast map to policy add / del request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param is_add - add the tunnel if non-zero, else delete it
- @param multicast_address[] - IP6 multicast address
- @param policy_name[] = policy name (len.64)
-*/
-define sr_multicast_map_add_del
-{
- u32 client_index;
- u32 context;
- u8 is_add;
- u8 multicast_address[16];
- u8 policy_name[64];
-};
-
-/** \brief IPv6 segment routing multicast map to policy add / del response
- @param context - sender context, to match reply w/ request
- @param retval - return value for request
-*/
-define sr_multicast_map_add_del_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief Interface set vpath request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param sw_if_index - interface used to reach neighbor
- @param enable - if non-zero enable, else disable
-*/
-define sw_interface_set_vpath
-{
- u32 client_index;
- u32 context;
- u32 sw_if_index;
- u8 enable;
-};
-
-/** \brief Interface set vpath response
- @param context - sender context, to match reply w/ request
- @param retval - return code for the request
-*/
-define sw_interface_set_vpath_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief Set L2 XConnect between two interfaces request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param rx_sw_if_index - Receive interface index
- @param tx_sw_if_index - Transmit interface index
- @param enable - enable xconnect if not 0, else set to L3 mode
-*/
-define sw_interface_set_l2_xconnect
-{
- u32 client_index;
- u32 context;
- u32 rx_sw_if_index;
- u32 tx_sw_if_index;
- u8 enable;
-};
-
-/** \brief Set L2 XConnect response
- @param context - sender context, to match reply w/ request
- @param retval - L2 XConnect request return code
-*/
-define sw_interface_set_l2_xconnect_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief Interface bridge mode request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param rx_sw_if_index - the interface
- @param bd_id - bridge domain id
- @param bvi - Setup interface as a bvi, bridge mode only
- @param shg - Shared horizon group, for bridge mode only
- @param enable - Enable beige mode if not 0, else set to L3 mode
-*/
-define sw_interface_set_l2_bridge
-{
- u32 client_index;
- u32 context;
- u32 rx_sw_if_index;
- u32 bd_id;
- u8 shg;
- u8 bvi;
- u8 enable;
-};
-
-/** \brief Interface bridge mode response
- @param context - sender context, to match reply w/ request
- @param retval - Bridge mode request return code
-*/
-define sw_interface_set_l2_bridge_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief L2 FIB add entry request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param mac - the entry's mac address
- @param bd_id - the entry's bridge domain id
- @param sw_if_index - the interface
- @param is_add - If non zero add the entry, else delete it
- @param static_mac -
- @param filter_mac -
-*/
-define l2fib_add_del
-{
- u32 client_index;
- u32 context;
- u64 mac;
- u32 bd_id;
- u32 sw_if_index;
- u8 is_add;
- u8 static_mac;
- u8 filter_mac;
- u8 bvi_mac;
-};
-
-/** \brief L2 FIB add entry response
- @param context - sender context, to match reply w/ request
- @param retval - return code for the add l2fib entry request
-*/
-define l2fib_add_del_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief Set L2 flags request !!! TODO - need more info, feature bits in l2_input.h
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param sw_if_index - interface
- @param is_set - if non-zero, set the bits, else clear them
- @param feature_bitmap - non-zero bits to set or clear
-*/
-define l2_flags
-{
- u32 client_index;
- u32 context;
- u32 sw_if_index;
- u8 is_set;
- u32 feature_bitmap;
-};
-
-/** \brief Set L2 bits response
- @param context - sender context, to match reply w/ request
- @param retval - return code for the set l2 bits request
-*/
-define l2_flags_reply
-{
- u32 context;
- i32 retval;
- u32 resulting_feature_bitmap;
-};
-
-/** \brief Set bridge flags (such as L2_LEARN, L2_FWD, L2_FLOOD,
- L2_UU_FLOOD, or L2_ARP_TERM) request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param bd_id - the bridge domain to set the flags for
- @param is_set - if non-zero, set the flags, else clear them
- @param feature_bitmap - bits that are non-zero to set or clear
-*/
-define bridge_flags
-{
- u32 client_index;
- u32 context;
- u32 bd_id;
- u8 is_set;
- u32 feature_bitmap;
-};
-
-/** \brief Set bridge flags response
- @param context - sender context, to match reply w/ request
- @param retval - return code for the set bridge flags request
- @param resulting_feature_bitmap - the feature bitmap value after the request is implemented
-*/
-define bridge_flags_reply
-{
- u32 context;
- i32 retval;
- u32 resulting_feature_bitmap;
-};
-
-/** \brief Set bridge domain ip to mac entry request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param bd_id - the bridge domain to set the flags for
- @param is_add - if non-zero, add the entry, else clear it
- @param is_ipv6 - if non-zero, ipv6 address, else ipv4 address
- @param mac_address - MAC address
- @param
-*/
-define bd_ip_mac_add_del
-{
- u32 client_index;
- u32 context;
- u32 bd_id;
- u8 is_add;
- u8 is_ipv6;
- u8 ip_address[16];
- u8 mac_address[6];
-};
-
-/** \brief Set bridge domain ip to mac entry response
- @param context - sender context, to match reply w/ request
- @param retval - return code for the set bridge flags request
-*/
-define bd_ip_mac_add_del_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief Add/Delete classification table request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param is_add- if non-zero add the table, else delete it
- @param del_chain - if non-zero delete the whole chain of tables
- @param table_index - if add, reuturns index of the created table, else specifies the table to delete
- @param nbuckets - number of buckets when adding a table
- @param memory_size - memory size when adding a table
- @param match_n_vectors - number of match vectors
- @param next_table_index - index of next table
- @param miss_next_index - index of miss table
- @param current_data_flag - option to use current node's packet payload
- as the starting point from where packets are classified,
- This option is only valid for L2/L3 input ACL for now.
- 0: by default, classify data from the buffer's start location
- 1: classify packets from VPP node’s current data pointer
- @param current_data_offset - a signed value to shift the start location of
- the packet to be classified
- For example, if input IP ACL node is used, L2 header’s first byte
- can be accessible by configuring current_data_offset to -14
- if there is no vlan tag.
- This is valid only if current_data_flag is set to 1.
- @param mask[] - match mask
-*/
-define classify_add_del_table
-{
- u32 client_index;
- u32 context;
- u8 is_add;
- u8 del_chain;
- u32 table_index;
- u32 nbuckets;
- u32 memory_size;
- u32 skip_n_vectors;
- u32 match_n_vectors;
- u32 next_table_index;
- u32 miss_next_index;
- u32 current_data_flag;
- i32 current_data_offset;
- u8 mask[0];
-};
-
-/** \brief Add/Delete classification table response
- @param context - sender context, to match reply w/ request
- @param retval - return code for the table add/del requst
- @param new_table_index - for add, returned index of the new table
- @param skip_n_vectors - for add, returned value of skip_n_vectors in table
- @param match_n_vectors -for add, returned value of match_n_vectors in table
-*/
-define classify_add_del_table_reply
-{
- u32 context;
- i32 retval;
- u32 new_table_index;
- u32 skip_n_vectors;
- u32 match_n_vectors;
-};
-
-/** \brief Classify add / del session request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param is_add - add session if non-zero, else delete
- @param table_index - index of the table to add/del the session, required
- @param hit_next_index - for add, hit_next_index of new session, required
- @param opaque_index - for add, opaque_index of new session
- @param advance -for add, advance value for session
- @param action -
- 0: no action (by default)
- metadata is not used.
- 1: Classified IP packets will be looked up from the
- specified ipv4 fib table (configured by metadata as VRF id).
- Only valid for L3 input ACL node
- 2: Classified IP packets will be looked up from the
- specified ipv6 fib table (configured by metadata as VRF id).
- Only valid for L3 input ACL node
- @param metadata - valid only if action != 0
- VRF id if action is 1 or 2.
- @param match[] - for add, match value for session, required
-*/
-define classify_add_del_session
-{
- u32 client_index;
- u32 context;
- u8 is_add;
- u32 table_index;
- u32 hit_next_index;
- u32 opaque_index;
- i32 advance;
- u8 action;
- u32 metadata;
- u8 match[0];
-};
-
-/** \brief Classify add / del session response
- @param context - sender context, to match reply w/ request
- @param retval - return code for the add/del session request
-*/
-define classify_add_del_session_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief Set/unset the classification table for an interface request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param is_ipv6 - ipv6 if non-zero, else ipv4
- @param sw_if_index - interface to associate with the table
- @param table_index - index of the table, if ~0 unset the table
-*/
-define classify_set_interface_ip_table
-{
- u32 client_index;
- u32 context;
- u8 is_ipv6;
- u32 sw_if_index;
- u32 table_index; /* ~0 => off */
-};
-
-/** \brief Set/unset interface classification table response
- @param context - sender context, to match reply w/ request
- @param retval - return code
-*/
-define classify_set_interface_ip_table_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief Set/unset l2 classification tables for an interface request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param sw_if_index - interface to set/unset tables for
- @param ip4_table_index - ip4 index, use ~0 for all 3 indexes to unset
- @param ip6_table_index - ip6 index
- @param other_table_index - other index
-*/
-define classify_set_interface_l2_tables
-{
- u32 client_index;
- u32 context;
- u32 sw_if_index;
- /* 3 x ~0 => off */
- u32 ip4_table_index;
- u32 ip6_table_index;
- u32 other_table_index;
- u8 is_input;
-};
-
-/** \brief Set/unset l2 classification tables for an interface response
- @param context - sender context, to match reply w/ request
- @param retval - return code for the request
-*/
-define classify_set_interface_l2_tables_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief Get node index using name request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param node_name[] - name of the node
-*/
-define get_node_index
-{
- u32 client_index;
- u32 context;
- u8 node_name[64];
-};
-
-/** \brief Get node index using name request
- @param context - sender context, to match reply w/ request
- @param retval - return code for the request
- @param node_index - index of the desired node if found, else ~0
-*/
-define get_node_index_reply
-{
- u32 context;
- i32 retval;
- u32 node_index;
-};
-
-/** \brief Set the next node for a given node request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param node_name[] - node to add the next node to
- @param next_name[] - node to add as the next node
-*/
-define add_node_next
-{
- u32 client_index;
- u32 context;
- u8 node_name[64];
- u8 next_name[64];
-};
-
-/** \brief IP Set the next node for a given node response
- @param context - sender context, to match reply w/ request
- @param retval - return code for the add next node request
- @param next_index - the index of the next node if success, else ~0
-*/
-define add_node_next_reply
-{
- u32 context;
- i32 retval;
- u32 next_index;
-};
-
-/** \brief DHCP Proxy config 2 add / del request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param rx_vrf_id - receive vrf id
- @param server_vrf_id - server vrf id
- @param if_ipv6 - ipv6 if non-zero, else ipv4
- @param is_add - add the config if non-zero, else delete
- @param insert_circuit_id - option82 suboption 1 fib number
- @param dhcp_server[] - server address
- @param dhcp_src_address[] - <fix this, need details>
-*/
-define dhcp_proxy_config_2
-{
- u32 client_index;
- u32 context;
- u32 rx_vrf_id;
- u32 server_vrf_id;
- u8 is_ipv6;
- u8 is_add;
- u8 insert_circuit_id;
- u8 dhcp_server[16];
- u8 dhcp_src_address[16];
-};
-
-/** \brief DHCP Proxy config 2 add / del response
- @param context - sender context, to match reply w/ request
- @param retval - return code for request
-*/
-define dhcp_proxy_config_2_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief L2 fib clear table request, clear all mac entries in the l2 fib
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
-*/
-define l2_fib_clear_table
-{
- u32 client_index;
- u32 context;
-};
-
-/** \brief L2 fib clear table response
- @param context - sender context, to match reply w/ request
- @param retval - return code for the request
-*/
-define l2_fib_clear_table_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief L2 interface ethernet flow point filtering enable/disable request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param sw_if_index - interface to enable/disable filtering on
- @param enable_disable - if non-zero enable filtering, else disable
-*/
-define l2_interface_efp_filter
-{
- u32 client_index;
- u32 context;
- u32 sw_if_index;
- u32 enable_disable;
-};
-
-/** \brief L2 interface ethernet flow point filtering response
- @param context - sender context, to match reply w/ request
- @param retval - return code for the request
-*/
-define l2_interface_efp_filter_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief L2 interface vlan tag rewrite configure request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param sw_if_index - interface the operation is applied to
- @param vtr_op - Choose from l2_vtr_op_t enum values
- @param push_dot1q - first pushed flag dot1q id set, else dot1ad
- @param tag1 - Needed for any push or translate vtr op
- @param tag2 - Needed for any push 2 or translate x-2 vtr ops
-*/
-define l2_interface_vlan_tag_rewrite
-{
- u32 client_index;
- u32 context;
- u32 sw_if_index;
- u32 vtr_op;
- u32 push_dot1q; // ethertype of first pushed tag is dot1q/dot1ad
- u32 tag1; // first pushed tag
- u32 tag2; // second pushed tag
-};
-
-/** \brief L2 interface vlan tag rewrite response
- @param context - sender context, to match reply w/ request
- @param retval - return code for the request
-*/
-define l2_interface_vlan_tag_rewrite_reply
-{
- u32 context;
- i32 retval;
-};
-
-define create_subif
-{
- u32 client_index;
- u32 context;
- u32 sw_if_index;
- u32 sub_id;
-
- /* These fields map directly onto the subif template */
- u8 no_tags;
- u8 one_tag;
- u8 two_tags;
- u8 dot1ad; // 0 = dot1q, 1=dot1ad
- u8 exact_match;
- u8 default_sub;
- u8 outer_vlan_id_any;
- u8 inner_vlan_id_any;
- u16 outer_vlan_id;
- u16 inner_vlan_id;
-};
-
-define create_subif_reply
-{
- u32 context;
- i32 retval;
- u32 sw_if_index;
-};
-
-/** \brief show version
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
-*/
-define show_version
-{
- u32 client_index;
- u32 context;
-};
-
-/** \brief show version response
- @param context - sender context, to match reply w/ request
- @param retval - return code for the request
- @param program - name of the program (vpe)
- @param version - version of the program
- @param build_directory - root of the workspace where the program was built
-*/
-define show_version_reply
-{
- u32 context;
- i32 retval;
- u8 program[32];
- u8 version[32];
- u8 build_date[32];
- u8 build_directory[256];
-};
-
-/** \brief l2 fib table entry structure
- @param bd_id - the l2 fib / bridge domain table id
- @param mac - the entry's mac address
- @param sw_if_index - index of the interface
- @param static_mac - the entry is statically configured.
- @param filter_mac - the entry is a mac filter entry.
- @param bvi_mac - the mac address is a bridge virtual interface
-*/
-define l2_fib_table_entry
-{
- u32 context;
- u32 bd_id;
- u64 mac;
- u32 sw_if_index;
- u8 static_mac;
- u8 filter_mac;
- u8 bvi_mac;
-};
-
-/** \brief Dump l2 fib (aka bridge domain) table
- @param client_index - opaque cookie to identify the sender
- @param bd_id - the l2 fib / bridge domain table identifier
-*/
-define l2_fib_table_dump
-{
- u32 client_index;
- u32 context;
- u32 bd_id;
-};
-
-/* Gross kludge, DGMS */
-define interface_name_renumber
-{
- u32 client_index;
- u32 context;
- u32 sw_if_index;
- u32 new_show_dev_instance;
-};
-
-define interface_name_renumber_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief Register for ip4 arp resolution events
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param enable_disable - 1 => register for events, 0 => cancel registration
- @param pid - sender's pid
- @param address - the exact ip4 address of interest
-*/
-define want_ip4_arp_events
-{
- u32 client_index;
- u32 context;
- u8 enable_disable;
- u32 pid;
- u32 address;
-};
-
-/** \brief Reply for interface events registration
- @param context - returned sender context, to match reply w/ request
- @param retval - return code
-*/
-define want_ip4_arp_events_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief Tell client about an ip4 arp resolution event
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param address - the exact ip4 address of interest
- @param pid - client pid registered to receive notification
- @param sw_if_index - interface which received ARP packet
- @param new_mac - the new mac address
- @param mac_ip - 0: resolution event, 1: mac/ip binding in bd
-*/
-define ip4_arp_event
-{
- u32 client_index;
- u32 context;
- u32 address;
- u32 pid;
- u32 sw_if_index;
- u8 new_mac[6];
- u8 mac_ip;
-};
-
-/** \brief Register for ip6 nd resolution events
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param enable_disable - 1 => register for events, 0 => cancel registration
- @param pid - sender's pid
- @param address - the exact ip6 address of interest
-*/
-define want_ip6_nd_events
-{
- u32 client_index;
- u32 context;
- u8 enable_disable;
- u32 pid;
- u8 address[16];
-};
-
-/** \brief Reply for ip6 nd resolution events registration
- @param context - returned sender context, to match reply w/ request
- @param retval - return code
-*/
-define want_ip6_nd_events_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief Tell client about an ip6 nd resolution or mac/ip event
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param pid - client pid registered to receive notification
- @param sw_if_index - interface which received ARP packet
- @param address - the exact ip6 address of interest
- @param new_mac - the new mac address
- @param mac_ip - 0: resolution event, 1: mac/ip binding in bd
-*/
-define ip6_nd_event
-{
- u32 client_index;
- u32 context;
- u32 pid;
- u32 sw_if_index;
- u8 address[16];
- u8 new_mac[6];
- u8 mac_ip;
-};
-
-/** \brief L2 bridge domain add or delete request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param bd_id - the bridge domain to create
- @param flood - enable/disable bcast/mcast flooding in the bd
- @param uu_flood - enable/disable uknown unicast flood in the bd
- @param forward - enable/disable forwarding on all interfaces in the bd
- @param learn - enable/disable learning on all interfaces in the bd
- @param arp_term - enable/disable arp termination in the bd
- @param mac_age - mac aging time in min, 0 for disabled
- @param is_add - add or delete flag
-*/
-define bridge_domain_add_del
-{
- u32 client_index;
- u32 context;
- u32 bd_id;
- u8 flood;
- u8 uu_flood;
- u8 forward;
- u8 learn;
- u8 arp_term;
- u8 mac_age;
- u8 is_add;
-};
-
-/** \brief L2 bridge domain add or delete response
- @param context - sender context, to match reply w/ request
- @param retval - return code for the set bridge flags request
-*/
-define bridge_domain_add_del_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief L2 bridge domain request operational state details
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param bd_id - the bridge domain id desired or ~0 to request all bds
-*/
-define bridge_domain_dump
-{
- u32 client_index;
- u32 context;
- u32 bd_id;
-};
-
-/** \brief L2 bridge domain operational state response
- @param bd_id - the bridge domain id
- @param flood - bcast/mcast flooding state on all interfaces in the bd
- @param uu_flood - uknown unicast flooding state on all interfaces in the bd
- @param forward - forwarding state on all interfaces in the bd
- @param learn - learning state on all interfaces in the bd
- @param arp_term - arp termination state on all interfaces in the bd
- @param mac_age - mac aging time in min, 0 for disabled
- @param n_sw_ifs - number of sw_if_index's in the domain
-*/
-define bridge_domain_details
-{
- u32 context;
- u32 bd_id;
- u8 flood;
- u8 uu_flood;
- u8 forward;
- u8 learn;
- u8 arp_term;
- u8 mac_age;
- u32 bvi_sw_if_index;
- u32 n_sw_ifs;
-};
-
-/** \brief L2 bridge domain sw interface operational state response
- @param bd_id - the bridge domain id
- @param sw_if_index - sw_if_index in the domain
- @param shg - split horizon group for the interface
-*/
-define bridge_domain_sw_if_details
-{
- u32 context;
- u32 bd_id;
- u32 sw_if_index;
- u8 shg;
-};
-
-/** \brief DHCP Client config add / del request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param sw_if_index - index of the interface for DHCP client
- @param hostname - hostname
- @param is_add - add the config if non-zero, else delete
- @param want_dhcp_event - DHCP event sent to the sender
- via dhcp_compl_event API message if non-zero
- @param pid - sender's pid
-*/
-define dhcp_client_config
-{
- u32 client_index;
- u32 context;
- u32 sw_if_index;
- u8 hostname[64];
- u8 is_add;
- u8 want_dhcp_event;
- u32 pid;
-};
-
-/** \brief DHCP Client config response
- @param context - sender context, to match reply w/ request
- @param retval - return code for the request
-*/
-define dhcp_client_config_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief Set/unset input ACL interface
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param sw_if_index - interface to set/unset input ACL
- @param ip4_table_index - ip4 classify table index (~0 for skip)
- @param ip6_table_index - ip6 classify table index (~0 for skip)
- @param l2_table_index - l2 classify table index (~0 for skip)
- @param is_add - Set input ACL if non-zero, else unset
- Note: User is recommeneded to use just one valid table_index per call.
- (ip4_table_index, ip6_table_index, or l2_table_index)
-*/
-define input_acl_set_interface
-{
- u32 client_index;
- u32 context;
- u32 sw_if_index;
- u32 ip4_table_index;
- u32 ip6_table_index;
- u32 l2_table_index;
- u8 is_add;
-};
-
-/** \brief Set/unset input ACL interface response
- @param context - sender context, to match reply w/ request
- @param retval - return code for the request
-*/
-define input_acl_set_interface_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief Tell client about a DHCP completion event
- @param client_index - opaque cookie to identify the sender
- @param pid - client pid registered to receive notification
- @param is_ipv6 - if non-zero the address is ipv6, else ipv4
- @param host_address - Host IP address
- @param router_address - Router IP address
- @param host_mac - Host MAC address
-*/
-define dhcp_compl_event
-{
- u32 client_index;
- u32 pid;
- u8 hostname[64];
- u8 is_ipv6;
- u8 host_address[16];
- u8 router_address[16];
- u8 host_mac[6];
-};
-
-/** \brief cop: enable/disable junk filtration features on an interface
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param sw_if_inded - desired interface
- @param enable_disable - 1 => enable, 0 => disable
-*/
-
-define cop_interface_enable_disable
-{
- u32 client_index;
- u32 context;
- u32 sw_if_index;
- u8 enable_disable;
-};
-
-/** \brief cop: interface enable/disable junk filtration reply
- @param context - returned sender context, to match reply w/ request
- @param retval - return code
-*/
-
-define cop_interface_enable_disable_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief cop: enable/disable whitelist filtration features on an interface
- Note: the supplied fib_id must match in order to remove the feature!
-
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param sw_if_index - interface handle, physical interfaces only
- @param fib_id - fib identifier for the whitelist / blacklist fib
- @param ip4 - 1 => enable ip4 filtration, 0=> disable ip4 filtration
- @param ip6 - 1 => enable ip6 filtration, 0=> disable ip6 filtration
- @param default_cop - 1 => enable non-ip4, non-ip6 filtration 0=> disable it
-*/
-
-define cop_whitelist_enable_disable
-{
- u32 client_index;
- u32 context;
- u32 sw_if_index;
- u32 fib_id;
- u8 ip4;
- u8 ip6;
- u8 default_cop;
-};
-
-/** \brief cop: interface enable/disable junk filtration reply
- @param context - returned sender context, to match reply w/ request
- @param retval - return code
-*/
-
-define cop_whitelist_enable_disable_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief get_node_graph - get a copy of the vpp node graph
- including the current set of graph arcs.
-
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
-*/
-
-define get_node_graph
-{
- u32 client_index;
- u32 context;
-};
-
-/** \brief get_node_graph_reply
- @param context - returned sender context, to match reply w/ request
- @param retval - return code
- @param reply_in_shmem - result from vlib_node_serialize, in shared
- memory. Process with vlib_node_unserialize, remember to switch
- heaps and free the result.
-*/
-
-define get_node_graph_reply
-{
- u32 context;
- i32 retval;
- u64 reply_in_shmem;
-};
-
-/** \brief IOAM enable : Enable in-band OAM
- @param id - profile id
- @param seqno - To enable Seqno Processing
- @param analyse - Enabling analysis of iOAM at decap node
- @param pow_enable - Proof of Work enabled or not flag
- @param trace_enable - iOAM Trace enabled or not flag
-*/
-define ioam_enable
-{
- u32 client_index;
- u32 context;
- u16 id;
- u8 seqno;
- u8 analyse;
- u8 pot_enable;
- u8 trace_enable;
- u32 node_id;
-};
-
-/** \brief iOAM Trace profile add / del response
- @param context - sender context, to match reply w/ request
- @param retval - return value for request
-*/
-define ioam_enable_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief iOAM disable
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param index - MAP Domain index
-*/
-define ioam_disable
-{
- u32 client_index;
- u32 context;
- u16 id;
-};
-
-/** \brief iOAM disable response
- @param context - sender context, to match reply w/ request
- @param retval - return value for request
-*/
-define ioam_disable_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief Add/del policer
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param is_add - add policer if non-zero, else delete
- @param name - policer name
- @param cir - CIR
- @param eir - EIR
- @param cb - Committed Burst
- @param eb - Excess or Peak Burst
- @param rate_type - rate type
- @param round_type - rounding type
- @param type - policer algorithm
- @param color_aware - 0=color-blind, 1=color-aware
- @param conform_action_type - conform action type
- @param conform_dscp - DSCP for conform mar-and-transmit action
- @param exceed_action_type - exceed action type
- @param exceed_dscp - DSCP for exceed mar-and-transmit action
- @param violate_action_type - violate action type
- @param violate_dscp - DSCP for violate mar-and-transmit action
-*/
-define policer_add_del
-{
- u32 client_index;
- u32 context;
-
- u8 is_add;
- u8 name[64];
- u32 cir;
- u32 eir;
- u64 cb;
- u64 eb;
- u8 rate_type;
- u8 round_type;
- u8 type;
- u8 color_aware;
- u8 conform_action_type;
- u8 conform_dscp;
- u8 exceed_action_type;
- u8 exceed_dscp;
- u8 violate_action_type;
- u8 violate_dscp;
-};
-
-/** \brief Add/del policer response
- @param context - sender context, to match reply w/ request
- @param retval - return value for request
- @param policer_index - for add, returned index of the new policer
-*/
-define policer_add_del_reply
-{
- u32 context;
- i32 retval;
- u32 policer_index;
-};
-
-/** \brief Get list of policers
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param match_name_valid - if 0 request all policers otherwise use match_name
- @param match_name - policer name
-*/
-define policer_dump
-{
- u32 client_index;
- u32 context;
-
- u8 match_name_valid;
- u8 match_name[64];
-};
-
-/** \brief Policer operational state response.
- @param context - sender context, to match reply w/ request
- @param name - policer name
- @param cir - CIR
- @param eir - EIR
- @param cb - Committed Burst
- @param eb - Excess or Peak Burst
- @param rate_type - rate type
- @param round_type - rounding type
- @param type - policer algorithm
- @param conform_action_type - conform action type
- @param conform_dscp - DSCP for conform mar-and-transmit action
- @param exceed_action_type - exceed action type
- @param exceed_dscp - DSCP for exceed mar-and-transmit action
- @param violate_action_type - violate action type
- @param violate_dscp - DSCP for violate mar-and-transmit action
- @param single_rate - 1 = single rate policer, 0 = two rate policer
- @param color_aware - for hierarchical policing
- @param scale - power-of-2 shift amount for lower rates
- @param cir_tokens_per_period - number of tokens for each period
- @param pir_tokens_per_period - number of tokens for each period for 2-rate policer
- @param current_limit - current limit
- @param current_bucket - current bucket
- @param extended_limit - extended limit
- @param extended_bucket - extended bucket
- @param last_update_time - last update time
-*/
-define policer_details
-{
- u32 context;
-
- u8 name[64];
- u32 cir;
- u32 eir;
- u64 cb;
- u64 eb;
- u8 rate_type;
- u8 round_type;
- u8 type;
- u8 conform_action_type;
- u8 conform_dscp;
- u8 exceed_action_type;
- u8 exceed_dscp;
- u8 violate_action_type;
- u8 violate_dscp;
- u8 single_rate;
- u8 color_aware;
- u32 scale;
- u32 cir_tokens_per_period;
- u32 pir_tokens_per_period;
- u32 current_limit;
- u32 current_bucket;
- u32 extended_limit;
- u32 extended_bucket;
- u64 last_update_time;
-};
-
-/** \brief Set/unset policer classify interface
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param sw_if_index - interface to set/unset policer classify
- @param ip4_table_index - ip4 classify table index (~0 for skip)
- @param ip6_table_index - ip6 classify table index (~0 for skip)
- @param l2_table_index - l2 classify table index (~0 for skip)
- @param is_add - Set if non-zero, else unset
- Note: User is recommeneded to use just one valid table_index per call.
- (ip4_table_index, ip6_table_index, or l2_table_index)
-*/
-define policer_classify_set_interface
-{
- u32 client_index;
- u32 context;
- u32 sw_if_index;
- u32 ip4_table_index;
- u32 ip6_table_index;
- u32 l2_table_index;
- u8 is_add;
-};
-
-/** \brief Set/unset policer classify interface response
- @param context - sender context, to match reply w/ request
- @param retval - return value for request
-*/
-define policer_classify_set_interface_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief Get list of policer classify interfaces and tables
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param type - classify table type
-*/
-define policer_classify_dump
-{
- u32 client_index;
- u32 context;
- u8 type;
-};
-
-/** \brief Policer iclassify operational state response.
- @param context - sender context, to match reply w/ request
- @param sw_if_index - software interface index
- @param table_index - classify table index
-*/
-define policer_classify_details
-{
- u32 context;
- u32 sw_if_index;
- u32 table_index;
-};
-
-/** \brief Classify get table IDs request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
-*/
-define classify_table_ids
-{
- u32 client_index;
- u32 context;
-};
-
-/** \brief Reply for classify get table IDs request
- @param context - sender context which was passed in the request
- @param count - number of ids returned in response
- @param ids - array of classify table ids
-*/
-define classify_table_ids_reply
-{
- u32 context;
- i32 retval;
- u32 count;
- u32 ids[count];
-};
-
-/** \brief Classify table ids by interface index request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param sw_if_index - index of the interface
-*/
-define classify_table_by_interface
-{
- u32 client_index;
- u32 context;
- u32 sw_if_index;
-};
-
-/** \brief Reply for classify table id by interface index request
- @param context - sender context which was passed in the request
- @param count - number of ids returned in response
- @param sw_if_index - index of the interface
- @param l2_table_id - l2 classify table index
- @param ip4_table_id - ip4 classify table index
- @param ip6_table_id - ip6 classify table index
-*/
-define classify_table_by_interface_reply
-{
- u32 context;
- i32 retval;
- u32 sw_if_index;
- u32 l2_table_id;
- u32 ip4_table_id;
- u32 ip6_table_id;
-};
-
-/** \brief Classify table info
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param table_id - classify table index
-*/
-define classify_table_info
-{
- u32 client_index;
- u32 context;
- u32 table_id;
-};
-
-/** \brief Reply for classify table info request
- @param context - sender context which was passed in the request
- @param count - number of ids returned in response
- @param table_id - classify table index
- @param nbuckets - number of buckets when adding a table
- @param match_n_vectors - number of match vectors
- @param skip_n_vectors - number of skip_n_vectors
- @param active_sessions - number of sessions (active entries)
- @param next_table_index - index of next table
- @param miss_next_index - index of miss table
- @param mask[] - match mask
-*/
-define classify_table_info_reply
-{
- u32 context;
- i32 retval;
- u32 table_id;
- u32 nbuckets;
- u32 match_n_vectors;
- u32 skip_n_vectors;
- u32 active_sessions;
- u32 next_table_index;
- u32 miss_next_index;
- u32 mask_length;
- u8 mask[mask_length];
-};
-
-/** \brief Classify sessions dump request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param table_id - classify table index
-*/
-define classify_session_dump
-{
- u32 client_index;
- u32 context;
- u32 table_id;
-};
-
-/** \brief Reply for classify table session dump request
- @param context - sender context which was passed in the request
- @param count - number of ids returned in response
- @param table_id - classify table index
- @param hit_next_index - hit_next_index of session
- @param opaque_index - for add, opaque_index of session
- @param advance - advance value of session
- @param match[] - match value for session
-*/
-define classify_session_details
-{
- u32 context;
- i32 retval;
- u32 table_id;
- u32 hit_next_index;
- i32 advance;
- u32 opaque_index;
- u32 match_length;
- u8 match[match_length];
-};
-
-/** \brief Configure IPFIX exporter process request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param collector_address - address of IPFIX collector
- @param collector_port - port of IPFIX collector
- @param src_address - address of IPFIX exporter
- @param vrf_id - VRF / fib table ID
- @param path_mtu - Path MTU between exporter and collector
- @param template_interval - number of seconds after which to resend template
- @param udp_checksum - UDP checksum calculation enable flag
-*/
-define set_ipfix_exporter
-{
- u32 client_index;
- u32 context;
- u8 collector_address[16];
- u16 collector_port;
- u8 src_address[16];
- u32 vrf_id;
- u32 path_mtu;
- u32 template_interval;
- u8 udp_checksum;
-};
-
-/** \brief Reply to IPFIX exporter configure request
- @param context - sender context which was passed in the request
-*/
-define set_ipfix_exporter_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief IPFIX exporter dump request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
-*/
-define ipfix_exporter_dump
-{
- u32 client_index;
- u32 context;
-};
-
-/** \brief Reply to IPFIX exporter dump request
- @param context - sender context which was passed in the request
- @param collector_address - address of IPFIX collector
- @param collector_port - port of IPFIX collector
- @param src_address - address of IPFIX exporter
- @param fib_index - fib table index
- @param path_mtu - Path MTU between exporter and collector
- @param template_interval - number of seconds after which to resend template
- @param udp_checksum - UDP checksum calculation enable flag
-*/
-define ipfix_exporter_details
-{
- u32 context;
- u8 collector_address[16];
- u16 collector_port;
- u8 src_address[16];
- u32 vrf_id;
- u32 path_mtu;
- u32 template_interval;
- u8 udp_checksum;
-};
-
-/** \brief IPFIX classify stream configure request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param domain_id - domain ID reported in IPFIX messages for classify stream
- @param src_port - source port of UDP session for classify stream
-*/
-define set_ipfix_classify_stream {
- u32 client_index;
- u32 context;
- u32 domain_id;
- u16 src_port;
-};
-
-/** \brief IPFIX classify stream configure response
- @param context - sender context, to match reply w/ request
- @param retval - return value for request
-*/
-define set_ipfix_classify_stream_reply {
- u32 context;
- i32 retval;
-};
-
-/** \brief IPFIX classify stream dump request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
-*/
-define ipfix_classify_stream_dump {
- u32 client_index;
- u32 context;
-};
-
-/** \brief Reply to IPFIX classify stream dump request
- @param context - sender context, to match reply w/ request
- @param domain_id - domain ID reported in IPFIX messages for classify stream
- @param src_port - source port of UDP session for classify stream
-*/
-define ipfix_classify_stream_details {
- u32 context;
- u32 domain_id;
- u16 src_port;
-};
-
-/** \brief IPFIX add or delete classifier table request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param table_id - classifier table ID
- @param ip_version - version of IP used in the classifier table
- @param transport_protocol - transport protocol used in the classifier table or 255 for unspecified
-*/
-define ipfix_classify_table_add_del {
- u32 client_index;
- u32 context;
- u32 table_id;
- u8 ip_version;
- u8 transport_protocol;
- u8 is_add;
-};
-
-/** \brief IPFIX add classifier table response
- @param context - sender context which was passed in the request
-*/
-define ipfix_classify_table_add_del_reply {
- u32 context;
- i32 retval;
-};
-
-/** \brief IPFIX classify tables dump request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
-*/
-define ipfix_classify_table_dump {
- u32 client_index;
- u32 context;
-};
-
-/** \brief Reply to IPFIX classify tables dump request
- @param context - sender context, to match reply w/ request
- @param table_id - classifier table ID
- @param ip_version - version of IP used in the classifier table
- @param transport_protocol - transport protocol used in the classifier table or 255 for unspecified
-*/
-define ipfix_classify_table_details {
- u32 context;
- u32 table_id;
- u8 ip_version;
- u8 transport_protocol;
-};
-
-/** \brief Set/unset flow classify interface
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param sw_if_index - interface to set/unset flow classify
- @param ip4_table_index - ip4 classify table index (~0 for skip)
- @param ip6_table_index - ip6 classify table index (~0 for skip)
- @param l2_table_index - l2 classify table index (~0 for skip)
- @param is_add - Set if non-zero, else unset
- Note: User is recommeneded to use just one valid table_index per call.
- (ip4_table_index, ip6_table_index, or l2_table_index)
-*/
-define flow_classify_set_interface {
- u32 client_index;
- u32 context;
- u32 sw_if_index;
- u32 ip4_table_index;
- u32 ip6_table_index;
- u8 is_add;
-};
-
-/** \brief Set/unset flow classify interface response
- @param context - sender context, to match reply w/ request
- @param retval - return value for request
-*/
-define flow_classify_set_interface_reply {
- u32 context;
- i32 retval;
-};
-
-/** \brief Get list of flow classify interfaces and tables
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param type - classify table type
-*/
-define flow_classify_dump {
- u32 client_index;
- u32 context;
- u8 type;
-};
-
-/** \brief Flow classify operational state response.
- @param context - sender context, to match reply w/ request
- @param sw_if_index - software interface index
- @param table_index - classify table index
-*/
-define flow_classify_details {
- u32 context;
- u32 sw_if_index;
- u32 table_index;
-};
-
-/** \brief Query relative index via node names
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param node_name - name of node to find relative index from
- @param next_name - next node from node_name to find relative index of
-*/
-define get_next_index
-{
- u32 client_index;
- u32 context;
- u8 node_name[64];
- u8 next_name[64];
-};
-
-/** \brief Reply for get next node index
- @param context - sender context which was passed in the request
- @param retval - return value
- @param next_index - index of the next_node
-*/
-define get_next_index_reply
-{
- u32 context;
- i32 retval;
- u32 next_index;
-};
-
-/** \brief PacketGenerator create interface request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param interface_id - interface index
-*/
-define pg_create_interface
-{
- u32 client_index;
- u32 context;
- u32 interface_id;
-};
-
-/** \brief PacketGenerator create interface response
- @param context - sender context, to match reply w/ request
- @param retval - return value for request
-*/
-define pg_create_interface_reply
-{
- u32 context;
- i32 retval;
- u32 sw_if_index;
-};
-
-/** \brief PacketGenerator capture packets on given interface request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param interface_id - pg interface index
- @param is_enabled - 1 if enabling streams, 0 if disabling
- @param count - number of packets to be captured
- @param pcap_file - pacp file name to store captured packets
-*/
-define pg_capture
-{
- u32 client_index;
- u32 context;
- u32 interface_id;
- u8 is_enabled;
- u32 count;
- u32 pcap_name_length;
- u8 pcap_file_name[pcap_name_length];
-};
-
-/** \brief PacketGenerator capture packets response
- @param context - sender context, to match reply w/ request
- @param retval - return value for request
-*/
-define pg_capture_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief Enable / disable packet generator request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param is_enabled - 1 if enabling streams, 0 if disabling
- @param stream - stream name to be enable/disabled, if not specified handle all streams
-*/
-define pg_enable_disable
-{
- u32 client_index;
- u32 context;
- u8 is_enabled;
- u32 stream_name_length;
- u8 stream_name[stream_name_length];
-};
-
-/** \brief Reply for enable / disable packet generator
- @param context - returned sender context, to match reply w/ request
- @param retval - return code
-*/
-define pg_enable_disable_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief Configure IP source and L4 port-range check
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param is_ip6 - 1 if source address type is IPv6
- @param is_add - 1 if add, 0 if delete
- @param mask_length - mask length for address entry
- @param address - array of address bytes
- @param number_of_ranges - length of low_port and high_port arrays (must match)
- @param low_ports[32] - up to 32 low end of port range entries (must have corresponding high_ports entry)
- @param high_ports[32] - up to 32 high end of port range entries (must have corresponding low_ports entry)
- @param vrf_id - fib table/vrf id to associate the source and port-range check with
- @note To specify a single port set low_port and high_port entry the same
-*/
-define ip_source_and_port_range_check_add_del
-{
- u32 client_index;
- u32 context;
- u8 is_ipv6;
- u8 is_add;
- u8 mask_length;
- u8 address[16];
- u8 number_of_ranges;
- u16 low_ports[32];
- u16 high_ports[32];
- u32 vrf_id;
-};
-
-/** \brief Configure IP source and L4 port-range check reply
- @param context - returned sender context, to match reply w/ request
- @param retval - return code
-*/
-define ip_source_and_port_range_check_add_del_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief Set interface source and L4 port-range request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param interface_id - interface index
- @param tcp_vrf_id - VRF associated with source and TCP port-range check
- @param udp_vrf_id - VRF associated with source and TCP port-range check
-*/
-define ip_source_and_port_range_check_interface_add_del
-{
- u32 client_index;
- u32 context;
- u8 is_add;
- u32 sw_if_index;
- u32 tcp_in_vrf_id;
- u32 tcp_out_vrf_id;
- u32 udp_in_vrf_id;
- u32 udp_out_vrf_id;
-};
-
-/** \brief Set interface source and L4 port-range response
- @param context - sender context, to match reply w/ request
- @param retval - return value for request
-*/
-define ip_source_and_port_range_check_interface_add_del_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief Delete sub interface request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param sw_if_index - sw index of the interface that was created by create_subif
-*/
-define delete_subif {
- u32 client_index;
- u32 context;
- u32 sw_if_index;
-};
-
-/** \brief Delete sub interface response
- @param context - sender context, to match reply w/ request
- @param retval - return code for the request
-*/
-define delete_subif_reply {
- u32 context;
- i32 retval;
-};
-
-/** \brief DPDK interface HQoS pipe profile set request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param sw_if_index - the interface
- @param subport - subport ID
- @param pipe - pipe ID within its subport
- @param profile - pipe profile ID
-*/
-define sw_interface_set_dpdk_hqos_pipe {
- u32 client_index;
- u32 context;
- u32 sw_if_index;
- u32 subport;
- u32 pipe;
- u32 profile;
-};
-
-/** \brief DPDK interface HQoS pipe profile set reply
- @param context - sender context, to match reply w/ request
- @param retval - request return code
-*/
-define sw_interface_set_dpdk_hqos_pipe_reply {
- u32 context;
- i32 retval;
-};
-
-/** \brief DPDK interface HQoS subport parameters set request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param sw_if_index - the interface
- @param subport - subport ID
- @param tb_rate - subport token bucket rate (measured in bytes/second)
- @param tb_size - subport token bucket size (measured in credits)
- @param tc_rate - subport traffic class 0 .. 3 rates (measured in bytes/second)
- @param tc_period - enforcement period for rates (measured in milliseconds)
-*/
-define sw_interface_set_dpdk_hqos_subport {
- u32 client_index;
- u32 context;
- u32 sw_if_index;
- u32 subport;
- u32 tb_rate;
- u32 tb_size;
- u32 tc_rate[4];
- u32 tc_period;
-};
-
-/** \brief DPDK interface HQoS subport parameters set reply
- @param context - sender context, to match reply w/ request
- @param retval - request return code
-*/
-define sw_interface_set_dpdk_hqos_subport_reply {
- u32 context;
- i32 retval;
-};
-
-/** \brief DPDK interface HQoS tctbl entry set request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param sw_if_index - the interface
- @param entry - entry index ID
- @param tc - traffic class (0 .. 3)
- @param queue - traffic class queue (0 .. 3)
-*/
-define sw_interface_set_dpdk_hqos_tctbl {
- u32 client_index;
- u32 context;
- u32 sw_if_index;
- u32 entry;
- u32 tc;
- u32 queue;
-};
-
-/** \brief DPDK interface HQoS tctbl entry set reply
- @param context - sender context, to match reply w/ request
- @param retval - request return code
-*/
-define sw_interface_set_dpdk_hqos_tctbl_reply {
- u32 context;
- i32 retval;
-};
-
-/** \brief L2 interface pbb tag rewrite configure request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param sw_if_index - interface the operation is applied to
- @param vtr_op - Choose from l2_vtr_op_t enum values
- @param inner_tag - needed for translate_qinq vtr op only
- @param outer_tag - needed for translate_qinq vtr op only
- @param b_dmac - B-tag remote mac address, needed for any push or translate_qinq vtr op
- @param b_smac - B-tag local mac address, needed for any push or translate qinq vtr op
- @param b_vlanid - B-tag vlanid, needed for any push or translate qinq vtr op
- @param i_sid - I-tag service id, needed for any push or translate qinq vtr op
-*/
-define l2_interface_pbb_tag_rewrite
-{
- u32 client_index;
- u32 context;
- u32 sw_if_index;
- u32 vtr_op;
- u16 outer_tag;
- u8 b_dmac[6];
- u8 b_smac[6];
- u16 b_vlanid;
- u32 i_sid;
-};
-
-/** \brief L2 interface pbb tag rewrite response
- @param context - sender context, to match reply w/ request
- @param retval - return code for the request
-*/
-define l2_interface_pbb_tag_rewrite_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief Punt traffic to the host
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param is_add - add punt if non-zero, else delete
- @param ipv - L3 protocol 4 - IPv4, 6 - IPv6, ~0 - All
- @param l4_protocol - L4 protocol to be punted, only UDP (0x11) is supported
- @param l4_port - TCP/UDP port to be punted
-*/
-define punt {
- u32 client_index;
- u32 context;
- u8 is_add;
- u8 ipv;
- u8 l4_protocol;
- u16 l4_port;
-};
-
-/** \brief Reply to the punt request
- @param context - sender context which was passed in the request
- @param retval - return code of punt request
-*/
-define punt_reply
-{
- u32 context;
- i32 retval;
-};
-
-/** \brief Feature path enable/disable request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param sw_if_index - the interface
- @param enable - 1 = on, 0 = off
-*/
-define feature_enable_disable {
- u32 client_index;
- u32 context;
- u32 sw_if_index;
- u8 enable;
- u8 arc_name[64];
- u8 feature_name[64];
-};
-
-/** \brief Reply to the eature path enable/disable request
- @param context - sender context which was passed in the request
- @param retval - return code for the request
-*/
-define feature_enable_disable_reply
-{
- u32 context;
- i32 retval;
-};
-
-/*
- * Local Variables:
- * eval: (c-set-style "gnu")
- * End:
- */
diff --git a/vpp/vpp-api/vpe_all_api_h.h b/vpp/vpp-api/vpe_all_api_h.h
deleted file mode 100644
index 98717eaaa24..00000000000
--- a/vpp/vpp-api/vpe_all_api_h.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (c) 2015 Cisco and/or its affiliates.
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * Add to the bottom of the #include list, or elves will steal your
- * keyboard in the middle of the night!
- */
-
-/* Include the (first) vlib-api API definition layer */
-#include <vlibmemory/vl_memory_api_h.h>
-
-/* Include the (second) vnet API definition layer */
-#define included_from_layer_3
-#include <vnet/vnet_all_api_h.h>
-#undef included_from_layer_3
-
-/* Include the current layer (third) vpp API definition layer */
-#include <vpp-api/vpe.api.h>
-
-/*
- * fd.io coding-style-patch-verification: ON
- *
- * Local Variables:
- * eval: (c-set-style "gnu")
- * End:
- */
diff --git a/vpp/vpp-api/vpe_msg_enum.h b/vpp/vpp-api/vpe_msg_enum.h
deleted file mode 100644
index 1da3ec0c11f..00000000000
--- a/vpp/vpp-api/vpe_msg_enum.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (c) 2015 Cisco and/or its affiliates.
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef included_vpe_msg_enum_h
-#define included_vpe_msg_enum_h
-
-#include <vppinfra/byte_order.h>
-
-#define vl_msg_id(n,h) n,
-typedef enum
-{
- VL_ILLEGAL_MESSAGE_ID = 0,
-#include <vpp-api/vpe_all_api_h.h>
- VL_MSG_FIRST_AVAILABLE,
-} vl_msg_id_t;
-#undef vl_msg_id
-
-#endif /* included_vpe_msg_enum_h */
-
-/*
- * fd.io coding-style-patch-verification: ON
- *
- * Local Variables:
- * eval: (c-set-style "gnu")
- * End:
- */
diff --git a/vpp/vpp-api/vpp_get_metrics.c b/vpp/vpp-api/vpp_get_metrics.c
deleted file mode 100644
index bbfa605a5e4..00000000000
--- a/vpp/vpp-api/vpp_get_metrics.c
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- * Copyright (c) 2016 Cisco and/or its affiliates.
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <sys/mman.h>
-#include <sys/stat.h>
-#include <pwd.h>
-#include <grp.h>
-#include <netinet/in.h>
-#include <signal.h>
-#include <pthread.h>
-#include <unistd.h>
-#include <time.h>
-#include <fcntl.h>
-#include <string.h>
-#include <vppinfra/clib.h>
-#include <vppinfra/vec.h>
-#include <vppinfra/hash.h>
-#include <vppinfra/bitmap.h>
-#include <vppinfra/fifo.h>
-#include <vppinfra/time.h>
-#include <vppinfra/mheap.h>
-#include <vppinfra/heap.h>
-#include <vppinfra/pool.h>
-#include <vppinfra/format.h>
-#include <vlibapi/api.h>
-#include <vlibmemory/api.h>
-
-#include <vlib/vlib.h>
-#include <vlib/unix/unix.h>
-#include <vnet/api_errno.h>
-
-#include <svmdb.h>
-
-svmdb_client_t *c;
-volatile int signal_received;
-
-static void
-unix_signal_handler (int signum, siginfo_t * si, ucontext_t * uc)
-{
- static int once;
-
- if (once)
- exit (1);
-
- once = 1;
- signal_received = 1;
-}
-
-static void
-setup_signal_handlers (void)
-{
- uword i;
- struct sigaction sa;
-
- for (i = 1; i < 32; i++)
- {
- memset (&sa, 0, sizeof (sa));
- sa.sa_sigaction = (void *) unix_signal_handler;
- sa.sa_flags = SA_SIGINFO;
-
- switch (i)
- {
- /* these signals take the default action */
- case SIGABRT:
- case SIGKILL:
- case SIGSTOP:
- case SIGUSR1:
- case SIGUSR2:
- continue;
-
- /* ignore SIGPIPE, SIGCHLD */
- case SIGPIPE:
- case SIGCHLD:
- sa.sa_sigaction = (void *) SIG_IGN;
- break;
-
- /* catch and handle all other signals */
- default:
- break;
- }
-
- if (sigaction (i, &sa, 0) < 0)
- return clib_unix_warning (0, "sigaction %U", format_signal, i);
- }
-}
-
-int
-main (int argc, char **argv)
-{
- unformat_input_t input;
- char *chroot_path = 0;
- u8 *chroot_path_u8;
- int interval = 0;
- f64 *vector_ratep, *rx_ratep, *sig_error_ratep;
- pid_t *vpp_pidp;
- svmdb_map_args_t _ma, *ma = &_ma;
- int uid, gid, rv;
- struct passwd _pw, *pw;
- struct group _grp, *grp;
- char *s, buf[128];
-
- unformat_init_command_line (&input, argv);
-
- uid = geteuid ();
- gid = getegid ();
-
- while (unformat_check_input (&input) != UNFORMAT_END_OF_INPUT)
- {
- if (unformat (&input, "chroot %s", &chroot_path_u8))
- {
- chroot_path = (char *) chroot_path_u8;
- }
- else if (unformat (&input, "interval %d", &interval))
- ;
- else if (unformat (&input, "uid %d", &uid))
- ;
- else if (unformat (&input, "gid %d", &gid))
- ;
- else if (unformat (&input, "uid %s", &s))
- {
- /* lookup the username */
- pw = NULL;
- rv = getpwnam_r (s, &_pw, buf, sizeof (buf), &pw);
- if (rv < 0)
- {
- fformat (stderr, "cannot fetch username %s", s);
- exit (1);
- }
- if (pw == NULL)
- {
- fformat (stderr, "username %s does not exist", s);
- exit (1);
- }
- vec_free (s);
- uid = pw->pw_uid;
- }
- else if (unformat (&input, "gid %s", &s))
- {
- /* lookup the group name */
- grp = NULL;
- rv = getgrnam_r (s, &_grp, buf, sizeof (buf), &grp);
- if (rv != 0)
- {
- fformat (stderr, "cannot fetch group %s", s);
- exit (1);
- }
- if (grp == NULL)
- {
- fformat (stderr, "group %s does not exist", s);
- exit (1);
- }
- vec_free (s);
- gid = grp->gr_gid;
- }
- else
- {
- fformat (stderr,
- "usage: vpp_get_metrics [chroot <path>] [interval <nn>]\n");
- exit (1);
- }
- }
-
- setup_signal_handlers ();
-
- memset (ma, 0, sizeof (*ma));
- ma->root_path = chroot_path;
- ma->uid = uid;
- ma->gid = gid;
-
- c = svmdb_map (ma);
-
- vpp_pidp =
- svmdb_local_get_variable_reference (c, SVMDB_NAMESPACE_VEC, "vpp_pid");
- vector_ratep =
- svmdb_local_get_variable_reference (c, SVMDB_NAMESPACE_VEC,
- "vpp_vector_rate");
- rx_ratep =
- svmdb_local_get_variable_reference (c, SVMDB_NAMESPACE_VEC,
- "vpp_input_rate");
- sig_error_ratep =
- svmdb_local_get_variable_reference (c, SVMDB_NAMESPACE_VEC,
- "vpp_sig_error_rate");
-
- /*
- * Make sure vpp is actually running. Otherwise, there's every
- * chance that the database region will be wiped out by the
- * process monitor script
- */
-
- if (vpp_pidp == 0 || vector_ratep == 0 || rx_ratep == 0
- || sig_error_ratep == 0)
- {
- fformat (stdout, "vpp not running\n");
- exit (1);
- }
-
- do
- {
- /*
- * Once vpp exits, the svm db region will be recreated...
- * Can't use kill (*vpp_pidp, 0) if running as non-root /
- * accessing the shared-VM database via group perms.
- */
- if (*vpp_pidp == 0)
- {
- fformat (stdout, "vpp not running\n");
- exit (1);
- }
- fformat (stdout,
- "%d: vpp_vector_rate=%.2f, vpp_input_rate=%f, vpp_sig_error_rate=%f\n",
- *vpp_pidp, *vector_ratep, *rx_ratep, *sig_error_ratep);
-
- if (interval)
- sleep (interval);
- if (signal_received)
- break;
- }
- while (interval);
-
- svmdb_unmap (c);
- exit (0);
-}
-
-/*
- * fd.io coding-style-patch-verification: ON
- *
- * Local Variables:
- * eval: (c-set-style "gnu")
- * End:
- */
-
-/*
- * fd.io coding-style-patch-verification: ON
- *
- * Local Variables:
- * eval: (c-set-style "gnu")
- * End:
- */