Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
1{
2 lib,
3 callPackage,
4 buildGoModule,
5 fetchFromGitHub,
6 withDpi ? true,
7 libpcap,
8 libprotoident,
9 libflowmanager,
10 libtrace,
11 versionCheckHook,
12 nix-update-script,
13}:
14let
15 ndpi = callPackage ./ndpi_4_0.nix { };
16in
17buildGoModule (finalAttrs: {
18 pname = "netcap";
19 version = "0.6.11";
20
21 src = fetchFromGitHub {
22 owner = "dreadl0ck";
23 repo = "netcap";
24 tag = "v${finalAttrs.version}";
25 hash = "sha256-SCBKOIC/s+rfrVWmryp9EBp7ARpZZcxymsnZWtEHrhk=";
26 };
27
28 vendorHash = "sha256-MvHrJLhcFA0fEgK+YT0rwI6wIwTGMcLWQt6AYkx1eZM=";
29
30 subPackages = [ "cmd" ];
31
32 buildInputs = [
33 libpcap
34 ]
35 ++ lib.optionals withDpi [
36 ndpi
37 libprotoident
38 libflowmanager
39 libtrace
40 ];
41
42 ldflags = [
43 "-s -w"
44 ];
45
46 tags = lib.optionals (!withDpi) [
47 "nodpi"
48 ];
49
50 CGO_LDFLAGS = lib.optionalString withDpi ''
51 -L${ndpi}/lib -lndpi
52 -L${libprotoident}/lib -lndpi
53 '';
54
55 CGO_CFLAGS = lib.optionalString withDpi ''
56 -I${ndpi}/include
57 -I${libprotoident}/include
58 '';
59
60 postInstall = ''
61 mv $out/bin/cmd $out/bin/net
62 '';
63
64 checkFlags =
65 let
66 skippedTests = [
67 # couldn't open packet socket: operation not permitted
68 "TestCaptureLive"
69 # requires local test data
70 "TestCapturePCAP"
71 ];
72 in
73 [ "-skip=^${builtins.concatStringsSep "$|^" skippedTests}$" ];
74
75 nativeInstallCheckInputs = [ versionCheckHook ];
76 versionCheckProgram = "${placeholder "out"}/bin/net";
77 versionCheckProgramArg = "--version";
78 doInstallCheck = true;
79
80 passthru.updateScript = nix-update-script { };
81
82 meta = {
83 description = "Framework for secure and scalable network traffic analysis";
84 homepage = "https://netcap.io";
85 downloadPage = "https://github.com/dreadl0ck/netcap";
86 changelog = "https://github.com/dreadl0ck/netcap/releases/tag/v${finalAttrs.version}";
87 license = lib.licenses.gpl3Only;
88 maintainers = with lib.maintainers; [ felbinger ];
89 mainProgram = "net";
90 };
91})