about summary refs log tree commit diff
path: root/pkgs/os-specific/linux/kernel/linux-mptcp.nix
blob: 44499f39cc16c0e8f116b0ebb1bd0b515d61e9d9 (plain) (blame)
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
{ stdenv, buildPackages, fetchFromGitHub, perl, buildLinux, structuredExtraConfig ? {}, ... } @ args:
let
  mptcpVersion = "0.94.4";
  modDirVersion = "4.14.110";
in
buildLinux ({
  version = "${modDirVersion}-mptcp_v${mptcpVersion}";
  inherit modDirVersion;

  extraMeta = {
    branch = "4.4";
    maintainers = with stdenv.lib.maintainers; [ teto layus ];
  };

  src = fetchFromGitHub {
    owner = "multipath-tcp";
    repo = "mptcp";
    rev = "v${mptcpVersion}";
    sha256 = "1ng6p1djhm3m5g44yyq7gpqqbzsnhm9rimsafp5g4dx8cm27a70f";
  };

  structuredExtraConfig = with import ../../../../lib/kernel.nix { inherit (stdenv) lib; version = null; };
    stdenv.lib.mkMerge [ {
    IPV6               = yes;
    MPTCP              = yes;
    IP_MULTIPLE_TABLES = yes;

    # Enable advanced path-managers...
    MPTCP_PM_ADVANCED = yes;
    MPTCP_FULLMESH = yes;
    MPTCP_NDIFFPORTS = yes;
    # ... but use none by default.
    # The default is safer if source policy routing is not setup.
    DEFAULT_DUMMY = yes;
    DEFAULT_MPTCP_PM.freeform = "default";

    # MPTCP scheduler selection.
    MPTCP_SCHED_ADVANCED = yes;
    DEFAULT_MPTCP_SCHED.freeform = "default";

    # Smarter TCP congestion controllers
    TCP_CONG_LIA = module;
    TCP_CONG_OLIA = module;
    TCP_CONG_WVEGAS = module;
    TCP_CONG_BALIA = module;
  }
  structuredExtraConfig
  ];
} // args)