net/tap: fix isolation mode toggling
authorOphir Munk <ophirmu@mellanox.com>
Mon, 14 May 2018 22:26:27 +0000 (22:26 +0000)
committerFerruh Yigit <ferruh.yigit@intel.com>
Thu, 17 May 2018 14:01:05 +0000 (16:01 +0200)
commit2ef1c0da894a9534d41475b8240cff1d04e79fdf
tree26689b5e7a60c7129e368081ef01fb9f0ec29757
parenta52dfd00c2deb069cd65b31a27b8d62656140697
net/tap: fix isolation mode toggling

Running testpmd command "flow isolae <port> 0" (i.e. disabling flow
isolation) followed by command "flow isolate <port> 1" (i.e. enabling
flow isolation) may result in a TAP error:
PMD: Kernel refused TC filter rule creation (17): File exists

Root cause analysis: when disabling flow isolation we keep the local
rule to redirect packets on TX (TAP_REMOTE_TX index) while we add it
again when enabling flow isolation. As a result this rule is added
two times in a row which results in "File exists" error.
The fix is to identify the "File exists" error and silently ignore it.

Another issue occurs when enabling isolation mode several times in a
row in which case the same tc rules are added consecutively and
rte_flow structs are added to a linked list before removing the
previous rte_flow structs.
The fix is to act upon isolation mode command only when there is a
change from "0" to "1" (or vice versa).

Fixes: f503d2694825 ("net/tap: support flow API isolated mode")
Cc: stable@dpdk.org
Reviewed-by: Raslan Darawsheh <rasland@mellanox.com>
Signed-off-by: Ophir Munk <ophirmu@mellanox.com>
Acked-by: Keith Wiles <keith.wiles@intel.com>
drivers/net/tap/tap_flow.c