bpf.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Daniel Borkmann <daniel@iogearbox.net>
To: Anton Ivanov <anton.ivanov@kot-begemot.co.uk>,
	Alexei Starovoitov <alexei.starovoitov@gmail.com>
Cc: bpf <bpf@vger.kernel.org>
Subject: Re: Access to a BPF map from a module
Date: Wed, 7 Jul 2021 17:21:07 +0200	[thread overview]
Message-ID: <8960fc66-dd4b-7191-d123-2536468fa406@iogearbox.net> (raw)
In-Reply-To: <a710b903-aaa5-8bd3-3cb0-14e08f9dbed3@kot-begemot.co.uk>

On 7/7/21 9:09 AM, Anton Ivanov wrote:
> On 07/07/2021 01:53, Alexei Starovoitov wrote:
>> On Mon, Jul 5, 2021 at 9:00 AM Anton Ivanov
>> <anton.ivanov@kot-begemot.co.uk> wrote:
>>> Hi List,
>>>
>>> I have the following problem.
>>>
>>> I want to perform some operations on a bpf map from a loadable module. The map is instantiated elsewhere and pinned.
>>>
>>> How do I go about to obtain the map inside the module?
>>>
>>> bpf_map_get* functions are not exported at present so they are not available. Is there another way besides them to fetch a bpf map "by fs name" in a kernel module?
>>>
>>> If the access limitation is intentional, may I ask what is the actual rationale behind this decision?
>> BPF objects (like maps) and BPF infra are not extensible or accessible
>> from modules.
> 
> Programs are.
> 
> You can grab a program using bpf_prog_get_type_path and use it. It is an exported symbol.

Right, sadly for the netfilter xt_bpf hack as the only user. :/ The typical way to
retrieve would be to get the program via bpf_prog_get_type() from modules.

> The only thing missing is an equivalent of bpf_prog_get_type_path for maps, let's say bpf_map_get_path
> 
> In fact, I already have a patch for that too. I wanted to understand the rationale behind the restriction before submitting it.

There is a bpf_map_get(), out of curiosity, why do you need a path variant specifically?

>> That is intentional to make sure that BPF development stays on the public
>> mailing list and within the kernel.
>> If you could describe your use case we hopefully will be able to come
>> up with upstreamable
> 
> Build a switchdev switch to be used in conjunction with the normal kernel bridge/routing infra which uses BPF "firmware"
> 
> Rationale:
> 
> 1. So people can play with switchdev and smartnics in general without having esoteric hardware
> 
> 2. So people can play with these both on the kernel side and on the "guts/internals" side.

Wouldn't it be enough to load the BPF "firmware" for that switchdev in kernel via regular
prog fd, meaning similar to what we do with tc BPF case today? From a higher level it
sounds like the same use case as tc BPF just that its 'internal' to the switchdev.

>> alternative to your proprietary module.
> I intend to upstream it. In fact the WIP is already on github.

Thanks,
Daniel

  reply	other threads:[~2021-07-07 15:21 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-05 15:59 Access to a BPF map from a module Anton Ivanov
2021-07-07  0:53 ` Alexei Starovoitov
2021-07-07  7:09   ` Anton Ivanov
2021-07-07 15:21     ` Daniel Borkmann [this message]
2021-07-07 15:31       ` Anton Ivanov
2021-07-07 15:37         ` Anton Ivanov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=8960fc66-dd4b-7191-d123-2536468fa406@iogearbox.net \
    --to=daniel@iogearbox.net \
    --cc=alexei.starovoitov@gmail.com \
    --cc=anton.ivanov@kot-begemot.co.uk \
    --cc=bpf@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).