linux/drivers/infiniband/hw
Ariel Levkovich 19cc75249a IB/mlx5: Use IP version matching to classify IP traffic
This change adds the ability for flow steering to classify IPv4/6
packets with MPLS tag (Ethertype 0x8847 and 0x8848) as standard IP
packets and hit IPv4/6 classifed steering rules.

When user added a flow rule with IP classification, driver was
implicitly adding ethertype matching to the created rule in order
to distinguish between IPv4 and IPv6 protocols.
Since IP packets with MPLS tag header have MPLS ethertype, they missed
the rule and ended up hitting the default filters.
Such behavior prevented from MPLS packets to undergo inbound traffic
load balancing flows (if such were defined by configuring RSS) to
achieve higher throughput - the way that non-MPLS IP packets performed.

Since our device is able to look past the MPLS tag and identify the
next protocol we introduce this solution which replaces Ethertype
matching by the device's capability to perform IP version parsing
and matching in order to distinguish between IPv4 and IPv6.
Therefore, whenever a flow with IP spec is added and device support IP
version matching, driver will implicitly add IP version matching to the
rule (Based on the IP spec type) without Ethertype matching which will
cause relevant MPLS tagged packets to hit this rule as well.
Otherwise (device doesn't support IP version matching), we fall back to
setting Ethertype matching.

If the user's filters specify an L2 ethertype and an IP spec
the rule will then match both the ethertype and the IP version.

The device's support for IP version matching is reported by the
device via dedicated capability bit in query_device_cap and named
outer/inner_ip_version.

Signed-off-by: Ariel Levkovich <lariel@mellanox.com>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
Signed-off-by: Doug Ledford <dledford@redhat.com>
2017-04-21 12:26:05 -04:00
..
bnxt_re This is a tree wide change and has been kept separate for that reason. 2017-02-25 13:45:43 -08:00
cxgb3 cxgb3: Convert PDBG to pr_debug 2017-04-20 16:13:20 -04:00
cxgb4 cxgb4: Convert PDBG to pr_debug the second 2017-04-20 22:18:54 -04:00
hfi1 IB/hfi1: Coding style improvement (make sizeof use safer) 2017-04-20 16:25:04 -04:00
hns IB/hns: Use kcalloc() in hns_roce_buddy_init() 2017-04-20 16:31:49 -04:00
i40iw i40iw: Receive netdev events post INET_NOTIFIER state 2017-03-24 16:23:29 -04:00
mlx4 IB/mlx4: Change vma from shared to private 2017-04-21 12:26:05 -04:00
mlx5 IB/mlx5: Use IP version matching to classify IP traffic 2017-04-21 12:26:05 -04:00
mthca This is a tree wide change and has been kept separate for that reason. 2017-02-25 13:45:43 -08:00
nes drivers: add explicit interrupt.h includes 2017-03-30 11:05:34 -07:00
ocrdma RDMA/ocrdma: fix a type issue in ocrdma_put_pd_num() 2017-03-24 21:11:15 -04:00
qedr qed*: Utilize Firmware 8.15.3.0 2017-03-13 15:33:09 -07:00
qib Merge branch 'k.o/for-4.12' into k.o/for-4.12-rdma-netdevice 2017-04-20 12:00:41 -04:00
usnic sched/headers: Prepare for new header dependencies before moving code to <linux/sched/signal.h> 2017-03-02 08:42:29 +01:00
vmw_pvrdma RDMA/vmw_pvrdma: Activate device on ethernet link up 2017-03-24 20:49:53 -04:00
Makefile RDMA/bnxt_re: Add bnxt_re driver build support 2017-02-14 09:51:28 -05:00