11d129d191a3a632e05cf440c15aaffe23e0fa798Jiri Pirko/* 21d129d191a3a632e05cf440c15aaffe23e0fa798Jiri Pirko * tc_bpf.h BPF common code 31d129d191a3a632e05cf440c15aaffe23e0fa798Jiri Pirko * 41d129d191a3a632e05cf440c15aaffe23e0fa798Jiri Pirko * This program is free software; you can distribute it and/or 51d129d191a3a632e05cf440c15aaffe23e0fa798Jiri Pirko * modify it under the terms of the GNU General Public License 61d129d191a3a632e05cf440c15aaffe23e0fa798Jiri Pirko * as published by the Free Software Foundation; either version 71d129d191a3a632e05cf440c15aaffe23e0fa798Jiri Pirko * 2 of the License, or (at your option) any later version. 81d129d191a3a632e05cf440c15aaffe23e0fa798Jiri Pirko * 91d129d191a3a632e05cf440c15aaffe23e0fa798Jiri Pirko * Authors: Daniel Borkmann <dborkman@redhat.com> 101d129d191a3a632e05cf440c15aaffe23e0fa798Jiri Pirko * Jiri Pirko <jiri@resnulli.us> 111d129d191a3a632e05cf440c15aaffe23e0fa798Jiri Pirko */ 121d129d191a3a632e05cf440c15aaffe23e0fa798Jiri Pirko 131d129d191a3a632e05cf440c15aaffe23e0fa798Jiri Pirko#ifndef _TC_BPF_H_ 141d129d191a3a632e05cf440c15aaffe23e0fa798Jiri Pirko#define _TC_BPF_H_ 1 151d129d191a3a632e05cf440c15aaffe23e0fa798Jiri Pirko 161d129d191a3a632e05cf440c15aaffe23e0fa798Jiri Pirko#include <linux/netlink.h> 1711c39b5e98a163889fe5e1840e1b2a105bc33680Daniel Borkmann#include <linux/bpf.h> 1832e93fb7f66d55d597b52ec3b10fd44a47784114Daniel Borkmann#include <linux/magic.h> 1911c39b5e98a163889fe5e1840e1b2a105bc33680Daniel Borkmann 2011c39b5e98a163889fe5e1840e1b2a105bc33680Daniel Borkmann#include "utils.h" 214bd624467bc6f8f6e8b4c676f3dd8ae7593fbe70Daniel Borkmann#include "bpf_scm.h" 2211c39b5e98a163889fe5e1840e1b2a105bc33680Daniel Borkmann 2332e93fb7f66d55d597b52ec3b10fd44a47784114Daniel Borkmannenum { 2432e93fb7f66d55d597b52ec3b10fd44a47784114Daniel Borkmann BPF_NLA_OPS_LEN = 0, 2532e93fb7f66d55d597b52ec3b10fd44a47784114Daniel Borkmann BPF_NLA_OPS, 2632e93fb7f66d55d597b52ec3b10fd44a47784114Daniel Borkmann BPF_NLA_FD, 2732e93fb7f66d55d597b52ec3b10fd44a47784114Daniel Borkmann BPF_NLA_NAME, 2832e93fb7f66d55d597b52ec3b10fd44a47784114Daniel Borkmann __BPF_NLA_MAX, 2932e93fb7f66d55d597b52ec3b10fd44a47784114Daniel Borkmann}; 3032e93fb7f66d55d597b52ec3b10fd44a47784114Daniel Borkmann 3132e93fb7f66d55d597b52ec3b10fd44a47784114Daniel Borkmann#define BPF_NLA_MAX __BPF_NLA_MAX 3232e93fb7f66d55d597b52ec3b10fd44a47784114Daniel Borkmann 3388eea5395483bb26a3b5fbbad66334feeb1ec3b6Daniel Borkmann#define BPF_ENV_UDS "TC_BPF_UDS" 3432e93fb7f66d55d597b52ec3b10fd44a47784114Daniel Borkmann#define BPF_ENV_MNT "TC_BPF_MNT" 3532e93fb7f66d55d597b52ec3b10fd44a47784114Daniel Borkmann#define BPF_ENV_NOLOG "TC_BPF_NOLOG" 3688eea5395483bb26a3b5fbbad66334feeb1ec3b6Daniel Borkmann 3732e93fb7f66d55d597b52ec3b10fd44a47784114Daniel Borkmann#ifndef BPF_FS_MAGIC 3832e93fb7f66d55d597b52ec3b10fd44a47784114Daniel Borkmann# define BPF_FS_MAGIC 0xcafe4a11 3932e93fb7f66d55d597b52ec3b10fd44a47784114Daniel Borkmann#endif 401d129d191a3a632e05cf440c15aaffe23e0fa798Jiri Pirko 4132e93fb7f66d55d597b52ec3b10fd44a47784114Daniel Borkmann#define BPF_DIR_MNT "/sys/fs/bpf" 4232e93fb7f66d55d597b52ec3b10fd44a47784114Daniel Borkmann 4332e93fb7f66d55d597b52ec3b10fd44a47784114Daniel Borkmann#define BPF_DIR_TC "tc" 4432e93fb7f66d55d597b52ec3b10fd44a47784114Daniel Borkmann#define BPF_DIR_GLOBALS "globals" 4532e93fb7f66d55d597b52ec3b10fd44a47784114Daniel Borkmann 4632e93fb7f66d55d597b52ec3b10fd44a47784114Daniel Borkmann#ifndef TRACEFS_MAGIC 4732e93fb7f66d55d597b52ec3b10fd44a47784114Daniel Borkmann# define TRACEFS_MAGIC 0x74726163 4832e93fb7f66d55d597b52ec3b10fd44a47784114Daniel Borkmann#endif 4932e93fb7f66d55d597b52ec3b10fd44a47784114Daniel Borkmann 5032e93fb7f66d55d597b52ec3b10fd44a47784114Daniel Borkmann#define TRACE_DIR_MNT "/sys/kernel/tracing" 5132e93fb7f66d55d597b52ec3b10fd44a47784114Daniel Borkmann 5232e93fb7f66d55d597b52ec3b10fd44a47784114Daniel Borkmannint bpf_trace_pipe(void); 536256f8c9e45f01187b297a576e148534a393c990Daniel Borkmannconst char *bpf_default_section(const enum bpf_prog_type type); 546256f8c9e45f01187b297a576e148534a393c990Daniel Borkmann 5532e93fb7f66d55d597b52ec3b10fd44a47784114Daniel Borkmannint bpf_parse_common(int *ptr_argc, char ***ptr_argv, const int *nla_tbl, 5632e93fb7f66d55d597b52ec3b10fd44a47784114Daniel Borkmann enum bpf_prog_type type, const char **ptr_object, 5732e93fb7f66d55d597b52ec3b10fd44a47784114Daniel Borkmann const char **ptr_uds_name, struct nlmsghdr *n); 5891d88eeb10cd4f51e3b5c675c7aee4ae1e41ff16Daniel Borkmannint bpf_graft_map(const char *map_path, uint32_t *key, int argc, char **argv); 594bd624467bc6f8f6e8b4c676f3dd8ae7593fbe70Daniel Borkmann 6032e93fb7f66d55d597b52ec3b10fd44a47784114Daniel Borkmannvoid bpf_print_ops(FILE *f, struct rtattr *bpf_ops, __u16 len); 6132e93fb7f66d55d597b52ec3b10fd44a47784114Daniel Borkmann 6232e93fb7f66d55d597b52ec3b10fd44a47784114Daniel Borkmann#ifdef HAVE_ELF 634bd624467bc6f8f6e8b4c676f3dd8ae7593fbe70Daniel Borkmannint bpf_send_map_fds(const char *path, const char *obj); 644bd624467bc6f8f6e8b4c676f3dd8ae7593fbe70Daniel Borkmannint bpf_recv_map_fds(const char *path, int *fds, struct bpf_map_aux *aux, 654bd624467bc6f8f6e8b4c676f3dd8ae7593fbe70Daniel Borkmann unsigned int entries); 6611c39b5e98a163889fe5e1840e1b2a105bc33680Daniel Borkmann#else 674bd624467bc6f8f6e8b4c676f3dd8ae7593fbe70Daniel Borkmannstatic inline int bpf_send_map_fds(const char *path, const char *obj) 686256f8c9e45f01187b297a576e148534a393c990Daniel Borkmann{ 696256f8c9e45f01187b297a576e148534a393c990Daniel Borkmann return 0; 706256f8c9e45f01187b297a576e148534a393c990Daniel Borkmann} 714bd624467bc6f8f6e8b4c676f3dd8ae7593fbe70Daniel Borkmann 724bd624467bc6f8f6e8b4c676f3dd8ae7593fbe70Daniel Borkmannstatic inline int bpf_recv_map_fds(const char *path, int *fds, 734bd624467bc6f8f6e8b4c676f3dd8ae7593fbe70Daniel Borkmann struct bpf_map_aux *aux, 744bd624467bc6f8f6e8b4c676f3dd8ae7593fbe70Daniel Borkmann unsigned int entries) 754bd624467bc6f8f6e8b4c676f3dd8ae7593fbe70Daniel Borkmann{ 764bd624467bc6f8f6e8b4c676f3dd8ae7593fbe70Daniel Borkmann return -1; 774bd624467bc6f8f6e8b4c676f3dd8ae7593fbe70Daniel Borkmann} 7811c39b5e98a163889fe5e1840e1b2a105bc33680Daniel Borkmann#endif /* HAVE_ELF */ 7911c39b5e98a163889fe5e1840e1b2a105bc33680Daniel Borkmann#endif /* _TC_BPF_H_ */ 80