Lines Matching refs:spec

88 static void free_test_spec(struct test_spec *spec)
90 free(spec->priv.name);
91 free(spec->unpriv.name);
92 free(spec->priv.expect_msgs);
93 free(spec->unpriv.expect_msgs);
95 spec->priv.name = NULL;
96 spec->unpriv.name = NULL;
97 spec->priv.expect_msgs = NULL;
98 spec->unpriv.expect_msgs = NULL;
163 struct test_spec *spec)
171 memset(spec, 0, sizeof(*spec));
173 spec->prog_name = bpf_program__name(prog);
181 func_id = btf__find_by_name_kind(btf, spec->prog_name, BTF_KIND_FUNC);
183 ASSERT_FAIL("failed to find FUNC BTF type for '%s'", spec->prog_name);
203 spec->priv.expect_failure = true;
204 spec->mode_mask |= PRIV;
206 spec->priv.expect_failure = false;
207 spec->mode_mask |= PRIV;
209 spec->unpriv.expect_failure = true;
210 spec->mode_mask |= UNPRIV;
213 spec->unpriv.expect_failure = false;
214 spec->mode_mask |= UNPRIV;
217 spec->auxiliary = true;
218 spec->mode_mask |= PRIV;
220 spec->auxiliary = true;
221 spec->mode_mask |= UNPRIV;
224 err = push_msg(msg, &spec->priv);
227 spec->mode_mask |= PRIV;
230 err = push_msg(msg, &spec->unpriv);
233 spec->mode_mask |= UNPRIV;
236 err = parse_retval(val, &spec->priv.retval, "__retval");
239 spec->priv.execute = true;
240 spec->mode_mask |= PRIV;
243 err = parse_retval(val, &spec->unpriv.retval, "__retval_unpriv");
246 spec->mode_mask |= UNPRIV;
247 spec->unpriv.execute = true;
251 err = parse_int(val, &spec->log_level, "test log level");
257 spec->prog_flags |= BPF_F_STRICT_ALIGNMENT;
259 spec->prog_flags |= BPF_F_ANY_ALIGNMENT;
261 spec->prog_flags |= BPF_F_TEST_RND_HI32;
263 spec->prog_flags |= BPF_F_TEST_STATE_FREQ;
265 spec->prog_flags |= BPF_F_SLEEPABLE;
267 spec->prog_flags |= BPF_F_XDP_HAS_FRAGS;
272 spec->prog_flags |= tmp;
277 if (spec->mode_mask == 0)
278 spec->mode_mask = PRIV;
281 description = spec->prog_name;
283 if (spec->mode_mask & PRIV) {
284 spec->priv.name = strdup(description);
285 if (!spec->priv.name) {
292 if (spec->mode_mask & UNPRIV) {
306 spec->unpriv.name = name;
309 if (spec->mode_mask & (PRIV | UNPRIV)) {
311 spec->unpriv.expect_failure = spec->priv.expect_failure;
314 spec->unpriv.retval = spec->priv.retval;
315 spec->unpriv.execute = spec->priv.execute;
318 if (!spec->unpriv.expect_msgs) {
319 size_t sz = spec->priv.expect_msg_cnt * sizeof(void *);
321 spec->unpriv.expect_msgs = malloc(sz);
322 if (!spec->unpriv.expect_msgs) {
327 memcpy(spec->unpriv.expect_msgs, spec->priv.expect_msgs, sz);
328 spec->unpriv.expect_msg_cnt = spec->priv.expect_msg_cnt;
332 spec->valid = true;
337 free_test_spec(spec);
342 struct test_spec *spec,
359 if ((spec->log_level & 3) < min_log_level)
360 bpf_program__set_log_level(prog, (spec->log_level & 4) | min_log_level);
362 bpf_program__set_log_level(prog, spec->log_level);
365 bpf_program__set_flags(prog, prog_flags | spec->prog_flags);
443 static bool can_execute_unpriv(struct test_loader *tester, struct test_spec *spec)
449 if ((spec->prog_flags & BPF_F_ANY_ALIGNMENT) && !EFFICIENT_UNALIGNED_ACCESS)
511 static bool should_do_test_run(struct test_spec *spec, struct test_subspec *subspec)
519 if ((spec->prog_flags & BPF_F_ANY_ALIGNMENT) && !EFFICIENT_UNALIGNED_ACCESS) {
537 struct test_spec *spec,
540 struct test_subspec *subspec = unpriv ? &spec->unpriv : &spec->priv;
553 if (!can_execute_unpriv(tester, spec)) {
574 if (strcmp(bpf_program__name(tprog_iter), spec->prog_name) == 0) {
587 prepare_case(tester, spec, tobj, tprog);
613 if (should_do_test_run(spec, subspec)) {
675 PRINT_FAIL("Can't parse test spec for program '%s'\n",
681 struct test_spec *spec = &specs[i++];
683 if (!spec->valid || spec->auxiliary)
686 if (spec->mode_mask & PRIV)
688 specs, spec, false);
689 if (spec->mode_mask & UNPRIV)
691 specs, spec, true);