xref: /linux/include/uapi/linux/net_dropmon.h (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
16f52b16cSGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2607ca46eSDavid Howells #ifndef __NET_DROPMON_H
3607ca46eSDavid Howells #define __NET_DROPMON_H
4607ca46eSDavid Howells 
5607ca46eSDavid Howells #include <linux/types.h>
6607ca46eSDavid Howells #include <linux/netlink.h>
7607ca46eSDavid Howells 
8607ca46eSDavid Howells struct net_dm_drop_point {
9607ca46eSDavid Howells 	__u8 pc[8];
10607ca46eSDavid Howells 	__u32 count;
11607ca46eSDavid Howells };
12607ca46eSDavid Howells 
13607ca46eSDavid Howells #define is_drop_point_hw(x) do {\
14607ca46eSDavid Howells 	int ____i, ____j;\
15607ca46eSDavid Howells 	for (____i = 0; ____i < 8; i ____i++)\
16607ca46eSDavid Howells 		____j |= x[____i];\
17607ca46eSDavid Howells 	____j;\
18607ca46eSDavid Howells } while (0)
19607ca46eSDavid Howells 
20607ca46eSDavid Howells #define NET_DM_CFG_VERSION  0
21607ca46eSDavid Howells #define NET_DM_CFG_ALERT_COUNT  1
22607ca46eSDavid Howells #define NET_DM_CFG_ALERT_DELAY 2
23607ca46eSDavid Howells #define NET_DM_CFG_MAX 3
24607ca46eSDavid Howells 
25607ca46eSDavid Howells struct net_dm_config_entry {
26607ca46eSDavid Howells 	__u32 type;
27607ca46eSDavid Howells 	__u64 data __attribute__((aligned(8)));
28607ca46eSDavid Howells };
29607ca46eSDavid Howells 
30607ca46eSDavid Howells struct net_dm_config_msg {
31607ca46eSDavid Howells 	__u32 entries;
32*94dfc73eSGustavo A. R. Silva 	struct net_dm_config_entry options[];
33607ca46eSDavid Howells };
34607ca46eSDavid Howells 
35607ca46eSDavid Howells struct net_dm_alert_msg {
36607ca46eSDavid Howells 	__u32 entries;
37*94dfc73eSGustavo A. R. Silva 	struct net_dm_drop_point points[];
38607ca46eSDavid Howells };
39607ca46eSDavid Howells 
40607ca46eSDavid Howells struct net_dm_user_msg {
41607ca46eSDavid Howells 	union {
42607ca46eSDavid Howells 		struct net_dm_config_msg user;
43607ca46eSDavid Howells 		struct net_dm_alert_msg alert;
44607ca46eSDavid Howells 	} u;
45607ca46eSDavid Howells };
46607ca46eSDavid Howells 
47607ca46eSDavid Howells 
48607ca46eSDavid Howells /* These are the netlink message types for this protocol */
49607ca46eSDavid Howells 
50607ca46eSDavid Howells enum {
51607ca46eSDavid Howells 	NET_DM_CMD_UNSPEC = 0,
52607ca46eSDavid Howells 	NET_DM_CMD_ALERT,
53607ca46eSDavid Howells 	NET_DM_CMD_CONFIG,
54607ca46eSDavid Howells 	NET_DM_CMD_START,
55607ca46eSDavid Howells 	NET_DM_CMD_STOP,
56ca30707dSIdo Schimmel 	NET_DM_CMD_PACKET_ALERT,
57444be061SIdo Schimmel 	NET_DM_CMD_CONFIG_GET,
58444be061SIdo Schimmel 	NET_DM_CMD_CONFIG_NEW,
59e9feb580SIdo Schimmel 	NET_DM_CMD_STATS_GET,
60e9feb580SIdo Schimmel 	NET_DM_CMD_STATS_NEW,
61607ca46eSDavid Howells 	_NET_DM_CMD_MAX,
62607ca46eSDavid Howells };
63607ca46eSDavid Howells 
64607ca46eSDavid Howells #define NET_DM_CMD_MAX (_NET_DM_CMD_MAX - 1)
65607ca46eSDavid Howells 
66607ca46eSDavid Howells /*
67607ca46eSDavid Howells  * Our group identifiers
68607ca46eSDavid Howells  */
69607ca46eSDavid Howells #define NET_DM_GRP_ALERT 1
7028315f79SIdo Schimmel 
71ca30707dSIdo Schimmel enum net_dm_attr {
72ca30707dSIdo Schimmel 	NET_DM_ATTR_UNSPEC,
73ca30707dSIdo Schimmel 
74ca30707dSIdo Schimmel 	NET_DM_ATTR_ALERT_MODE,			/* u8 */
75ca30707dSIdo Schimmel 	NET_DM_ATTR_PC,				/* u64 */
76ca30707dSIdo Schimmel 	NET_DM_ATTR_SYMBOL,			/* string */
77ca30707dSIdo Schimmel 	NET_DM_ATTR_IN_PORT,			/* nested */
78bd1200b7SIdo Schimmel 	NET_DM_ATTR_TIMESTAMP,			/* u64 */
79ca30707dSIdo Schimmel 	NET_DM_ATTR_PROTO,			/* u16 */
80ca30707dSIdo Schimmel 	NET_DM_ATTR_PAYLOAD,			/* binary */
81ca30707dSIdo Schimmel 	NET_DM_ATTR_PAD,
8257986617SIdo Schimmel 	NET_DM_ATTR_TRUNC_LEN,			/* u32 */
8357986617SIdo Schimmel 	NET_DM_ATTR_ORIG_LEN,			/* u32 */
8430328d46SIdo Schimmel 	NET_DM_ATTR_QUEUE_LEN,			/* u32 */
85e9feb580SIdo Schimmel 	NET_DM_ATTR_STATS,			/* nested */
865e58109bSIdo Schimmel 	NET_DM_ATTR_HW_STATS,			/* nested */
875e58109bSIdo Schimmel 	NET_DM_ATTR_ORIGIN,			/* u16 */
885e58109bSIdo Schimmel 	NET_DM_ATTR_HW_TRAP_GROUP_NAME,		/* string */
895e58109bSIdo Schimmel 	NET_DM_ATTR_HW_TRAP_NAME,		/* string */
90d40e1debSIdo Schimmel 	NET_DM_ATTR_HW_ENTRIES,			/* nested */
91d40e1debSIdo Schimmel 	NET_DM_ATTR_HW_ENTRY,			/* nested */
92d40e1debSIdo Schimmel 	NET_DM_ATTR_HW_TRAP_COUNT,		/* u32 */
938e94c3bcSIdo Schimmel 	NET_DM_ATTR_SW_DROPS,			/* flag */
948e94c3bcSIdo Schimmel 	NET_DM_ATTR_HW_DROPS,			/* flag */
95742b8cceSJiri Pirko 	NET_DM_ATTR_FLOW_ACTION_COOKIE,		/* binary */
965cad527dSMenglong Dong 	NET_DM_ATTR_REASON,			/* string */
97ca30707dSIdo Schimmel 
98ca30707dSIdo Schimmel 	__NET_DM_ATTR_MAX,
99ca30707dSIdo Schimmel 	NET_DM_ATTR_MAX = __NET_DM_ATTR_MAX - 1
100ca30707dSIdo Schimmel };
101ca30707dSIdo Schimmel 
10228315f79SIdo Schimmel /**
10328315f79SIdo Schimmel  * enum net_dm_alert_mode - Alert mode.
10428315f79SIdo Schimmel  * @NET_DM_ALERT_MODE_SUMMARY: A summary of recent drops is sent to user space.
105ca30707dSIdo Schimmel  * @NET_DM_ALERT_MODE_PACKET: Each dropped packet is sent to user space along
106ca30707dSIdo Schimmel  *                            with metadata.
10728315f79SIdo Schimmel  */
10828315f79SIdo Schimmel enum net_dm_alert_mode {
10928315f79SIdo Schimmel 	NET_DM_ALERT_MODE_SUMMARY,
110ca30707dSIdo Schimmel 	NET_DM_ALERT_MODE_PACKET,
111ca30707dSIdo Schimmel };
112ca30707dSIdo Schimmel 
113ca30707dSIdo Schimmel enum {
114ca30707dSIdo Schimmel 	NET_DM_ATTR_PORT_NETDEV_IFINDEX,	/* u32 */
1155e58109bSIdo Schimmel 	NET_DM_ATTR_PORT_NETDEV_NAME,		/* string */
116ca30707dSIdo Schimmel 
117ca30707dSIdo Schimmel 	__NET_DM_ATTR_PORT_MAX,
118ca30707dSIdo Schimmel 	NET_DM_ATTR_PORT_MAX = __NET_DM_ATTR_PORT_MAX - 1
11928315f79SIdo Schimmel };
12028315f79SIdo Schimmel 
121e9feb580SIdo Schimmel enum {
122e9feb580SIdo Schimmel 	NET_DM_ATTR_STATS_DROPPED,		/* u64 */
123e9feb580SIdo Schimmel 
124e9feb580SIdo Schimmel 	__NET_DM_ATTR_STATS_MAX,
125e9feb580SIdo Schimmel 	NET_DM_ATTR_STATS_MAX = __NET_DM_ATTR_STATS_MAX - 1
126e9feb580SIdo Schimmel };
127e9feb580SIdo Schimmel 
1285e58109bSIdo Schimmel enum net_dm_origin {
1295e58109bSIdo Schimmel 	NET_DM_ORIGIN_SW,
1305e58109bSIdo Schimmel 	NET_DM_ORIGIN_HW,
1315e58109bSIdo Schimmel };
1325e58109bSIdo Schimmel 
133607ca46eSDavid Howells #endif
134