#include <linux/rbtree.h>
 #include <net/net_trackers.h>
 #include <net/net_debug.h>
+#include <net/dropreason.h>
 
 struct netpoll_info;
 struct device;
 
 int netif_get_num_default_rss_queues(void);
 
-enum skb_free_reason {
-       SKB_REASON_CONSUMED,
-       SKB_REASON_DROPPED,
-};
-
-void __dev_kfree_skb_irq(struct sk_buff *skb, enum skb_free_reason reason);
-void __dev_kfree_skb_any(struct sk_buff *skb, enum skb_free_reason reason);
+void dev_kfree_skb_irq_reason(struct sk_buff *skb, enum skb_drop_reason reason);
+void dev_kfree_skb_any_reason(struct sk_buff *skb, enum skb_drop_reason reason);
 
 /*
  * It is not allowed to call kfree_skb() or consume_skb() from hardware
  */
 static inline void dev_kfree_skb_irq(struct sk_buff *skb)
 {
-       __dev_kfree_skb_irq(skb, SKB_REASON_DROPPED);
+       dev_kfree_skb_irq_reason(skb, SKB_DROP_REASON_NOT_SPECIFIED);
 }
 
 static inline void dev_consume_skb_irq(struct sk_buff *skb)
 {
-       __dev_kfree_skb_irq(skb, SKB_REASON_CONSUMED);
+       dev_kfree_skb_irq_reason(skb, SKB_CONSUMED);
 }
 
 static inline void dev_kfree_skb_any(struct sk_buff *skb)
 {
-       __dev_kfree_skb_any(skb, SKB_REASON_DROPPED);
+       dev_kfree_skb_any_reason(skb, SKB_DROP_REASON_NOT_SPECIFIED);
 }
 
 static inline void dev_consume_skb_any(struct sk_buff *skb)
 {
-       __dev_kfree_skb_any(skb, SKB_REASON_CONSUMED);
+       dev_kfree_skb_any_reason(skb, SKB_CONSUMED);
 }
 
 u32 bpf_prog_run_generic_xdp(struct sk_buff *skb, struct xdp_buff *xdp,
 
 EXPORT_SYMBOL(__netif_schedule);
 
 struct dev_kfree_skb_cb {
-       enum skb_free_reason reason;
+       enum skb_drop_reason reason;
 };
 
 static struct dev_kfree_skb_cb *get_kfree_skb_cb(const struct sk_buff *skb)
 }
 EXPORT_SYMBOL(netif_tx_wake_queue);
 
-void __dev_kfree_skb_irq(struct sk_buff *skb, enum skb_free_reason reason)
+void dev_kfree_skb_irq_reason(struct sk_buff *skb, enum skb_drop_reason reason)
 {
        unsigned long flags;
 
        raise_softirq_irqoff(NET_TX_SOFTIRQ);
        local_irq_restore(flags);
 }
-EXPORT_SYMBOL(__dev_kfree_skb_irq);
+EXPORT_SYMBOL(dev_kfree_skb_irq_reason);
 
-void __dev_kfree_skb_any(struct sk_buff *skb, enum skb_free_reason reason)
+void dev_kfree_skb_any_reason(struct sk_buff *skb, enum skb_drop_reason reason)
 {
        if (in_hardirq() || irqs_disabled())
-               __dev_kfree_skb_irq(skb, reason);
-       else if (unlikely(reason == SKB_REASON_DROPPED))
-               kfree_skb(skb);
+               dev_kfree_skb_irq_reason(skb, reason);
        else
-               consume_skb(skb);
+               kfree_skb_reason(skb, reason);
 }
-EXPORT_SYMBOL(__dev_kfree_skb_any);
+EXPORT_SYMBOL(dev_kfree_skb_any_reason);
 
 
 /**
                        clist = clist->next;
 
                        WARN_ON(refcount_read(&skb->users));
-                       if (likely(get_kfree_skb_cb(skb)->reason == SKB_REASON_CONSUMED))
+                       if (likely(get_kfree_skb_cb(skb)->reason == SKB_CONSUMED))
                                trace_consume_skb(skb, net_tx_action);
                        else
                                trace_kfree_skb(skb, net_tx_action,
-                                               SKB_DROP_REASON_NOT_SPECIFIED);
+                                               get_kfree_skb_cb(skb)->reason);
 
                        if (skb->fclone != SKB_FCLONE_UNAVAILABLE)
                                __kfree_skb(skb);