cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

flow_dissector_load.h (1403B)


      1/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */
      2#ifndef FLOW_DISSECTOR_LOAD
      3#define FLOW_DISSECTOR_LOAD
      4
      5#include <bpf/bpf.h>
      6#include <bpf/libbpf.h>
      7#include "testing_helpers.h"
      8
      9static inline int bpf_flow_load(struct bpf_object **obj,
     10				const char *path,
     11				const char *prog_name,
     12				const char *map_name,
     13				const char *keys_map_name,
     14				int *prog_fd,
     15				int *keys_fd)
     16{
     17	struct bpf_program *prog, *main_prog;
     18	struct bpf_map *prog_array, *keys;
     19	int prog_array_fd;
     20	int ret, fd, i;
     21
     22	ret = bpf_prog_test_load(path, BPF_PROG_TYPE_FLOW_DISSECTOR, obj,
     23			    prog_fd);
     24	if (ret)
     25		return ret;
     26
     27	main_prog = bpf_object__find_program_by_name(*obj, prog_name);
     28	if (!main_prog)
     29		return -1;
     30
     31	*prog_fd = bpf_program__fd(main_prog);
     32	if (*prog_fd < 0)
     33		return -1;
     34
     35	prog_array = bpf_object__find_map_by_name(*obj, map_name);
     36	if (!prog_array)
     37		return -1;
     38
     39	prog_array_fd = bpf_map__fd(prog_array);
     40	if (prog_array_fd < 0)
     41		return -1;
     42
     43	if (keys_map_name && keys_fd) {
     44		keys = bpf_object__find_map_by_name(*obj, keys_map_name);
     45		if (!keys)
     46			return -1;
     47
     48		*keys_fd = bpf_map__fd(keys);
     49		if (*keys_fd < 0)
     50			return -1;
     51	}
     52
     53	i = 0;
     54	bpf_object__for_each_program(prog, *obj) {
     55		fd = bpf_program__fd(prog);
     56		if (fd < 0)
     57			return fd;
     58
     59		if (fd != *prog_fd) {
     60			bpf_map_update_elem(prog_array_fd, &i, &fd, BPF_ANY);
     61			++i;
     62		}
     63	}
     64
     65	return 0;
     66}
     67
     68#endif /* FLOW_DISSECTOR_LOAD */