mirror of
https://github.com/reactos/syzkaller.git
synced 2024-11-23 11:29:46 +00:00
0781895e0f
Introduce common infrastructure for describing and parsing attribute instead of custom per-attribute code scattered across several locations. Change align attribute syntax from the weird align_N to align[N]. This also allows to use literal constants as N. Introduce notion of builtin constants. Currently we have only PTR_SIZE, which is needed to replace align_ptr with align[PTR_SIZE].
68 lines
3.8 KiB
Plaintext
68 lines
3.8 KiB
Plaintext
# Copyright 2018 syzkaller project authors. All rights reserved.
|
|
# Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
|
|
|
|
# AF_NETLINK/NETLINK_GENERIC/team support.
|
|
|
|
include <linux/net.h>
|
|
include <net/netlink.h>
|
|
include <uapi/linux/netlink.h>
|
|
include <uapi/linux/genetlink.h>
|
|
include <uapi/linux/if_team.h>
|
|
|
|
resource genl_team_family_id[int16]
|
|
resource ifindex_team[ifindex]
|
|
type msghdr_nl_team[CMD] msghdr_netlink[netlink_msg_t[genl_team_family_id, genlmsghdr_t[CMD], team_nl_policy]]
|
|
|
|
syz_genetlink_get_family_id$team(name ptr[in, string["team"]]) genl_team_family_id
|
|
ioctl$ifreq_SIOCGIFINDEX_team(fd sock, cmd const[SIOCGIFINDEX], arg ptr[inout, ifreq_dev_t["team0", ifindex_team[opt]]])
|
|
|
|
sendmsg$TEAM_CMD_NOOP(fd sock_nl_generic, msg ptr[in, msghdr_nl_team[TEAM_CMD_NOOP]], f flags[send_flags])
|
|
sendmsg$TEAM_CMD_OPTIONS_SET(fd sock_nl_generic, msg ptr[in, msghdr_nl_team[TEAM_CMD_OPTIONS_SET]], f flags[send_flags])
|
|
sendmsg$TEAM_CMD_OPTIONS_GET(fd sock_nl_generic, msg ptr[in, msghdr_nl_team[TEAM_CMD_OPTIONS_GET]], f flags[send_flags])
|
|
sendmsg$TEAM_CMD_PORT_LIST_GET(fd sock_nl_generic, msg ptr[in, msghdr_nl_team[TEAM_CMD_PORT_LIST_GET]], f flags[send_flags])
|
|
|
|
team_nl_policy {
|
|
TEAM_ATTR_TEAM_IFINDEX nlattr[TEAM_ATTR_TEAM_IFINDEX, ifindex_team]
|
|
TEAM_ATTR_LIST_OPTION nlnest[TEAM_ATTR_LIST_OPTION, array[nlattr[TEAM_ATTR_ITEM_OPTION, team_attr_option]]]
|
|
} [packed, align[4]]
|
|
|
|
type team_nl_option_policy[NAME, TYPE, DATA] {
|
|
TEAM_ATTR_OPTION_NAME nlattr[TEAM_ATTR_OPTION_NAME, string[NAME, TEAM_STRING_MAX_LEN]]
|
|
TEAM_ATTR_OPTION_TYPE nlattr[TEAM_ATTR_OPTION_TYPE, const[TYPE, int8]]
|
|
TEAM_ATTR_OPTION_DATA nlattr[TEAM_ATTR_OPTION_DATA, DATA]
|
|
} [packed, align[4]]
|
|
|
|
type team_nl_option_policy_per_port[NAME, TYPE, DATA] {
|
|
opt team_nl_option_policy[NAME, TYPE, DATA]
|
|
TEAM_ATTR_OPTION_PORT_IFINDEX nlattr[TEAM_ATTR_OPTION_PORT_IFINDEX, ifindex]
|
|
} [packed, align[4]]
|
|
|
|
type team_nl_option_policy_array[NAME, TYPE, DATA, SIZE] {
|
|
opt team_nl_option_policy[NAME, TYPE, DATA]
|
|
TEAM_ATTR_OPTION_ARRAY_INDEX nlattr[TEAM_ATTR_OPTION_ARRAY_INDEX, int32[0:SIZE]]
|
|
} [packed, align[4]]
|
|
|
|
team_attr_option [
|
|
name team_nl_option_policy["mode", NLA_STRING, string[team_attr_option_mode]]
|
|
notify_peers_count team_nl_option_policy["notify_peers_count", NLA_U32, int32]
|
|
notify_peers_interval team_nl_option_policy["notify_peers_interval", NLA_U32, int32]
|
|
mcast_rejoin_count team_nl_option_policy["mcast_rejoin_count", NLA_U32, int32]
|
|
mcast_rejoin_interval team_nl_option_policy["mcast_rejoin_interval", NLA_U32, int32]
|
|
# TODO: NLA_FLAG value is determined by presence of TEAM_ATTR_OPTION_DATA attr, but we always pass it.
|
|
enabled team_nl_option_policy_per_port["enabled", NLA_FLAG, void]
|
|
user_linkup team_nl_option_policy_per_port["user_linkup", NLA_FLAG, void]
|
|
user_linkup_enabled team_nl_option_policy_per_port["user_linkup_enabled", NLA_FLAG, void]
|
|
priority team_nl_option_policy_per_port["priority", NLA_S32, int32]
|
|
queue_id team_nl_option_policy_per_port["queue_id", NLA_U32, int32]
|
|
activeport team_nl_option_policy["activeport", NLA_U32, ifindex]
|
|
bpf_hash_func team_nl_option_policy["bpf_hash_func", NLA_BINARY, array[sock_filter]]
|
|
lb_tx_method team_nl_option_policy["lb_tx_method", NLA_STRING, string[team_attr_option_lb_tx_method]]
|
|
lb_tx_hash_to_port_mapping team_nl_option_policy_array["lb_tx_hash_to_port_mapping", NLA_U32, ifindex, 256]
|
|
lb_hash_stats team_nl_option_policy_array["lb_hash_stats", NLA_BINARY, int32, 256]
|
|
lb_port_stats team_nl_option_policy_per_port["lb_port_stats", NLA_BINARY, int32]
|
|
lb_stats_refresh_interval team_nl_option_policy["lb_stats_refresh_interval", NLA_U32, int32]
|
|
] [varlen]
|
|
|
|
team_attr_option_mode = "activebackup", "broadcast", "loadbalance", "random", "roundrobin"
|
|
team_attr_option_lb_tx_method = "hash", "hash_to_port_mapping"
|