|
@@ -2239,6 +2239,8 @@ unsigned long netdev_fix_features(unsigned long features, const char *name);
|
|
|
void netif_stacked_transfer_operstate(const struct net_device *rootdev,
|
|
|
struct net_device *dev);
|
|
|
|
|
|
+int netif_get_vlan_features(struct sk_buff *skb, struct net_device *dev);
|
|
|
+
|
|
|
static inline int net_gso_ok(int features, int gso_type)
|
|
|
{
|
|
|
int feature = gso_type << NETIF_F_GSO_SHIFT;
|
|
@@ -2254,10 +2256,7 @@ static inline int skb_gso_ok(struct sk_buff *skb, int features)
|
|
|
static inline int netif_needs_gso(struct net_device *dev, struct sk_buff *skb)
|
|
|
{
|
|
|
if (skb_is_gso(skb)) {
|
|
|
- int features = dev->features;
|
|
|
-
|
|
|
- if (skb->protocol == htons(ETH_P_8021Q) || skb->vlan_tci)
|
|
|
- features &= dev->vlan_features;
|
|
|
+ int features = netif_get_vlan_features(skb, dev);
|
|
|
|
|
|
return (!skb_gso_ok(skb, features) ||
|
|
|
unlikely(skb->ip_summed != CHECKSUM_PARTIAL));
|