aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/macvlan.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/macvlan.c')
-rw-r--r--drivers/net/macvlan.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c
index 94198366de7f..09ababe54a5b 100644
--- a/drivers/net/macvlan.c
+++ b/drivers/net/macvlan.c
@@ -689,8 +689,19 @@ static netdev_features_t macvlan_fix_features(struct net_device *dev,
689 netdev_features_t features) 689 netdev_features_t features)
690{ 690{
691 struct macvlan_dev *vlan = netdev_priv(dev); 691 struct macvlan_dev *vlan = netdev_priv(dev);
692 netdev_features_t mask;
692 693
693 return features & (vlan->set_features | ~MACVLAN_FEATURES); 694 features |= NETIF_F_ALL_FOR_ALL;
695 features &= (vlan->set_features | ~MACVLAN_FEATURES);
696 mask = features;
697
698 features = netdev_increment_features(vlan->lowerdev->features,
699 features,
700 mask);
701 if (!vlan->fwd_priv)
702 features |= NETIF_F_LLTX;
703
704 return features;
694} 705}
695 706
696static const struct ethtool_ops macvlan_ethtool_ops = { 707static const struct ethtool_ops macvlan_ethtool_ops = {
@@ -1009,9 +1020,8 @@ static int macvlan_device_event(struct notifier_block *unused,
1009 break; 1020 break;
1010 case NETDEV_FEAT_CHANGE: 1021 case NETDEV_FEAT_CHANGE:
1011 list_for_each_entry(vlan, &port->vlans, list) { 1022 list_for_each_entry(vlan, &port->vlans, list) {
1012 vlan->dev->features = dev->features & MACVLAN_FEATURES;
1013 vlan->dev->gso_max_size = dev->gso_max_size; 1023 vlan->dev->gso_max_size = dev->gso_max_size;
1014 netdev_features_change(vlan->dev); 1024 netdev_update_features(vlan->dev);
1015 } 1025 }
1016 break; 1026 break;
1017 case NETDEV_UNREGISTER: 1027 case NETDEV_UNREGISTER: