net/tap: fix promiscuous rules double insertions
authorOphir Munk <ophirmu@mellanox.com>
Wed, 14 Feb 2018 11:32:19 +0000 (11:32 +0000)
committerThomas Monjalon <thomas@monjalon.net>
Wed, 14 Feb 2018 14:42:39 +0000 (15:42 +0100)
commitba2f43464ed53fd1358cf7b1f483103c616f341c
tree8dcc1991d84b61d3e676eb43c271492eced42a27
parentb69e737a65b7cb6a96368348e4eee93496bda727
net/tap: fix promiscuous rules double insertions

Running testpmd command "port stop all" followed by command "port start
all" may result in a TAP error:
PMD: Kernel refused TC filter rule creation (17): File exists

Root cause analysis: during the execution of "port start all" command
testpmd calls rte_eth_promiscuous_enable() while during the execution
of "port stop all" command testpmd does not call
rte_eth_promiscuous_disable().
As a result the TAP PMD is trying to add tc (traffic control command)
promiscuous rules to the remote netvsc device consecutively. From the
kernel point of view it is seen as an attempt to add the same rule more
than once. In recent kernels (e.g. version 4.13) this attempt is rejected
with a "File exists" error. In less recent kernels (e.g. version 4.4) the
same rule may have been successfully accepted twice, which is undesirable.

In the corrupted code every tc promiscuous rule included a different
handle number parameter. If instead an identical handle number is
used for all tc promiscuous rules - all kernels will reject the second
identical rule with a "File exists" error, which is easy to identify and
to silently ignore.

Fixes: 2bc06869cd94 ("net/tap: add remote netdevice traffic capture")
Cc: stable@dpdk.org
Signed-off-by: Ophir Munk <ophirmu@mellanox.com>
Acked-by: Pascal Mazon <pascal.mazon@6wind.com>
drivers/net/tap/tap_flow.c