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]