From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752882AbbE0FZs (ORCPT ); Wed, 27 May 2015 01:25:48 -0400 Received: from szxga01-in.huawei.com ([58.251.152.64]:6926 "EHLO szxga01-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752461AbbE0FV2 (ORCPT ); Wed, 27 May 2015 01:21:28 -0400 From: Wang Nan To: , , , , , , , , , CC: , , Subject: [RFC PATCH v4 15/29] bpf tools: Add bpf.c/h for common bpf operations Date: Wed, 27 May 2015 05:19:50 +0000 Message-ID: <1432704004-171454-16-git-send-email-wangnan0@huawei.com> X-Mailer: git-send-email 1.8.3.4 In-Reply-To: <1432704004-171454-1-git-send-email-wangnan0@huawei.com> References: <1432704004-171454-1-git-send-email-wangnan0@huawei.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.107.197.200] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch introduces bpf.c and bpf.h, which hold common functions issuing bpf syscall. The goal of these two files is to hide syscall completly from user. Note that bpf.c and bpf.h only deal with kernel interface. Things like structure of 'map' section in the ELF object is not cared by of bpf.[ch]. We first introduce bpf_create_map(). Note that, since functions in bpf.[ch] are wrapper of sys_bpf, they don't use OO style naming. Signed-off-by: Wang Nan --- tools/lib/bpf/Build | 2 +- tools/lib/bpf/bpf.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++ tools/lib/bpf/bpf.h | 16 +++++++++++++++ 3 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 tools/lib/bpf/bpf.c create mode 100644 tools/lib/bpf/bpf.h diff --git a/tools/lib/bpf/Build b/tools/lib/bpf/Build index a316484..d874975 100644 --- a/tools/lib/bpf/Build +++ b/tools/lib/bpf/Build @@ -1 +1 @@ -libbpf-y := libbpf.o +libbpf-y := libbpf.o bpf.o diff --git a/tools/lib/bpf/bpf.c b/tools/lib/bpf/bpf.c new file mode 100644 index 0000000..7481923 --- /dev/null +++ b/tools/lib/bpf/bpf.c @@ -0,0 +1,56 @@ +/* + * common eBPF ELF operations. + * + * Copyright (C) 2013-2015 Alexei Starovoitov + * Copyright (C) 2015 Wang Nan + * Copyright (C) 2015 Huawei Inc. + */ + +#include +#include +#include +#include +#include +#include "bpf.h" + +/* When building perf, unistd.h is override. __NR_bpf by ourself. */ +#if defined(__i386__) +#ifndef __NR_bpf +# define __NR_bpf 357 +#endif +#endif + +#if defined(__x86_64__) +#ifndef __NR_bpf +# define __NR_bpf 321 +#endif +#endif + +#if defined(__aarch64__) +#ifndef __NR_bpf +# define __NR_bpf 280 +#endif +#endif + +#ifndef __NR_bpf +# error __NR_bpf not defined. libbpf does not support your arch. +#endif + +static int sys_bpf(enum bpf_cmd cmd, union bpf_attr *attr, unsigned int size) +{ + return syscall(__NR_bpf, cmd, attr, size); +} + +int bpf_create_map(enum bpf_map_type map_type, int key_size, int value_size, + int max_entries) +{ + union bpf_attr attr; + memset(&attr, '\0', sizeof(attr)); + + attr.map_type = map_type; + attr.key_size = key_size; + attr.value_size = value_size; + attr.max_entries = max_entries; + + return sys_bpf(BPF_MAP_CREATE, &attr, sizeof(attr)); +} diff --git a/tools/lib/bpf/bpf.h b/tools/lib/bpf/bpf.h new file mode 100644 index 0000000..28f7942 --- /dev/null +++ b/tools/lib/bpf/bpf.h @@ -0,0 +1,16 @@ +/* + * common eBPF ELF operations. + * + * Copyright (C) 2013-2015 Alexei Starovoitov + * Copyright (C) 2015 Wang Nan + * Copyright (C) 2015 Huawei Inc. + */ +#ifndef __BPF_BPF_H +#define __BPF_BPF_H + +#include + +int bpf_create_map(enum bpf_map_type map_type, int key_size, int value_size, + int max_entries); + +#endif -- 1.8.3.4