linux/drivers/net/ethernet
Petr Machata af641713e9 mlxsw: spectrum_router: Onload conflicting tunnels
The approach for offloading IP tunnels implemented currently by mlxsw
doesn't allow two tunnels that have the same local IP address in the
same (underlay) VRF. Previously, offloads were introduced on demand as
encap routes were formed. When such a route was created that would cause
offload of a conflicting tunnel, mlxsw_sp_ipip_entry_create() would
detect it and return -EEXIST, which would propagate up and cause FIB
abort.

Now however IPIP entries are created as soon as an offloadable netdevice
is created, and the failure prevents creation of such device.
Furthermore, if the driver is installed at the point where such
conflicting tunnels exist, the failure actually prevents successful
modprobe.

Furthermore, follow-up patches implement handling of NETDEV_CHANGE due
to the local address change. However, NETDEV_CHANGE can't be vetoed. The
failure merely means that the offloads weren't updated, but the change
in Linux configuration is not rolled back. It is thus desirable to have
a robust way of handling these conflicts, which can later be reused for
handling NETDEV_CHANGE as well.

To fix this, when a conflicting tunnel is created, instead of failing,
simply pull the old tunnel to slow path and reject offloading the
new one.

Introduce two functions: mlxsw_sp_ipip_entry_demote_tunnel() and
mlxsw_sp_ipip_demote_tunnel_by_saddr() to handle this. Make them both
public, because they will be useful later on in this patchset.

