Re: [PATCH net-next v5 09/14] ip_tunnel: add drop reasons to the transmit path

From: Ido Schimmel

Date: Sun Oct 04 2026 - 12:11:39 EST


On Wed, Sep 30, 2026 at 09:39:05PM +0300, Anton Danilov wrote:
> @@ -636,6 +641,12 @@ enum skb_drop_reason {
> SKB_DROP_REASON_TUNNEL_OLD_SEQ,
> /** @SKB_DROP_REASON_GRE_CSUM: GRE checksum error */
> SKB_DROP_REASON_GRE_CSUM,
> + /**
> + * @SKB_DROP_REASON_TUNNEL_ENCAP: failed to build the encapsulation
> + * header of a tunnel, e.g. an unknown or unregistered encapsulation
> + * type.
> + */
> + SKB_DROP_REASON_TUNNEL_ENCAP,
> /**
> * @SKB_DROP_REASON_MAX: the maximum of core drop reasons, which
> * shouldn't be used as a real 'reason' - only for tracing code gen

[...]

> @@ -620,8 +623,10 @@ void ip_md_tunnel_xmit(struct sk_buff *skb, struct net_device *dev,
> if (!tunnel_hlen)
> tunnel_hlen = ip_encap_hlen(&tun_info->encap);
>
> - if (ip_tunnel_encap(skb, &tun_info->encap, &proto, &fl4) < 0)
> + if (ip_tunnel_encap(skb, &tun_info->encap, &proto, &fl4) < 0) {
> + reason = SKB_DROP_REASON_TUNNEL_ENCAP;

This will also cover the -ENOMEM from the callbacks, where
SKB_DROP_REASON_NOMEM is more appropriate. Better to change
ip_tunnel_encap() to return the appropriate drop reason like you did
with gre_parse_header().

> goto tx_error;
> + }
>
> use_cache = ip_tunnel_dst_cache_usable(skb, tun_info);
> if (use_cache)