1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
| | # SPDX-License-Identifier: MIT
# SPDX-FileCopyrightText: 2025 Yureka Lilian <yureka@cyberchaos.dev>
{ lib, runCommand, stdenv, llvmPackages, libbpf, linux, bpftools }:
stdenv.mkDerivation {
pname = "xdp-forwarder";
version = "0";
src = lib.fileset.toSource {
root = ./.;
fileset = lib.fileset.fileFilter
({ hasExt, ... }: !(hasExt "nix") && !(hasExt "md")) ./.;
};
buildInputs = [ libbpf ];
nativeBuildInputs = [ llvmPackages.clang-unwrapped bpftools ];
buildPhase = ''
bpftool btf dump file ${linux.dev}/vmlinux format c > include/vmlinux.h
for prog in physical router; do
clang $NIX_CFLAGS_COMPILE -O2 -g -Wall -target bpf -I include -c prog_$prog.c -o prog_$prog.o
substituteInPlace load_$prog --replace-fail prog_$prog.o $out/lib/prog_$prog.o
done
$CC -lbpf -I include -o set_router_iface set_router_iface.c
'';
installPhase = ''
for prog in physical router; do
install -Dm644 prog_$prog.o $out/lib/prog_$prog.o
install -Dm755 load_$prog $out/bin/load_$prog
done
install -Dm755 set_router_iface $out/bin/set_router_iface
'';
}
|