blob: 208de7c31e60ef15501fe417394e69a55b1f0aa8 [file] [log] [blame]
Wang Nane3ed2fe2015-07-01 02:14:03 +00001/*
2 * common eBPF ELF operations.
3 *
4 * Copyright (C) 2013-2015 Alexei Starovoitov <ast@kernel.org>
5 * Copyright (C) 2015 Wang Nan <wangnan0@huawei.com>
6 * Copyright (C) 2015 Huawei Inc.
7 */
8
9#include <stdlib.h>
10#include <memory.h>
11#include <unistd.h>
12#include <asm/unistd.h>
13#include <linux/bpf.h>
14#include "bpf.h"
15
16/*
17 * When building perf, unistd.h is override. Define __NR_bpf is
18 * required to be defined.
19 */
20#ifndef __NR_bpf
21# if defined(__i386__)
22# define __NR_bpf 357
23# elif defined(__x86_64__)
24# define __NR_bpf 321
25# elif defined(__aarch64__)
26# define __NR_bpf 280
27# else
28# error __NR_bpf not defined. libbpf does not support your arch.
29# endif
30#endif
31
32static int sys_bpf(enum bpf_cmd cmd, union bpf_attr *attr,
33 unsigned int size)
34{
35 return syscall(__NR_bpf, cmd, attr, size);
36}
37
38int bpf_create_map(enum bpf_map_type map_type, int key_size,
39 int value_size, int max_entries)
40{
41 union bpf_attr attr;
42
43 memset(&attr, '\0', sizeof(attr));
44
45 attr.map_type = map_type;
46 attr.key_size = key_size;
47 attr.value_size = value_size;
48 attr.max_entries = max_entries;
49
50 return sys_bpf(BPF_MAP_CREATE, &attr, sizeof(attr));
51}