]> granicus.if.org Git - strace/blob - tests/nfnetlink_cttimeout.c
Update copyright headers
[strace] / tests / nfnetlink_cttimeout.c
1 /*
2  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
3  * Copyright (c) 2017-2018 The strace developers.
4  * All rights reserved.
5  *
6  * SPDX-License-Identifier: GPL-2.0-or-later
7  */
8
9 #include "tests.h"
10
11 #ifdef HAVE_LINUX_NETFILTER_NFNETLINK_CTTIMEOUT_H
12
13 # include <stdio.h>
14 # include <sys/socket.h>
15 # include "netlink.h"
16 # include <linux/netfilter/nfnetlink.h>
17 # include <linux/netfilter/nfnetlink_cttimeout.h>
18
19 static void
20 test_nlmsg_type(const int fd)
21 {
22         long rc;
23         struct nlmsghdr nlh = {
24                 .nlmsg_len = sizeof(nlh),
25                 .nlmsg_flags = NLM_F_REQUEST,
26         };
27
28         nlh.nlmsg_type =
29                 NFNL_SUBSYS_CTNETLINK_TIMEOUT << 8 | IPCTNL_MSG_TIMEOUT_NEW;
30         rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
31         printf("sendto(%d, {len=%u"
32                ", type=NFNL_SUBSYS_CTNETLINK_TIMEOUT<<8|IPCTNL_MSG_TIMEOUT_NEW"
33                ", flags=NLM_F_REQUEST, seq=0, pid=0}"
34                ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
35                fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
36
37         nlh.nlmsg_type = NFNL_SUBSYS_CTNETLINK_TIMEOUT << 8 | 0xff;
38         rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
39         printf("sendto(%d, {len=%u"
40                ", type=NFNL_SUBSYS_CTNETLINK_TIMEOUT<<8|0xff /* IPCTNL_MSG_TIMEOUT_??? */"
41                ", flags=NLM_F_REQUEST, seq=0, pid=0}"
42                ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
43                fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
44 }
45
46 static void
47 test_nlmsg_flags(const int fd)
48 {
49         long rc;
50         struct nlmsghdr nlh = {
51                 .nlmsg_len = sizeof(nlh),
52         };
53
54         nlh.nlmsg_type =
55                 NFNL_SUBSYS_CTNETLINK_TIMEOUT << 8 | IPCTNL_MSG_TIMEOUT_NEW;
56         nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_APPEND;
57         rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
58         printf("sendto(%d, {len=%u"
59                ", type=NFNL_SUBSYS_CTNETLINK_TIMEOUT<<8|IPCTNL_MSG_TIMEOUT_NEW"
60                ", flags=NLM_F_REQUEST|NLM_F_APPEND, seq=0, pid=0}"
61                ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
62                fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
63
64         nlh.nlmsg_type =
65                 NFNL_SUBSYS_CTNETLINK_TIMEOUT << 8 | IPCTNL_MSG_TIMEOUT_GET;
66         nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_ATOMIC;
67         rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
68         printf("sendto(%d, {len=%u"
69                ", type=NFNL_SUBSYS_CTNETLINK_TIMEOUT<<8|IPCTNL_MSG_TIMEOUT_GET"
70                ", flags=NLM_F_REQUEST|NLM_F_ATOMIC, seq=0, pid=0}"
71                ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
72                fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
73
74         nlh.nlmsg_type =
75                 NFNL_SUBSYS_CTNETLINK_TIMEOUT << 8 | IPCTNL_MSG_TIMEOUT_DELETE;
76         nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_NONREC;
77         rc = sendto(fd, &nlh, nlh.nlmsg_len, MSG_DONTWAIT, NULL, 0);
78         printf("sendto(%d, {len=%u"
79                ", type=NFNL_SUBSYS_CTNETLINK_TIMEOUT<<8|IPCTNL_MSG_TIMEOUT_DELETE"
80                ", flags=NLM_F_REQUEST|NLM_F_NONREC, seq=0, pid=0}"
81                ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
82                fd, nlh.nlmsg_len, nlh.nlmsg_len, sprintrc(rc));
83 }
84
85 int
86 main(void)
87 {
88         skip_if_unavailable("/proc/self/fd/");
89
90         int fd = create_nl_socket(NETLINK_NETFILTER);
91
92         test_nlmsg_type(fd);
93         test_nlmsg_flags(fd);
94
95         puts("+++ exited with 0 +++");
96
97         return 0;
98 }
99
100 #else
101
102 SKIP_MAIN_UNDEFINED("HAVE_LINUX_NETFILTER_NFNETLINK_CTTIMEOUT_H")
103
104 #endif