--- zzzz-none-000/linux-4.4.271/net/ipv4/ip_gre.c 2021-06-03 06:22:09.000000000 +0000 +++ hawkeye-5590-750/linux-4.4.271/net/ipv4/ip_gre.c 2023-04-19 10:22:30.000000000 +0000 @@ -637,6 +637,8 @@ if (IS_ERR(skb)) goto out; + skb->skb_iif = dev->ifindex; + __gre_xmit(skb, dev, tnl_params, skb->protocol); return NETDEV_TX_OK; @@ -664,6 +666,8 @@ if (skb_cow_head(skb, dev->needed_headroom)) goto free_skb; + skb->skb_iif = dev->ifindex; + __gre_xmit(skb, dev, &tunnel->parms.iph, htons(ETH_P_TEB)); return NETDEV_TX_OK; @@ -707,7 +711,6 @@ It allows to construct virtual multiprotocol broadcast "LAN" over the Internet, provided multicast routing is tuned. - I have no idea was this bicycle invented before me, so that I had to set ARPHRD_IPGRE to a random value. I have an impression, that Cisco could make something similar, @@ -1081,7 +1084,8 @@ { ether_setup(dev); dev->netdev_ops = &gre_tap_netdev_ops; - dev->priv_flags |= IFF_LIVE_ADDR_CHANGE; + dev->priv_flags |= IFF_LIVE_ADDR_CHANGE; + dev->priv_flags_ext |= IFF_EXT_GRE_V4_TAP; ip_tunnel_setup(dev, gre_tap_net_id); }