]> git.baikalelectronics.ru Git - kernel.git/commit
net: core: Always propagate flag changes to interfaces
authorVlad Yasevich <vyasevic@redhat.com>
Wed, 20 Nov 2013 01:47:15 +0000 (20:47 -0500)
committerDavid S. Miller <davem@davemloft.net>
Wed, 20 Nov 2013 20:29:56 +0000 (15:29 -0500)
commit9b62a2b921f23277613888e5fc6f36102675d3c9
treed94f66715d0853bf9ef742b751454196479d6603
parent16ab44bea60d1c3e4bd1fffbad107630b7849f98
net: core: Always propagate flag changes to interfaces

The following commit:
    66e39cc47ec67f1f9c6110a71587b76378c1a9df
    net: only invoke dev->change_rx_flags when device is UP

tried to fix a problem with VLAN devices and promiscuouse flag setting.
The issue was that VLAN device was setting a flag on an interface that
was down, thus resulting in bad promiscuity count.
This commit blocked flag propagation to any device that is currently
down.

A later commit:
    14095e86cb30231d1b517a8bae3ae7966c31f617
    vlan: Don't propagate flag changes on down interfaces

fixed VLAN code to only propagate flags when the VLAN interface is up,
thus fixing the same issue as above, only localized to VLAN.

The problem we have now is that if we have create a complex stack
involving multiple software devices like bridges, bonds, and vlans,
then it is possible that the flags would not propagate properly to
the physical devices.  A simple examle of the scenario is the
following:

  eth0----> bond0 ----> bridge0 ---> vlan50

If bond0 or eth0 happen to be down at the time bond0 is added to
the bridge, then eth0 will never have promisc mode set which is
currently required for operation as part of the bridge.  As a
result, packets with vlan50 will be dropped by the interface.

The only 2 devices that implement the special flag handling are
VLAN and DSA and they both have required code to prevent incorrect
flag propagation.  As a result we can remove the generic solution
introduced in 66e39cc47ec67f1f9c6110a71587b76378c1a9df and leave
it to the individual devices to decide whether they will block
flag propagation or not.

Reported-by: Stefan Priebe <s.priebe@profihost.ag>
Suggested-by: Veaceslav Falico <vfalico@redhat.com>
Signed-off-by: Vlad Yasevich <vyasevic@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/core/dev.c