}
static void
-vl_api_lisp_eid_table_details_t_handler (vl_api_lisp_eid_table_details_t * mp)
+add_lisp_eid_table_entry (vat_main_t * vam,
+ vl_api_lisp_eid_table_details_t * mp)
{
- vat_main_t *vam = &vat_main;
eid_table_t eid_table;
memset (&eid_table, 0, sizeof (eid_table));
eid_table.is_local = mp->is_local;
- eid_table.locator_set_index = mp->locator_set_index;
+ eid_table.locator_set_index = clib_net_to_host_u32 (mp->locator_set_index);
eid_table.eid_type = mp->eid_type;
- eid_table.vni = mp->vni;
+ eid_table.vni = clib_net_to_host_u32 (mp->vni);
eid_table.eid_prefix_len = mp->eid_prefix_len;
- eid_table.ttl = mp->ttl;
+ eid_table.ttl = clib_net_to_host_u32 (mp->ttl);
+ eid_table.action = mp->action;
eid_table.authoritative = mp->authoritative;
clib_memcpy (eid_table.eid, mp->eid, sizeof (eid_table.eid));
vec_add1 (vam->eid_tables, eid_table);
}
+static void
+vl_api_lisp_eid_table_details_t_handler (vl_api_lisp_eid_table_details_t * mp)
+{
+ vat_main_t *vam = &vat_main;
+ add_lisp_eid_table_entry (vam, mp);
+}
+
static void
vl_api_lisp_eid_table_details_t_handler_json (vl_api_lisp_eid_table_details_t
* mp)
{
vat_main_t *vam = &vat_main;
- eid_table_t eid_table;
-
- memset (&eid_table, 0, sizeof (eid_table));
- eid_table.is_local = mp->is_local;
- eid_table.locator_set_index = mp->locator_set_index;
- eid_table.eid_type = mp->eid_type;
- eid_table.vni = mp->vni;
- eid_table.eid_prefix_len = mp->eid_prefix_len;
- eid_table.ttl = mp->ttl;
- eid_table.authoritative = mp->authoritative;
- clib_memcpy (eid_table.eid, mp->eid, sizeof (eid_table.eid));
- vec_add1 (vam->eid_tables, eid_table);
+ add_lisp_eid_table_entry (vam, mp);
}
static void
_(pg_capture_reply) \
_(pg_enable_disable_reply) \
_(ip_source_and_port_range_check_add_del_reply) \
-_(ip_source_and_port_range_check_interface_add_del_reply)
+_(ip_source_and_port_range_check_interface_add_del_reply)\
+_(delete_subif_reply)
#define _(n) \
static void vl_api_##n##_t_handler \
_(IP_SOURCE_AND_PORT_RANGE_CHECK_INTERFACE_ADD_DEL_REPLY, \
ip_source_and_port_range_check_interface_add_del_reply) \
_(IPSEC_GRE_ADD_DEL_TUNNEL_REPLY, ipsec_gre_add_del_tunnel_reply) \
-_(IPSEC_GRE_TUNNEL_DETAILS, ipsec_gre_tunnel_details)
+_(IPSEC_GRE_TUNNEL_DETAILS, ipsec_gre_tunnel_details) \
+_(DELETE_SUBIF_REPLY, delete_subif_reply)
/* M: construct, but don't yet send a message */
return -99;
}
+ if (vrf_set && bd_index_set)
+ {
+ errmsg ("error: both vrf and bd entered!");
+ return -99;
+ }
+
M (LISP_EID_TABLE_ADD_DEL_MAP, lisp_eid_table_add_del_map);
mp->is_add = is_add;
mp->vni = htonl (vni);
- mp->dp_table = htonl (vrf);
+ mp->dp_table = vrf_set ? htonl (vrf) : htonl (bd_index);
mp->is_l2 = bd_index_set;
/* send */
case 1:
format_eid = (eid_table->eid_type ? format_ip6_address :
format_ip4_address);
- str = format (0, "[%d] %U/%d",
- clib_net_to_host_u32 (eid_table->vni),
+ str = format (0, "[%d] %U/%d", eid_table->vni,
format_eid, eid_table->eid, eid_table->eid_prefix_len);
break;
case 2:
- str = format (0, "[%d] %U",
- clib_net_to_host_u32 (eid_table->vni),
+ str = format (0, "[%d] %U", eid_table->vni,
format_ethernet_address, eid_table->eid);
break;
default:
ASSERT (vam != NULL);
ASSERT (eid_table != NULL);
+ if (~0 == eid_table->locator_set_index)
+ {
+ return format (0, "action: %d\n", eid_table->action);
+ }
+
vec_foreach (loc, vam->locator_msg)
{
if (!first_line)
vec_foreach (eid_table, vam->eid_tables)
{
- ret = lisp_locator_dump_send_msg (vam, eid_table->locator_set_index, 0);
- if (ret)
+ if (~0 != eid_table->locator_set_index)
{
- vec_free (vam->locator_msg);
- clean_locator_set_message (vam);
- vec_free (vam->eid_tables);
- return ret;
+ ret = lisp_locator_dump_send_msg (vam, eid_table->locator_set_index,
+ 0);
+ if (ret)
+ {
+ vec_free (vam->locator_msg);
+ clean_locator_set_message (vam);
+ vec_free (vam->eid_tables);
+ return ret;
+ }
}
tmp_str2 = format_eid_for_eid_table (vam, tmp_str2, eid_table, &ret);
W;
}
+static int
+api_delete_subif (vat_main_t * vam)
+{
+ unformat_input_t *i = vam->input;
+ vl_api_delete_subif_t *mp;
+ f64 timeout;
+ u32 sw_if_index = ~0;
+
+ while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
+ {
+ if (unformat (i, "sw_if_index %d", &sw_if_index))
+ ;
+ else
+ break;
+ }
+
+ if (sw_if_index == ~0)
+ {
+ errmsg ("missing sw_if_index\n");
+ return -99;
+ }
+
+ /* Construct the API message */
+ M (DELETE_SUBIF, delete_subif);
+ mp->sw_if_index = ntohl (sw_if_index);
+
+ S;
+ W;
+}
+
static int
q_or_quit (vat_main_t * vam)
{
"[udp-in-vrf <id>] [udp-out-vrf <id>]") \
_(ipsec_gre_add_del_tunnel, \
"src <addr> dst <addr> local_sa <sa-id> remote_sa <sa-id> [del]") \
-_(ipsec_gre_tunnel_dump, "[sw_if_index <nn>]")
+_(ipsec_gre_tunnel_dump, "[sw_if_index <nn>]") \
+_(delete_subif,"sub_sw_if_index <nn> sub_if_id <nn>")
/* List of command functions, CLI names map directly to functions */
#define foreach_cli_function \