<feed xmlns='http://www.w3.org/2005/Atom'>
<title>BMC/Intel-BMC/linux.git/net/bridge/br_device.c, branch dev-4.3</title>
<subtitle>Intel OpenBMC Linux kernel source tree (mirror)</subtitle>
<id>https://git.radix-linux.su/BMC/Intel-BMC/linux.git/atom?h=dev-4.3</id>
<link rel='self' href='https://git.radix-linux.su/BMC/Intel-BMC/linux.git/atom?h=dev-4.3'/>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/BMC/Intel-BMC/linux.git/'/>
<updated>2016-01-31T19:25:51+00:00</updated>
<entry>
<title>bridge: fix lockdep addr_list_lock false positive splat</title>
<updated>2016-01-31T19:25:51+00:00</updated>
<author>
<name>Nikolay Aleksandrov</name>
<email>nikolay@cumulusnetworks.com</email>
</author>
<published>2016-01-15T18:03:54+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/BMC/Intel-BMC/linux.git/commit/?id=58aae14465186637a2f8b55440faf3c1488e6dfe'/>
<id>urn:sha1:58aae14465186637a2f8b55440faf3c1488e6dfe</id>
<content type='text'>
[ Upstream commit c6894dec8ea9ae05747124dce98b3b5c2e69b168 ]

After promisc mode management was introduced a bridge device could do
dev_set_promiscuity from its ndo_change_rx_flags() callback which in
turn can be called after the bridge's addr_list_lock has been taken
(e.g. by dev_uc_add). This causes a false positive lockdep splat because
the port interfaces' addr_list_lock is taken when br_manage_promisc()
runs after the bridge's addr list lock was already taken.
To remove the false positive introduce a custom bridge addr_list_lock
class and set it on bridge init.
A simple way to reproduce this is with the following:
$ brctl addbr br0
$ ip l add l br0 br0.100 type vlan id 100
$ ip l set br0 up
$ ip l set br0.100 up
$ echo 1 &gt; /sys/class/net/br0/bridge/vlan_filtering
$ brctl addif br0 eth0
Splat:
[   43.684325] =============================================
[   43.684485] [ INFO: possible recursive locking detected ]
[   43.684636] 4.4.0-rc8+ #54 Not tainted
[   43.684755] ---------------------------------------------
[   43.684906] brctl/1187 is trying to acquire lock:
[   43.685047]  (_xmit_ETHER){+.....}, at: [&lt;ffffffff8150169e&gt;] dev_set_rx_mode+0x1e/0x40
[   43.685460]  but task is already holding lock:
[   43.685618]  (_xmit_ETHER){+.....}, at: [&lt;ffffffff815072a7&gt;] dev_uc_add+0x27/0x80
[   43.686015]  other info that might help us debug this:
[   43.686316]  Possible unsafe locking scenario:

[   43.686743]        CPU0
[   43.686967]        ----
[   43.687197]   lock(_xmit_ETHER);
[   43.687544]   lock(_xmit_ETHER);
[   43.687886] *** DEADLOCK ***

[   43.688438]  May be due to missing lock nesting notation

