|
@@ -223,31 +223,6 @@ static int ipgre_rcv(struct sk_buff *skb, const struct tnl_ptk_info *tpi)
|
|
|
return PACKET_REJECT;
|
|
|
}
|
|
|
|
|
|
-static struct sk_buff *handle_offloads(struct ip_tunnel *tunnel, struct sk_buff *skb)
|
|
|
-{
|
|
|
- int err;
|
|
|
-
|
|
|
- if (skb_is_gso(skb)) {
|
|
|
- err = skb_unclone(skb, GFP_ATOMIC);
|
|
|
- if (unlikely(err))
|
|
|
- goto error;
|
|
|
- skb_shinfo(skb)->gso_type |= SKB_GSO_GRE;
|
|
|
- return skb;
|
|
|
- } else if (skb->ip_summed == CHECKSUM_PARTIAL &&
|
|
|
- tunnel->parms.o_flags&TUNNEL_CSUM) {
|
|
|
- err = skb_checksum_help(skb);
|
|
|
- if (unlikely(err))
|
|
|
- goto error;
|
|
|
- } else if (skb->ip_summed != CHECKSUM_PARTIAL)
|
|
|
- skb->ip_summed = CHECKSUM_NONE;
|
|
|
-
|
|
|
- return skb;
|
|
|
-
|
|
|
-error:
|
|
|
- kfree_skb(skb);
|
|
|
- return ERR_PTR(err);
|
|
|
-}
|
|
|
-
|
|
|
static void __gre_xmit(struct sk_buff *skb, struct net_device *dev,
|
|
|
const struct iphdr *tnl_params,
|
|
|
__be16 proto)
|
|
@@ -255,11 +230,6 @@ static void __gre_xmit(struct sk_buff *skb, struct net_device *dev,
|
|
|
struct ip_tunnel *tunnel = netdev_priv(dev);
|
|
|
struct tnl_ptk_info tpi;
|
|
|
|
|
|
- if (likely(!skb->encapsulation)) {
|
|
|
- skb_reset_inner_headers(skb);
|
|
|
- skb->encapsulation = 1;
|
|
|
- }
|
|
|
-
|
|
|
tpi.flags = tunnel->parms.o_flags;
|
|
|
tpi.proto = proto;
|
|
|
tpi.key = tunnel->parms.o_key;
|
|
@@ -279,7 +249,7 @@ static netdev_tx_t ipgre_xmit(struct sk_buff *skb,
|
|
|
struct ip_tunnel *tunnel = netdev_priv(dev);
|
|
|
const struct iphdr *tnl_params;
|
|
|
|
|
|
- skb = handle_offloads(tunnel, skb);
|
|
|
+ skb = gre_handle_offloads(skb, !!(tunnel->parms.o_flags&TUNNEL_CSUM));
|
|
|
if (IS_ERR(skb))
|
|
|
goto out;
|
|
|
|
|
@@ -318,7 +288,7 @@ static netdev_tx_t gre_tap_xmit(struct sk_buff *skb,
|
|
|
{
|
|
|
struct ip_tunnel *tunnel = netdev_priv(dev);
|
|
|
|
|
|
- skb = handle_offloads(tunnel, skb);
|
|
|
+ skb = gre_handle_offloads(skb, !!(tunnel->parms.o_flags&TUNNEL_CSUM));
|
|
|
if (IS_ERR(skb))
|
|
|
goto out;
|
|
|
|