• Florian Westphal's avatar
    macvlan: fix netdev feature propagation from lower device · 797f87f8
    Florian Westphal authored
    There are inconsistencies wrt. feature propagation/inheritance between
    macvlan and the underlying interface.
    
    When a feature is turned off on the real device before a macvlan is
    created on top, these will remain enabled on the macvlan device, whereas
    turning off the feature on the lower device after macvlan creation the
    kernel will propagate the changes to the macvlan.
    
    The second issue is that, when propagating changes from underlying device
    to the macvlan interface, macvlan can erronously lose its NETIF_F_LLTX flag,
    as features are anded with the underlying device.
    
    However, LLTX should be kept since it has no dependencies on physical
    hardware (LLTX is set on macvlan creation regardless of the lower
    device properties, see 8ffab51b
    (macvlan: lockless tx path).
    
    The LLTX flag is now forced regardless of user settings in absence of
    layer2 hw acceleration (a6cc0cfa,
    net: Add layer 2 hardware acceleration operations for macvlan devices).
    
    Use netdev_increment_features to rebuild the feature set on capability
    changes on either the lower device or on the macvlan interface.
    
    As pointed out by Ben Hutchings, use netdev_update_features on
    NETDEV_FEAT_CHANGE event (it calls macvlan_fix_features/netdev_features_change
    if needed).
    Signed-off-by: default avatarFlorian Westphal <fw@strlen.de>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    797f87f8
macvlan.c 27.2 KB