linux/drivers/net/ethernet
Ido Schimmel 9aecce1c7d mlxsw: spectrum_router: Correctly handle identical routes
In the device, routes are indexed in a routing table based on the prefix
and its length. This is in contrast to the kernel's FIB where several
FIB aliases can exist with these parameters being identical. In such
cases, the routes will be sorted by table ID (LOCAL first, then MAIN),
TOS and finally priority (metric).

During lookup, these routes will be evaluated in order. In case the
packet's TOS field is non-zero and a FIB alias with a matching TOS is
found, then it's selected. Otherwise, the lookup defaults to the route
with TOS 0 (if it exists). However, if the requested scope is narrower
than the one found, then the lookup continues.

To best reflect the kernel's datapath we should take the above into
account. Given a prefix and its length, the reflected route will always
be the first one in the FIB alias list. However, if the route has a
non-zero TOS then its action will be converted to trap instead of
forward, since we currently don't support TOS-based routing. If this
turns out to be a real issue, we can add support for that using
policy-based switching.

The route's scope can be effectively ignored as any packet being routed
by the device would've been looked-up using the widest scope (UNIVERSE).

To achieve that we need to do two changes. Firstly, we need to create
another struct (FIB node) that will hold the list of FIB entries sharing
the same prefix and length. This struct will be hashed using these two
parameters.

