From: "Toke Høiland-Jørgensen" <toke@redhat.com>
To: Andrii Nakryiko <andrii.nakryiko@gmail.com>,
Daniel Borkmann <daniel@iogearbox.net>
Cc: Stephen Hemminger <stephen@networkplumber.org>,
Alexei Starovoitov <ast@kernel.org>,
Martin KaFai Lau <kafai@fb.com>, Song Liu <songliubraving@fb.com>,
Yonghong Song <yhs@fb.com>, David Miller <davem@davemloft.net>,
Jesper Dangaard Brouer <brouer@redhat.com>,
Networking <netdev@vger.kernel.org>, bpf <bpf@vger.kernel.org>
Subject: Re: [RFC bpf-next 0/5] Convert iproute2 to use libbpf (WIP)
Date: Fri, 23 Aug 2019 13:29:50 +0200 [thread overview]
Message-ID: <87tva8m85t.fsf@toke.dk> (raw)
In-Reply-To: <CAEf4Bzab_w0AXy5P9mG14mcyJVgUCzuuNda5FpU5wSEwUciGfg@mail.gmail.com>
[ ... snip ...]
> E.g., today's API is essentially three steps:
>
> 1. open and parse ELF: collect relos, programs, map definitions
> 2. load: create maps from collected defs, do program/global data/CO-RE
> relocs, load and verify BPF programs
> 3. attach programs one by one.
>
> Between step 1 and 2 user has flexibility to create more maps, set up
> map-in-map, etc. Between 2 and 3 you can fill in global data, fill in
> tail call maps, etc. That's already pretty flexible. But we can tune
> and break apart those steps even further, if necessary.
Today, steps 1 and 2 can be collapsed into a single call to
bpf_prog_load_xattr(). As Jesper's mail explains, for XDP we don't
generally want to do all the fancy rewriting stuff, we just want a
simple way to load a program and get reusable pinning of maps.
Preferably in a way that is compatible with the iproute2 loader.
So I really think we need two things:
(1) a flexible API that splits up all the various steps in a way that
allows programs to inject their own map definitions before
relocations and loading
(2) a simple convenience wrapper that loads an object file, does
something sensible with pinning and map-in-map definitions, and loads
everything into the kernel.
I'd go so far as to say that (2) should even support system-wide
configuration, similar to the /etc/iproute2/bpf_pinning file. E.g., an
/etc/libbpf/pinning.conf file that sets the default pinning directory,
and makes it possible to set up pin-value-to-subdir mappings like what
iproute2 does today.
Having (2) makes it more likely that all the different custom loaders
will be compatible with each other, while still allowing people to do
their own custom thing with (1). And of course, (2) could be implemented
in terms of (1) internally in libbpf.
In my ideal world, (2) would just use the definition format already in
iproute2 (this is basically what I implemented already), but if you guys
don't want to put this into libbpf, I can probably live with the default
format being BTF-based instead. Which would mean that iproute2 I would
end up with a flow like this:
- When given an elf file, try to run it through the "standard loader"
(2). If this works, great, proceed to program attach.
- If using (2) fails because it doesn't understand the map definition,
fall back to a compatibility loader that parses the legacy iproute2
map definition format and uses (1) to load that.
Does the above make sense? :)
-Toke
next prev parent reply other threads:[~2019-08-23 11:29 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-20 11:47 [RFC bpf-next 0/5] Convert iproute2 to use libbpf (WIP) Toke Høiland-Jørgensen
2019-08-20 11:47 ` [RFC bpf-next 1/5] libbpf: Add map definition struct fields from iproute2 Toke Høiland-Jørgensen
2019-08-20 11:47 ` [RFC bpf-next 2/5] libbpf: Add support for auto-pinning of maps with reuse on program load Toke Høiland-Jørgensen
2019-08-20 11:47 ` [RFC bpf-next 3/5] libbpf: Add support for specifying map pinning path via callback Toke Høiland-Jørgensen
2019-08-20 11:47 ` [RFC bpf-next 4/5] iproute2: Allow compiling against libbpf Toke Høiland-Jørgensen
2019-08-22 8:58 ` Daniel Borkmann
2019-08-22 10:43 ` Toke Høiland-Jørgensen
2019-08-22 11:45 ` Daniel Borkmann
2019-08-22 12:04 ` Toke Høiland-Jørgensen
2019-08-22 12:33 ` Daniel Borkmann
2019-08-22 13:38 ` Toke Høiland-Jørgensen
2019-08-22 13:45 ` Daniel Borkmann
2019-08-22 15:28 ` Toke Høiland-Jørgensen
2019-08-20 11:47 ` [RFC bpf-next 5/5] iproute2: Support loading XDP programs with libbpf Toke Høiland-Jørgensen
2019-08-21 19:26 ` [RFC bpf-next 0/5] Convert iproute2 to use libbpf (WIP) Alexei Starovoitov
2019-08-21 21:00 ` Toke Høiland-Jørgensen
2019-08-22 7:52 ` Andrii Nakryiko
2019-08-22 10:38 ` Toke Høiland-Jørgensen
2019-08-21 20:30 ` Andrii Nakryiko
2019-08-21 21:07 ` Toke Høiland-Jørgensen
2019-08-22 7:49 ` Andrii Nakryiko
2019-08-22 8:33 ` Daniel Borkmann
2019-08-22 11:48 ` Toke Høiland-Jørgensen
2019-08-22 11:49 ` Toke Høiland-Jørgensen
2019-08-23 6:31 ` Andrii Nakryiko
2019-08-23 11:29 ` Toke Høiland-Jørgensen [this message]
2019-08-28 20:40 ` Andrii Nakryiko
2020-02-03 7:29 ` Andrii Nakryiko
2020-02-03 19:34 ` Toke Høiland-Jørgensen
2020-02-04 0:56 ` Andrii Nakryiko
2020-02-04 1:46 ` David Ahern
2020-02-04 3:41 ` Andrii Nakryiko
2020-02-04 4:52 ` David Ahern
2020-02-04 5:00 ` Andrii Nakryiko
2020-02-04 8:25 ` Toke Høiland-Jørgensen
2020-02-04 18:47 ` Andrii Nakryiko
2020-02-04 19:19 ` Toke Høiland-Jørgensen
2020-02-04 19:29 ` Andrii Nakryiko
2020-02-04 21:56 ` Toke Høiland-Jørgensen
2020-02-04 22:12 ` David Ahern
2020-02-04 22:35 ` Toke Høiland-Jørgensen
2020-02-04 23:13 ` David Ahern
2020-02-05 10:37 ` Toke Høiland-Jørgensen
2020-02-04 8:27 ` Toke Høiland-Jørgensen
2019-08-23 10:27 ` Jesper Dangaard Brouer
2019-08-28 20:23 ` Andrii Nakryiko
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=87tva8m85t.fsf@toke.dk \
--to=toke@redhat.com \
--cc=andrii.nakryiko@gmail.com \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=brouer@redhat.com \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=kafai@fb.com \
--cc=netdev@vger.kernel.org \
--cc=songliubraving@fb.com \
--cc=stephen@networkplumber.org \
--cc=yhs@fb.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.