2 * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
3 * Copyright (c) 2017 The strace developers.
6 * SPDX-License-Identifier: GPL-2.0-or-later
11 #ifdef HAVE_LINUX_NETFILTER_NFNETLINK_ACCT_H
14 # include <sys/socket.h>
16 # include <linux/netfilter/nfnetlink.h>
17 # include <linux/netfilter/nfnetlink_acct.h>
20 test_nlmsg_type(const int fd)
23 struct nlmsghdr nlh = {
24 .nlmsg_len = sizeof(nlh),
25 .nlmsg_flags = NLM_F_REQUEST,
28 nlh.nlmsg_type = NFNL_SUBSYS_ACCT << 8 | NFNL_MSG_ACCT_NEW;
29 rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
30 printf("sendto(%d, {len=%u"
31 ", type=NFNL_SUBSYS_ACCT<<8|NFNL_MSG_ACCT_NEW"
32 ", flags=NLM_F_REQUEST, seq=0, pid=0}"
33 ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
34 fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
36 nlh.nlmsg_type = NFNL_SUBSYS_ACCT << 8 | 0xff;
37 rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
38 printf("sendto(%d, {len=%u"
39 ", type=NFNL_SUBSYS_ACCT<<8|0xff /* NFNL_MSG_ACCT_??? */"
40 ", flags=NLM_F_REQUEST, seq=0, pid=0}"
41 ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
42 fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
46 test_nlmsg_flags(const int fd)
49 struct nlmsghdr nlh = {
50 .nlmsg_len = sizeof(nlh),
53 nlh.nlmsg_type = NFNL_SUBSYS_ACCT << 8 | NFNL_MSG_ACCT_NEW;
54 nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_CREATE;
55 rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
56 printf("sendto(%d, {len=%u"
57 ", type=NFNL_SUBSYS_ACCT<<8|NFNL_MSG_ACCT_NEW"
58 ", flags=NLM_F_REQUEST|NLM_F_CREATE, seq=0, pid=0}"
59 ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
60 fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
62 nlh.nlmsg_type = NFNL_SUBSYS_ACCT << 8 | NFNL_MSG_ACCT_GET;
63 nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_MATCH;
64 rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
65 printf("sendto(%d, {len=%u"
66 ", type=NFNL_SUBSYS_ACCT<<8|NFNL_MSG_ACCT_GET"
67 ", flags=NLM_F_REQUEST|NLM_F_MATCH, seq=0, pid=0}"
68 ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
69 fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
71 nlh.nlmsg_type = NFNL_SUBSYS_ACCT << 8 | NFNL_MSG_ACCT_DEL;
72 nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_NONREC;
73 rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
74 printf("sendto(%d, {len=%u"
75 ", type=NFNL_SUBSYS_ACCT<<8|NFNL_MSG_ACCT_DEL"
76 ", flags=NLM_F_REQUEST|NLM_F_NONREC, seq=0, pid=0}"
77 ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
78 fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
84 skip_if_unavailable("/proc/self/fd/");
86 int fd = create_nl_socket(NETLINK_NETFILTER);
91 puts("+++ exited with 0 +++");
98 SKIP_MAIN_UNDEFINED("HAVE_LINUX_NETFILTER_NFNETLINK_ACCT_H")