Demo code showing how to create and pin a cgroup/skb eBPF program (here done with load-firewall) that can be loaded and used from a second program (here done with attach-firewall)

go get -u github.com/iovisor/gobpf/elf
make
./load-firewall /sys/fs/bpf/cgroup-firewall-demo
mkdir /sys/fs/cgroup/unified/cgroup-firewall-demo
./attach-firewall /sys/fs/bpf/cgroup-firewall-demo /sys/fs/cgroup/unified/cgroup-firewall-demo/

Now open a new shell and add its pid to the cgroup:

echo PID > /sys/fs/cgroup/unified/cgroup-firewall-demo/cgroup.procs

Then run e.g. ping -4 ipschwein.de from the shell in the cgroup.

In the kernel's trace_pipe you should see a TODO message for each packet:

cat /sys/kernel/debug/tracing/trace_pipe