[   43.688882] 2 locks held by brctl/1187:
[   43.689134]  #0:  (rtnl_mutex){+.+.+.}, at: [&lt;ffffffff81510317&gt;] rtnl_lock+0x17/0x20
[   43.689852]  #1:  (_xmit_ETHER){+.....}, at: [&lt;ffffffff815072a7&gt;] dev_uc_add+0x27/0x80
[   43.690575] stack backtrace:
[   43.690970] CPU: 0 PID: 1187 Comm: brctl Not tainted 4.4.0-rc8+ #54
[   43.691270] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.8.1-20150318_183358- 04/01/2014
[   43.691770]  ffffffff826a25c0 ffff8800369fb8e0 ffffffff81360ceb ffffffff826a25c0
[   43.692425]  ffff8800369fb9b8 ffffffff810d0466 ffff8800369fb968 ffffffff81537139
[   43.693071]  ffff88003a08c880 0000000000000000 00000000ffffffff 0000000002080020
[   43.693709] Call Trace:
[   43.693931]  [&lt;ffffffff81360ceb&gt;] dump_stack+0x4b/0x70
[   43.694199]  [&lt;ffffffff810d0466&gt;] __lock_acquire+0x1e46/0x1e90
[   43.694483]  [&lt;ffffffff81537139&gt;] ? netlink_broadcast_filtered+0x139/0x3e0
[   43.694789]  [&lt;ffffffff8153b5da&gt;] ? nlmsg_notify+0x5a/0xc0
[   43.695064]  [&lt;ffffffff810d10f5&gt;] lock_acquire+0xe5/0x1f0
[   43.695340]  [&lt;ffffffff8150169e&gt;] ? dev_set_rx_mode+0x1e/0x40
[   43.695623]  [&lt;ffffffff815edea5&gt;] _raw_spin_lock_bh+0x45/0x80
[   43.695901]  [&lt;ffffffff8150169e&gt;] ? dev_set_rx_mode+0x1e/0x40
[   43.696180]  [&lt;ffffffff8150169e&gt;] dev_set_rx_mode+0x1e/0x40
[   43.696460]  [&lt;ffffffff8150189c&gt;] dev_set_promiscuity+0x3c/0x50
[   43.696750]  [&lt;ffffffffa0586845&gt;] br_port_set_promisc+0x25/0x50 [bridge]
[   43.697052]  [&lt;ffffffffa05869aa&gt;] br_manage_promisc+0x8a/0xe0 [bridge]
[   43.697348]  [&lt;ffffffffa05826ee&gt;] br_dev_change_rx_flags+0x1e/0x20 [bridge]
[   43.697655]  [&lt;ffffffff81501532&gt;] __dev_set_promiscuity+0x132/0x1f0
[   43.697943]  [&lt;ffffffff81501672&gt;] __dev_set_rx_mode+0x82/0x90
[   43.698223]  [&lt;ffffffff815072de&gt;] dev_uc_add+0x5e/0x80
[   43.698498]  [&lt;ffffffffa05b3c62&gt;] vlan_device_event+0x542/0x650 [8021q]
[   43.698798]  [&lt;ffffffff8109886d&gt;] notifier_call_chain+0x5d/0x80
[   43.699083]  [&lt;ffffffff810988b6&gt;] raw_notifier_call_chain+0x16/0x20
[   43.699374]  [&lt;ffffffff814f456e&gt;] call_netdevice_notifiers_info+0x6e/0x80
[   43.699678]  [&lt;ffffffff814f4596&gt;] call_netdevice_notifiers+0x16/0x20
[   43.699973]  [&lt;ffffffffa05872be&gt;] br_add_if+0x47e/0x4c0 [bridge]
[   43.700259]  [&lt;ffffffffa058801e&gt;] add_del_if+0x6e/0x80 [bridge]
[   43.700548]  [&lt;ffffffffa0588b5f&gt;] br_dev_ioctl+0xaf/0xc0 [bridge]
[   43.700836]  [&lt;ffffffff8151a7ac&gt;] dev_ifsioc+0x30c/0x3c0
[   43.701106]  [&lt;ffffffff8151aac9&gt;] dev_ioctl+0xf9/0x6f0
[   43.701379]  [&lt;ffffffff81254345&gt;] ? mntput_no_expire+0x5/0x450
[   43.701665]  [&lt;ffffffff812543ee&gt;] ? mntput_no_expire+0xae/0x450
[   43.701947]  [&lt;ffffffff814d7b02&gt;] sock_do_ioctl+0x42/0x50
[   43.702219]  [&lt;ffffffff814d8175&gt;] sock_ioctl+0x1e5/0x290
[   43.702500]  [&lt;ffffffff81242d0b&gt;] do_vfs_ioctl+0x2cb/0x5c0
[   43.702771]  [&lt;ffffffff81243079&gt;] SyS_ioctl+0x79/0x90
[   43.703033]  [&lt;ffffffff815eebb6&gt;] entry_SYSCALL_64_fastpath+0x16/0x7a

