# Copyright 2020 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.

include <linux/net.h>
include <uapi/linux/ip.h>
include <uapi/linux/netlink.h>
include <uapi/linux/netfilter.h>
include <uapi/linux/netfilter/nfnetlink.h>
include <uapi/linux/netfilter/nfnetlink_acct.h>

type msghdr_nf_acct[CMD] msghdr_netlink[netlink_msg_netfilter_t[NFNL_SUBSYS_ACCT, CMD, nfnl_acct_policy]]

sendmsg$NFNL_MSG_ACCT_NEW(fd sock_nl_netfilter, msg ptr[in, msghdr_nf_acct[NFNL_MSG_ACCT_NEW]], f flags[send_flags])
sendmsg$NFNL_MSG_ACCT_GET(fd sock_nl_netfilter, msg ptr[in, msghdr_nf_acct[NFNL_MSG_ACCT_GET]], f flags[send_flags])
sendmsg$NFNL_MSG_ACCT_GET_CTRZERO(fd sock_nl_netfilter, msg ptr[in, msghdr_nf_acct[NFNL_MSG_ACCT_GET_CTRZERO]], f flags[send_flags])
sendmsg$NFNL_MSG_ACCT_DEL(fd sock_nl_netfilter, msg ptr[in, msghdr_nf_acct[NFNL_MSG_ACCT_DEL]], f flags[send_flags])

nfnl_acct_policy [
	NFACCT_NAME	nlattr[NFACCT_NAME, string[nfnl_acct_names]]
	NFACCT_BYTES	nlnetw[NFACCT_BYTES, int64be]
	NFACCT_PKTS	nlnetw[NFACCT_PKTS, int64be]
	NFACCT_FLAGS	nlnetw[NFACCT_FLAGS, flags[nfnl_acct_flags, int32be]]
	NFACCT_QUOTA	nlnetw[NFACCT_QUOTA, int64be]
	NFACCT_FILTER	nlnest[NFACCT_FILTER, array[filter_policy$acct]]
] [varlen]

filter_policy$acct [
	NFACCT_FILTER_MASK	nlnetw[NFACCT_FILTER_MASK, int32be]
	NFACCT_FILTER_VALUE	nlnetw[NFACCT_FILTER_VALUE, int32be]
] [varlen]

nfnl_acct_names = "syz0", "syz1"
nfnl_acct_flags = NFACCT_F_QUOTA_PKTS, NFACCT_F_QUOTA_BYTES
