vl_api_sw_interface_set_mtu_t_handler: fix assert in vnet_get_hw_interface 07/8207/1
authorAndrew Yourtchenko <ayourtch@gmail.com>
Tue, 22 Aug 2017 11:10:01 +0000 (13:10 +0200)
committerAndrew Yourtchenko <ayourtch@gmail.com>
Fri, 25 Aug 2017 07:33:51 +0000 (07:33 +0000)
The handler was calling the routines with sw_if_index instead of hw_if_index,
fix that by an extra call to vnet_get_sw_interface, and check that the interface
type is VNET_SW_INTERFACE_TYPE_HARDWARE before proceeding.

Change-Id: I4a6f65f44e250ecdb2b72d2693c9d7db5a52b966
Signed-off-by: Andrew Yourtchenko <ayourtch@gmail.com>
(cherry picked from commit 778df28c2a1520f58c293700c578bdd73e61cecf)

src/vnet/interface_api.c

index 9949f83..113728c 100644 (file)
@@ -98,8 +98,15 @@ vl_api_sw_interface_set_mtu_t_handler (vl_api_sw_interface_set_mtu_t * mp)
 
   VALIDATE_SW_IF_INDEX (mp);
 
-  vnet_hw_interface_t *hi = vnet_get_hw_interface (vnm, sw_if_index);
-  ethernet_interface_t *eif = ethernet_get_interface (em, sw_if_index);
+  vnet_sw_interface_t *si = vnet_get_sw_interface (vnm, sw_if_index);
+  if (si->type != VNET_SW_INTERFACE_TYPE_HARDWARE)
+    {
+      rv = VNET_API_ERROR_INVALID_VALUE;
+      goto bad_sw_if_index;
+    }
+
+  vnet_hw_interface_t *hi = vnet_get_hw_interface (vnm, si->hw_if_index);
+  ethernet_interface_t *eif = ethernet_get_interface (em, si->hw_if_index);
 
   if (!eif)
     {
@@ -122,7 +129,7 @@ vl_api_sw_interface_set_mtu_t_handler (vl_api_sw_interface_set_mtu_t * mp)
   if (hi->max_packet_bytes != mtu)
     {
       hi->max_packet_bytes = mtu;
-      ethernet_set_flags (vnm, sw_if_index, flags);
+      ethernet_set_flags (vnm, si->hw_if_index, flags);
     }
 
   BAD_SW_IF_INDEX_LABEL;