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