Make sw_interface_dump more compatible with 2.2.0 80/18980/2
authorVratko Polak <vrpolak@cisco.com>
Wed, 17 Apr 2019 18:02:56 +0000 (20:02 +0200)
committerPaul Vinciguerra <pvinci@vinciconsulting.com>
Wed, 17 Apr 2019 18:48:54 +0000 (18:48 +0000)
+ As old PAPI clients are likely to put zero as the value
  for sw_if_index, the behavior should not perform
  index filtering at least when name filtering is enabled (valid).
+ interface.api version set to 2.3.0,
  as the new behavior is backward compatible
  (at least for PAPI with name filter enabled),
  but not forward compatible.
+ Minor whitespace cleanup.

Change-Id: I315a0eae4004f9d9b6c5f9ecf0f179e669729118
Signed-off-by: Vratko Polak <vrpolak@cisco.com>
src/vnet/interface.api
src/vnet/interface_api.c

index 0cebd00..d8d9198 100644 (file)
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-option version = "2.2.1";
+option version = "2.3.0";
 
 import "vnet/interface_types.api";
 
@@ -77,7 +77,6 @@ autoreply define sw_interface_set_ip_directed_broadcast
   u8  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
@@ -112,7 +111,7 @@ autoreply define want_interface_events
 
 /** \brief Interface details structure (fix this) 
     @param sw_if_index - index of the interface
-    @param sup_sw_if_index - index of parent interface if any, else same as sw_if_index  
+    @param sup_sw_if_index - index of parent interface if any, else same as sw_if_index
     @param l2_address_length - length of the interface's l2 address
     @param pid - the interface's l2 address
     @param interface_name - name of the interface
@@ -194,7 +193,7 @@ define sw_interface_details
   u32 vtr_tag1;                        // first pushed tag
   u32 vtr_tag2;                        // second pushed tag
   u8 tag[64];
-  
+
   /* pbb tag rewrite info */
   u16 outer_tag;
   u8  b_dmac[6];
@@ -206,11 +205,11 @@ define sw_interface_details
 /** \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 - ~0 if ignore, index of the interface to filter on
+    @param sw_if_index - index of the interface to dump info on, ~0 if on all
     @param name_filter_valid - 1 if requesting a filtered subset of records else 0
+      if name filter is valid, sw_if_index value is effectively set to ~0
     @param name_filter - interface name substring filter. Eg. loop1 returns [loop1, loop10]
 */
-
 define sw_interface_dump
 {
   u32 client_index;
index 993d12c..8b0cd8e 100644 (file)
@@ -308,7 +308,7 @@ vl_api_sw_interface_dump_t_handler (vl_api_sw_interface_dump_t * mp)
   u8 *filter = 0, *name = 0;
   sw_if_index = ntohl (mp->sw_if_index);
 
-  if (sw_if_index != ~0)
+  if (!mp->name_filter_valid && sw_if_index != ~0)
     {
       /* is it a valid sw_if_index/ */
       if (vec_len (im->sw_interfaces) <= sw_if_index)
@@ -316,8 +316,6 @@ vl_api_sw_interface_dump_t_handler (vl_api_sw_interface_dump_t * mp)
 
       swif = vec_elt_at_index (im->sw_interfaces, sw_if_index);
 
-      /* If we have a sw_if_index, ignore the name filter. */
-      mp->name_filter_valid = 0;
       vec_reset_length (name);
       name =
        format (name, "%U%c", format_vnet_sw_interface_name, am->vnet_main,