+option version = "3.2.0";
+
+import "vnet/interface_types.api";
+import "vnet/fib/fib_types.api";
+import "vnet/ethernet/ethernet_types.api";
+import "vnet/mfib/mfib_types.api";
+import "vnet/interface_types.api";
+
+/** \brief An IP table
+ @param is_ipv6 - V4 or V6 table
+ @param table_id - table ID associated with the route
+ This table ID will apply to both the unicast
+ and multicast FIBs
+ @param name - A client provided name/tag for the table. If this is
+ not set by the client, then VPP will generate something
+ meaningful.
+*/
+typedef ip_table
+{
+ u32 table_id;
+ bool is_ip6;
+ string name[64];
+};
+
+/** \brief Add / del table request
+ A table can be added multiple times, but need be deleted only once.
+ @param client_index - opaque cookie to identify the sender
+ @param context - sender context, to match reply w/ request
+*/
+autoreply define ip_table_add_del
+{
+ u32 client_index;
+ u32 context;
+ bool is_add [default=true];
+ vl_api_ip_table_t table;
+};
+
+/** \brief Allocate an unused table
+ A table can be added multiple times.
+ If a large number of tables are in use (millions), this API might
+ fail to find a free ID with very low probability, and will return
+ EAGAIN. A subsequent attempt may be successful.
+ @param client_index - opaque cookie to identify the sender
+ @param context - sender context, to match reply w/ request
+ @param table - if table.table_id == ~0, vpp allocates an unused table_id and
+ proceeds as in ip_table_add_del with is_add = true
+ if table.table_id != ~0, vpp uses the table.table_id and
+ proceeds as in ip_table_add_del with is_add = true
+ table.table_id should never be 0
+*/
+define ip_table_allocate
+{
+ u32 client_index;
+ u32 context;
+
+ vl_api_ip_table_t table;
+};
+
+define ip_table_allocate_reply
+{
+ u32 context;
+ i32 retval;
+
+ vl_api_ip_table_t table;
+};
+
+/** \brief Dump IP all fib tables