github.com/google/syzkaller@v0.0.0-20251211124644-a066d2bc4b02/sys/linux/socket_netlink_generic_devlink.txt (about) 1 # Copyright 2019 syzkaller project authors. All rights reserved. 2 # Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. 3 4 # AF_NETLINK/NETLINK_GENERIC/devlink support. 5 6 include <linux/net.h> 7 include <net/netlink.h> 8 include <uapi/linux/netlink.h> 9 include <uapi/linux/genetlink.h> 10 include <uapi/linux/devlink.h> 11 12 resource genl_devlink_family_id[int16] 13 syz_genetlink_get_family_id$devlink(name ptr[in, string["devlink"]], fd sock_nl_generic) genl_devlink_family_id 14 15 type msghdr_nl_devlink[CMD, POLICY] msghdr_netlink[netlink_msg_t[genl_devlink_family_id, genlmsghdr_t[CMD], POLICY]] 16 17 sendmsg$DEVLINK_CMD_GET(fd sock_nl_generic, msg ptr[in, msghdr_nl_devlink[DEVLINK_CMD_GET, devlink_handle]], f flags[send_flags]) 18 sendmsg$DEVLINK_CMD_RELOAD(fd sock_nl_generic, msg ptr[in, msghdr_nl_devlink[DEVLINK_CMD_RELOAD, devlink_reload_policy]], f flags[send_flags]) 19 sendmsg$DEVLINK_CMD_PORT_GET(fd sock_nl_generic, msg ptr[in, msghdr_nl_devlink[DEVLINK_CMD_PORT_GET, devlink_port_get_policy]], f flags[send_flags]) 20 sendmsg$DEVLINK_CMD_PORT_SET(fd sock_nl_generic, msg ptr[in, msghdr_nl_devlink[DEVLINK_CMD_PORT_SET, devlink_port_set_policy]], f flags[send_flags]) 21 sendmsg$DEVLINK_CMD_PORT_SPLIT(fd sock_nl_generic, msg ptr[in, msghdr_nl_devlink[DEVLINK_CMD_PORT_SPLIT, devlink_port_split_policy]], f flags[send_flags]) 22 sendmsg$DEVLINK_CMD_PORT_UNSPLIT(fd sock_nl_generic, msg ptr[in, msghdr_nl_devlink[DEVLINK_CMD_PORT_UNSPLIT, devlink_port_unsplit_policy]], f flags[send_flags]) 23 sendmsg$DEVLINK_CMD_TRAP_GET(fd sock_nl_generic, msg ptr[in, msghdr_nl_devlink[DEVLINK_CMD_TRAP_GET, devlink_trap_get_policy]], f flags[send_flags]) 24 sendmsg$DEVLINK_CMD_TRAP_SET(fd sock_nl_generic, msg ptr[in, msghdr_nl_devlink[DEVLINK_CMD_TRAP_SET, devlink_trap_set_policy]], f flags[send_flags]) 25 sendmsg$DEVLINK_CMD_TRAP_GROUP_GET(fd sock_nl_generic, msg ptr[in, msghdr_nl_devlink[DEVLINK_CMD_TRAP_GROUP_GET, devlink_trap_group_get_policy]], f flags[send_flags]) 26 sendmsg$DEVLINK_CMD_TRAP_GROUP_SET(fd sock_nl_generic, msg ptr[in, msghdr_nl_devlink[DEVLINK_CMD_TRAP_GROUP_SET, devlink_trap_group_set_policy]], f flags[send_flags]) 27 sendmsg$DEVLINK_CMD_TRAP_POLICER_GET(fd sock_nl_generic, msg ptr[in, msghdr_nl_devlink[DEVLINK_CMD_TRAP_POLICER_GET, devlink_trap_policer_get_policy]], f flags[send_flags]) 28 sendmsg$DEVLINK_CMD_TRAP_POLICER_SET(fd sock_nl_generic, msg ptr[in, msghdr_nl_devlink[DEVLINK_CMD_TRAP_POLICER_SET, devlink_trap_policer_set_policy]], f flags[send_flags]) 29 sendmsg$DEVLINK_CMD_SB_GET(fd sock_nl_generic, msg ptr[in, msghdr_nl_devlink[DEVLINK_CMD_SB_GET, devlink_sb_get_policy]], f flags[send_flags]) 30 sendmsg$DEVLINK_CMD_SB_POOL_GET(fd sock_nl_generic, msg ptr[in, msghdr_nl_devlink[DEVLINK_CMD_SB_POOL_GET, devlink_sb_pool_get_policy]], f flags[send_flags]) 31 sendmsg$DEVLINK_CMD_SB_POOL_SET(fd sock_nl_generic, msg ptr[in, msghdr_nl_devlink[DEVLINK_CMD_SB_POOL_SET, devlink_sb_pool_set_policy]], f flags[send_flags]) 32 sendmsg$DEVLINK_CMD_SB_PORT_POOL_GET(fd sock_nl_generic, msg ptr[in, msghdr_nl_devlink[DEVLINK_CMD_SB_PORT_POOL_GET, devlink_sb_port_pool_get_policy]], f flags[send_flags]) 33 sendmsg$DEVLINK_CMD_SB_PORT_POOL_SET(fd sock_nl_generic, msg ptr[in, msghdr_nl_devlink[DEVLINK_CMD_SB_PORT_POOL_SET, devlink_sb_port_pool_set_policy]], f flags[send_flags]) 34 sendmsg$DEVLINK_CMD_SB_TC_POOL_BIND_GET(fd sock_nl_generic, msg ptr[in, msghdr_nl_devlink[DEVLINK_CMD_SB_TC_POOL_BIND_GET, devlink_sb_tc_pool_bind_get_policy]], f flags[send_flags]) 35 sendmsg$DEVLINK_CMD_SB_TC_POOL_BIND_SET(fd sock_nl_generic, msg ptr[in, msghdr_nl_devlink[DEVLINK_CMD_SB_TC_POOL_BIND_SET, devlink_sb_tc_pool_bind_set_policy]], f flags[send_flags]) 36 sendmsg$DEVLINK_CMD_SB_OCC_SNAPSHOT(fd sock_nl_generic, msg ptr[in, msghdr_nl_devlink[DEVLINK_CMD_SB_OCC_SNAPSHOT, devlink_sb_occ_snapshot_policy]], f flags[send_flags]) 37 sendmsg$DEVLINK_CMD_SB_OCC_MAX_CLEAR(fd sock_nl_generic, msg ptr[in, msghdr_nl_devlink[DEVLINK_CMD_SB_OCC_MAX_CLEAR, devlink_sb_occ_max_clear_policy]], f flags[send_flags]) 38 sendmsg$DEVLINK_CMD_RATE_GET(fd sock_nl_generic, msg ptr[in, msghdr_nl_devlink[DEVLINK_CMD_RATE_GET, devlink_nl_rate_get_policy]], f flags[send_flags]) 39 sendmsg$DEVLINK_CMD_RATE_SET(fd sock_nl_generic, msg ptr[in, msghdr_nl_devlink[DEVLINK_CMD_RATE_SET, devlink_nl_rate_set_policy]], f flags[send_flags]) 40 sendmsg$DEVLINK_CMD_RATE_NEW(fd sock_nl_generic, msg ptr[in, msghdr_nl_devlink[DEVLINK_CMD_RATE_NEW, devlink_nl_rate_set_policy]], f flags[send_flags]) 41 sendmsg$DEVLINK_CMD_RATE_DEL(fd sock_nl_generic, msg ptr[in, msghdr_nl_devlink[DEVLINK_CMD_RATE_DEL, devlink_nl_rate_get_policy]], f flags[send_flags]) 42 43 devlink_devname { 44 prefix stringnoz["netdevsim"] 45 # NEED: this does not support formatting numbers larger than 9. 46 id proc['0', 1, int8] 47 z const[0, int8] 48 } [packed] 49 50 devlink_nl_policy$nsim { 51 DEVLINK_ATTR_BUS_NAME nlattr[DEVLINK_ATTR_BUS_NAME, string["netdevsim"]] 52 DEVLINK_ATTR_DEV_NAME nlattr[DEVLINK_ATTR_DEV_NAME, devlink_devname] 53 } [packed, align[4]] 54 55 devlink_nl_policy$pci { 56 DEVLINK_ATTR_BUS_NAME nlattr[DEVLINK_ATTR_BUS_NAME, string["pci"]] 57 # 0000:00:10.0 is a fixed pci address what is moved from initial network namespace by initialize_devlink() 58 DEVLINK_ATTR_DEV_NAME nlattr[DEVLINK_ATTR_DEV_NAME, string["0000:00:10.0"]] 59 } [packed, align[4]] 60 61 devlink_handle [ 62 nsim devlink_nl_policy$nsim 63 pci devlink_nl_policy$pci 64 ] [varlen] 65 66 devlink_port_handle { 67 port_handle devlink_handle 68 # 0:3 is in sync with number of ports created by netdevsim_add() 69 DEVLINK_ATTR_PORT_INDEX nlattr[DEVLINK_ATTR_PORT_INDEX, int32[0:3]] 70 } [packed, align[4]] 71 72 devlink_nl_policy$reload [ 73 DEVLINK_ATTR_NETNS_PID nlattr[DEVLINK_ATTR_NETNS_PID, pid] 74 DEVLINK_ATTR_NETNS_FD nlattr[DEVLINK_ATTR_NETNS_FD, fd_namespace] 75 DEVLINK_ATTR_NETNS_ID nlattr[DEVLINK_ATTR_NETNS_ID, netns_id] 76 ] [varlen] 77 78 devlink_reload_policy { 79 handle devlink_handle 80 arg devlink_nl_policy$reload 81 } [packed, align[4]] 82 83 devlink_port_get_policy { 84 port_handle devlink_port_handle 85 } [packed, align[4]] 86 87 devlink_port_set_policy { 88 port_handle devlink_port_handle 89 DEVLINK_ATTR_PORT_TYPE nlattr[DEVLINK_ATTR_PORT_TYPE, int16[DEVLINK_PORT_TYPE_NOTSET:DEVLINK_PORT_TYPE_IB]] 90 } [packed, align[4]] 91 92 devlink_port_split_policy { 93 port_handle devlink_port_handle 94 DEVLINK_ATTR_PORT_SPLIT_COUNT nlattr[DEVLINK_ATTR_PORT_SPLIT_COUNT, int32[0:8]] 95 } [packed, align[4]] 96 97 devlink_port_unsplit_policy { 98 port_handle devlink_port_handle 99 } [packed, align[4]] 100 101 devlink_trap_get_policy { 102 dev_handle devlink_handle 103 DEVLINK_ATTR_TRAP_NAME nlattr[DEVLINK_ATTR_TRAP_NAME, string["source_mac_is_multicast"]] 104 } [packed, align[4]] 105 106 devlink_trap_set_policy { 107 dev_handle devlink_handle 108 DEVLINK_ATTR_TRAP_NAME nlattr[DEVLINK_ATTR_TRAP_NAME, string["source_mac_is_multicast"]] 109 DEVLINK_ATTR_TRAP_ACTION nlattr[DEVLINK_ATTR_TRAP_ACTION, int8[DEVLINK_TRAP_ACTION_DROP:DEVLINK_TRAP_ACTION_TRAP]] 110 } [packed, align[4]] 111 112 # 0 stands for the only invalid policer id, the rest has no special meaning but 113 # used to ease collision in policer ids between system calls. 114 trap_policer_ids = 0, 1, 2, 3 115 116 devlink_trap_policer_get_policy { 117 dev_handle devlink_handle 118 DEVLINK_ATTR_TRAP_POLICER_ID nlattr[DEVLINK_ATTR_TRAP_POLICER_ID, flags[trap_policer_ids, int32]] 119 } [packed, align[4]] 120 121 devlink_trap_policer_set_policy { 122 dev_handle devlink_handle 123 DEVLINK_ATTR_TRAP_POLICER_ID nlattr[DEVLINK_ATTR_TRAP_POLICER_ID, flags[trap_policer_ids, int32]] 124 DEVLINK_ATTR_TRAP_POLICER_RATE nlattr[DEVLINK_ATTR_TRAP_POLICER_RATE, int64] 125 DEVLINK_ATTR_TRAP_POLICER_BURST nlattr[DEVLINK_ATTR_TRAP_POLICER_BURST, int64] 126 } [packed, align[4]] 127 128 devlink_trap_group_get_policy { 129 dev_handle devlink_handle 130 DEVLINK_ATTR_TRAP_GROUP_NAME nlattr[DEVLINK_ATTR_TRAP_GROUP_NAME, string["l2_drops"]] 131 } [packed, align[4]] 132 133 devlink_trap_group_set_policy { 134 dev_handle devlink_handle 135 DEVLINK_ATTR_TRAP_GROUP_NAME nlattr[DEVLINK_ATTR_TRAP_GROUP_NAME, string["l2_drops"]] 136 DEVLINK_ATTR_TRAP_ACTION nlattr[DEVLINK_ATTR_TRAP_ACTION, int8[DEVLINK_TRAP_ACTION_DROP:DEVLINK_TRAP_ACTION_TRAP]] 137 } [packed, align[4]] 138 139 devlink_sb_get_policy { 140 handle devlink_handle 141 DEVLINK_ATTR_SB_INDEX nlattr[DEVLINK_ATTR_SB_INDEX, int32] 142 } [packed, align[4]] 143 144 devlink_sb_pool_get_policy { 145 handle devlink_handle 146 DEVLINK_ATTR_SB_INDEX nlattr[DEVLINK_ATTR_SB_INDEX, int32] 147 DEVLINK_ATTR_SB_POOL_INDEX nlattr[DEVLINK_ATTR_SB_POOL_INDEX, int16] 148 } [packed, align[4]] 149 150 devlink_sb_pool_set_policy { 151 handle devlink_handle 152 DEVLINK_ATTR_SB_INDEX nlattr[DEVLINK_ATTR_SB_INDEX, int32] 153 DEVLINK_ATTR_SB_POOL_INDEX nlattr[DEVLINK_ATTR_SB_POOL_INDEX, int16] 154 DEVLINK_ATTR_SB_POOL_SIZE nlattr[DEVLINK_ATTR_SB_POOL_SIZE, int32] 155 DEVLINK_ATTR_SB_POOL_THRESHOLD_TYPE nlattr[DEVLINK_ATTR_SB_POOL_THRESHOLD_TYPE, int8[DEVLINK_SB_THRESHOLD_TYPE_STATIC:DEVLINK_SB_THRESHOLD_TYPE_DYNAMIC]] 156 } [packed, align[4]] 157 158 devlink_sb_port_pool_get_policy { 159 port_handle devlink_port_handle 160 DEVLINK_ATTR_SB_INDEX nlattr[DEVLINK_ATTR_SB_INDEX, int32] 161 DEVLINK_ATTR_SB_POOL_INDEX nlattr[DEVLINK_ATTR_SB_POOL_INDEX, int16] 162 } [packed, align[4]] 163 164 devlink_sb_port_pool_set_policy { 165 port_handle devlink_port_handle 166 DEVLINK_ATTR_SB_INDEX nlattr[DEVLINK_ATTR_SB_INDEX, int32] 167 DEVLINK_ATTR_SB_POOL_INDEX nlattr[DEVLINK_ATTR_SB_POOL_INDEX, int16] 168 DEVLINK_ATTR_SB_THRESHOLD nlattr[DEVLINK_ATTR_SB_THRESHOLD, int32] 169 } [packed, align[4]] 170 171 devlink_sb_tc_pool_bind_get_policy { 172 port_handle devlink_port_handle 173 DEVLINK_ATTR_SB_INDEX nlattr[DEVLINK_ATTR_SB_INDEX, int32] 174 DEVLINK_ATTR_SB_TC_INDEX nlattr[DEVLINK_ATTR_SB_TC_INDEX, int16] 175 DEVLINK_ATTR_SB_POOL_TYPE nlattr[DEVLINK_ATTR_SB_POOL_TYPE, int8[DEVLINK_SB_POOL_TYPE_INGRESS:DEVLINK_SB_POOL_TYPE_EGRESS]] 176 } [packed, align[4]] 177 178 devlink_sb_tc_pool_bind_set_policy { 179 port_handle devlink_port_handle 180 DEVLINK_ATTR_SB_INDEX nlattr[DEVLINK_ATTR_SB_INDEX, int32] 181 DEVLINK_ATTR_SB_TC_INDEX nlattr[DEVLINK_ATTR_SB_TC_INDEX, int16] 182 DEVLINK_ATTR_SB_POOL_TYPE nlattr[DEVLINK_ATTR_SB_POOL_TYPE, int8[DEVLINK_SB_POOL_TYPE_INGRESS:DEVLINK_SB_POOL_TYPE_EGRESS]] 183 DEVLINK_ATTR_SB_POOL_INDEX nlattr[DEVLINK_ATTR_SB_POOL_INDEX, int16] 184 DEVLINK_ATTR_SB_THRESHOLD nlattr[DEVLINK_ATTR_SB_INDEX, int32] 185 } [packed, align[4]] 186 187 devlink_sb_occ_snapshot_policy { 188 handle devlink_handle 189 DEVLINK_ATTR_SB_INDEX nlattr[DEVLINK_ATTR_SB_INDEX, int32] 190 } [packed, align[4]] 191 192 devlink_sb_occ_max_clear_policy { 193 handle devlink_handle 194 DEVLINK_ATTR_SB_INDEX nlattr[DEVLINK_ATTR_SB_INDEX, int32] 195 } [packed, align[4]] 196 197 devlink_rate_node_name [ 198 name1 string["firstname"] 199 name2 string["secondname"] 200 random array[int8] 201 ] [varlen] 202 203 devlink_nl_rate_get_policy [ 204 handle devlink_handle 205 DEVLINK_ATTR_RATE_NODE_NAME nlattr[DEVLINK_ATTR_RATE_NODE_NAME, devlink_rate_node_name] 206 DEVLINK_ATTR_PORT_INDEX nlattr[DEVLINK_ATTR_PORT_INDEX, int32[0:3]] 207 ] [varlen] 208 209 devlink_nl_rate_set_policy [ 210 handle devlink_handle 211 DEVLINK_ATTR_RATE_NODE_NAME nlattr[DEVLINK_ATTR_RATE_NODE_NAME, devlink_rate_node_name] 212 DEVLINK_ATTR_PORT_INDEX nlattr[DEVLINK_ATTR_PORT_INDEX, int32[0:3]] 213 DEVLINK_ATTR_RATE_TX_SHARE nlattr[DEVLINK_ATTR_RATE_TX_SHARE, int64] 214 DEVLINK_ATTR_RATE_TX_MAX nlattr[DEVLINK_ATTR_RATE_TX_MAX, int64] 215 DEVLINK_ATTR_RATE_PARENT_NODE_NAME nlattr[DEVLINK_ATTR_RATE_PARENT_NODE_NAME, devlink_rate_node_name] 216 ] [varlen]