Message ID | 20140603043047.GB22191@verge.net.au |
---|---|
State | RFC, archived |
Delegated to: | David Miller |
Headers | show |
> diff --git a/net/core/dev.c b/net/core/dev.c > index 0355ca5..7c063ac 100644 > --- a/net/core/dev.c > +++ b/net/core/dev.c > @@ -2498,13 +2498,42 @@ static int dev_gso_segment(struct sk_buff *skb, netdev_features_t features) > return 0; > } > > +/* If MPLS offload request, verify we are testing hardware MPLS features > + * instead of standard features for the netdev. > + */ > +#ifdef CONFIG_NET_MPLS_GSO > +static netdev_features_t net_mpls_features(struct sk_buff *skb, > + netdev_features_t features, > + __be16 type) > +{ > + int tmp; this variable seems no longer used. > + > + if (unlikely(type == htons(ETH_P_MPLS_UC) || > + type == htons(ETH_P_MPLS_MC))) why unlikely? otherwise, Acked-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp> YAMAMOTO Takashi -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Tue, Jun 03, 2014 at 01:46:11PM +0900, YAMAMOTO Takashi wrote: > > diff --git a/net/core/dev.c b/net/core/dev.c > > index 0355ca5..7c063ac 100644 > > --- a/net/core/dev.c > > +++ b/net/core/dev.c > > @@ -2498,13 +2498,42 @@ static int dev_gso_segment(struct sk_buff *skb, netdev_features_t features) > > return 0; > > } > > > > +/* If MPLS offload request, verify we are testing hardware MPLS features > > + * instead of standard features for the netdev. > > + */ > > +#ifdef CONFIG_NET_MPLS_GSO > > +static netdev_features_t net_mpls_features(struct sk_buff *skb, > > + netdev_features_t features, > > + __be16 type) > > +{ > > + int tmp; > > this variable seems no longer used. Thanks, I will remove it. > > + > > + if (unlikely(type == htons(ETH_P_MPLS_UC) || > > + type == htons(ETH_P_MPLS_MC))) > > why unlikely? Because packets are not likely to be MPLS (IMHO). I'm happy to remove the unlikely() if you like. > > otherwise, > Acked-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp> > > YAMAMOTO Takashi > -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/net/core/dev.c b/net/core/dev.c index 0355ca5..7c063ac 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -2498,13 +2498,42 @@ static int dev_gso_segment(struct sk_buff *skb, netdev_features_t features) return 0; } +/* If MPLS offload request, verify we are testing hardware MPLS features + * instead of standard features for the netdev. + */ +#ifdef CONFIG_NET_MPLS_GSO +static netdev_features_t net_mpls_features(struct sk_buff *skb, + netdev_features_t features, + __be16 type) +{ + int tmp; + + if (unlikely(type == htons(ETH_P_MPLS_UC) || + type == htons(ETH_P_MPLS_MC))) + features &= skb->dev->mpls_features; + + return features; +} +#else +static netdev_features_t net_mpls_features(struct sk_buff *skb, + netdev_features_t features, + __be16 type) +{ + return features; +} +#endif + static netdev_features_t harmonize_features(struct sk_buff *skb, netdev_features_t features) { int tmp; + __be16 type; + + type = skb_network_protocol(skb, &tmp); + features = net_mpls_features(skb, features, type); if (skb->ip_summed != CHECKSUM_NONE && - !can_checksum_protocol(features, skb_network_protocol(skb, &tmp))) { + !can_checksum_protocol(features, type)) { features &= ~NETIF_F_ALL_CSUM; } else if (illegal_highdma(skb->dev, skb)) { features &= ~NETIF_F_SG;