1{
2 lib,
3 stdenv,
4 fetchurl,
5 pkg-config,
6 libnl,
7 openssl,
8 nixosTests,
9 sqlite ? null,
10}:
11
12stdenv.mkDerivation rec {
13 pname = "hostapd";
14 version = "2.11";
15
16 src = fetchurl {
17 url = "https://w1.fi/releases/${pname}-${version}.tar.gz";
18 sha256 = "sha256-Kz+stjL9T2XjL0v4Kna0tyxQH5laT2LjMCGf567RdHo=";
19 };
20
21 nativeBuildInputs = [ pkg-config ];
22 buildInputs = [ libnl openssl sqlite ];
23
24 patches = [
25 (fetchurl {
26 # Note: fetchurl seems to be unhappy with openwrt git
27 # server's URLs containing semicolons. Using the github mirror instead.
28 url = "https://raw.githubusercontent.com/openwrt/openwrt/eefed841b05c3cd4c65a78b50ce0934d879e6acf/package/network/services/hostapd/patches/300-noscan.patch";
29 sha256 = "08p5frxhpq1rp2nczkscapwwl8g9nc4fazhjpxic5bcbssc3sb00";
30 })
31 ];
32
33 outputs = [ "out" "man" ];
34
35 # Based on hostapd's defconfig. Only differences are tracked.
36 extraConfig = ''
37 # Use epoll(7) instead of select(2) on linux
38 CONFIG_ELOOP_EPOLL=y
39
40 # Drivers
41 CONFIG_DRIVER_WIRED=y
42 CONFIG_DRIVER_NONE=y
43
44 # Integrated EAP server
45 CONFIG_EAP_SIM=y
46 CONFIG_EAP_AKA=y
47 CONFIG_EAP_AKA_PRIME=y
48 CONFIG_EAP_PAX=y
49 CONFIG_EAP_PSK=y
50 CONFIG_EAP_PWD=y
51 CONFIG_EAP_SAKE=y
52 CONFIG_EAP_GPSK=y
53 CONFIG_EAP_GPSK_SHA256=y
54 CONFIG_EAP_FAST=y
55 CONFIG_EAP_IKEV2=y
56 CONFIG_EAP_TNC=y
57 CONFIG_EAP_EKE=y
58
59 CONFIG_TLS=openssl
60 CONFIG_TLSV11=y
61 CONFIG_TLSV12=y
62
63 CONFIG_SAE=y
64 CONFIG_SAE_PK=y
65
66 CONFIG_OWE=y
67 CONFIG_OCV=y
68
69 # TKIP is considered insecure and upstream support will be removed in the future
70 CONFIG_NO_TKIP=y
71
72 # Misc
73 CONFIG_RADIUS_SERVER=y
74 CONFIG_MACSEC=y
75 CONFIG_DRIVER_MACSEC_LINUX=y
76 CONFIG_FULL_DYNAMIC_VLAN=y
77 CONFIG_VLAN_NETLINK=y
78 CONFIG_GETRANDOM=y
79 CONFIG_INTERWORKING=y
80 CONFIG_HS20=y
81 CONFIG_FST=y
82 CONFIG_FST_TEST=y
83 CONFIG_ACS=y
84 CONFIG_WNM=y
85 CONFIG_MBO=y
86
87 CONFIG_IEEE80211R=y
88 CONFIG_IEEE80211W=y
89 CONFIG_IEEE80211N=y
90 CONFIG_IEEE80211AC=y
91 CONFIG_IEEE80211AX=y
92 CONFIG_IEEE80211BE=y
93 '' + lib.optionalString (sqlite != null) ''
94 CONFIG_SQLITE=y
95 '';
96
97 passAsFile = [ "extraConfig" ];
98
99 configurePhase = ''
100 cd hostapd
101 cp -v defconfig .config
102 cat $extraConfigPath >> .config
103 cat -n .config
104 substituteInPlace Makefile --replace /usr/local $out
105 export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE $(pkg-config --cflags libnl-3.0)"
106 '';
107
108 preInstall = "mkdir -p $out/bin";
109 postInstall = ''
110 install -vD hostapd.8 -t $man/share/man/man8
111 install -vD hostapd_cli.1 -t $man/share/man/man1
112 '';
113
114 passthru.tests = {
115 inherit (nixosTests) wpa_supplicant;
116 };
117
118 meta = with lib; {
119 homepage = "https://w1.fi/hostapd/";
120 description = "User space daemon for access point and authentication servers";
121 license = licenses.bsd3;
122 maintainers = with maintainers; [ oddlama ];
123 platforms = platforms.linux;
124 };
125}