Я пытаюсь присоединить следующую группу BPF к группе:
SEC("cgroup/sock_ops/sock_map_update")
int sock_ops_sock_map_update(struct bpf_sock_ops *ops)
{
bpf_debug("sock_ops\n");
int op;
// retrieve operation
op = (int) ops->op;
bpf_debug("BPF command: %d\n", op);
// update sockmap
if (op == BPF_SOCK_OPS_TCP_CONNECT_CB) {
uint32_t idx = 1;
bpf_sock_map_update(ops, &sock_ops, &idx, BPF_ANY);
}
return 1;
}
Для краткости я включил только ту часть программы, которая, на мой взгляд, уместна.Я успешно загрузил ее как программу BPF_PROG_TYPE_SOCK_OPS
и пытаюсь присоединить ее к cgroup, используя тип подключения BPF_CGROUP_SOCK_OPS
, но я получаю operation not permitted
.
Есть ли что-то очевидное, что мне не хватает?
РЕДАКТИРОВАТЬ: Интересно, что я могу успешно прикрепить свою программу к /sys/fs/cgroup/unified
, где
$ findmnt cgroup -t cgroup2
TARGET SOURCE FSTYPE OPTIONS
/sys/fs/cgroup/unified cgroup cgroup2 rw,nosuid,nodev,noexec,relatime
, и я могу видеть строки отладки из моей программы BPF с cat /sys/kernel/debug/tracing/trace_pipe
, но когда я делаю mkdir -m 0777 /sys/fs/cgroup/unified/test
и попробуйте присоединить мою программу к /sys/fs/cgroup/unified/test
таким же образом, как я снова получаю operation not permitted
.
РЕДАКТИРОВАТЬ 2: Это не работает только в контейнере (Docker), но я не уверен, чтопервопричина