(root)/
strace-6.5/
src/
bpf_attr.h
       1  /*
       2   * Copyright (c) 2015-2018 Dmitry V. Levin <ldv@strace.io>
       3   * Copyright (c) 2018-2023 The strace developers.
       4   * All rights reserved.
       5   *
       6   * SPDX-License-Identifier: LGPL-2.1-or-later
       7   */
       8  
       9  #ifndef STRACE_BPF_ATTR_H
      10  # define STRACE_BPF_ATTR_H
      11  
      12  /*
      13   * The policy is that all fields of type uint64_t in this header file
      14   * must have ATTRIBUTE_ALIGNED(8).
      15   *
      16   * This should not cause any contradictions with <linux/bpf.h>
      17   * unless the latter is buggy.
      18   *
      19   * By word "buggy" I mean containing such changes as Linux kernel commit
      20   * v4.16-rc1~123^2~109^2~5^2~4.
      21   */
      22  
      23  # ifndef BPF_OBJ_NAME_LEN
      24  #  define BPF_OBJ_NAME_LEN 16U
      25  # else
      26  #  if BPF_OBJ_NAME_LEN != 16U
      27  #   error "Unexpected value of BPF_OBJ_NAME_LEN"
      28  #  endif
      29  # endif
      30  
      31  # ifndef BPF_TAG_SIZE
      32  #  define BPF_TAG_SIZE 8
      33  # else
      34  #  if BPF_TAG_SIZE != 8
      35  #   error "Unexpected value of BPF_TAG_SIZE"
      36  #  endif
      37  # endif
      38  
      39  struct BPF_MAP_CREATE_struct {
      40  	uint32_t map_type;
      41  	uint32_t key_size;
      42  	uint32_t value_size;
      43  	uint32_t max_entries;
      44  	uint32_t map_flags;
      45  	uint32_t inner_map_fd;
      46  	uint32_t numa_node;
      47  	char     map_name[BPF_OBJ_NAME_LEN];
      48  	uint32_t map_ifindex;
      49  	uint32_t btf_fd;
      50  	uint32_t btf_key_type_id;
      51  	uint32_t btf_value_type_id;
      52  	uint32_t btf_vmlinux_value_type_id;
      53  	uint64_t ATTRIBUTE_ALIGNED(8) map_extra;
      54  };
      55  
      56  # define BPF_MAP_CREATE_struct_size \
      57  	sizeof(struct BPF_MAP_CREATE_struct)
      58  # define expected_BPF_MAP_CREATE_struct_size 72
      59  
      60  struct BPF_MAP_LOOKUP_ELEM_struct {
      61  	uint32_t map_fd;
      62  	uint64_t ATTRIBUTE_ALIGNED(8) key;
      63  	uint64_t ATTRIBUTE_ALIGNED(8) value;
      64  	uint64_t ATTRIBUTE_ALIGNED(8) flags;
      65  };
      66  
      67  # define BPF_MAP_LOOKUP_ELEM_struct_size \
      68  	sizeof(struct BPF_MAP_LOOKUP_ELEM_struct)
      69  # define expected_BPF_MAP_LOOKUP_ELEM_struct_size 32
      70  
      71  struct BPF_MAP_UPDATE_ELEM_struct {
      72  	uint32_t map_fd;
      73  	uint64_t ATTRIBUTE_ALIGNED(8) key;
      74  	uint64_t ATTRIBUTE_ALIGNED(8) value;
      75  	uint64_t ATTRIBUTE_ALIGNED(8) flags;
      76  };
      77  
      78  # define BPF_MAP_UPDATE_ELEM_struct_size \
      79  	sizeof(struct BPF_MAP_UPDATE_ELEM_struct)
      80  # define expected_BPF_MAP_UPDATE_ELEM_struct_size 32
      81  
      82  struct BPF_MAP_DELETE_ELEM_struct {
      83  	uint32_t map_fd;
      84  	uint64_t ATTRIBUTE_ALIGNED(8) key;
      85  };
      86  
      87  # define BPF_MAP_DELETE_ELEM_struct_size \
      88  	sizeof(struct BPF_MAP_DELETE_ELEM_struct)
      89  # define expected_BPF_MAP_DELETE_ELEM_struct_size 16
      90  
      91  struct BPF_MAP_GET_NEXT_KEY_struct {
      92  	uint32_t map_fd;
      93  	uint64_t ATTRIBUTE_ALIGNED(8) key;
      94  	uint64_t ATTRIBUTE_ALIGNED(8) next_key;
      95  };
      96  
      97  # define BPF_MAP_GET_NEXT_KEY_struct_size \
      98  	sizeof(struct BPF_MAP_GET_NEXT_KEY_struct)
      99  # define expected_BPF_MAP_GET_NEXT_KEY_struct_size 24
     100  
     101  struct BPF_MAP_FREEZE_struct {
     102  	uint32_t map_fd;
     103  };
     104  
     105  # define BPF_MAP_FREEZE_struct_size \
     106  	sizeof(struct BPF_MAP_FREEZE_struct)
     107  # define expected_BPF_MAP_FREEZE_struct_size 4
     108  
     109  struct BPF_PROG_LOAD_struct {
     110  	uint32_t prog_type;
     111  	uint32_t insn_cnt;
     112  	uint64_t ATTRIBUTE_ALIGNED(8) insns;
     113  	uint64_t ATTRIBUTE_ALIGNED(8) license;
     114  	uint32_t log_level;
     115  	uint32_t log_size;
     116  	uint64_t ATTRIBUTE_ALIGNED(8) log_buf;
     117  	uint32_t kern_version;
     118  	uint32_t prog_flags;
     119  	char     prog_name[BPF_OBJ_NAME_LEN];
     120  	uint32_t prog_ifindex;
     121  	uint32_t expected_attach_type;
     122  	uint32_t prog_btf_fd;
     123  	uint32_t func_info_rec_size;
     124  	uint64_t ATTRIBUTE_ALIGNED(8) func_info;
     125  	uint32_t func_info_cnt;
     126  	uint32_t line_info_rec_size;
     127  	uint64_t ATTRIBUTE_ALIGNED(8) line_info;
     128  	uint32_t line_info_cnt;
     129  	uint32_t attach_btf_id;
     130  	uint32_t attach_prog_fd;
     131  	uint32_t pad;
     132  	uint64_t ATTRIBUTE_ALIGNED(8) fd_array;
     133  };
     134  
     135  # define BPF_PROG_LOAD_struct_size \
     136  	sizeof(struct BPF_PROG_LOAD_struct)
     137  # define expected_BPF_PROG_LOAD_struct_size 128
     138  
     139  struct BPF_OBJ_PIN_struct {
     140  	uint64_t ATTRIBUTE_ALIGNED(8) pathname;
     141  	uint32_t bpf_fd;
     142  	uint32_t file_flags;
     143  	uint32_t path_fd;
     144  };
     145  
     146  # define BPF_OBJ_PIN_struct_size \
     147  	offsetofend(struct BPF_OBJ_PIN_struct, path_fd)
     148  # define expected_BPF_OBJ_PIN_struct_size 20
     149  
     150  # define BPF_OBJ_GET_struct BPF_OBJ_PIN_struct
     151  # define BPF_OBJ_GET_struct_size BPF_OBJ_PIN_struct_size
     152  
     153  struct BPF_PROG_ATTACH_struct {
     154  	uint32_t target_fd;
     155  	uint32_t attach_bpf_fd;
     156  	uint32_t attach_type;
     157  	uint32_t attach_flags;
     158  	uint32_t replace_bpf_fd;
     159  };
     160  
     161  # define BPF_PROG_ATTACH_struct_size \
     162  	sizeof(struct BPF_PROG_ATTACH_struct)
     163  # define expected_BPF_PROG_ATTACH_struct_size 20
     164  
     165  struct BPF_PROG_DETACH_struct {
     166  	uint32_t target_fd;
     167  	uint32_t dummy;
     168  	uint32_t attach_type;
     169  };
     170  
     171  # define BPF_PROG_DETACH_struct_size \
     172  	sizeof(struct BPF_PROG_DETACH_struct)
     173  # define expected_BPF_PROG_DETACH_struct_size 12
     174  
     175  struct BPF_PROG_TEST_RUN_struct /* test */ {
     176  	uint32_t prog_fd;
     177  	uint32_t retval;
     178  	uint32_t data_size_in;
     179  	uint32_t data_size_out;
     180  	uint64_t ATTRIBUTE_ALIGNED(8) data_in;
     181  	uint64_t ATTRIBUTE_ALIGNED(8) data_out;
     182  	uint32_t repeat;
     183  	uint32_t duration;
     184  	uint32_t ctx_size_in;
     185  	uint32_t ctx_size_out;
     186  	uint64_t ATTRIBUTE_ALIGNED(8) ctx_in;
     187  	uint64_t ATTRIBUTE_ALIGNED(8) ctx_out;
     188  	uint32_t flags;
     189  	uint32_t cpu;
     190  	uint32_t batch_size;
     191  };
     192  
     193  # define BPF_PROG_TEST_RUN_struct_size \
     194  	offsetofend(struct BPF_PROG_TEST_RUN_struct, batch_size)
     195  	/* sizeof(struct BPF_PROG_TEST_RUN_struct) */
     196  # define expected_BPF_PROG_TEST_RUN_struct_size 76
     197  
     198  struct BPF_PROG_GET_NEXT_ID_struct {
     199  	uint32_t start_id;
     200  	uint32_t next_id;
     201  	uint32_t open_flags;
     202  };
     203  
     204  # define BPF_PROG_GET_NEXT_ID_struct_size \
     205  	sizeof(struct BPF_PROG_GET_NEXT_ID_struct)
     206  # define expected_BPF_PROG_GET_NEXT_ID_struct_size 12
     207  
     208  # define BPF_MAP_GET_NEXT_ID_struct BPF_PROG_GET_NEXT_ID_struct
     209  # define BPF_MAP_GET_NEXT_ID_struct_size BPF_PROG_GET_NEXT_ID_struct_size
     210  
     211  # define BPF_BTF_GET_NEXT_ID_struct BPF_PROG_GET_NEXT_ID_struct
     212  # define BPF_BTF_GET_NEXT_ID_struct_size BPF_PROG_GET_NEXT_ID_struct_size
     213  
     214  struct BPF_PROG_GET_FD_BY_ID_struct {
     215  	uint32_t prog_id;
     216  	uint32_t next_id;
     217  	uint32_t open_flags;
     218  };
     219  
     220  # define BPF_PROG_GET_FD_BY_ID_struct_size \
     221  	sizeof(struct BPF_PROG_GET_FD_BY_ID_struct)
     222  # define expected_BPF_PROG_GET_FD_BY_ID_struct_size 12
     223  
     224  struct BPF_MAP_GET_FD_BY_ID_struct {
     225  	uint32_t map_id;
     226  	uint32_t next_id;
     227  	uint32_t open_flags;
     228  };
     229  
     230  # define BPF_MAP_GET_FD_BY_ID_struct_size \
     231  	sizeof(struct BPF_MAP_GET_FD_BY_ID_struct)
     232  # define expected_BPF_MAP_GET_FD_BY_ID_struct_size 12
     233  
     234  struct BPF_OBJ_GET_INFO_BY_FD_struct /* info */ {
     235  	uint32_t bpf_fd;
     236  	uint32_t info_len;
     237  	uint64_t ATTRIBUTE_ALIGNED(8) info;
     238  };
     239  
     240  # define BPF_OBJ_GET_INFO_BY_FD_struct_size \
     241  	sizeof(struct BPF_OBJ_GET_INFO_BY_FD_struct)
     242  # define expected_BPF_OBJ_GET_INFO_BY_FD_struct_size 16
     243  
     244  struct BPF_PROG_QUERY_struct /* query */ {
     245  	uint32_t target_fd;
     246  	uint32_t attach_type;
     247  	uint32_t query_flags;
     248  	uint32_t attach_flags;
     249  	uint64_t ATTRIBUTE_ALIGNED(8) prog_ids;
     250  	uint32_t prog_cnt;
     251  };
     252  
     253  # define BPF_PROG_QUERY_struct_size \
     254  	offsetofend(struct BPF_PROG_QUERY_struct, prog_cnt)
     255  # define expected_BPF_PROG_QUERY_struct_size 28
     256  
     257  struct BPF_RAW_TRACEPOINT_OPEN_struct /* raw_tracepoint */ {
     258  	uint64_t ATTRIBUTE_ALIGNED(8) name;
     259  	uint32_t prog_fd;
     260  };
     261  
     262  # define BPF_RAW_TRACEPOINT_OPEN_struct_size \
     263  	offsetofend(struct BPF_RAW_TRACEPOINT_OPEN_struct, prog_fd)
     264  # define expected_BPF_RAW_TRACEPOINT_OPEN_struct_size 12
     265  
     266  struct BPF_BTF_LOAD_struct {
     267  	uint64_t ATTRIBUTE_ALIGNED(8) btf;
     268  	uint64_t ATTRIBUTE_ALIGNED(8) btf_log_buf;
     269  	uint32_t btf_size;
     270  	uint32_t btf_log_size;
     271  	uint32_t btf_log_level;
     272  };
     273  
     274  # define BPF_BTF_LOAD_struct_size \
     275  	offsetofend(struct BPF_BTF_LOAD_struct, btf_log_level)
     276  # define expected_BPF_BTF_LOAD_struct_size 28
     277  
     278  struct BPF_BTF_GET_FD_BY_ID_struct {
     279  	uint32_t btf_id;
     280  };
     281  
     282  # define BPF_BTF_GET_FD_BY_ID_struct_size \
     283  	sizeof(struct BPF_BTF_GET_FD_BY_ID_struct)
     284  # define expected_BPF_BTF_GET_FD_BY_ID_struct_size 4
     285  
     286  struct BPF_TASK_FD_QUERY_struct /* task_fd_query */ {
     287  	uint32_t pid;
     288  	uint32_t fd;
     289  	uint32_t flags;
     290  	uint32_t buf_len;
     291  	uint64_t ATTRIBUTE_ALIGNED(8) buf;
     292  	uint32_t prog_id;
     293  	uint32_t fd_type;
     294  	uint64_t ATTRIBUTE_ALIGNED(8) probe_offset;
     295  	uint64_t ATTRIBUTE_ALIGNED(8) probe_addr;
     296  };
     297  
     298  # define BPF_TASK_FD_QUERY_struct_size \
     299  	sizeof(struct BPF_TASK_FD_QUERY_struct)
     300  # define expected_BPF_TASK_FD_QUERY_struct_size 48
     301  
     302  struct bpf_map_info_struct {
     303  	uint32_t type;
     304  	uint32_t id;
     305  	uint32_t key_size;
     306  	uint32_t value_size;
     307  	uint32_t max_entries;
     308  	uint32_t map_flags;
     309  	char     name[BPF_OBJ_NAME_LEN];
     310  	uint32_t ifindex;
     311  	uint32_t btf_vmlinux_value_type_id;
     312  	/*
     313  	 * The kernel UAPI is broken by Linux commit
     314  	 * v4.16-rc1~123^2~109^2~5^2~4 .
     315  	 */
     316  	uint64_t ATTRIBUTE_ALIGNED(8) netns_dev; /* skip check */
     317  	uint64_t ATTRIBUTE_ALIGNED(8) netns_ino; /* skip check */
     318  	uint32_t btf_id;
     319  	uint32_t btf_key_type_id;
     320  	uint32_t btf_value_type_id;
     321  	uint32_t pad;
     322  	uint64_t ATTRIBUTE_ALIGNED(8) map_extra;
     323  };
     324  
     325  # define bpf_map_info_struct_size \
     326  	sizeof(struct bpf_map_info_struct)
     327  # define expected_bpf_map_info_struct_size 88
     328  
     329  struct bpf_prog_info_struct {
     330  	uint32_t type;
     331  	uint32_t id;
     332  	uint8_t  tag[BPF_TAG_SIZE];
     333  	uint32_t jited_prog_len;
     334  	uint32_t xlated_prog_len;
     335  	uint64_t ATTRIBUTE_ALIGNED(8) jited_prog_insns;
     336  	uint64_t ATTRIBUTE_ALIGNED(8) xlated_prog_insns;
     337  	uint64_t ATTRIBUTE_ALIGNED(8) load_time;
     338  	uint32_t created_by_uid;
     339  	uint32_t nr_map_ids;
     340  	uint64_t ATTRIBUTE_ALIGNED(8) map_ids;
     341  	char     name[BPF_OBJ_NAME_LEN];
     342  	uint32_t ifindex;
     343  	uint32_t gpl_compatible:1;
     344  	/*
     345  	 * The kernel UAPI is broken by Linux commit
     346  	 * v4.16-rc1~123^2~227^2~5^2~2 .
     347  	 */
     348  	uint64_t ATTRIBUTE_ALIGNED(8) netns_dev; /* skip check */
     349  	uint64_t ATTRIBUTE_ALIGNED(8) netns_ino; /* skip check */
     350  	uint32_t nr_jited_ksyms;
     351  	uint32_t nr_jited_func_lens;
     352  	uint64_t ATTRIBUTE_ALIGNED(8) jited_ksyms;
     353  	uint64_t ATTRIBUTE_ALIGNED(8) jited_func_lens;
     354  	uint32_t btf_id;
     355  	uint32_t func_info_rec_size;
     356  	uint64_t ATTRIBUTE_ALIGNED(8) func_info;
     357  	uint32_t nr_func_info;
     358  	uint32_t nr_line_info;
     359  	uint64_t ATTRIBUTE_ALIGNED(8) line_info;
     360  	uint64_t ATTRIBUTE_ALIGNED(8) jited_line_info;
     361  	uint32_t nr_jited_line_info;
     362  	uint32_t line_info_rec_size;
     363  	uint32_t jited_line_info_rec_size;
     364  	uint32_t nr_prog_tags;
     365  	uint64_t ATTRIBUTE_ALIGNED(8) prog_tags;
     366  	uint64_t ATTRIBUTE_ALIGNED(8) run_time_ns;
     367  	uint64_t ATTRIBUTE_ALIGNED(8) run_cnt;
     368  	uint64_t ATTRIBUTE_ALIGNED(8) recursion_misses;
     369  	uint32_t verified_insns;
     370  };
     371  
     372  # define bpf_prog_info_struct_size \
     373  	offsetofend(struct bpf_prog_info_struct, verified_insns)
     374  # define expected_bpf_prog_info_struct_size 220
     375  
     376  struct BPF_MAP_LOOKUP_BATCH_struct /* batch */ {
     377  	uint64_t ATTRIBUTE_ALIGNED(8) in_batch;
     378  	uint64_t ATTRIBUTE_ALIGNED(8) out_batch;
     379  	uint64_t ATTRIBUTE_ALIGNED(8) keys;
     380  	uint64_t ATTRIBUTE_ALIGNED(8) values;
     381  	uint32_t count;
     382  	uint32_t map_fd;
     383  	uint64_t ATTRIBUTE_ALIGNED(8) elem_flags;
     384  	uint64_t ATTRIBUTE_ALIGNED(8) flags;
     385  };
     386  
     387  # define BPF_MAP_LOOKUP_BATCH_struct_size \
     388  	sizeof(struct BPF_MAP_LOOKUP_BATCH_struct)
     389  # define expected_BPF_MAP_LOOKUP_BATCH_struct_size 56
     390  
     391  # define BPF_MAP_LOOKUP_AND_DELETE_BATCH_struct BPF_MAP_LOOKUP_BATCH_struct
     392  # define BPF_MAP_LOOKUP_AND_DELETE_BATCH_struct_size BPF_MAP_LOOKUP_BATCH_struct_size
     393  
     394  # define BPF_MAP_UPDATE_BATCH_struct BPF_MAP_LOOKUP_BATCH_struct
     395  # define BPF_MAP_UPDATE_BATCH_struct_size BPF_MAP_LOOKUP_BATCH_struct_size
     396  
     397  # define BPF_MAP_DELETE_BATCH_struct BPF_MAP_LOOKUP_BATCH_struct
     398  # define BPF_MAP_DELETE_BATCH_struct_size BPF_MAP_LOOKUP_BATCH_struct_size
     399  
     400  struct BPF_LINK_CREATE_struct /* link_create */ {
     401  	uint32_t prog_fd;
     402  	uint32_t target_fd;
     403  	uint32_t attach_type;
     404  	uint32_t flags;
     405  	union {
     406  		uint32_t target_btf_id;
     407  
     408  		struct {
     409  			uint64_t ATTRIBUTE_ALIGNED(8) iter_info;
     410  			uint32_t iter_info_len;
     411  		};
     412  
     413  		struct {
     414  			uint64_t ATTRIBUTE_ALIGNED(8) bpf_cookie;
     415  		} perf_event;
     416  
     417  		struct {
     418  			uint32_t flags;
     419  			uint32_t cnt;
     420  			uint64_t ATTRIBUTE_ALIGNED(8) syms;
     421  			uint64_t ATTRIBUTE_ALIGNED(8) addrs;
     422  			uint64_t ATTRIBUTE_ALIGNED(8) cookies;
     423  		} kprobe_multi;
     424  	};
     425  };
     426  
     427  # define BPF_LINK_CREATE_struct_size \
     428  	sizeof(struct BPF_LINK_CREATE_struct)
     429  # define expected_BPF_LINK_CREATE_struct_size 48
     430  
     431  struct BPF_LINK_UPDATE_struct /* link_update */ {
     432  	uint32_t link_fd;
     433  	uint32_t new_prog_fd;
     434  	uint32_t flags;
     435  	uint32_t old_prog_fd;
     436  };
     437  
     438  # define BPF_LINK_UPDATE_struct_size \
     439  	sizeof(struct BPF_LINK_UPDATE_struct)
     440  # define expected_BPF_LINK_UPDATE_struct_size 16
     441  
     442  struct BPF_LINK_GET_FD_BY_ID_struct {
     443  	uint32_t link_id;
     444  };
     445  
     446  # define BPF_LINK_GET_FD_BY_ID_struct_size \
     447  	sizeof(struct BPF_LINK_GET_FD_BY_ID_struct)
     448  # define expected_BPF_LINK_GET_FD_BY_ID_struct_size 4
     449  
     450  struct BPF_ENABLE_STATS_struct /* enable_stats */ {
     451  	uint32_t type;
     452  };
     453  
     454  # define BPF_ENABLE_STATS_struct_size \
     455  	sizeof(struct BPF_ENABLE_STATS_struct)
     456  # define expected_BPF_ENABLE_STATS_struct_size 4
     457  
     458  struct BPF_ITER_CREATE_struct /* iter_create */ {
     459  	uint32_t link_fd;
     460  	uint32_t flags;
     461  };
     462  
     463  # define BPF_ITER_CREATE_struct_size \
     464  	sizeof(struct BPF_ITER_CREATE_struct)
     465  # define expected_BPF_ITER_CREATE_struct_size 8
     466  
     467  struct BPF_LINK_DETACH_struct /* link_detach */ {
     468  	uint32_t link_fd;
     469  };
     470  
     471  # define BPF_LINK_DETACH_struct_size \
     472  	sizeof(struct BPF_LINK_DETACH_struct)
     473  # define expected_BPF_LINK_DETACH_struct_size 4
     474  
     475  struct BPF_PROG_BIND_MAP_struct /* prog_bind_map */ {
     476  	uint32_t prog_fd;
     477  	uint32_t map_fd;
     478  	uint32_t flags;
     479  };
     480  
     481  # define BPF_PROG_BIND_MAP_struct_size \
     482  	sizeof(struct BPF_PROG_BIND_MAP_struct)
     483  # define expected_BPF_PROG_BIND_MAP_struct_size 12
     484  
     485  #endif /* !STRACE_BPF_ATTR_H */