mirror of
https://git.kernel.org/pub/scm/network/iproute2/iproute2.git
synced 2024-11-16 14:35:34 +08:00
afc1a2000b
Make it easier to spot issues when loading the object file fails. This includes reporting in what pinned object specs differ, better indication when we've reached instruction limits. Don't retry to load a non relo program once we failed with bpf(2), and report out of bounds tail call key. Also, add truncation of huge log outputs by default. Sometimes errors are quite easy to spot by only looking at the tail of the verifier log, but logs can get huge in size e.g. up to few MB (due to verifier checking all possible program paths). Thus, by default limit output to the last 4096 bytes and indicate that it's truncated. For the full log, the verbose option can be used. Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
83 lines
1.9 KiB
C
83 lines
1.9 KiB
C
/*
|
|
* tc_bpf.h BPF common code
|
|
*
|
|
* This program is free software; you can distribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version
|
|
* 2 of the License, or (at your option) any later version.
|
|
*
|
|
* Authors: Daniel Borkmann <dborkman@redhat.com>
|
|
* Jiri Pirko <jiri@resnulli.us>
|
|
*/
|
|
|
|
#ifndef _TC_BPF_H_
|
|
#define _TC_BPF_H_ 1
|
|
|
|
#include <linux/netlink.h>
|
|
#include <linux/bpf.h>
|
|
#include <linux/magic.h>
|
|
|
|
#include "utils.h"
|
|
#include "bpf_scm.h"
|
|
|
|
enum {
|
|
BPF_NLA_OPS_LEN = 0,
|
|
BPF_NLA_OPS,
|
|
BPF_NLA_FD,
|
|
BPF_NLA_NAME,
|
|
__BPF_NLA_MAX,
|
|
};
|
|
|
|
#define BPF_NLA_MAX __BPF_NLA_MAX
|
|
|
|
#define BPF_ENV_UDS "TC_BPF_UDS"
|
|
#define BPF_ENV_MNT "TC_BPF_MNT"
|
|
|
|
#ifndef BPF_MAX_LOG
|
|
# define BPF_MAX_LOG 4096
|
|
#endif
|
|
|
|
#ifndef BPF_FS_MAGIC
|
|
# define BPF_FS_MAGIC 0xcafe4a11
|
|
#endif
|
|
|
|
#define BPF_DIR_MNT "/sys/fs/bpf"
|
|
|
|
#define BPF_DIR_TC "tc"
|
|
#define BPF_DIR_GLOBALS "globals"
|
|
|
|
#ifndef TRACEFS_MAGIC
|
|
# define TRACEFS_MAGIC 0x74726163
|
|
#endif
|
|
|
|
#define TRACE_DIR_MNT "/sys/kernel/tracing"
|
|
|
|
int bpf_trace_pipe(void);
|
|
const char *bpf_default_section(const enum bpf_prog_type type);
|
|
|
|
int bpf_parse_common(int *ptr_argc, char ***ptr_argv, const int *nla_tbl,
|
|
enum bpf_prog_type type, const char **ptr_object,
|
|
const char **ptr_uds_name, struct nlmsghdr *n);
|
|
int bpf_graft_map(const char *map_path, uint32_t *key, int argc, char **argv);
|
|
|
|
void bpf_print_ops(FILE *f, struct rtattr *bpf_ops, __u16 len);
|
|
|
|
#ifdef HAVE_ELF
|
|
int bpf_send_map_fds(const char *path, const char *obj);
|
|
int bpf_recv_map_fds(const char *path, int *fds, struct bpf_map_aux *aux,
|
|
unsigned int entries);
|
|
#else
|
|
static inline int bpf_send_map_fds(const char *path, const char *obj)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static inline int bpf_recv_map_fds(const char *path, int *fds,
|
|
struct bpf_map_aux *aux,
|
|
unsigned int entries)
|
|
{
|
|
return -1;
|
|
}
|
|
#endif /* HAVE_ELF */
|
|
#endif /* _TC_BPF_H_ */
|