netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH bpf-next 0/6] Consistent prefixes for libbpf interfaces
@ 2018-10-03 22:26 Andrey Ignatov
  2018-10-03 22:26 ` [PATCH bpf-next 1/6] libbpf: Move __dump_nlmsg_t from API to implementation Andrey Ignatov
                   ` (6 more replies)
  0 siblings, 7 replies; 10+ messages in thread
From: Andrey Ignatov @ 2018-10-03 22:26 UTC (permalink / raw)
  To: netdev; +Cc: Andrey Ignatov, ast, daniel, kernel-team

This patch set renames a few interfaces in libbpf, mostly netlink related,
so that all symbols provided by the library have only three possible
prefixes:

% nm -D tools/lib/bpf/libbpf.so  | \
    awk '$2 == "T" {sub(/[_\(].*/, "", $3); if ($3) print $3}' | \
    sort | \
    uniq -c
     91 bpf
      8 btf
     14 libbpf

libbpf is used more and more outside kernel tree. That means the library
should follow good practices in library design and implementation to
play well with third party code that uses it.

One of such practices is to have a common prefix (or a few) for every
interface, function or data structure, library provides. It helps to
avoid name conflicts with other libraries and keeps API/ABI consistent.

Inconsistent names in libbpf already cause problems in real life. E.g.
an application can't use both libbpf and libnl due to conflicting
symbols (specifically nla_parse, nla_parse_nested and a few others).

Some of problematic global symbols are not part of ABI and can be
restricted from export with either visibility attribute/pragma or export
map (what is useful by itself and can be done in addition). That won't
solve the problem for those that are part of ABI though. Also export
restrictions would help only in DSO case. If third party application links
libbpf statically it won't help, and people do it (e.g. Facebook links
most of libraries statically, including libbpf).

libbpf already uses the following prefixes for its interfaces:
* bpf_ for bpf system call wrappers, program/map/elf-object
  abstractions and a few other things;
* btf_ for BTF related API;
* libbpf_ for everything else.

The patch adds libbpf_ prefix to interfaces that use none of mentioned
above prefixes and don't fit well into the first two categories.

Long term benefits of having common prefix should outweigh possible
inconvenience of changing API for those functions now.

Patches 2-4 add libbpf_ prefix to libbpf interfaces: separate patch per
header. Other patches are simple improvements in API.


Andrey Ignatov (6):
  libbpf: Move __dump_nlmsg_t from API to implementation
  libbpf: Consistent prefixes for interfaces in libbpf.h.
  libbpf: Consistent prefixes for interfaces in nlattr.h.
  libbpf: Consistent prefixes for interfaces in str_error.h.
  libbpf: Make include guards consistent
  libbpf: Use __u32 instead of u32 in bpf_program__load

 tools/bpf/bpftool/net.c            | 41 ++++++++++---------
 tools/bpf/bpftool/netlink_dumper.c | 32 ++++++++-------
 tools/lib/bpf/bpf.h                |  6 +--
 tools/lib/bpf/btf.h                |  6 +--
 tools/lib/bpf/libbpf.c             | 22 +++++-----
 tools/lib/bpf/libbpf.h             | 31 +++++++-------
 tools/lib/bpf/netlink.c            | 48 ++++++++++++----------
 tools/lib/bpf/nlattr.c             | 64 +++++++++++++++--------------
 tools/lib/bpf/nlattr.h             | 65 +++++++++++++++---------------
 tools/lib/bpf/str_error.c          |  2 +-
 tools/lib/bpf/str_error.h          |  8 ++--
 11 files changed, 171 insertions(+), 154 deletions(-)

-- 
2.17.1

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2018-10-10  5:37 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-10-03 22:26 [PATCH bpf-next 0/6] Consistent prefixes for libbpf interfaces Andrey Ignatov
2018-10-03 22:26 ` [PATCH bpf-next 1/6] libbpf: Move __dump_nlmsg_t from API to implementation Andrey Ignatov
2018-10-03 22:26 ` [PATCH bpf-next 2/6] libbpf: Consistent prefixes for interfaces in libbpf.h Andrey Ignatov
2018-10-03 22:26 ` [PATCH bpf-next 3/6] libbpf: Consistent prefixes for interfaces in nlattr.h Andrey Ignatov
2018-10-03 22:26 ` [PATCH bpf-next 4/6] libbpf: Consistent prefixes for interfaces in str_error.h Andrey Ignatov
2018-10-03 22:26 ` [PATCH bpf-next 5/6] libbpf: Make include guards consistent Andrey Ignatov
2018-10-03 22:26 ` [PATCH bpf-next 6/6] libbpf: Use __u32 instead of u32 in bpf_program__load Andrey Ignatov
2018-10-04 14:22 ` [PATCH bpf-next 0/6] Consistent prefixes for libbpf interfaces Daniel Borkmann
2018-10-09  6:43   ` Yonghong Song
2018-10-09 22:17     ` Daniel Borkmann

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).