net/enic: fix inner packet matching
authorHyong Youb Kim <hyonkim@cisco.com>
Sat, 2 Mar 2019 10:42:51 +0000 (02:42 -0800)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 8 Mar 2019 16:52:22 +0000 (17:52 +0100)
commit4445a0f4c7b9afdeb4a61d2314e118ef4920c9a7
tree8a428a2a0c7a9b5f2278c066ef4cc1b42f300969
parent593f17668f5ba3445bdedaa0edc5d308ca43e061
net/enic: fix inner packet matching

Inner packet matching is currently buggy in many cases.

1. Mishandling null spec ("match any").
The copy_item functions do nothing if spec is null. This is incorrect,
as all patterns should be appended to the L5 pattern buffer even for
null spec (treated as all zeros).

2. Accessing null spec causing segfault.

3. Not setting protocol fields.
The NIC filter API currently has no flags for "match inner IPv4, IPv6,
UDP, TCP, and so on". So, the driver needs to explicitly set EtherType
and IP protocol fields in the L5 pattern buffer to avoid false
positives (e.g. reporting IPv6 as IPv4).

Instead of keep adding "if inner, do something differently" cases to
the existing copy_item functions, introduce separate functions for
inner packet patterns and address the above issues in those
functions. The changes to the previous outer-packet copy_item
functions are mechanical, due to reduced indentation.

Fixes: 6ced137607d0 ("net/enic: flow API for NICs with advanced filters enabled")
Cc: stable@dpdk.org
Signed-off-by: Hyong Youb Kim <hyonkim@cisco.com>
doc/guides/rel_notes/release_19_05.rst
drivers/net/enic/enic_flow.c