kernel_optimize_test/net
Nikolay Aleksandrov 2756f68c31 net: bridge: add support for backup port
This patch adds a new port attribute - IFLA_BRPORT_BACKUP_PORT, which
allows to set a backup port to be used for known unicast traffic if the
port has gone carrier down. The backup pointer is rcu protected and set
only under RTNL, a counter is maintained so when deleting a port we know
how many other ports reference it as a backup and we remove it from all.
Also the pointer is in the first cache line which is hot at the time of
the check and thus in the common case we only add one more test.
The backup port will be used only for the non-flooding case since
it's a part of the bridge and the flooded packets will be forwarded to it
anyway. To remove the forwarding just send a 0/non-existing backup port.
This is used to avoid numerous scalability problems when using MLAG most
notably if we have thousands of fdbs one would need to change all of them
on port carrier going down which takes too long and causes a storm of fdb
notifications (and again when the port comes back up). In a Multi-chassis
Link Aggregation setup usually hosts are connected to two different
switches which act as a single logical switch. Those switches usually have
a control and backup link between them called peerlink which might be used
for communication in case a host loses connectivity to one of them.
We need a fast way to failover in case a host port goes down and currently
none of the solutions (like bond) cannot fulfill the requirements because
the participating ports are actually the "master" devices and must have the
same peerlink as their backup interface and at the same time all of them
must participate in the bridge device. As Roopa noted it's normal practice
in routing called fast re-route where a precalculated backup path is used
when the main one is down.
Another use case of this is with EVPN, having a single vxlan device which
is backup of every port. Due to the nature of master devices it's not
currently possible to use one device as a backup for many and still have
all of them participate in the bridge (which is master itself).
More detailed information about MLAG is available at the link below.
https://docs.cumulusnetworks.com/display/DOCS/Multi-Chassis+Link+Aggregation+-+MLAG

Further explanation and a diagram by Roopa:
Two switches acting in a MLAG pair are connected by the peerlink
interface which is a bridge port.

the config on one of the switches looks like the below. The other
switch also has a similar config.
eth0 is connected to one port on the server. And the server is
connected to both switches.

br0 -- team0---eth0
      |
      -- switch-peerlink

Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2018-07-23 09:32:15 -07:00
..
6lowpan
9p net/9p/client.c: put refcount of trans_mod in error case in parse_opts() 2018-07-14 11:11:09 -07:00
802
8021q
appletalk
atm
ax25
batman-adv Merge ra.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux 2018-07-20 21:17:12 -07:00
bluetooth
bpf bpf: fix panic due to oob in bpf_prog_test_run_skb 2018-07-11 16:10:57 -07:00
bpfilter
bridge net: bridge: add support for backup port 2018-07-23 09:32:15 -07:00
caif
can
ceph
core net: create reusable function for getting ownership info of sysfs inodes 2018-07-20 23:44:36 -07:00
dcb
dccp
decnet
dns_resolver KEYS: DNS: fix parsing multiple options 2018-07-16 11:22:14 -07:00
dsa net: dsa: Remove VLA usage 2018-07-18 15:08:31 -07:00
ethernet
hsr
ieee802154 Merge git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf-next 2018-07-20 22:28:28 -07:00
ife
ipv4 multicast: remove useless parameter for group add 2018-07-21 22:46:39 -07:00
ipv6 multicast: remove useless parameter for group add 2018-07-21 22:46:39 -07:00
iucv
kcm
key
l2tp
l3mdev
lapb
llc
mac80211 net: allow ndo_select_queue to pass netdev 2018-07-09 13:41:34 -07:00
mac802154
mpls
ncsi
netfilter Merge git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf-next 2018-07-20 22:28:28 -07:00
netlabel
netlink
netrom
nfc net/nfc: Avoid stalls when nfc_alloc_send_skb() returned NULL. 2018-07-18 10:51:45 -07:00
nsh nsh: set mac len based on inner packet 2018-07-12 16:55:29 -07:00
openvswitch ipv6: remove dependency of nf_defrag_ipv6 on ipv6 module 2018-07-18 11:26:53 +02:00
packet Merge ra.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux 2018-07-20 21:17:12 -07:00
phonet
psample
qrtr
rds net/rds: Remove unnecessary variable 2018-07-18 14:44:08 +09:00
rfkill
rose
rxrpc
sched net: sched: use PTR_ERR_OR_ZERO macro in tcf_block_cb_register 2018-07-21 16:17:08 -07:00
sctp Merge ra.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux 2018-07-20 21:17:12 -07:00
smc Merge ra.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux 2018-07-20 21:17:12 -07:00
strparser
sunrpc
switchdev
tipc tipc: make some functions static 2018-07-21 16:23:22 -07:00
tls Merge ra.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux 2018-07-20 21:17:12 -07:00
unix
vmw_vsock
wimax net: wimax: stack: fixed multi line comment issue 2018-07-21 19:35:51 -07:00
wireless
x25
xdp xsk: do not return EMSGSIZE in copy mode for packets larger than MTU 2018-07-13 15:34:31 +02:00
xfrm
compat.c
Kconfig
Makefile
socket.c
sysctl_net.c