nixpkgs/nixos/tests/bpf.nix
Dominique Martinet 77d48e8943
bpftrace: remove RLIMIT_NOFILE workaround from nixos test
bpftrace 0.24 required more fd than previously for syscalls,
as we found out the hard way with test breaking.
Upstream rolled in an improvement setting ulimit automatically
and removing the need to adjust the test.
2026-03-17 10:51:07 +05:30

41 lines
1.3 KiB
Nix

{ lib, ... }:
{
name = "bpf";
meta.maintainers = with lib.maintainers; [ martinetd ];
nodes.machine =
{ pkgs, ... }:
{
programs.bcc.enable = true;
environment.systemPackages = with pkgs; [ bpftrace ];
};
testScript = ''
## bcc
# syscount -d 1 stops 1s after probe started so is good for that
print(machine.succeed("syscount -d 1"))
## bpftrace
# list probes
machine.succeed("bpftrace -l")
# simple BEGIN probe (user probe on bpftrace itself)
print(machine.succeed("bpftrace -e 'BEGIN { print(\"ok\\n\"); exit(); }'"))
# tracepoint
print(machine.succeed("bpftrace -e 'tracepoint:syscalls:sys_enter_* { print(probe); exit() }'"))
# kprobe
print(machine.succeed("bpftrace -e 'kprobe:schedule { print(probe); exit() }'"))
# BTF
print(machine.succeed("bpftrace -e 'kprobe:schedule { "
" printf(\"tgid: %d\\n\", ((struct task_struct*) curtask)->tgid); exit() "
"}'"))
# module BTF (bpftrace >= 0.17)
print(machine.succeed(
"bpftrace -e 'fentry:nft_delchain { "
" printf(\"portid: %d\\n\", args->ctx->portid); "
"} BEGIN { exit() }'"
))
# glibc includes
print(machine.succeed("bpftrace -e '#include <errno.h>\n"
"BEGIN { printf(\"ok %d\\n\", EINVAL); exit(); }'"))
'';
}