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