From: Ido Schimmel <ido...@mellanox.com> Date: Tue, 4 Dec 2018 08:15:09 +0000
> Up until now, when a packet was routed by the ASIC through the same > router interface (RIF) from which it ingressed from, the ASIC passed the > sole copy of the packet to the kernel. This allowed the kernel to route > the packet and also potentially generate an ICMP redirect. > > There are scenarios (e.g., "one-armed router") where packets are > intentionally routed this way and are therefore not deemed as > exceptions. In such scenarios the current method of trapping packets to > the CPU is problematic, as it results in major packet loss. > > This patchset solves the problem by having the ASIC forward the packet, > but also send a copy to the CPU, which gives the kernel the opportunity > to generate required exceptions. > > To prevent the kernel from forwarding such packets again, the driver > marks them with 'offload_l3_fwd_mark', which causes the kernel to > consume them in ip{,6}_forward_finish(). > > Patch #1 renames 'offload_mr_fwd_mark' to 'offload_l3_fwd_mark'. When > set, the field indicates that a packet was already forwarded in L3 > (unicast / multicast) by a capable device. > > Patch #2 teaches the kernel to consume unicast packets that have > 'offload_l3_fwd_mark' set. > > Patch #3 changes mlxsw to mirror loopbacked (iRIF == eRIF) packets, > instead of trapping them. > > Patch #4 adds a test case for above mentioned scenario. Series applied, thank you.