Andreas Pape
1fb9c2f41e
batman-adv: handle race condition for claims between gateways
...
[ Upstream commit a3a5129e122709306cfa6409781716c2933df99b ]
Consider the following situation which has been found in a test setup:
Gateway B has claimed client C and gateway A has the same backbone
network as B. C sends a broad- or multicast to B and directly after
this packet decides to send another packet to A due to a better TQ
value. B will forward the broad-/multicast into the backbone as it is
the responsible gw and after that A will claim C as it has been
chosen by C as the best gateway. If it now happens that A claims C
before it has received the broad-/multicast forwarded by B (due to
backbone topology or due to some delay in B when forwarding the
packet) we get a critical situation: in the current code A will
immediately unclaim C when receiving the multicast due to the
roaming client scenario although the position of C has not changed
in the mesh. If this happens the multi-/broadcast forwarded by B
will be sent back into the mesh by A and we have looping packets
until one of the gateways claims C again.
In order to prevent this, unclaiming of a client due to the roaming
client scenario is only done after a certain time is expired after
the last claim of the client. 100 ms are used here, which should be
slow enough for big backbones and slow gateways but fast enough not
to break the roaming client use case.
Acked-by: Simon Wunderlich <sw@simonwunderlich.de>
Signed-off-by: Andreas Pape <apape@phoenixcontact.com>
[sven@narfation.org: fix conflicts with current version]
Signed-off-by: Sven Eckelmann <sven@narfation.org>
Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2018-03-22 09:17:41 +01:00
..
bat_algo.c
batman-adv: Allow to disable debugfs support
2016-08-09 07:54:54 +02:00
bat_algo.h
batman-adv: netlink: add routing_algo query
2016-08-09 07:54:36 +02:00
bat_iv_ogm.c
batman-adv: Allow to disable debugfs support
2016-08-09 07:54:54 +02:00
bat_iv_ogm.h
batman-adv: Fix bat_(iv|v) function declaration header
2016-06-30 10:29:43 +02:00
bat_v.c
batman-adv: Allow to disable debugfs support
2016-08-09 07:54:54 +02:00
bat_v.h
batman-adv: Fix bat_(iv|v) function declaration header
2016-06-30 10:29:43 +02:00
bat_v_elp.c
batman-adv: fix elp packet data reservation
2016-08-26 15:22:31 +02:00
bat_v_elp.h
batman-adv: Keep includes ordered by filename
2016-06-30 10:29:43 +02:00
bat_v_ogm.c
batman-adv: Place kref_get for orig_node near use
2016-08-09 07:54:46 +02:00
bat_v_ogm.h
batman-adv: Include main.h in bat_v_ogm.h
2016-06-30 10:29:43 +02:00
bitarray.c
batman-adv: Consolidate logging related functions
2016-06-30 10:29:43 +02:00
bitarray.h
batman-adv: Use bool as return type for boolean functions
2016-05-10 18:28:54 +08:00
bridge_loop_avoidance.c
batman-adv: handle race condition for claims between gateways
2018-03-22 09:17:41 +01:00
bridge_loop_avoidance.h
batman-adv: add backbone table netlink support
2016-08-09 07:54:43 +02:00
debugfs.c
batman-adv: Suppress debugfs entries for netns's
2016-08-09 07:54:35 +02:00
debugfs.h
treewide: remove redundant #include <linux/kconfig.h>
2016-10-11 15:06:33 -07:00
distributed-arp-table.c
batman-adv: Allow to disable debugfs support
2016-08-09 07:54:54 +02:00
distributed-arp-table.h
batman-adv: update copyright years for 2016
2016-02-02 12:55:10 +08:00
fragmentation.c
batman-adv: return netdev status in the TX path
2016-07-04 12:37:18 +02:00
fragmentation.h
batman-adv: return netdev status in the TX path
2016-07-04 12:37:18 +02:00
gateway_client.c
batman-adv: Allow to disable debugfs support
2016-08-09 07:54:54 +02:00
gateway_client.h
batman-adv: netlink: add gateway table queries
2016-08-09 07:54:40 +02:00
gateway_common.c
batman-adv: make GW election code protocol specific
2016-08-09 07:54:29 +02:00
gateway_common.h
batman-adv: add throughput override attribute to hard_ifaces
2016-02-29 16:05:32 +08:00
hard-interface.c
batman-adv: Revert "fix splat on disabling an interface"
2016-11-04 12:27:34 +01:00
hard-interface.h
batman-adv: Create batman soft interfaces within correct netns.
2016-05-10 18:26:44 +08:00
hash.c
batman-adv: update copyright years for 2016
2016-02-02 12:55:10 +08:00
hash.h
batman-adv: Use bool as return type for boolean functions
2016-05-10 18:28:54 +08:00
icmp_socket.c
batman-adv: Consolidate logging related functions
2016-06-30 10:29:43 +02:00
icmp_socket.h
batman-adv: Allow to disable debugfs support
2016-08-09 07:54:54 +02:00
Kconfig
batman-adv: Allow to disable debugfs support
2016-08-09 07:54:54 +02:00
log.c
batman-adv: Consolidate logging related functions
2016-06-30 10:29:43 +02:00
log.h
batman-adv: Add BATADV_DBG_TP_METER to BATADV_DBG_ALL
2016-10-17 16:11:56 +02:00
main.c
batman-adv: Allow to disable debugfs support
2016-08-09 07:54:54 +02:00
main.h
batman-adv: Start new development cycle
2016-08-09 07:54:24 +02:00
Makefile
batman-adv: Allow to disable debugfs support
2016-08-09 07:54:54 +02:00
multicast.c
batman-adv: Allow to disable debugfs support
2016-08-09 07:54:54 +02:00
multicast.h
batman-adv: Add debugfs table for mcast flags
2016-06-30 10:29:43 +02:00
netlink.c
batman: make netlink attributes const
2016-09-01 14:09:00 -07:00
netlink.h
batman-adv: netlink: add translation table query
2016-08-09 07:54:37 +02:00
network-coding.c
batman-adv: Allow to disable debugfs support
2016-08-09 07:54:54 +02:00
network-coding.h
batman-adv: update copyright years for 2016
2016-02-02 12:55:10 +08:00
originator.c
batman-adv: Modify neigh_list only with rcu-list functions
2016-10-17 16:10:53 +02:00
originator.h
batman-adv: netlink: add originator and neighbor table queries
2016-08-09 07:54:38 +02:00
packet.h
batman-adv: netlink: add translation table query
2016-08-09 07:54:37 +02:00
routing.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
2016-09-23 06:46:57 -04:00
routing.h
batman-adv: Use bool as return type for boolean functions
2016-05-10 18:28:54 +08:00
send.c
batman-adv: Remove orig_node reference handling from send_skb_unicast
2016-08-09 07:54:33 +02:00
send.h
batman-adv: Introduce forward packet creation helper
2016-08-09 07:54:32 +02:00
soft-interface.c
batman-adv: Place kref_get for softif_vlan near use
2016-08-09 07:54:50 +02:00
soft-interface.h
batman-adv: Use bool as return type for boolean functions
2016-05-10 18:28:54 +08:00
sysfs.c
batman-adv: disable sysfs knobs when GW-mode is not implemented
2016-08-09 07:54:30 +02:00
sysfs.h
batman-adv: update copyright years for 2016
2016-02-02 12:55:10 +08:00
tp_meter.c
batman-adv: Detect missing primaryif during tp_send as error
2016-11-04 12:27:39 +01:00
tp_meter.h
batman-adv: throughput meter implementation
2016-07-04 12:37:18 +02:00
translation-table.c
batman-adv: Check for alloc errors when preparing TT local data
2016-12-02 10:46:59 +01:00
translation-table.h
batman-adv: netlink: add translation table query
2016-08-09 07:54:37 +02:00
tvlv.c
batman-adv: Place kref_get for tvlv_handler near use
2016-08-09 07:54:53 +02:00
tvlv.h
batman-adv: split tvlv into a separate file
2016-06-30 10:29:43 +02:00
types.h
batman-adv: Allow to disable debugfs support
2016-08-09 07:54:54 +02:00