Lines Matching +full:can +full:- +full:fd

1 // SPDX-License-Identifier: GPL-2.0
48 static int flowlabel_get(int fd, uint32_t label, uint8_t share, uint16_t flags) in flowlabel_get() argument
61 return setsockopt(fd, SOL_IPV6, IPV6_FLOWLABEL_MGR, &req, sizeof(req)); in flowlabel_get()
64 static int flowlabel_put(int fd, uint32_t label) in flowlabel_put() argument
71 return setsockopt(fd, SOL_IPV6, IPV6_FLOWLABEL_MGR, &req, sizeof(req)); in flowlabel_put()
74 static void run_tests(int fd) in run_tests() argument
79 explain("cannot get non-existent label"); in run_tests()
80 expect_fail(flowlabel_get(fd, 1, IPV6_FL_S_ANY, 0)); in run_tests()
82 explain("cannot put non-existent label"); in run_tests()
83 expect_fail(flowlabel_put(fd, 1)); in run_tests()
86 expect_fail(flowlabel_get(fd, 0x1FFFFF, IPV6_FL_S_ANY, in run_tests()
90 expect_pass(flowlabel_get(fd, 1, IPV6_FL_S_ANY, IPV6_FL_F_CREATE)); in run_tests()
91 explain("can get the label (without FL_F_CREATE)"); in run_tests()
92 expect_pass(flowlabel_get(fd, 1, IPV6_FL_S_ANY, 0)); in run_tests()
93 explain("can get it again with create flag set, too"); in run_tests()
94 expect_pass(flowlabel_get(fd, 1, IPV6_FL_S_ANY, IPV6_FL_F_CREATE)); in run_tests()
96 expect_fail(flowlabel_get(fd, 1, IPV6_FL_S_ANY, in run_tests()
98 explain("can now put exactly three references"); in run_tests()
99 expect_pass(flowlabel_put(fd, 1)); in run_tests()
100 expect_pass(flowlabel_put(fd, 1)); in run_tests()
101 expect_pass(flowlabel_put(fd, 1)); in run_tests()
102 expect_fail(flowlabel_put(fd, 1)); in run_tests()
105 expect_pass(flowlabel_get(fd, 2, IPV6_FL_S_EXCL, IPV6_FL_F_CREATE)); in run_tests()
106 explain("cannot get it again in non-exclusive mode"); in run_tests()
107 expect_fail(flowlabel_get(fd, 2, IPV6_FL_S_ANY, IPV6_FL_F_CREATE)); in run_tests()
109 expect_fail(flowlabel_get(fd, 2, IPV6_FL_S_EXCL, IPV6_FL_F_CREATE)); in run_tests()
110 expect_pass(flowlabel_put(fd, 2)); in run_tests()
114 expect_fail(flowlabel_get(fd, 2, IPV6_FL_S_ANY, in run_tests()
116 explain("after sleep, can reuse"); in run_tests()
118 expect_pass(flowlabel_get(fd, 2, IPV6_FL_S_ANY, in run_tests()
122 explain("create a new user-private label (FL_S_USER)"); in run_tests()
123 expect_pass(flowlabel_get(fd, 3, IPV6_FL_S_USER, IPV6_FL_F_CREATE)); in run_tests()
124 explain("cannot get it again in non-exclusive mode"); in run_tests()
125 expect_fail(flowlabel_get(fd, 3, IPV6_FL_S_ANY, 0)); in run_tests()
127 expect_fail(flowlabel_get(fd, 3, IPV6_FL_S_EXCL, 0)); in run_tests()
128 explain("can get it again in user mode"); in run_tests()
129 expect_pass(flowlabel_get(fd, 3, IPV6_FL_S_USER, 0)); in run_tests()
130 explain("child process can get it too, but not after setuid(nobody)"); in run_tests()
132 if (pid == -1) in run_tests()
135 expect_pass(flowlabel_get(fd, 3, IPV6_FL_S_USER, 0)); in run_tests()
139 expect_fail(flowlabel_get(fd, 3, IPV6_FL_S_USER, 0)); in run_tests()
142 if (wait(&wstatus) == -1) in run_tests()
147 explain("create a new process-private label (FL_S_PROCESS)"); in run_tests()
148 expect_pass(flowlabel_get(fd, 4, IPV6_FL_S_PROCESS, IPV6_FL_F_CREATE)); in run_tests()
149 explain("can get it again"); in run_tests()
150 expect_pass(flowlabel_get(fd, 4, IPV6_FL_S_PROCESS, 0)); in run_tests()
151 explain("child process cannot can get it"); in run_tests()
153 if (pid == -1) in run_tests()
156 expect_fail(flowlabel_get(fd, 4, IPV6_FL_S_PROCESS, 0)); in run_tests()
159 if (wait(&wstatus) == -1) in run_tests()
169 while ((c = getopt(argc, argv, "lv")) != -1) { in parse_opts()
185 int fd; in main() local
189 fd = socket(PF_INET6, SOCK_DGRAM, 0); in main()
190 if (fd == -1) in main()
193 run_tests(fd); in main()
195 if (close(fd)) in main()