]> git.ipfire.org Git - thirdparty/systemd.git/commit - src/core/bpf-firewall.c
bpf-firewall: give a name to maps used
authorDominique Martinet <asmadeus@codewreck.org>
Sun, 16 Apr 2023 07:14:49 +0000 (16:14 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 17 Apr 2023 23:23:55 +0000 (08:23 +0900)
commit25d9c6cdaf82d3f627db92b69f3be3e2a68e06fa
tree3a699e9bf78703bd7471a6fcda4d277411e03d5d
parent38cdd08b22565f861ae6dd83b02bc6b189ba2ef5
bpf-firewall: give a name to maps used

Running systemd with IP accounting enabled generates many bpf maps (two
per unit for accounting, another two if IPAddressAllow/Deny are used).

Systemd itself knows which maps belong to what unit and commands like
`systemctl status <unit>` can be used to query what service has which
map, but monitoring these values all the time costs 4 dbus requests
(calling the .IP{E,I}gress{Bytes,Packets} method for each unit) and
makes services like the prometheus systemd_exporter[1] somewhat slow
when doing that for every units, while less precise information could
quickly be obtained by looking directly at the maps.

Unfortunately, bpf map names are rather limited:
- only 15 characters in length (16, but last byte must be 0)
- only allows isalnum(), _ and . characters

If it wasn't for the length limit we could use the normal unit escape
functions but I've opted to just make any forbidden character into
underscores for maximum brievty -- the map prefix is also rather short:
This isn't meant as a precise mapping, but as a hint for admins who want
to look at these.

(Note there is no problem if multiple maps have the same name)

Link: https://github.com/povilasv/systemd_exporter
src/core/bpf-firewall.c
src/shared/bpf-program.c
src/shared/bpf-program.h