CC: Vlad Yasevich &lt;vyasevic@redhat.com&gt;
CC: Stephen Hemminger &lt;stephen@networkplumber.org&gt;
CC: Bridge list &lt;bridge@lists.linux-foundation.org&gt;
CC: Andy Gospodarek &lt;gospo@cumulusnetworks.com&gt;
CC: Roopa Prabhu &lt;roopa@cumulusnetworks.com&gt;
Fixes: 2796d0c648c9 ("bridge: Automatically manage port promiscuous mode.")
Reported-by: Andy Gospodarek &lt;gospo@cumulusnetworks.com&gt;
Signed-off-by: Nikolay Aleksandrov &lt;nikolay@cumulusnetworks.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>net: bridge: convert to using IFF_NO_QUEUE</title>
<updated>2015-08-18T18:55:06+00:00</updated>
<author>
<name>Phil Sutter</name>
<email>phil@nwl.cc</email>
</author>
<published>2015-08-18T08:30:37+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/BMC/Intel-BMC/linux.git/commit/?id=ccecb2a47ceb0fc59b23b966cd63b5f19315b2a2'/>
<id>urn:sha1:ccecb2a47ceb0fc59b23b966cd63b5f19315b2a2</id>
<content type='text'>
Signed-off-by: Phil Sutter &lt;phil@nwl.cc&gt;
Cc: Stephen Hemminger &lt;stephen@networkplumber.org&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>bridge: Don't segment multiple tagged packets on bridge device</title>
<updated>2015-08-03T21:24:50+00:00</updated>
<author>
<name>Toshiaki Makita</name>
<email>makita.toshiaki@lab.ntt.co.jp</email>
</author>
<published>2015-07-31T06:03:26+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/BMC/Intel-BMC/linux.git/commit/?id=6678053092e808485f4d56dca8705098436495e9'/>
<id>urn:sha1:6678053092e808485f4d56dca8705098436495e9</id>
<content type='text'>
Bridge devices don't need to segment multiple tagged packets since thier
ports can segment them.

Signed-off-by: Toshiaki Makita &lt;makita.toshiaki@lab.ntt.co.jp&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>netfilter: bridge: use rcu hook to resolve br_netfilter dependency</title>
<updated>2015-03-10T14:03:02+00:00</updated>
<author>
<name>Pablo Neira Ayuso</name>
<email>pablo@netfilter.org</email>
</author>
<published>2015-03-10T09:27:18+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/BMC/Intel-BMC/linux.git/commit/?id=1a4ba64d16a42c1b31d52b671accd7f9103e2626'/>
<id>urn:sha1:1a4ba64d16a42c1b31d52b671accd7f9103e2626</id>
<content type='text'>
e5de75b ("netfilter: bridge: move DNAT helper to br_netfilter") results
in the following link problem:

net/bridge/br_device.c:29: undefined reference to `br_nf_prerouting_finish_bridge`

Moreover it creates a hard dependency between br_netfilter and the
bridge core, which is what we've been trying to avoid so far.

Resolve this problem by using a hook structure so we reduce #ifdef
pollution and keep bridge netfilter specific code under br_netfilter.c
which was the original intention.

Reported-by: Simon Horman &lt;simon.horman@netronome.com&gt;
Signed-off-by: Pablo Neira Ayuso &lt;pablo@netfilter.org&gt;
</content>
</entry>
<entry>
<title>netfilter: bridge: move DNAT helper to br_netfilter</title>
<updated>2015-03-09T16:56:07+00:00</updated>
<author>
<name>Pablo Neira Ayuso</name>
<email>pablo@netfilter.org</email>
</author>
<published>2015-03-09T11:30:12+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/BMC/Intel-BMC/linux.git/commit/?id=e5de75bf88858f5b3ab11e2504b86ec059f03102'/>
<id>urn:sha1:e5de75bf88858f5b3ab11e2504b86ec059f03102</id>
<content type='text'>
Only one caller, there is no need to keep this in a header.
Move it to br_netfilter.c where this belongs to.

Based on patch from Florian Westphal.

Signed-off-by: Pablo Neira Ayuso &lt;pablo@netfilter.org&gt;
</content>
</entry>
<entry>
<title>bridge: Add filtering support for default_pvid</title>
<updated>2014-10-06T01:21:37+00:00</updated>
<author>
<name>Vlad Yasevich</name>
<email>vyasevich@gmail.com</email>
</author>
<published>2014-10-03T15:29:18+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/BMC/Intel-BMC/linux.git/commit/?id=5be5a2df40f005ea7fb7e280e87bbbcfcf1c2fc0'/>
<id>urn:sha1:5be5a2df40f005ea7fb7e280e87bbbcfcf1c2fc0</id>
<content type='text'>
Currently when vlan filtering is turned on on the bridge, the bridge
will drop all traffic untill the user configures the filter.  This
isn't very nice for ports that don't care about vlans and just
want untagged traffic.

A concept of a default_pvid was recently introduced.  This patch
adds filtering support for default_pvid.   Now, ports that don't
care about vlans and don't define there own filter will belong
to the VLAN of the default_pvid and continue to receive untagged
traffic.

This filtering can be disabled by setting default_pvid to 0.

