summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorEyal Bari <ebari@cisco.com>2018-07-16 19:18:56 +0300
committerJohn Lo <loj@cisco.com>2018-07-17 15:26:22 +0000
commitb52c034c7d53014e9d5c1dfc3501e9adfb0c6391 (patch)
treec6fe3ad692443795fa025040196eba51b36946ea /src
parent52207f1b7b60cb0784d5241f0a4d40eef531c67e (diff)
loopback:fix delete to check interface class
Change-Id: Ia563b279e85b5da93f79db5a2a4d9b8c04f5be99 Signed-off-by: Eyal Bari <ebari@cisco.com>
Diffstat (limited to 'src')
-rw-r--r--src/vnet/ethernet/interface.c19
1 files changed, 6 insertions, 13 deletions
diff --git a/src/vnet/ethernet/interface.c b/src/vnet/ethernet/interface.c
index a358080438a..1eb28d7e937 100644
--- a/src/vnet/ethernet/interface.c
+++ b/src/vnet/ethernet/interface.c
@@ -838,25 +838,18 @@ int
vnet_delete_loopback_interface (u32 sw_if_index)
{
vnet_main_t *vnm = vnet_get_main ();
- vnet_sw_interface_t *si;
- u32 hw_if_index;
- vnet_hw_interface_t *hw;
- u32 instance;
if (pool_is_free_index (vnm->interface_main.sw_interfaces, sw_if_index))
return VNET_API_ERROR_INVALID_SW_IF_INDEX;
- si = vnet_get_sw_interface (vnm, sw_if_index);
- hw_if_index = si->hw_if_index;
- hw = vnet_get_hw_interface (vnm, hw_if_index);
- instance = hw->dev_instance;
+ vnet_hw_interface_t *hw = vnet_get_sup_hw_interface (vnm, sw_if_index);
+ if (hw == 0 || hw->dev_class_index != ethernet_simulated_device_class.index)
+ return VNET_API_ERROR_INVALID_SW_IF_INDEX;
- if (loopback_instance_free (instance) < 0)
- {
- return VNET_API_ERROR_INVALID_SW_IF_INDEX;
- }
+ if (loopback_instance_free (hw->dev_instance) < 0)
+ return VNET_API_ERROR_INVALID_SW_IF_INDEX;
- ethernet_delete_interface (vnm, hw_if_index);
+ ethernet_delete_interface (vnm, hw->hw_if_index);
return 0;
}