|
@@ -398,7 +398,10 @@ static int ipgre_rcv(struct sk_buff *skb, const struct tnl_ptk_info *tpi)
|
|
iph->saddr, iph->daddr, tpi->key);
|
|
iph->saddr, iph->daddr, tpi->key);
|
|
|
|
|
|
if (tunnel) {
|
|
if (tunnel) {
|
|
- skb_pop_mac_header(skb);
|
|
|
|
|
|
+ if (tunnel->dev->type != ARPHRD_NONE)
|
|
|
|
+ skb_pop_mac_header(skb);
|
|
|
|
+ else
|
|
|
|
+ skb_reset_mac_header(skb);
|
|
if (tunnel->collect_md) {
|
|
if (tunnel->collect_md) {
|
|
__be16 flags;
|
|
__be16 flags;
|
|
__be64 tun_id;
|
|
__be64 tun_id;
|
|
@@ -1031,6 +1034,8 @@ static void ipgre_netlink_parms(struct net_device *dev,
|
|
struct ip_tunnel *t = netdev_priv(dev);
|
|
struct ip_tunnel *t = netdev_priv(dev);
|
|
|
|
|
|
t->collect_md = true;
|
|
t->collect_md = true;
|
|
|
|
+ if (dev->type == ARPHRD_IPGRE)
|
|
|
|
+ dev->type = ARPHRD_NONE;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|