linux/drivers/net/ethernet/mellanox/mlxsw
Ido Schimmel 1819ae3dfe mlxsw: spectrum_router: Don't offload routes next in list
Each FIB node holds a linked list of routes sharing the same prefix and
length. In the case of IPv4 it's ordered according to table ID, metric
and TOS and only the first route in the list is actually programmed to
the device.

In case a gatewayed route is added somewhere in the list, then after its
nexthop group will be refreshed and become valid (due to the resolution
of its gateway), it'll mistakenly overwrite the existing entry.

Example:
192.168.200.0/24 dev enp3s0np3 scope link metric 1000 offload
192.168.200.0/24 via 192.168.100.1 dev enp3s0np3 metric 1000 offload

Both routes are marked as offloaded despite the fact only the first one
should actually be present in the device's table.

When refreshing the nexthop group, don't write the route to the device's
table unless it's the first in its node.

Fixes: 9aecce1c7d ("mlxsw: spectrum_router: Correctly handle identical routes")
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-07-24 14:14:48 -07:00
..
Kconfig mlxsw: spectrum: Add bridge dependency for spectrum 2017-06-01 15:06:45 -04:00
Makefile mlxsw: spectrum: Implement common FID core 2017-05-26 15:18:49 -04:00
cmd.h mlxsw: pci: Remove unused bit 2017-03-08 23:17:38 -08:00
core.c mlxsw: Query maximum number of ports from firmware 2017-03-24 13:53:28 -07:00
core.h mlxsw: core: Create the mlxsw_fw_rev struct 2017-05-25 17:46:17 -04:00
core_acl_flex_actions.c acl: Introduce ACL trap action 2017-06-06 12:45:24 -04:00
core_acl_flex_actions.h acl: Introduce ACL trap action 2017-06-06 12:45:24 -04:00
core_acl_flex_keys.c mlxsw: core: Introduce flexible keys support 2017-02-03 16:35:41 -05:00
core_acl_flex_keys.h mlxsw: acl: Add tcp flags acl element 2017-05-24 16:22:11 -04:00
core_hwmon.c mlxsw: core: Zero payload buffers for couple of registers 2016-10-30 16:50:17 -04:00
core_thermal.c mlxsw: core: Implement thermal zone 2016-11-22 10:04:19 -05:00
emad.h mlxsw: Add interface to access registers and process events 2015-07-30 00:05:00 -07:00
i2c.c mlxsw: Fix mlxsw_i2c_write return value 2017-01-09 14:35:13 -05:00
i2c.h mlxsw: Introduce support for I2C bus 2016-11-16 23:29:04 -05:00
ib.h mlxsw: switchx2: Add IB port support 2016-10-30 16:50:17 -04:00
item.h mlxsw: item: Add helpers for getting pointer into payload for char buffer item 2017-02-03 16:35:38 -05:00
minimal.c mlxsw: minimal: Add I2C support for Mellanox ASICs 2016-11-16 23:29:04 -05:00
pci.c mlxsw: convert to pci_alloc_irq_vectors 2017-04-11 11:16:03 -04:00
pci.h mlxsw: switchib: Introduce SwitchIB and SwitchIB silicon driver 2016-10-30 16:50:17 -04:00
pci_hw.h mlxsw: pci: Fix size of trap_id field in CQE 2017-06-06 12:45:23 -04:00
port.h mlxsw: Query maximum number of ports from firmware 2017-03-24 13:53:28 -07:00
reg.h mlxsw: reg: Add MCIA register for cable info access 2017-06-14 15:16:30 -04:00
resources.h mlxsw: spectrum: Support for counters on router interfaces 2017-03-28 17:11:55 -07:00
spectrum.c mlxsw: spectrum: Add support for access cable info via ethtool 2017-06-14 15:16:30 -04:00
spectrum.h mlxsw: spectrum_switchdev: Add support for learning FDB through notification 2017-06-08 14:16:27 -04:00
spectrum_acl.c acl: Introduce ACL trap action 2017-06-06 12:45:24 -04:00
spectrum_acl_flex_keys.h mlxsw: spectrum: Add acl block containing tcp flags for ipv4 2017-05-24 16:22:11 -04:00
spectrum_acl_tcam.c mlxsw: spectrum_flower: Add support for tcp flags 2017-05-24 16:22:11 -04:00
spectrum_buffers.c mlxsw: spectrum_buffer: Reduce scope of shared buffer struct 2017-05-17 14:06:54 -04:00
spectrum_cnt.c mlxsw: spectrum: Support for counters on router interfaces 2017-03-28 17:11:55 -07:00
spectrum_cnt.h mlxsw: spectrum: Support for counters on router interfaces 2017-03-28 17:11:55 -07:00
spectrum_dcb.c mlxsw: spectrum: Do not override PAUSE settings 2016-08-08 12:57:27 -07:00
spectrum_dpipe.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2017-05-18 16:11:32 -04:00
spectrum_dpipe.h mlxsw: spectrum: Add definition for egress rif table 2017-03-28 17:11:54 -07:00
spectrum_fid.c mlxsw: Fix typo inside enumeration 2017-06-04 23:49:48 -04:00
spectrum_flower.c spectrum_flower: Implement gact trap TC action offload 2017-06-06 12:45:24 -04:00
spectrum_kvdl.c mlxsw: spectrum_kvdl: Cosmetic kvdl allocator API change 2017-03-25 19:56:15 -07:00
spectrum_router.c mlxsw: spectrum_router: Don't offload routes next in list 2017-07-24 14:14:48 -07:00
spectrum_router.h mlxsw: spectrum_router: Move RIFs array to its rightful place 2017-05-17 14:06:54 -04:00
spectrum_switchdev.c mlxsw: spectrum_switchdev: Check status of memory allocation 2017-07-12 08:15:52 -07:00
switchib.c mlxsw: Change trap groups setting 2016-11-25 21:22:14 -05:00
switchx2.c mlxsw: Query maximum number of ports from firmware 2017-03-24 13:53:28 -07:00
trap.h mlxsw: spectrum: Introduce ACL trap 2017-06-06 12:45:24 -04:00
txheader.h mlxsw: spectrum: Add initial support for Spectrum ASIC 2015-10-16 07:15:23 -07:00