ip: Replace Sematics for Interface IP addresses
[vpp.git] / src / vnet / interface.api
index cae2b65..c262cd6 100644 (file)
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-option version = "3.0.0";
+option version = "3.2.2";
 
 import "vnet/interface_types.api";
 import "vnet/ethernet/ethernet_types.api";
@@ -77,7 +77,6 @@ autoreply define sw_interface_set_ip_directed_broadcast
   bool  enable;
 };
 
-
 /** \brief Interface Event generated by want_interface_events
     @param client_index - opaque cookie to identify the sender
     @param pid - client pid registered to receive notification
@@ -113,6 +112,7 @@ autoreply define want_interface_events
     @param sup_sw_if_index - index of parent interface if any, else same as sw_if_index
     @param l2_address - the interface's l2 address
     @param flags - interface_status flags
+    @param type - interface type
     @param link_duplex - 1 if half duplex, 2 if full duplex
     @param link_speed - value in kbps
     @param link_MTU - max. transmission unit
@@ -131,6 +131,7 @@ autoreply define want_interface_events
     @param pbb_b_vlanid - B-tag vlanid
     @param pbb_i_sid - I-tag service id
     @param interface_name - name of the interface
+    @param interface_dev_type - device type of the interface
     @param tag - an ascii tag
 */
 define sw_interface_details
@@ -147,6 +148,8 @@ define sw_interface_details
 
   vl_api_if_status_flags_t flags;
 
+  vl_api_if_type_t type;
+
   /* 1 = half duplex, 2 = full duplex */
   vl_api_link_duplex_t link_duplex;
 
@@ -183,23 +186,27 @@ define sw_interface_details
   u32 i_sid;
 
   /* Interface name */
-  string interface_name;
-  string tag;
+  string interface_name[64];
+  string interface_dev_type[64];
+  string tag[64];
 };
 
 /** \brief Request all or filtered subset of sw_interface_details
     @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 to dump info on, 0 or ~0 if on all
+      TODO: Support selecting only index==0 when CSIT is ready.
     @param name_filter_valid - 1 if requesting a filtered subset of records else 0
+      if name filter is set as valid, sw_if_index value is ignored and all interfaces are examined
     @param name_filter - interface name substring filter. Eg. loop1 returns [loop1, loop10]
 */
-
 define sw_interface_dump
 {
   u32 client_index;
   u32 context;
+  vl_api_interface_index_t sw_if_index [default=0xFFFFFFFF];
   bool name_filter_valid;
-  string name_filter;
+  string name_filter[];
 };
 
 /** \brief Set or delete one or all ip addresses on a specified interface
@@ -218,7 +225,44 @@ autoreply define sw_interface_add_del_address
   bool is_add;
 
   bool del_all;
-  vl_api_prefix_t prefix;
+  vl_api_address_with_prefix_t prefix;
+};
+
+/** \brief IP interface address replace begin
+
+    The use-case is that, for some unspecified reason, the control plane
+    has a different set of interface addresses than VPP
+    currently has. The CP would thus like to 'replace' VPP's set
+    only by specifying what the new set shall be, i.e. it is not
+    going to delete anything that already eixts, rather, is wants any
+    unspecified interface addresses to be deleted implicitly.
+    The CP declares the start of this procedure with this replace_begin
+    API Call, and when it has populated all addresses it wants, it calls
+    the below replace_end API. From this point on it is of course free
+    to add and delete interface addresses as usual.
+    The underlying mechanism by which VPP implements this replace is
+    intentionally left unspecified.
+
+    @param client_index - opaque cookie to identify the sender
+    @param context - sender context, to match reply w/ request
+*/
+autoreply define sw_interface_address_replace_begin
+{
+  u32 client_index;
+  u32 context;
+};
+
+/** \brief IP interface address replace end
+
+    see ip_interface_address_replace_begin description.
+
+    @param client_index - opaque cookie to identify the sender
+    @param context - sender context, to match reply w/ request
+*/
+autoreply define sw_interface_address_replace_end
+{
+  u32 client_index;
+  u32 context;
 };
 
 /** \brief Associate the specified interface with a fib table
@@ -226,7 +270,7 @@ autoreply define sw_interface_add_del_address
     @param context - sender context, to match reply w/ request
     @param sw_if_index - index of the interface
     @param is_ipv6 - if non-zero ipv6, else ipv4
-    @param vrf_id - fib table/vrd id to associate the interface with
+    @param vrf_id - fib table/vrf id to associate the interface with
 */
 autoreply define sw_interface_set_table
 {
@@ -302,7 +346,23 @@ autoreply define sw_interface_tag_add_del
   u32 context;
   bool is_add;
   vl_api_interface_index_t sw_if_index;
-  string tag;
+  string tag[64];
+};
+
+/** \brief Add or delete a secondary MAC address on an interface
+    @param client_index - opaque cookie to identify the sender
+    @param context - sender context, to match reply w/ request
+    @param sw_if_index - the interface whose MAC will be set
+    @param mac_addr - the new MAC address
+    @param is_add - 0 to delete, != 0 to add
+*/
+autoreply define sw_interface_add_del_mac_address
+{
+    u32 client_index;
+    u32 context;
+    u32 sw_if_index;
+    vl_api_mac_address_t addr;
+    u8 is_add;
 };
 
 /** \brief Set an interface's MAC address