1*4882a593Smuzhiyun // SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2*4882a593Smuzhiyun /* Copyright (C) 2019 Netronome Systems, Inc. */
3*4882a593Smuzhiyun
4*4882a593Smuzhiyun #include <bpf/bpf.h>
5*4882a593Smuzhiyun #include <bpf/libbpf.h>
6*4882a593Smuzhiyun #include <string.h>
7*4882a593Smuzhiyun
8*4882a593Smuzhiyun int extra_prog_load_log_flags = 0;
9*4882a593Smuzhiyun
bpf_prog_test_load(const char * file,enum bpf_prog_type type,struct bpf_object ** pobj,int * prog_fd)10*4882a593Smuzhiyun int bpf_prog_test_load(const char *file, enum bpf_prog_type type,
11*4882a593Smuzhiyun struct bpf_object **pobj, int *prog_fd)
12*4882a593Smuzhiyun {
13*4882a593Smuzhiyun struct bpf_prog_load_attr attr;
14*4882a593Smuzhiyun
15*4882a593Smuzhiyun memset(&attr, 0, sizeof(struct bpf_prog_load_attr));
16*4882a593Smuzhiyun attr.file = file;
17*4882a593Smuzhiyun attr.prog_type = type;
18*4882a593Smuzhiyun attr.expected_attach_type = 0;
19*4882a593Smuzhiyun attr.prog_flags = BPF_F_TEST_RND_HI32;
20*4882a593Smuzhiyun attr.log_level = extra_prog_load_log_flags;
21*4882a593Smuzhiyun
22*4882a593Smuzhiyun return bpf_prog_load_xattr(&attr, pobj, prog_fd);
23*4882a593Smuzhiyun }
24*4882a593Smuzhiyun
bpf_test_load_program(enum bpf_prog_type type,const struct bpf_insn * insns,size_t insns_cnt,const char * license,__u32 kern_version,char * log_buf,size_t log_buf_sz)25*4882a593Smuzhiyun int bpf_test_load_program(enum bpf_prog_type type, const struct bpf_insn *insns,
26*4882a593Smuzhiyun size_t insns_cnt, const char *license,
27*4882a593Smuzhiyun __u32 kern_version, char *log_buf,
28*4882a593Smuzhiyun size_t log_buf_sz)
29*4882a593Smuzhiyun {
30*4882a593Smuzhiyun struct bpf_load_program_attr load_attr;
31*4882a593Smuzhiyun
32*4882a593Smuzhiyun memset(&load_attr, 0, sizeof(struct bpf_load_program_attr));
33*4882a593Smuzhiyun load_attr.prog_type = type;
34*4882a593Smuzhiyun load_attr.expected_attach_type = 0;
35*4882a593Smuzhiyun load_attr.name = NULL;
36*4882a593Smuzhiyun load_attr.insns = insns;
37*4882a593Smuzhiyun load_attr.insns_cnt = insns_cnt;
38*4882a593Smuzhiyun load_attr.license = license;
39*4882a593Smuzhiyun load_attr.kern_version = kern_version;
40*4882a593Smuzhiyun load_attr.prog_flags = BPF_F_TEST_RND_HI32;
41*4882a593Smuzhiyun load_attr.log_level = extra_prog_load_log_flags;
42*4882a593Smuzhiyun
43*4882a593Smuzhiyun return bpf_load_program_xattr(&load_attr, log_buf, log_buf_sz);
44*4882a593Smuzhiyun }
45