Secondly, we need to change the route reflection to match the above
logic, so that the first FIB entry in the list will be programmed into
the device while the rest will remain in the driver's cache in case of
subsequent changes.

Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2017-02-10 11:32:13 -05:00
..
3com drivers: net: generalize napi_complete_done() 2017-01-30 15:10:42 -05:00
8390 Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
adaptec net: adaptec: starfire: add checks for dma mapping errors 2017-01-29 19:04:11 -05:00
adi drivers: net: generalize napi_complete_done() 2017-01-30 15:10:42 -05:00
aeroflex aeroflex/greth: use napi_complete_done() 2017-02-05 16:11:57 -05:00
agere drivers: net: generalize napi_complete_done() 2017-01-30 15:10:42 -05:00
alacritech net: make ndo_get_stats64 a void function 2017-01-08 17:51:44 -05:00
allwinner net: ethernet: sun4i-emac: Read rxhdr in CPU byte-order 2016-11-15 22:05:54 -05:00
alteon Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
altera drivers: net: generalize napi_complete_done() 2017-01-30 15:10:42 -05:00
amazon net/ena: update driver version to 1.1.2 2017-02-09 22:27:06 -05:00
amd pcnet32: use napi_complete_done() 2017-02-05 16:11:57 -05:00
apm xgene_enet: remove bogus forward declarations 2017-02-02 17:12:20 -05:00
apple
aquantia ethernet: aquantia: fix dma_mapping_error test 2017-02-01 12:45:27 -05:00
arc drivers: net: generalize napi_complete_done() 2017-01-30 15:10:42 -05:00
atheros atl1e: add GRO support 2017-02-03 11:13:17 -05:00
aurora Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2016-12-03 12:29:53 -05:00
broadcom bnxt_en: Add support for XDP_TX action. 2017-02-07 13:31:00 -05:00
brocade drivers: net: generalize napi_complete_done() 2017-01-30 15:10:42 -05:00
cadence Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2017-02-02 16:54:00 -05:00
calxeda drivers: net: generalize napi_complete_done() 2017-01-30 15:10:42 -05:00
cavium liquidio: do not dereference pointer if it's NULL 2017-02-07 15:37:43 -05:00
chelsio net-next: treewide use is_vlan_dev() helper function. 2017-02-06 16:33:29 -05:00
cirrus ep93xx_eth: add GRO support 2017-02-05 16:11:57 -05:00
cisco enic: add vxlan offload on tx path 2017-02-09 17:24:29 -05:00
davicom net: davicom: dm9000: use new api ethtool_{get|set}_link_ksettings 2016-12-17 21:31:41 -05:00
dec drivers: net: generalize napi_complete_done() 2017-01-30 15:10:42 -05:00
dlink net: dlink: sundance: use new api ethtool_{get|set}_link_ksettings 2017-01-02 16:59:10 -05:00
emulex be2net: get rid of custom busy poll code 2017-02-03 16:06:55 -05:00
ezchip drivers: net: generalize napi_complete_done() 2017-01-30 15:10:42 -05:00
faraday net: faraday: ftmac100: use new api ethtool_{get|set}_link_ksettings 2017-01-02 16:59:10 -05:00
freescale Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2017-02-02 16:54:00 -05:00
fujitsu Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
hisilicon Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2017-02-07 16:29:30 -05:00
hp
i825xx
ibm ibm/emac: use napi_complete_done() 2017-02-05 16:11:57 -05:00
intel Merge branch '40GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/next-queue 2017-02-04 12:13:27 -05:00
marvell net: pxa168_eth: Do not clobber PHY link outside of state machine 2017-02-07 13:48:21 -05:00
mediatek Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2017-01-28 10:33:06 -05:00
mellanox mlxsw: spectrum_router: Correctly handle identical routes 2017-02-10 11:32:13 -05:00
micrel ks8695net: add GRO support 2017-02-05 16:11:57 -05:00
microchip encx24j600: Fix some checkstyle warnings 2016-12-16 13:31:47 -05:00
moxa drivers: net: generalize napi_complete_done() 2017-01-30 15:10:42 -05:00
myricom myri10ge: get rid of custom busy poll code 2017-02-03 16:18:00 -05:00
natsemi drivers: net: generalize napi_complete_done() 2017-01-30 15:10:42 -05:00
neterion drivers: net: generalize napi_complete_done() 2017-01-30 15:10:42 -05:00
netronome bpf: add initial bpf tracepoints 2017-01-25 13:17:47 -05:00
nuvoton
nvidia drivers: net: generalize napi_complete_done() 2017-01-30 15:10:42 -05:00
nxp drivers: net: generalize napi_complete_done() 2017-01-30 15:10:42 -05:00
oki-semi drivers: net: generalize napi_complete_done() 2017-01-30 15:10:42 -05:00
packetengines Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
pasemi drivers: net: generalize napi_complete_done() 2017-01-30 15:10:42 -05:00
qlogic net-next: treewide use is_vlan_dev() helper function. 2017-02-06 16:33:29 -05:00
qualcomm net: qcom/emac: add ethtool support for setting ring parameters 2017-02-09 17:09:19 -05:00
rdc r6040: move spinlock in r6040_close as SOFTIRQ-unsafe lock order detected 2016-12-17 21:35:12 -05:00
realtek 8139cp: use napi_complete_done() 2017-02-05 16:11:57 -05:00
renesas sh_eth: fix wakeup event reporting from MagicPacket 2017-02-01 12:53:59 -05:00
rocker drivers: net: generalize napi_complete_done() 2017-01-30 15:10:42 -05:00
samsung drivers: net: generalize napi_complete_done() 2017-01-30 15:10:42 -05:00
seeq
sfc sfc: configure UDP tunnel offload ports 2017-02-09 16:47:53 -05:00
sgi Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
silan
sis Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
smsc epic100: use napi_complete_done() 2017-02-05 16:11:57 -05:00
stmicro net: stmmac: replace unsigned by u32 2017-02-08 15:11:27 -05:00
sun drivers: net: generalize napi_complete_done() 2017-01-30 15:10:42 -05:00
tehuti drivers: net: generalize napi_complete_done() 2017-01-30 15:10:42 -05:00
ti net: netcp: Do not clobber PHY link outside of state machine 2017-02-07 13:48:22 -05:00
tile drivers: net: generalize napi_complete_done() 2017-01-30 15:10:42 -05:00
toshiba drivers: net: generalize napi_complete_done() 2017-01-30 15:10:42 -05:00
tundra drivers: net: generalize napi_complete_done() 2017-01-30 15:10:42 -05:00
via drivers: net: generalize napi_complete_done() 2017-01-30 15:10:42 -05:00
wiznet drivers: net: generalize napi_complete_done() 2017-01-30 15:10:42 -05:00
xilinx net: xilinx: constify net_device_ops structure 2017-01-23 15:58:49 -05:00
xircom Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
xscale net: ethernet: ixp4xx_eth: Utilize phy_ethtool_nway_reset 2016-11-15 16:33:35 -05:00
dnet.c drivers: net: generalize napi_complete_done() 2017-01-30 15:10:42 -05:00
dnet.h
ec_bhf.c net: make ndo_get_stats64 a void function 2017-01-08 17:51:44 -05:00
ethoc.c drivers: net: generalize napi_complete_done() 2017-01-30 15:10:42 -05:00
fealnx.c net: fealnx: use new api ethtool_{get|set}_link_ksettings 2017-01-02 16:59:10 -05:00
jme.c net: jme: use new api ethtool_{get|set}_link_ksettings 2017-01-17 11:44:27 -05:00
jme.h net: jme: use new api ethtool_{get|set}_link_ksettings 2017-01-17 11:44:27 -05:00
Kconfig net: ethernet: aquantia: Integrate AQtion 2.5/5 GB NIC driver 2017-01-24 15:03:41 -05:00
korina.c drivers: net: generalize napi_complete_done() 2017-01-30 15:10:42 -05:00
lantiq_etop.c drivers: net: generalize napi_complete_done() 2017-01-30 15:10:42 -05:00
Makefile net: ethernet: aquantia: Integrate AQtion 2.5/5 GB NIC driver 2017-01-24 15:03:41 -05:00
netx-eth.c