• Hubert Sokolowski's avatar
    net: Do not call ndo_dflt_fdb_dump if ndo_fdb_dump is defined · 6cb69742
    Hubert Sokolowski authored
    Add checking whether the call to ndo_dflt_fdb_dump is needed.
    It is not expected to call ndo_dflt_fdb_dump unconditionally
    by some drivers (i.e. qlcnic or macvlan) that defines
    own ndo_fdb_dump. Other drivers define own ndo_fdb_dump
    and don't want ndo_dflt_fdb_dump to be called at all.
    At the same time it is desirable to call the default dump
    function on a bridge device.
    Fix attributes that are passed to dev->netdev_ops->ndo_fdb_dump.
    Add extra checking in br_fdb_dump to avoid duplicate entries
    as now filter_dev can be NULL.
    
    Following tests for filtering have been performed before
    the change and after the patch was applied to make sure
    they are the same and it doesn't break the filtering algorithm.
    
    [root@localhost ~]# cd /root/iproute2-3.18.0/bridge
    [root@localhost bridge]# modprobe dummy
    [root@localhost bridge]# ./bridge fdb add f1:f2:f3:f4:f5:f6 dev dummy0
    [root@localhost bridge]# brctl addbr br0
    [root@localhost bridge]# brctl addif  br0 dummy0
    [root@localhost bridge]# ip link set dev br0 address 02:00:00:12:01:04
    [root@localhost bridge]# # show all
    [root@localhost bridge]# ./bridge fdb show
    33:33:00:00:00:01 dev p2p1 self permanent
    01:00:5e:00:00:01 dev p2p1 self permanent
    33:33:ff:ac:ce:32 dev p2p1 self permanent
    33:33:00:00:02:02 dev p2p1 self permanent
    01:00:5e:00:00:fb dev p2p1 self permanent
    33:33:00:00:00:01 dev p7p1 self permanent
    01:00:5e:00:00:01 dev p7p1 self permanent
    33:33:ff:79:50:53 dev p7p1 self permanent
    33:33:00:00:02:02 dev p7p1 self permanent
    01:00:5e:00:00:fb dev p7p1 self permanent
    f2:46:50:85:6d:d9 dev dummy0 master br0 permanent
    f2:46:50:85:6d:d9 dev dummy0 vlan 1 master br0 permanent
    33:33:00:00:00:01 dev dummy0 self permanent
    f1:f2:f3:f4:f5:f6 dev dummy0 self permanent
    33:33:00:00:00:01 dev br0 self permanent
    02:00:00:12:01:04 dev br0 vlan 1 master br0 permanent
    02:00:00:12:01:04 dev br0 master br0 permanent
    [root@localhost bridge]# # filter by bridge
    [root@localhost bridge]# ./bridge fdb show br br0
    f2:46:50:85:6d:d9 dev dummy0 master br0 permanent
    f2:46:50:85:6d:d9 dev dummy0 vlan 1 master br0 permanent
    33:33:00:00:00:01 dev dummy0 self permanent
    f1:f2:f3:f4:f5:f6 dev dummy0 self permanent
    33:33:00:00:00:01 dev br0 self permanent
    02:00:00:12:01:04 dev br0 vlan 1 master br0 permanent
    02:00:00:12:01:04 dev br0 master br0 permanent
    [root@localhost bridge]# # filter by port
    [root@localhost bridge]# ./bridge fdb show brport dummy0
    f2:46:50:85:6d:d9 master br0 permanent
    f2:46:50:85:6d:d9 vlan 1 master br0 permanent
    33:33:00:00:00:01 self permanent
    f1:f2:f3:f4:f5:f6 self permanent
    [root@localhost bridge]# # filter by port + bridge
    [root@localhost bridge]# ./bridge fdb show br br0 brport dummy0
    f2:46:50:85:6d:d9 master br0 permanent
    f2:46:50:85:6d:d9 vlan 1 master br0 permanent
    33:33:00:00:00:01 self permanent
    f1:f2:f3:f4:f5:f6 self permanent
    [root@localhost bridge]#
    Signed-off-by: default avatarHubert Sokolowski <hubert.sokolowski@intel.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    6cb69742
rtnetlink.c 77.7 KB