~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/tools/testing/selftests/bpf/flow_dissector_load.h

Version: ~ [ linux-5.17-rc1 ] ~ [ linux-5.16.2 ] ~ [ linux-5.15.16 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.93 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.173 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.225 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.262 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.297 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.299 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.18.140 ] ~ [ linux-3.16.85 ] ~ [ linux-3.14.79 ] ~ [ linux-3.12.74 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  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 
  8 static inline int bpf_flow_load(struct bpf_object **obj,
  9                                 const char *path,
 10                                 const char *section_name,
 11                                 const char *map_name,
 12                                 const char *keys_map_name,
 13                                 int *prog_fd,
 14                                 int *keys_fd)
 15 {
 16         struct bpf_program *prog, *main_prog;
 17         struct bpf_map *prog_array, *keys;
 18         int prog_array_fd;
 19         int ret, fd, i;
 20 
 21         ret = bpf_prog_load(path, BPF_PROG_TYPE_FLOW_DISSECTOR, obj,
 22                             prog_fd);
 23         if (ret)
 24                 return ret;
 25 
 26         main_prog = bpf_object__find_program_by_title(*obj, section_name);
 27         if (!main_prog)
 28                 return -1;
 29 
 30         *prog_fd = bpf_program__fd(main_prog);
 31         if (*prog_fd < 0)
 32                 return -1;
 33 
 34         prog_array = bpf_object__find_map_by_name(*obj, map_name);
 35         if (!prog_array)
 36                 return -1;
 37 
 38         prog_array_fd = bpf_map__fd(prog_array);
 39         if (prog_array_fd < 0)
 40                 return -1;
 41 
 42         if (keys_map_name && keys_fd) {
 43                 keys = bpf_object__find_map_by_name(*obj, keys_map_name);
 44                 if (!keys)
 45                         return -1;
 46 
 47                 *keys_fd = bpf_map__fd(keys);
 48                 if (*keys_fd < 0)
 49                         return -1;
 50         }
 51 
 52         i = 0;
 53         bpf_object__for_each_program(prog, *obj) {
 54                 fd = bpf_program__fd(prog);
 55                 if (fd < 0)
 56                         return fd;
 57 
 58                 if (fd != *prog_fd) {
 59                         bpf_map_update_elem(prog_array_fd, &i, &fd, BPF_ANY);
 60                         ++i;
 61                 }
 62         }
 63 
 64         return 0;
 65 }
 66 
 67 #endif /* FLOW_DISSECTOR_LOAD */
 68 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp