From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jakub Kicinski Subject: [PATCH iproute2/master 06/11] bpf: expose bpf_parse_common() and bpf_load_common() Date: Thu, 23 Nov 2017 18:12:03 -0800 Message-ID: <20171124021208.13419-7-jakub.kicinski@netronome.com> References: <20171124021208.13419-1-jakub.kicinski@netronome.com> Cc: oss-drivers@netronome.com, daniel@iogearbox.net, Jakub Kicinski To: netdev@vger.kernel.org Return-path: Received: from mail-pf0-f194.google.com ([209.85.192.194]:38491 "EHLO mail-pf0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751575AbdKXCMY (ORCPT ); Thu, 23 Nov 2017 21:12:24 -0500 Received: by mail-pf0-f194.google.com with SMTP id r62so14169035pfd.5 for ; Thu, 23 Nov 2017 18:12:23 -0800 (PST) In-Reply-To: <20171124021208.13419-1-jakub.kicinski@netronome.com> Sender: netdev-owner@vger.kernel.org List-ID: Expose bpf_parse_common() and bpf_load_common() functions for those users who may want to modify the parameters to load after parsing is done. Signed-off-by: Jakub Kicinski Reviewed-by: Quentin Monnet Acked-by: Daniel Borkmann --- include/bpf_util.h | 3 +++ lib/bpf.c | 26 ++++++++++++++++---------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/include/bpf_util.h b/include/bpf_util.h index da2dee8bb3aa..f6371994252e 100644 --- a/include/bpf_util.h +++ b/include/bpf_util.h @@ -259,6 +259,9 @@ struct bpf_cfg_in { .off = 0, \ .imm = 0 }) +int bpf_parse_common(struct bpf_cfg_in *cfg, const struct bpf_cfg_ops *ops); +int bpf_load_common(struct bpf_cfg_in *cfg, const struct bpf_cfg_ops *ops, + void *nl); int bpf_parse_and_load_common(struct bpf_cfg_in *cfg, const struct bpf_cfg_ops *ops, void *nl); diff --git a/lib/bpf.c b/lib/bpf.c index 9a0867124fc4..f25f7016d10f 100644 --- a/lib/bpf.c +++ b/lib/bpf.c @@ -926,17 +926,12 @@ static int bpf_do_load(struct bpf_cfg_in *cfg) return 0; } -static int bpf_parse_opt_tbl(struct bpf_cfg_in *cfg, - const struct bpf_cfg_ops *ops, void *nl, - const bool *opt_tbl) +int bpf_load_common(struct bpf_cfg_in *cfg, const struct bpf_cfg_ops *ops, + void *nl) { char annotation[256]; int ret; - ret = bpf_do_parse(cfg, opt_tbl); - if (ret < 0) - return ret; - ret = bpf_do_load(cfg); if (ret < 0) return ret; @@ -953,8 +948,7 @@ static int bpf_parse_opt_tbl(struct bpf_cfg_in *cfg, return 0; } -int bpf_parse_and_load_common(struct bpf_cfg_in *cfg, - const struct bpf_cfg_ops *ops, void *nl) +int bpf_parse_common(struct bpf_cfg_in *cfg, const struct bpf_cfg_ops *ops) { bool opt_tbl[BPF_MODE_MAX] = {}; @@ -968,7 +962,19 @@ int bpf_parse_and_load_common(struct bpf_cfg_in *cfg, opt_tbl[EBPF_PINNED] = true; } - return bpf_parse_opt_tbl(cfg, ops, nl, opt_tbl); + return bpf_do_parse(cfg, opt_tbl); +} + +int bpf_parse_and_load_common(struct bpf_cfg_in *cfg, + const struct bpf_cfg_ops *ops, void *nl) +{ + int ret; + + ret = bpf_parse_common(cfg, ops); + if (ret < 0) + return ret; + + return bpf_load_common(cfg, ops, nl); } int bpf_graft_map(const char *map_path, uint32_t *key, int argc, char **argv) -- 2.14.1