net: vxlan: use kfree_skb_reason() in vxlan_xmit()
authorMenglong Dong <menglong8.dong@gmail.com>
Wed, 9 Oct 2024 02:28:26 +0000 (10:28 +0800)
committerDavid S. Miller <davem@davemloft.net>
Sun, 13 Oct 2024 10:33:09 +0000 (11:33 +0100)
Replace kfree_skb() with kfree_skb_reason() in vxlan_xmit(). Following
new skb drop reasons are introduced for vxlan:

/* no remote found for xmit */
SKB_DROP_REASON_VXLAN_NO_REMOTE
/* packet without necessary metadata reached a device which is
 * in "external" mode
 */
SKB_DROP_REASON_TUNNEL_TXINFO

Signed-off-by: Menglong Dong <dongml2@chinatelecom.cn>
Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/vxlan/vxlan_core.c
include/net/dropreason-core.h

index b4f9f23797de3f9720e6a25c1d2fa6700dc09a6c..649b4ea5c362f698dba19f08831eb18fd4edc1a2 100644 (file)
@@ -2730,7 +2730,7 @@ static netdev_tx_t vxlan_xmit(struct sk_buff *skb, struct net_device *dev)
                        if (info && info->mode & IP_TUNNEL_INFO_TX)
                                vxlan_xmit_one(skb, dev, vni, NULL, false);
                        else
-                               kfree_skb(skb);
+                               kfree_skb_reason(skb, SKB_DROP_REASON_TUNNEL_TXINFO);
                        return NETDEV_TX_OK;
                }
        }
@@ -2793,7 +2793,7 @@ static netdev_tx_t vxlan_xmit(struct sk_buff *skb, struct net_device *dev)
                        dev_core_stats_tx_dropped_inc(dev);
                        vxlan_vnifilter_count(vxlan, vni, NULL,
                                              VXLAN_VNI_STATS_TX_DROPS, 0);
-                       kfree_skb(skb);
+                       kfree_skb_reason(skb, SKB_DROP_REASON_VXLAN_NO_REMOTE);
                        return NETDEV_TX_OK;
                }
        }
@@ -2816,7 +2816,7 @@ static netdev_tx_t vxlan_xmit(struct sk_buff *skb, struct net_device *dev)
                if (fdst)
                        vxlan_xmit_one(skb, dev, vni, fdst, did_rsc);
                else
-                       kfree_skb(skb);
+                       kfree_skb_reason(skb, SKB_DROP_REASON_VXLAN_NO_REMOTE);
        }
 
        return NETDEV_TX_OK;
index fbf92d442c1b261b730fb6a4b2087903982d2b79..d59bb96c5a02c63c20cf24e6174e82dd787f4b7e 100644 (file)
@@ -96,7 +96,9 @@
        FN(VXLAN_VNI_NOT_FOUND)         \
        FN(MAC_INVALID_SOURCE)          \
        FN(VXLAN_ENTRY_EXISTS)          \
+       FN(VXLAN_NO_REMOTE)             \
        FN(IP_TUNNEL_ECN)               \
+       FN(TUNNEL_TXINFO)               \
        FN(LOCAL_MAC)                   \
        FNe(MAX)
 
@@ -439,11 +441,18 @@ enum skb_drop_reason {
         * entry or an entry pointing to a nexthop.
         */
        SKB_DROP_REASON_VXLAN_ENTRY_EXISTS,
+       /** @SKB_DROP_REASON_VXLAN_NO_REMOTE: no remote found for xmit */
+       SKB_DROP_REASON_VXLAN_NO_REMOTE,
        /**
         * @SKB_DROP_REASON_IP_TUNNEL_ECN: skb is dropped according to
         * RFC 6040 4.2, see __INET_ECN_decapsulate() for detail.
         */
        SKB_DROP_REASON_IP_TUNNEL_ECN,
+       /**
+        * @SKB_DROP_REASON_TUNNEL_TXINFO: packet without necessary metadata
+        * reached a device which is in "external" mode.
+        */
+       SKB_DROP_REASON_TUNNEL_TXINFO,
        /**
         * @SKB_DROP_REASON_LOCAL_MAC: the source MAC address is equal to
         * the MAC address of the local netdev.