Home | History | Annotate | Download | only in tc
      1 /*
      2  * tc_bpf.h	BPF common code
      3  *
      4  *		This program is free software; you can distribute it and/or
      5  *		modify it under the terms of the GNU General Public License
      6  *		as published by the Free Software Foundation; either version
      7  *		2 of the License, or (at your option) any later version.
      8  *
      9  * Authors:	Daniel Borkmann <dborkman (at) redhat.com>
     10  *		Jiri Pirko <jiri (at) resnulli.us>
     11  */
     12 
     13 #ifndef _TC_BPF_H_
     14 #define _TC_BPF_H_ 1
     15 
     16 #include <linux/netlink.h>
     17 #include <linux/bpf.h>
     18 #include <linux/magic.h>
     19 
     20 #include "utils.h"
     21 #include "bpf_scm.h"
     22 
     23 enum {
     24 	BPF_NLA_OPS_LEN = 0,
     25 	BPF_NLA_OPS,
     26 	BPF_NLA_FD,
     27 	BPF_NLA_NAME,
     28 	__BPF_NLA_MAX,
     29 };
     30 
     31 #define BPF_NLA_MAX	__BPF_NLA_MAX
     32 
     33 #define BPF_ENV_UDS	"TC_BPF_UDS"
     34 #define BPF_ENV_MNT	"TC_BPF_MNT"
     35 #define BPF_ENV_NOLOG	"TC_BPF_NOLOG"
     36 
     37 #ifndef BPF_FS_MAGIC
     38 # define BPF_FS_MAGIC	0xcafe4a11
     39 #endif
     40 
     41 #define BPF_DIR_MNT	"/sys/fs/bpf"
     42 
     43 #define BPF_DIR_TC	"tc"
     44 #define BPF_DIR_GLOBALS	"globals"
     45 
     46 #ifndef TRACEFS_MAGIC
     47 # define TRACEFS_MAGIC	0x74726163
     48 #endif
     49 
     50 #define TRACE_DIR_MNT	"/sys/kernel/tracing"
     51 
     52 int bpf_trace_pipe(void);
     53 const char *bpf_default_section(const enum bpf_prog_type type);
     54 
     55 int bpf_parse_common(int *ptr_argc, char ***ptr_argv, const int *nla_tbl,
     56 		     enum bpf_prog_type type, const char **ptr_object,
     57 		     const char **ptr_uds_name, struct nlmsghdr *n);
     58 int bpf_graft_map(const char *map_path, uint32_t *key, int argc, char **argv);
     59 
     60 void bpf_print_ops(FILE *f, struct rtattr *bpf_ops, __u16 len);
     61 
     62 #ifdef HAVE_ELF
     63 int bpf_send_map_fds(const char *path, const char *obj);
     64 int bpf_recv_map_fds(const char *path, int *fds, struct bpf_map_aux *aux,
     65 		     unsigned int entries);
     66 #else
     67 static inline int bpf_send_map_fds(const char *path, const char *obj)
     68 {
     69 	return 0;
     70 }
     71 
     72 static inline int bpf_recv_map_fds(const char *path, int *fds,
     73 				   struct bpf_map_aux *aux,
     74 				   unsigned int entries)
     75 {
     76 	return -1;
     77 }
     78 #endif /* HAVE_ELF */
     79 #endif /* _TC_BPF_H_ */
     80