Signed-off-by: Petr Machata <petrm@mellanox.com>
Reviewed-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2017-11-04 09:15:18 +09:00
..
3com drivers/net: 3com/3c515: Convert timers to use timer_setup() 2017-10-27 12:09:15 +09:00
8390 drivers/net: 8390: Convert timers to use timer_setup() 2017-10-28 19:09:49 +09:00
adaptec
adi drivers: net: adi: use setup_timer() helper. 2017-09-21 11:44:43 -07:00
aeroflex
agere drivers: net: et131x: use setup_timer() helper. 2017-09-21 11:44:39 -07:00
alacritech net: ethernet: slicoss: remove redundant initialization of idx 2017-11-01 21:19:32 +09:00
allwinner
alteon
altera
amazon Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2017-10-22 13:39:14 +01:00
amd drivers/net: amd: Convert timers to use timer_setup() 2017-10-28 19:09:49 +09:00
apm drivers: net: xgene: Remove return statement from void function 2017-09-05 14:58:25 -07:00
apple net: ethernet: apple: Convert timers to use timer_setup() 2017-10-18 12:40:25 +01:00
aquantia net: aquantia: Make local functions static 2017-10-29 17:53:00 +09:00
arc
atheros
aurora
broadcom bnxt_en: Fix IRQ coalescing regression. 2017-11-03 21:33:31 +09:00
brocade bna: Convert timers to use timer_setup() 2017-10-18 12:39:38 +01:00
cadence net: macb: remove redundant assignment to variable work_done 2017-11-01 21:25:59 +09:00
calxeda
cavium liquidio: bump up driver version to 1.7.0 to match newer NIC firmware 2017-11-03 14:09:07 +09:00
chelsio cxgb4vf: define get_fecparam ethtool callback 2017-11-03 15:45:40 +09:00
cirrus
cisco enic: Add support for 'ethtool -g/-G' 2017-11-02 14:17:11 +09:00
davicom davicom: Display proper debug level up to 6 2017-09-08 20:53:10 -07:00
dec net: tulip: Convert timers to use timer_setup() 2017-10-18 12:39:38 +01:00
dlink net: dl2k: remove redundant re-assignment to np 2017-11-02 15:52:19 +09:00
emulex be2net: fix TSO6/GSO issue causing TX-stall on Lancer/BEx 2017-09-13 09:28:18 -07:00
ezchip
faraday net: faraday: ftmac100: Use BUG_ON instead of if condition followed by BUG. 2017-10-27 23:53:14 +09:00
freescale net: dpaa: remove init which already done in per-cpu allocation 2017-11-02 16:15:25 +09:00
fujitsu
hisilicon net: hns3: fix a bug for phy supported feature initialization 2017-11-03 21:36:50 +09:00
hp
huawei net-next/hinic: Fix a case of Tx Queue is Stopped forever 2017-09-28 10:26:50 -07:00
i825xx dma-mapping updates for 4.14: 2017-09-12 13:30:06 -07:00
ibm ibmvnic: Fix failover error path for non-fatal resets 2017-10-28 00:23:58 +09:00
intel net: sched: move the can_offload check from binding phase to rule insertion phase 2017-11-02 16:10:39 +09:00
marvell net: mvpp2: simplify the Tx desc set DMA logic 2017-11-01 12:28:33 +09:00
mediatek drivers, net, ethernet: convert mtk_eth.dma_refcnt from atomic_t to refcount_t 2017-10-22 02:22:38 +01:00
mellanox mlxsw: spectrum_router: Onload conflicting tunnels 2017-11-04 09:15:18 +09:00
micrel net: ksz884x: Convert timers to use timer_setup() 2017-10-18 12:39:39 +01:00
microchip
moxa
myricom
natsemi drivers/net: natsemi: Convert timers to use timer_setup() 2017-10-28 19:09:49 +09:00
neterion net: neterion: Convert timers to use timer_setup() 2017-10-18 12:40:26 +01:00
netronome nfp: improve defines for constants in ethtool 2017-11-02 20:27:11 +09:00
nuvoton drivers/net: nuvoton: Convert timers to use timer_setup() 2017-10-27 12:09:15 +09:00
nvidia forcedeth: replace pci_alloc_consistent with dma_alloc_coherent 2017-11-01 12:03:28 +09:00
nxp
oki-semi pch_gbe: Switch to new PCI IRQ allocation API 2017-10-16 21:12:32 +01:00
packetengines drivers/net: packetengines: Convert timers to use timer_setup() 2017-10-28 19:09:49 +09:00
pasemi
qlogic qed: Fix iWARP out of order flow 2017-10-19 12:46:43 +01:00
qualcomm net: qualcomm: rmnet: Add support for GRO 2017-10-28 00:10:23 +09:00
rdc
realtek r8169: Add support for interrupt coalesce tuning (ethtool -C) 2017-10-29 11:07:58 +09:00
renesas net: sh_eth: implement R-Car Gen[12] fallback compatibility strings 2017-10-20 08:32:24 +01:00
rocker rocker: fix rocker_tlv_put_* functions for KASAN 2017-09-25 20:18:27 -07:00
samsung drivers/net: sxgbe: Convert timers to use timer_setup() 2017-10-27 12:09:16 +09:00
seeq net: seeq: fix timer conversion 2017-11-02 20:33:12 +09:00
sfc sfc: support rx-fcs and rx-all 2017-11-01 21:26:35 +09:00
sgi net/ethernet/sgi: Convert timers to use timer_setup() 2017-10-18 12:40:26 +01:00
silan
sis drivers/net: sis: Convert timers to use timer_setup() 2017-10-25 13:09:47 +09:00
smsc drivers/net: smsc: Convert timers to use timer_setup() 2017-10-28 19:09:50 +09:00
stmicro Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2017-10-30 21:09:24 +09:00
sun net: ethernet: sun: Convert timers to use timer_setup() 2017-10-18 12:40:26 +01:00
synopsys
tehuti
ti net/ti/tlan: Convert timers to use timer_setup() 2017-10-18 12:39:36 +01:00
tile
toshiba drivers: net: spider_net: use setup_timer() helper. 2017-09-21 11:44:40 -07:00
tundra drivers/net: tundra: Convert timers to use timer_setup() 2017-11-01 12:38:45 +09:00
via dmi: Mark all struct dmi_system_id instances const 2017-09-14 11:59:30 +02:00
wiznet
xilinx
xircom
xscale
dnet.c
dnet.h
ec_bhf.c
ethoc.c
fealnx.c drivers/net: fealnx: Convert timers to use timer_setup() 2017-10-28 19:09:49 +09:00
jme.c
jme.h
Kconfig
korina.c drivers/net: korina: Convert timers to use timer_setup() 2017-10-28 19:09:49 +09:00
lantiq_etop.c
Makefile
netx-eth.c