2018-01-30 23:55:03 +03:00
/* SPDX-License-Identifier: LGPL-2.1 */
2015-07-01 05:14:03 +03:00
/*
* common eBPF ELF operations .
*
* Copyright ( C ) 2013 - 2015 Alexei Starovoitov < ast @ kernel . org >
* Copyright ( C ) 2015 Wang Nan < wangnan0 @ huawei . com >
* Copyright ( C ) 2015 Huawei Inc .
2016-07-04 14:02:42 +03:00
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation ;
* version 2.1 of the License ( not later ! )
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU Lesser General Public License for more details .
*
* You should have received a copy of the GNU Lesser General Public
* License along with this program ; if not , see < http : //www.gnu.org/licenses>
2015-07-01 05:14:03 +03:00
*/
# ifndef __BPF_BPF_H
# define __BPF_BPF_H
# include <linux/bpf.h>
2018-04-20 11:05:16 +03:00
# include <stdbool.h>
2017-02-07 23:56:05 +03:00
# include <stddef.h>
2015-07-01 05:14:03 +03:00
2018-04-19 01:56:05 +03:00
struct bpf_create_map_attr {
const char * name ;
enum bpf_map_type map_type ;
__u32 map_flags ;
__u32 key_size ;
__u32 value_size ;
__u32 max_entries ;
__u32 numa_node ;
__u32 btf_fd ;
2018-05-23 01:04:24 +03:00
__u32 btf_key_type_id ;
__u32 btf_value_type_id ;
2018-05-17 00:02:49 +03:00
__u32 map_ifindex ;
2018-08-08 11:01:31 +03:00
__u32 inner_map_fd ;
2018-04-19 01:56:05 +03:00
} ;
int bpf_create_map_xattr ( const struct bpf_create_map_attr * create_attr ) ;
2017-09-28 00:37:54 +03:00
int bpf_create_map_node ( enum bpf_map_type map_type , const char * name ,
int key_size , int value_size , int max_entries ,
__u32 map_flags , int node ) ;
int bpf_create_map_name ( enum bpf_map_type map_type , const char * name ,
int key_size , int value_size , int max_entries ,
__u32 map_flags ) ;
2015-07-01 05:14:03 +03:00
int bpf_create_map ( enum bpf_map_type map_type , int key_size , int value_size ,
2016-12-09 05:46:16 +03:00
int max_entries , __u32 map_flags ) ;
2017-09-28 00:37:54 +03:00
int bpf_create_map_in_map_node ( enum bpf_map_type map_type , const char * name ,
int key_size , int inner_map_fd , int max_entries ,
2017-08-18 21:28:01 +03:00
__u32 map_flags , int node ) ;
2017-09-28 00:37:54 +03:00
int bpf_create_map_in_map ( enum bpf_map_type map_type , const char * name ,
int key_size , int inner_map_fd , int max_entries ,
__u32 map_flags ) ;
2015-07-01 05:14:03 +03:00
2018-03-31 01:08:01 +03:00
struct bpf_load_program_attr {
enum bpf_prog_type prog_type ;
enum bpf_attach_type expected_attach_type ;
const char * name ;
const struct bpf_insn * insns ;
size_t insns_cnt ;
const char * license ;
__u32 kern_version ;
2018-05-17 00:02:49 +03:00
__u32 prog_ifindex ;
2018-03-31 01:08:01 +03:00
} ;
2015-07-01 05:14:06 +03:00
/* Recommend log buffer size */
2017-12-15 04:55:10 +03:00
# define BPF_LOG_BUF_SIZE (256 * 1024)
2018-03-31 01:08:01 +03:00
int bpf_load_program_xattr ( const struct bpf_load_program_attr * load_attr ,
char * log_buf , size_t log_buf_sz ) ;
2017-02-10 02:21:38 +03:00
int bpf_load_program ( enum bpf_prog_type type , const struct bpf_insn * insns ,
size_t insns_cnt , const char * license ,
2016-12-09 05:46:15 +03:00
__u32 kern_version , char * log_buf ,
2015-07-01 05:14:06 +03:00
size_t log_buf_sz ) ;
2017-05-10 21:42:48 +03:00
int bpf_verify_program ( enum bpf_prog_type type , const struct bpf_insn * insns ,
size_t insns_cnt , int strict_alignment ,
const char * license , __u32 kern_version ,
2017-07-21 01:00:22 +03:00
char * log_buf , size_t log_buf_sz , int log_level ) ;
2015-07-01 05:14:06 +03:00
2017-02-10 02:21:39 +03:00
int bpf_map_update_elem ( int fd , const void * key , const void * value ,
2016-12-09 05:46:15 +03:00
__u64 flags ) ;
2016-11-26 10:03:25 +03:00
2017-02-10 02:21:40 +03:00
int bpf_map_lookup_elem ( int fd , const void * key , void * value ) ;
2017-02-10 02:21:41 +03:00
int bpf_map_delete_elem ( int fd , const void * key ) ;
2017-02-10 02:21:42 +03:00
int bpf_map_get_next_key ( int fd , const void * key , void * next_key ) ;
2016-11-26 10:03:25 +03:00
int bpf_obj_pin ( int fd , const char * pathname ) ;
int bpf_obj_get ( const char * pathname ) ;
2017-02-11 07:28:24 +03:00
int bpf_prog_attach ( int prog_fd , int attachable_fd , enum bpf_attach_type type ,
unsigned int flags ) ;
2016-12-15 01:05:26 +03:00
int bpf_prog_detach ( int attachable_fd , enum bpf_attach_type type ) ;
2017-10-03 08:50:24 +03:00
int bpf_prog_detach2 ( int prog_fd , int attachable_fd , enum bpf_attach_type type ) ;
2017-03-31 07:45:39 +03:00
int bpf_prog_test_run ( int prog_fd , int repeat , void * data , __u32 size ,
void * data_out , __u32 * size_out , __u32 * retval ,
__u32 * duration ) ;
2017-06-05 22:15:53 +03:00
int bpf_prog_get_next_id ( __u32 start_id , __u32 * next_id ) ;
int bpf_map_get_next_id ( __u32 start_id , __u32 * next_id ) ;
int bpf_prog_get_fd_by_id ( __u32 id ) ;
int bpf_map_get_fd_by_id ( __u32 id ) ;
2018-05-05 00:49:55 +03:00
int bpf_btf_get_fd_by_id ( __u32 id ) ;
2017-06-05 22:15:53 +03:00
int bpf_obj_get_info_by_fd ( int prog_fd , void * info , __u32 * info_len ) ;
2017-10-03 08:50:27 +03:00
int bpf_prog_query ( int target_fd , enum bpf_attach_type type , __u32 query_flags ,
__u32 * attach_flags , __u32 * prog_ids , __u32 * prog_cnt ) ;
2018-03-28 22:05:38 +03:00
int bpf_raw_tracepoint_open ( const char * name , int prog_fd ) ;
2018-04-19 01:56:05 +03:00
int bpf_load_btf ( void * btf , __u32 btf_size , char * log_buf , __u32 log_buf_size ,
bool do_log ) ;
2018-05-24 21:21:10 +03:00
int bpf_task_fd_query ( int pid , int fd , __u32 flags , char * buf , __u32 * buf_len ,
__u32 * prog_id , __u32 * fd_type , __u64 * probe_offset ,
__u64 * probe_addr ) ;
2015-07-01 05:14:03 +03:00
# endif