/* SPDX-License-Identifier: GPL-2.0-only */

#ifndef _NET_DROP_MONITOR_H_
#define _NET_DROP_MONITOR_H_

#include <linux/ktime.h>
#include <linux/netdevice.h>
#include <linux/skbuff.h>
#include <net/flow_offload.h>

/**
 * struct net_dm_hw_metadata - Hardware-supplied packet metadata.
 * @trap_group_name: Hardware trap group name.
 * @trap_name: Hardware trap name.
 * @input_dev: Input netdevice.
 * @fa_cookie: Flow action user cookie.
 */
struct net_dm_hw_metadata {
	const char *trap_group_name;
	const char *trap_name;
	struct net_device *input_dev;
	const struct flow_action_cookie *fa_cookie;
};

#if IS_REACHABLE(CONFIG_NET_DROP_MONITOR)
void net_dm_hw_report(struct sk_buff *skb,
		      const struct net_dm_hw_metadata *hw_metadata);
#else
static inline void
net_dm_hw_report(struct sk_buff *skb,
		 const struct net_dm_hw_metadata *hw_metadata)
{
}
#endif

#endif /* _NET_DROP_MONITOR_H_ */