Signed-off-by: Vladislav Yasevich &lt;vyasevic@redhat.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>netfilter: bridge: move br_netfilter out of the core</title>
<updated>2014-09-26T16:42:31+00:00</updated>
<author>
<name>Pablo Neira Ayuso</name>
<email>pablo@netfilter.org</email>
</author>
<published>2014-09-18T09:29:03+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/BMC/Intel-BMC/linux.git/commit/?id=34666d467cbf1e2e3c7bb15a63eccfb582cdd71f'/>
<id>urn:sha1:34666d467cbf1e2e3c7bb15a63eccfb582cdd71f</id>
<content type='text'>
Jesper reported that br_netfilter always registers the hooks since
this is part of the bridge core. This harms performance for people that
don't need this.

This patch modularizes br_netfilter so it can be rmmod'ed, thus,
the hooks can be unregistered. I think the bridge netfilter should have
been a separated module since the beginning, Patrick agreed on that.

Note that this is breaking compatibility for users that expect that
bridge netfilter is going to be available after explicitly 'modprobe
bridge' or via automatic load through brctl.

However, the damage can be easily undone by modprobing br_netfilter.
The bridge core also spots a message to provide a clue to people that
didn't notice that this has been deprecated.

On top of that, the plan is that nftables will not rely on this software
layer, but integrate the connection tracking into the bridge layer to
enable stateful filtering and NAT, which is was bridge netfilter users
seem to require.

This patch still keeps the fake_dst_ops in the bridge core, since this
is required by when the bridge port is initialized. So we can safely
modprobe/rmmod br_netfilter anytime.

Signed-off-by: Pablo Neira Ayuso &lt;pablo@netfilter.org&gt;
Acked-by: Florian Westphal &lt;fw@strlen.de&gt;
</content>
</entry>
<entry>
<title>bridge: Prepare for forwarding another bridge group addresses</title>
<updated>2014-06-11T22:22:53+00:00</updated>
<author>
<name>Toshiaki Makita</name>
<email>makita.toshiaki@lab.ntt.co.jp</email>
</author>
<published>2014-06-10T11:59:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/BMC/Intel-BMC/linux.git/commit/?id=f2808d226f4efe15a0ea44697a3525176d6c8eae'/>
<id>urn:sha1:f2808d226f4efe15a0ea44697a3525176d6c8eae</id>
<content type='text'>
If a bridge is an 802.1ad bridge, it must forward another bridge group
addresses (the Nearest Customer Bridge group addresses).
(For details, see IEEE 802.1Q-2011 8.6.3.)

As user might not want group_fwd_mask to be modified by enabling 802.1ad,
introduce a new mask, group_fwd_mask_required, which indicates addresses
the bridge wants to forward. This will be set by enabling 802.1ad.

Signed-off-by: Toshiaki Makita &lt;makita.toshiaki@lab.ntt.co.jp&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>bridge: Prepare for 802.1ad vlan filtering support</title>
<updated>2014-06-11T22:22:53+00:00</updated>
<author>
<name>Toshiaki Makita</name>
<email>makita.toshiaki@lab.ntt.co.jp</email>
</author>
<published>2014-06-10T11:59:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/BMC/Intel-BMC/linux.git/commit/?id=8580e2117c06ac0c97a561219eaab6dab968ea3f'/>
<id>urn:sha1:8580e2117c06ac0c97a561219eaab6dab968ea3f</id>
<content type='text'>
This enables a bridge to have vlan protocol informantion and allows vlan
tag manipulation (retrieve, insert and remove tags) according to the vlan
protocol.

Signed-off-by: Toshiaki Makita &lt;makita.toshiaki@lab.ntt.co.jp&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>bridge: Add 802.1ad tx vlan acceleration</title>
<updated>2014-06-11T22:22:53+00:00</updated>
<author>
<name>Toshiaki Makita</name>
<email>makita.toshiaki@lab.ntt.co.jp</email>
</author>
<published>2014-06-10T11:59:22+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/BMC/Intel-BMC/linux.git/commit/?id=1c5abb6c77a2e79537373143d2c1708e40b9f6ca'/>
<id>urn:sha1:1c5abb6c77a2e79537373143d2c1708e40b9f6ca</id>
<content type='text'>
Bridge device doesn't need to embed S-tag into skb-&gt;data.

Signed-off-by: Toshiaki Makita &lt;makita.toshiaki@lab.ntt.co.jp&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
</feed>
