devices: show interface rx-placement displays the wrong information (VPP-894)
show interface rx-placement somtimes displays the wrong interface names.
This happens when there exists subinterfaces in VPP.
The problem is due to the function show_interface_rx_placement_fn is calling
format_vnet_sw_if_index_name with hw_if_index instead of sw_if_index.
VPP has the concept of sw_if_index and hw_if_index. Each serves a different
purpose. When there is no subinterfaces, both hw_if_index and sw_if_index
may happen to have the same value. But don't count on it. When the API calls
for sw_if_index, we must pass the sw_if_index although the hw_if_index has
the same type which the compiler does not catch. Passing hw_if_index for an
API which requires sw_if_index may have an unpredictable result such as
described in the VPP-894 and sometimes it may even crash if the particular
index does not exist.
Change-Id: I76c4834f79b88a1c20684fcba64f14b2da142d77
Signed-off-by: Steven <sluong@cisco.com>
(cherry picked from commit bafa4d0484
)
This commit is contained in:
@ -1339,8 +1339,10 @@ show_interface_rx_placement_fn (vlib_main_t * vm, unformat_input_t * input,
|
||||
|
||||
vec_foreach (dq, rt->devices_and_queues)
|
||||
{
|
||||
vnet_hw_interface_t *hi = vnet_get_hw_interface (vnm,
|
||||
dq->hw_if_index);
|
||||
s = format (s, " %U queue %u (%U)\n",
|
||||
format_vnet_sw_if_index_name, vnm, dq->hw_if_index,
|
||||
format_vnet_sw_if_index_name, vnm, hi->sw_if_index,
|
||||
dq->queue_id,
|
||||
format_vnet_hw_interface_rx_mode, dq->mode);
|
||||
}
|
||||
|
Reference in New Issue
Block a user