Path: blob/master/tools/testing/selftests/bpf/flow_dissector_load.h
26285 views
/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */1#ifndef FLOW_DISSECTOR_LOAD2#define FLOW_DISSECTOR_LOAD34#include <bpf/bpf.h>5#include <bpf/libbpf.h>6#include "testing_helpers.h"78static inline int bpf_flow_load(struct bpf_object **obj,9const char *path,10const char *prog_name,11const char *map_name,12const char *keys_map_name,13int *prog_fd,14int *keys_fd)15{16struct bpf_program *prog, *main_prog;17struct bpf_map *prog_array, *keys;18int prog_array_fd;19int ret, fd, i;2021ret = bpf_prog_test_load(path, BPF_PROG_TYPE_FLOW_DISSECTOR, obj,22prog_fd);23if (ret)24return ret;2526main_prog = bpf_object__find_program_by_name(*obj, prog_name);27if (!main_prog)28return -1;2930*prog_fd = bpf_program__fd(main_prog);31if (*prog_fd < 0)32return -1;3334prog_array = bpf_object__find_map_by_name(*obj, map_name);35if (!prog_array)36return -1;3738prog_array_fd = bpf_map__fd(prog_array);39if (prog_array_fd < 0)40return -1;4142if (keys_map_name && keys_fd) {43keys = bpf_object__find_map_by_name(*obj, keys_map_name);44if (!keys)45return -1;4647*keys_fd = bpf_map__fd(keys);48if (*keys_fd < 0)49return -1;50}5152i = 0;53bpf_object__for_each_program(prog, *obj) {54fd = bpf_program__fd(prog);55if (fd < 0)56return fd;5758if (fd != *prog_fd) {59bpf_map_update_elem(prog_array_fd, &i, &fd, BPF_ANY);60++i;61}62}6364return 0;65}6667#endif /* FLOW_DISSECTOR_LOAD */686970