|
@@ -2587,13 +2587,19 @@ netdev_features_t netif_skb_features(struct sk_buff *skb)
|
|
|
return harmonize_features(skb, features);
|
|
|
}
|
|
|
|
|
|
- features &= (skb->dev->vlan_features | NETIF_F_HW_VLAN_CTAG_TX |
|
|
|
- NETIF_F_HW_VLAN_STAG_TX);
|
|
|
+ features = netdev_intersect_features(features,
|
|
|
+ skb->dev->vlan_features |
|
|
|
+ NETIF_F_HW_VLAN_CTAG_TX |
|
|
|
+ NETIF_F_HW_VLAN_STAG_TX);
|
|
|
|
|
|
if (protocol == htons(ETH_P_8021Q) || protocol == htons(ETH_P_8021AD))
|
|
|
- features &= NETIF_F_SG | NETIF_F_HIGHDMA | NETIF_F_FRAGLIST |
|
|
|
- NETIF_F_GEN_CSUM | NETIF_F_HW_VLAN_CTAG_TX |
|
|
|
- NETIF_F_HW_VLAN_STAG_TX;
|
|
|
+ features = netdev_intersect_features(features,
|
|
|
+ NETIF_F_SG |
|
|
|
+ NETIF_F_HIGHDMA |
|
|
|
+ NETIF_F_FRAGLIST |
|
|
|
+ NETIF_F_GEN_CSUM |
|
|
|
+ NETIF_F_HW_VLAN_CTAG_TX |
|
|
|
+ NETIF_F_HW_VLAN_STAG_TX);
|
|
|
|
|
|
return harmonize_features(skb, features);
|
|
|
}
|