iwlwifi: mvm: rs: organize and cleanup consts
[cascardo/linux.git] / drivers / net / macvlan.c
index 11d4b35..612e073 100644 (file)
@@ -747,7 +747,7 @@ static struct lock_class_key macvlan_netdev_addr_lock_key;
 
 #define MACVLAN_FEATURES \
        (NETIF_F_SG | NETIF_F_ALL_CSUM | NETIF_F_HIGHDMA | NETIF_F_FRAGLIST | \
-        NETIF_F_GSO | NETIF_F_TSO | NETIF_F_UFO | \
+        NETIF_F_GSO | NETIF_F_TSO | NETIF_F_UFO | NETIF_F_LRO | \
         NETIF_F_TSO_ECN | NETIF_F_TSO6 | NETIF_F_GRO | NETIF_F_RXCSUM | \
         NETIF_F_HW_VLAN_CTAG_FILTER | NETIF_F_HW_VLAN_STAG_FILTER)
 
@@ -784,6 +784,7 @@ static int macvlan_init(struct net_device *dev)
                                  (lowerdev->state & MACVLAN_STATE_MASK);
        dev->features           = lowerdev->features & MACVLAN_FEATURES;
        dev->features           |= ALWAYS_ON_FEATURES;
+       dev->hw_features        |= NETIF_F_LRO;
        dev->vlan_features      = lowerdev->vlan_features & MACVLAN_FEATURES;
        dev->gso_max_size       = lowerdev->gso_max_size;
        dev->iflink             = lowerdev->ifindex;
@@ -873,7 +874,7 @@ static int macvlan_vlan_rx_kill_vid(struct net_device *dev,
 
 static int macvlan_fdb_add(struct ndmsg *ndm, struct nlattr *tb[],
                           struct net_device *dev,
-                          const unsigned char *addr,
+                          const unsigned char *addr, u16 vid,
                           u16 flags)
 {
        struct macvlan_dev *vlan = netdev_priv(dev);
@@ -898,7 +899,7 @@ static int macvlan_fdb_add(struct ndmsg *ndm, struct nlattr *tb[],
 
 static int macvlan_fdb_del(struct ndmsg *ndm, struct nlattr *tb[],
                           struct net_device *dev,
-                          const unsigned char *addr)
+                          const unsigned char *addr, u16 vid)
 {
        struct macvlan_dev *vlan = netdev_priv(dev);
        int err = -EINVAL;
@@ -936,15 +937,15 @@ static netdev_features_t macvlan_fix_features(struct net_device *dev,
                                              netdev_features_t features)
 {
        struct macvlan_dev *vlan = netdev_priv(dev);
+       netdev_features_t lowerdev_features = vlan->lowerdev->features;
        netdev_features_t mask;
 
        features |= NETIF_F_ALL_FOR_ALL;
        features &= (vlan->set_features | ~MACVLAN_FEATURES);
        mask = features;
 
-       features = netdev_increment_features(vlan->lowerdev->features,
-                                            features,
-                                            mask);
+       lowerdev_features &= (features | ~NETIF_F_LRO);
+       features = netdev_increment_features(lowerdev_features, features, mask);
        features |= ALWAYS_ON_FEATURES;
        features &= ~NETIF_F_NETNS_LOCAL;
 
@@ -1056,6 +1057,9 @@ static int macvlan_port_create(struct net_device *dev)
        if (dev->type != ARPHRD_ETHER || dev->flags & IFF_LOOPBACK)
                return -EINVAL;
 
+       if (netif_is_ipvlan_port(dev))
+               return -EBUSY;
+
        port = kzalloc(sizeof(*port), GFP_KERNEL);
        if (port == NULL)
                return -ENOMEM;