#include <vnet/classify/policer_classify.h>
#include <vnet/classify/flow_classify.h>
#include <vnet/mpls/mpls.h>
-#if DPDK > 0
#include <vnet/ipsec/ipsec.h>
#include <vnet/ipsec/ikev2.h>
-#else
#include <inttypes.h>
-#endif
#include <vnet/map/map.h>
#include <vnet/cop/cop.h>
#include <vnet/ip/ip6_hop_by_hop.h>
#include "vat/json_format.h"
+#include <inttypes.h>
#include <sys/stat.h>
#define vl_typedefs /* define message structures */
uword
unformat_ipsec_policy_action (unformat_input_t * input, va_list * args)
{
-#if DPDK > 0
u32 *r = va_arg (*args, u32 *);
if (0);
else
return 0;
return 1;
-#else
- return 0;
-#endif
}
uword
unformat_ipsec_crypto_alg (unformat_input_t * input, va_list * args)
{
-#if DPDK > 0
u32 *r = va_arg (*args, u32 *);
if (0);
else
return 0;
return 1;
-#else
- return 0;
-#endif
}
u8 *
format_ipsec_crypto_alg (u8 * s, va_list * args)
{
-#if DPDK > 0
u32 i = va_arg (*args, u32);
u8 *t = 0;
return format (s, "unknown");
}
return format (s, "%s", t);
-#else
- return format (s, "Unimplemented");
-#endif
}
uword
unformat_ipsec_integ_alg (unformat_input_t * input, va_list * args)
{
-#if DPDK > 0
u32 *r = va_arg (*args, u32 *);
if (0);
else
return 0;
return 1;
-#else
- return 0;
-#endif
}
u8 *
format_ipsec_integ_alg (u8 * s, va_list * args)
{
-#if DPDK > 0
u32 i = va_arg (*args, u32);
u8 *t = 0;
return format (s, "unknown");
}
return format (s, "%s", t);
-#else
- return format (s, "Unsupported");
-#endif
}
uword
unformat_ikev2_auth_method (unformat_input_t * input, va_list * args)
{
-#if DPDK > 0
u32 *r = va_arg (*args, u32 *);
if (0);
else
return 0;
return 1;
-#else
- return 0;
-#endif
}
uword
unformat_ikev2_id_type (unformat_input_t * input, va_list * args)
{
-#if DPDK > 0
u32 *r = va_arg (*args, u32 *);
if (0);
else
return 0;
return 1;
-#else
- return 0;
-#endif
}
uword
_(ip_source_and_port_range_check_interface_add_del_reply)\
_(delete_subif_reply) \
_(l2_interface_pbb_tag_rewrite_reply) \
-_(punt_reply)
+_(punt_reply) \
+_(feature_enable_disable_reply)
#define _(n) \
static void vl_api_##n##_t_handler \
_(L2_INTERFACE_PBB_TAG_REWRITE_REPLY, l2_interface_pbb_tag_rewrite_reply) \
_(PUNT_REPLY, punt_reply) \
_(IP_FIB_DETAILS, ip_fib_details) \
-_(IP6_FIB_DETAILS, ip6_fib_details)
+_(IP6_FIB_DETAILS, ip6_fib_details) \
+_(FEATURE_ENABLE_DISABLE_REPLY, feature_enable_disable_reply)
/* M: construct, but don't yet send a message */
u8 is_unreach = 0, is_prohibit = 0;
u8 create_vrf_if_needed = 0;
u8 is_add = 1;
- u8 next_hop_weight = 1;
+ u32 next_hop_weight = 1;
u8 not_last = 0;
u8 is_multipath = 0;
u8 address_set = 0;
u32 sw_if_index = ~0, table_id = 0;
u8 create_table_if_needed = 0;
u8 is_add = 1;
- u8 next_hop_weight = 1;
+ u32 next_hop_weight = 1;
u8 is_multipath = 0;
u32 next_hop_table_id = 0;
u8 next_hop_set = 0;
static int
api_ipsec_spd_add_del (vat_main_t * vam)
{
-#if DPDK > 0
unformat_input_t *i = vam->input;
vl_api_ipsec_spd_add_del_t *mp;
f64 timeout;
W;
/* NOTREACHED */
return 0;
-#else
- clib_warning ("unsupported (no dpdk)");
- return -99;
-#endif
}
static int
api_ipsec_interface_add_del_spd (vat_main_t * vam)
{
-#if DPDK > 0
unformat_input_t *i = vam->input;
vl_api_ipsec_interface_add_del_spd_t *mp;
f64 timeout;
W;
/* NOTREACHED */
return 0;
-#else
- clib_warning ("unsupported (no dpdk)");
- return -99;
-#endif
}
static int
api_ipsec_spd_add_del_entry (vat_main_t * vam)
{
-#if DPDK > 0
unformat_input_t *i = vam->input;
vl_api_ipsec_spd_add_del_entry_t *mp;
f64 timeout;
W;
/* NOTREACHED */
return 0;
-#else
- clib_warning ("unsupported (no dpdk)");
- return -99;
-#endif
}
static int
api_ipsec_sad_add_del_entry (vat_main_t * vam)
{
-#if DPDK > 0
unformat_input_t *i = vam->input;
vl_api_ipsec_sad_add_del_entry_t *mp;
f64 timeout;
W;
/* NOTREACHED */
return 0;
-#else
- clib_warning ("unsupported (no dpdk)");
- return -99;
-#endif
}
static int
api_ipsec_sa_set_key (vat_main_t * vam)
{
-#if DPDK > 0
unformat_input_t *i = vam->input;
vl_api_ipsec_sa_set_key_t *mp;
f64 timeout;
W;
/* NOTREACHED */
return 0;
-#else
- clib_warning ("unsupported (no dpdk)");
- return -99;
-#endif
}
static int
api_ikev2_profile_add_del (vat_main_t * vam)
{
-#if DPDK > 0
unformat_input_t *i = vam->input;
vl_api_ikev2_profile_add_del_t *mp;
f64 timeout;
W;
/* NOTREACHED */
return 0;
-#else
- clib_warning ("unsupported (no dpdk)");
- return -99;
-#endif
}
static int
api_ikev2_profile_set_auth (vat_main_t * vam)
{
-#if DPDK > 0
unformat_input_t *i = vam->input;
vl_api_ikev2_profile_set_auth_t *mp;
f64 timeout;
W;
/* NOTREACHED */
return 0;
-#else
- clib_warning ("unsupported (no dpdk)");
- return -99;
-#endif
}
static int
api_ikev2_profile_set_id (vat_main_t * vam)
{
-#if DPDK > 0
unformat_input_t *i = vam->input;
vl_api_ikev2_profile_set_id_t *mp;
f64 timeout;
W;
/* NOTREACHED */
return 0;
-#else
- clib_warning ("unsupported (no dpdk)");
- return -99;
-#endif
}
static int
api_ikev2_profile_set_ts (vat_main_t * vam)
{
-#if DPDK > 0
unformat_input_t *i = vam->input;
vl_api_ikev2_profile_set_ts_t *mp;
f64 timeout;
W;
/* NOTREACHED */
return 0;
-#else
- clib_warning ("unsupported (no dpdk)");
- return -99;
-#endif
}
static int
api_ikev2_set_local_key (vat_main_t * vam)
{
-#if DPDK > 0
unformat_input_t *i = vam->input;
vl_api_ikev2_set_local_key_t *mp;
f64 timeout;
W;
/* NOTREACHED */
return 0;
-#else
- clib_warning ("unsupported (no dpdk)");
- return -99;
-#endif
}
/*
return 0;
}
+static int
+api_feature_enable_disable (vat_main_t * vam)
+{
+ unformat_input_t *i = vam->input;
+ vl_api_feature_enable_disable_t *mp;
+ f64 timeout;
+ u8 *arc_name = 0;
+ u8 *feature_name = 0;
+ u32 sw_if_index = ~0;
+ u8 enable = 1;
+
+ while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
+ {
+ if (unformat (i, "arc_name %s", &arc_name))
+ ;
+ else if (unformat (i, "feature_name %s", &feature_name))
+ ;
+ else if (unformat (i, "%U", unformat_sw_if_index, vam, &sw_if_index))
+ ;
+ else if (unformat (i, "sw_if_index %d", &sw_if_index))
+ ;
+ else if (unformat (i, "disable"))
+ enable = 0;
+ else
+ break;
+ }
+
+ if (arc_name == 0)
+ {
+ errmsg ("missing arc name\n");
+ return -99;
+ }
+ if (vec_len (arc_name) > 63)
+ {
+ errmsg ("arc name too long\n");
+ }
+
+ if (feature_name == 0)
+ {
+ errmsg ("missing feature name\n");
+ return -99;
+ }
+ if (vec_len (feature_name) > 63)
+ {
+ errmsg ("feature name too long\n");
+ }
+
+ if (sw_if_index == ~0)
+ {
+ errmsg ("missing interface name or sw_if_index\n");
+ return -99;
+ }
+
+ /* Construct the API message */
+ M (FEATURE_ENABLE_DISABLE, feature_enable_disable);
+ mp->sw_if_index = ntohl (sw_if_index);
+ mp->enable = enable;
+ clib_memcpy (mp->arc_name, arc_name, vec_len (arc_name));
+ clib_memcpy (mp->feature_name, feature_name, vec_len (feature_name));
+ vec_free (arc_name);
+ vec_free (feature_name);
+
+ S;
+ W;
+}
+
static int
q_or_quit (vat_main_t * vam)
{
return 0;
}
+static int
+value_sort_cmp (void *a1, void *a2)
+{
+ name_sort_t *n1 = a1;
+ name_sort_t *n2 = a2;
+
+ if (n1->value < n2->value)
+ return -1;
+ if (n1->value > n2->value)
+ return 1;
+ return 0;
+}
+
+
+static int
+dump_msg_api_table (vat_main_t * vam)
+{
+ api_main_t *am = &api_main;
+ name_sort_t *nses = 0, *ns;
+ hash_pair_t *hp;
+ int i;
+
+ /* *INDENT-OFF* */
+ hash_foreach_pair (hp, am->msg_index_by_name_and_crc,
+ ({
+ vec_add2 (nses, ns, 1);
+ ns->name = (u8 *)(hp->key);
+ ns->value = (u32) hp->value[0];
+ }));
+ /* *INDENT-ON* */
+
+ vec_sort_with_function (nses, value_sort_cmp);
+
+ for (i = 0; i < vec_len (nses); i++)
+ fformat (vam->ofp, " [%d]: %s\n", nses[i].value, nses[i].name);
+ vec_free (nses);
+ return 0;
+}
+
+static int
+get_msg_id (vat_main_t * vam)
+{
+ u8 *name_and_crc;
+ u32 message_index;
+
+ if (unformat (vam->input, "%s", &name_and_crc))
+ {
+ message_index = vl_api_get_msg_index (name_and_crc);
+ if (message_index == ~0)
+ {
+ fformat (vam->ofp, " '%s' not found\n", name_and_crc);
+ return 0;
+ }
+ fformat (vam->ofp, " '%s' has message index %d\n",
+ name_and_crc, message_index);
+ return 0;
+ }
+ errmsg ("name_and_crc required...\n");
+ return 0;
+}
+
static int
search_node_table (vat_main_t * vam)
{
"<intfc> | sw_if_index <nn> [ip4-table <nn>] [ip6-table <nn>] [del]") \
_(flow_classify_dump, "type [ip4|ip6]") \
_(ip_fib_dump, "") \
-_(ip6_fib_dump, "")
+_(ip6_fib_dump, "") \
+_(feature_enable_disable, "arc_name <arc_name> " \
+ "feature_name <feature_name> <intfc> | sw_if_index <nn> [disable]")
/* List of command functions, CLI names map directly to functions */
#define foreach_cli_function \
_(dump_stats_table, "usage: dump_stats_table") \
_(dump_macro_table, "usage: dump_macro_table ") \
_(dump_node_table, "usage: dump_node_table") \
+_(dump_msg_api_table, "usage: dump_msg_api_table") \
+_(get_msg_id, "usage: get_msg_id name_and_crc") \
_(echo, "usage: echo <message>") \
_(exec, "usage: exec <vpe-debug-CLI-command>") \
_(exec_inband, "usage: exec_inband <vpe-debug-CLI-command>") \
}
#undef vl_api_version
-#define vl_api_version(n,v) static u32 vpe_api_version = v;
+#define vl_api_version(n,v) static u32 memory_api_version = v;
+#include <vlibmemory/vl_memory_api_h.h>
+#undef vl_api_version
+
+#undef vl_api_version
+#define vl_api_version(n,v) static u32 vnet_interface_api_version = v;
+#include <vnet/interface.api.h>
+#undef vl_api_version
+
+#undef vl_api_version
+#define vl_api_version(n,v) static u32 vpp_api_version = v;
#include <vpp-api/vpe.api.h>
#undef vl_api_version
+static u32 *api_versions[] = {
+ &memory_api_version,
+ &vnet_interface_api_version,
+ &vpp_api_version,
+};
+
void
vl_client_add_api_signatures (vl_api_memclnt_create_t * mp)
{
+ int i;
+
+ ASSERT (ARRAY_LEN (mp->api_versions) >= ARRAY_LEN (api_versions));
+
/*
- * Send the main API signature in slot 0. This bit of code must
+ * Send the API signatures. 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);
+
+ for (i = 0; i < ARRAY_LEN (api_versions); i++)
+ mp->api_versions[i] = clib_host_to_net_u32 (*api_versions[i]);
}
/*