1{
2 stdenv,
3 lib,
4 fetchgit,
5 kernel,
6 kernelModuleMakeFlags,
7 kmod,
8}:
9let
10 version = "22.03.5";
11in
12stdenv.mkDerivation (finalAttrs: {
13 pname = "trelay";
14 version = "${version}-${kernel.version}";
15
16 src = fetchgit {
17 url = "https://git.openwrt.org/openwrt/openwrt.git";
18 rev = "v${version}";
19 hash = "sha256-5f9LvaZUxtfTpTR268QMkEmHUpn/nct+MVa44SBGT5c=";
20 sparseCheckout = [ "package/kernel/trelay/src" ];
21 };
22
23 sourceRoot = "${finalAttrs.src.name}/package/kernel/trelay/src";
24 hardeningDisable = [
25 "pic"
26 "format"
27 ];
28 nativeBuildInputs = [ kmod ] ++ kernel.moduleBuildDependencies;
29
30 postPatch = ''
31 cp '${./Makefile}' Makefile
32 '';
33
34 makeFlags = kernelModuleMakeFlags ++ [
35 "KERNELRELEASE=${kernel.modDirVersion}"
36 "KERNEL_DIR=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"
37 "INSTALL_MOD_PATH=$(out)"
38 ];
39
40 meta = with lib; {
41 description = "For relaying IP packets between two devices to build a IP bridge between them";
42 longDescription = ''
43 A kernel module that relays ethernet packets between two devices (similar to a bridge),
44 but without any MAC address checks.
45
46 This makes it possible to bridge client mode or ad-hoc mode wifi devices to ethernet VLANs,
47 assuming the remote end uses the same source MAC address as the device that packets are
48 supposed to exit from.
49 '';
50 homepage = "https://github.com/openwrt/openwrt/tree/main/package/kernel/trelay";
51 license = licenses.gpl2Plus;
52 maintainers = [ maintainers.aprl ];
53 platforms = platforms.linux;
54 broken = lib.versionOlder kernel.version "5.10";
55 };
56})