summarylogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.SRCINFO24
-rw-r--r--PKGBUILD76
-rw-r--r--config425
-rw-r--r--hostapd-2.10-lar.patch139
-rw-r--r--hostapd.service10
5 files changed, 674 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO
new file mode 100644
index 000000000000..ee3eb4cf82e2
--- /dev/null
+++ b/.SRCINFO
@@ -0,0 +1,24 @@
+pkgbase = hostapd-git-intel-lar
+ pkgdesc = hostapd with prescan LAR workaround for Intel NICs
+ pkgver = 20220902.6f8af5974
+ pkgrel = 1
+ url = http://w1.fi/hostapd/
+ arch = x86_64
+ license = BSD
+ makedepends = git
+ depends = libnl
+ depends = openssl
+ depends = sqlite
+ provides = hostapd
+ conflicts = hostapd
+ options = emptydirs
+ source = git://w1.fi/hostap.git
+ source = config
+ source = hostapd.service
+ source = https://tildearrow.org/storage/hostapd-2.10-lar.patch
+ sha256sums = SKIP
+ sha256sums = 7b2bb1628c44ea41445fcde0e6e45484ab94280bef57cf36f7ea022186cf3a73
+ sha256sums = 989bc6855f44c0b360e3d4cd4a146c35b7c12f8a0ced627b4b033f58edcade8e
+ sha256sums = 561d03e730af458017e68d59a4caa834fcf310f9b16ac543e92063290f586b8d
+
+pkgname = hostapd-git-intel-lar
diff --git a/PKGBUILD b/PKGBUILD
new file mode 100644
index 000000000000..396a31941785
--- /dev/null
+++ b/PKGBUILD
@@ -0,0 +1,76 @@
+# Maintainer: Melanie Scheirer <mel@nie.rs>
+# Contributor: Sergej Pupykin <pupykin.s+arch@gmail.com>
+# Contribuor: Gaetan Bisson <bisson@archlinux.org>
+
+pkgname=hostapd-git-intel-lar
+_gitname=${pkgname/d-git-intel-lar}
+_name=${pkgname/-git-intel-lar}
+pkgver=20220902.6f8af5974
+pkgrel=1
+pkgdesc='hostapd with prescan LAR workaround for Intel NICs'
+url='http://w1.fi/hostapd/'
+arch=(x86_64)
+license=(BSD)
+makedepends=(git)
+depends=(libnl openssl sqlite)
+source=('git://w1.fi/hostap.git'
+ config
+ hostapd.service
+ 'https://tildearrow.org/storage/hostapd-2.10-lar.patch')
+sha256sums=('SKIP'
+ '7b2bb1628c44ea41445fcde0e6e45484ab94280bef57cf36f7ea022186cf3a73'
+ '989bc6855f44c0b360e3d4cd4a146c35b7c12f8a0ced627b4b033f58edcade8e'
+ '561d03e730af458017e68d59a4caa834fcf310f9b16ac543e92063290f586b8d')
+options=('emptydirs')
+conflicts=('hostapd')
+provides=('hostapd')
+
+pkgver() {
+ cd "$_gitname"
+ git log -1 --format='%cd.%h' --date=short | tr -d -
+}
+
+prepare() {
+ cd "$_gitname"
+ # fix include locations in main configuration file
+ sed -e 's|/etc/hostapd|/etc/hostapd/hostapd|g' \
+ -e 's|/var/run|/run|g' \
+ -e 's|radius_attr.sqlite|/var/lib/hostapd/radius_attr.sqlite|g' \
+ -e 's|hostapd.cred|/var/lib/hostapd/hostapd.cred|g' \
+ -e 's|hostapd.ap_settings|/var/lib/hostapd/hostapd.ap_settings|g' \
+ -e 's|hostapd_wps_pin_requests|hostapd/wps_pin_requests|g' \
+ -i "$_name/$_name.conf"
+
+ # extract license
+ cat "${pkgname}/README" | head -n47 | tail -n5 > LICENSE
+
+ # link build configuration into place:
+ # an up-to-date version of the build configuration can be found in
+ # hostapd/defconfig and should be diffed with the packaged one before every
+ # build
+ ln -svf "$srcdir/config" "$_name/.config"
+
+ patch -p1 < "$srcdir/hostapd-2.10-lar.patch"
+}
+
+build() {
+ make -C "$_gitname/$_name"
+}
+
+package() {
+ cd "$_gitname"
+ make -C "$_name" install DESTDIR="$pkgdir" BINDIR="/usr/bin"
+ # systemd service
+ install -vDm 644 "../$_name.service" -t "$pkgdir/usr/lib/systemd/system/"
+ # license
+ install -vDm 644 LICENSE -t "$pkgdir/usr/share/licenses/$_name/"
+ # config
+ install -vDm 640 "$_name/$_name."{accept,conf,deny,eap_user,radius_clients,vlan,wpa_psk} -t "$pkgdir/etc/$_name"
+ # docs
+ install -vDm 644 "$_name/"{hostapd.sim_db,wired.conf,hlr_auc_gw.{txt,milenage_db}} "$_name/"{README*,ChangeLog} -t "$pkgdir/usr/share/doc/$_name"
+ # man pages
+ install -vDm 644 "$_name/$_name.8" -t "$pkgdir/usr/share/man/man8/"
+ install -vDm 644 "$_name/${_name}_cli.1" -t "$pkgdir/usr/share/man/man1/"
+ # state dir
+ install -vdm 750 "$pkgdir/var/lib/$_name"
+}
diff --git a/config b/config
new file mode 100644
index 000000000000..ba9ab72bccf2
--- /dev/null
+++ b/config
@@ -0,0 +1,425 @@
+# Example hostapd build time configuration
+#
+# This file lists the configuration options that are used when building the
+# hostapd binary. All lines starting with # are ignored. Configuration option
+# lines must be commented out complete, if they are not to be included, i.e.,
+# just setting VARIABLE=n is not disabling that variable.
+#
+# This file is included in Makefile, so variables like CFLAGS and LIBS can also
+# be modified from here. In most cass, these lines should use += in order not
+# to override previous values of the variables.
+
+# Driver interface for Host AP driver
+CONFIG_DRIVER_HOSTAP=y
+
+# Driver interface for wired authenticator
+CONFIG_DRIVER_WIRED=y
+
+# Driver interface for drivers using the nl80211 kernel interface
+CONFIG_DRIVER_NL80211=y
+
+# QCA vendor extensions to nl80211
+#CONFIG_DRIVER_NL80211_QCA=y
+
+# driver_nl80211.c requires libnl. If you are compiling it yourself
+# you may need to point hostapd to your version of libnl.
+#
+#CFLAGS += -I$<path to libnl include files>
+#LIBS += -L$<path to libnl library files>
+
+# Use libnl v2.0 (or 3.0) libraries.
+#CONFIG_LIBNL20=y
+
+# Use libnl 3.2 libraries (if this is selected, CONFIG_LIBNL20 is ignored)
+CONFIG_LIBNL32=y
+
+
+# Driver interface for FreeBSD net80211 layer (e.g., Atheros driver)
+#CONFIG_DRIVER_BSD=y
+#CFLAGS += -I/usr/local/include
+#LIBS += -L/usr/local/lib
+#LIBS_p += -L/usr/local/lib
+#LIBS_c += -L/usr/local/lib
+
+# Driver interface for no driver (e.g., RADIUS server only)
+#CONFIG_DRIVER_NONE=y
+
+# WPA2/IEEE 802.11i RSN pre-authentication
+CONFIG_RSN_PREAUTH=y
+
+# Support Operating Channel Validation
+#CONFIG_OCV=y
+
+# Integrated EAP server
+CONFIG_EAP=y
+
+# EAP Re-authentication Protocol (ERP) in integrated EAP server
+CONFIG_ERP=y
+
+# EAP-MD5 for the integrated EAP server
+CONFIG_EAP_MD5=y
+
+# EAP-TLS for the integrated EAP server
+CONFIG_EAP_TLS=y
+
+# EAP-MSCHAPv2 for the integrated EAP server
+CONFIG_EAP_MSCHAPV2=y
+
+# EAP-PEAP for the integrated EAP server
+CONFIG_EAP_PEAP=y
+
+# EAP-GTC for the integrated EAP server
+CONFIG_EAP_GTC=y
+
+# EAP-TTLS for the integrated EAP server
+CONFIG_EAP_TTLS=y
+
+# EAP-SIM for the integrated EAP server
+CONFIG_EAP_SIM=y
+
+# EAP-AKA for the integrated EAP server
+CONFIG_EAP_AKA=y
+
+# EAP-AKA' for the integrated EAP server
+# This requires CONFIG_EAP_AKA to be enabled, too.
+#CONFIG_EAP_AKA_PRIME=y
+
+# EAP-PAX for the integrated EAP server
+CONFIG_EAP_PAX=y
+
+# EAP-PSK for the integrated EAP server (this is _not_ needed for WPA-PSK)
+CONFIG_EAP_PSK=y
+
+# EAP-pwd for the integrated EAP server (secure authentication with a password)
+#CONFIG_EAP_PWD=y
+
+# EAP-SAKE for the integrated EAP server
+CONFIG_EAP_SAKE=y
+
+# EAP-GPSK for the integrated EAP server
+CONFIG_EAP_GPSK=y
+# Include support for optional SHA256 cipher suite in EAP-GPSK
+CONFIG_EAP_GPSK_SHA256=y
+
+# EAP-FAST for the integrated EAP server
+#CONFIG_EAP_FAST=y
+
+# EAP-TEAP for the integrated EAP server
+# Note: The current EAP-TEAP implementation is experimental and should not be
+# enabled for production use. The IETF RFC 7170 that defines EAP-TEAP has number
+# of conflicting statements and missing details and the implementation has
+# vendor specific workarounds for those and as such, may not interoperate with
+# any other implementation. This should not be used for anything else than
+# experimentation and interoperability testing until those issues has been
+# resolved.
+#CONFIG_EAP_TEAP=y
+
+# Wi-Fi Protected Setup (WPS)
+#CONFIG_WPS=y
+# Enable UPnP support for external WPS Registrars
+#CONFIG_WPS_UPNP=y
+# Enable WPS support with NFC config method
+#CONFIG_WPS_NFC=y
+
+# EAP-IKEv2
+#CONFIG_EAP_IKEV2=y
+
+# Trusted Network Connect (EAP-TNC)
+#CONFIG_EAP_TNC=y
+
+# EAP-EKE for the integrated EAP server
+#CONFIG_EAP_EKE=y
+
+# PKCS#12 (PFX) support (used to read private key and certificate file from
+# a file that usually has extension .p12 or .pfx)
+CONFIG_PKCS12=y
+
+# RADIUS authentication server. This provides access to the integrated EAP
+# server from external hosts using RADIUS.
+CONFIG_RADIUS_SERVER=y
+
+# Build IPv6 support for RADIUS operations
+CONFIG_IPV6=y
+
+# IEEE Std 802.11r-2008 (Fast BSS Transition)
+CONFIG_IEEE80211R=y
+
+# Use the hostapd's IEEE 802.11 authentication (ACL), but without
+# the IEEE 802.11 Management capability (e.g., FreeBSD/net80211)
+CONFIG_DRIVER_RADIUS_ACL=y
+
+# Wireless Network Management (IEEE Std 802.11v-2011)
+# Note: This is experimental and not complete implementation.
+CONFIG_WNM=y
+
+# IEEE 802.11ac (Very High Throughput) support
+CONFIG_IEEE80211AC=y
+
+# IEEE 802.11ax HE support
+CONFIG_IEEE80211AX=y
+
+# IEEE 802.11be EHT support
+# CONFIG_IEEE80211AX is mandatory for setting CONFIG_IEEE80211BE.
+# Note: This is experimental and work in progress. The definitions are still
+# subject to change and this should not be expected to interoperate with the
+# final IEEE 802.11be version.
+#CONFIG_IEEE80211BE=y
+
+# Simultaneous Authentication of Equals (SAE), WPA3-Personal
+CONFIG_SAE=y
+
+# SAE Public Key, WPA3-Personal
+#CONFIG_SAE_PK=y
+
+# Remove debugging code that is printing out debug messages to stdout.
+# This can be used to reduce the size of the hostapd considerably if debugging
+# code is not needed.
+#CONFIG_NO_STDOUT_DEBUG=y
+
+# Add support for writing debug log to a file: -f /tmp/hostapd.log
+# Disabled by default.
+#CONFIG_DEBUG_FILE=y
+
+# Send debug messages to syslog instead of stdout
+#CONFIG_DEBUG_SYSLOG=y
+
+# Add support for sending all debug messages (regardless of debug verbosity)
+# to the Linux kernel tracing facility. This helps debug the entire stack by
+# making it easy to record everything happening from the driver up into the
+# same file, e.g., using trace-cmd.
+CONFIG_DEBUG_LINUX_TRACING=y
+
+# Remove support for RADIUS accounting
+#CONFIG_NO_ACCOUNTING=y
+
+# Remove support for RADIUS
+#CONFIG_NO_RADIUS=y
+
+# Remove support for VLANs
+#CONFIG_NO_VLAN=y
+
+# Enable support for fully dynamic VLANs. This enables hostapd to
+# automatically create bridge and VLAN interfaces if necessary.
+#CONFIG_FULL_DYNAMIC_VLAN=y
+
+# Use netlink-based kernel API for VLAN operations instead of ioctl()
+# Note: This requires libnl 3.1 or newer.
+#CONFIG_VLAN_NETLINK=y
+
+# Remove support for dumping internal state through control interface commands
+# This can be used to reduce binary size at the cost of disabling a debugging
+# option.
+#CONFIG_NO_DUMP_STATE=y
+
+# Enable tracing code for developer debugging
+# This tracks use of memory allocations and other registrations and reports
+# incorrect use with a backtrace of call (or allocation) location.
+#CONFIG_WPA_TRACE=y
+# For BSD, comment out these.
+#LIBS += -lexecinfo
+#LIBS_p += -lexecinfo
+#LIBS_c += -lexecinfo
+
+# Use libbfd to get more details for developer debugging
+# This enables use of libbfd to get more detailed symbols for the backtraces
+# generated by CONFIG_WPA_TRACE=y.
+#CONFIG_WPA_TRACE_BFD=y
+# For BSD, comment out these.
+#LIBS += -lbfd -liberty -lz
+#LIBS_p += -lbfd -liberty -lz
+#LIBS_c += -lbfd -liberty -lz
+
+# hostapd depends on strong random number generation being available from the
+# operating system. os_get_random() function is used to fetch random data when
+# needed, e.g., for key generation. On Linux and BSD systems, this works by
+# reading /dev/urandom. It should be noted that the OS entropy pool needs to be
+# properly initialized before hostapd is started. This is important especially
+# on embedded devices that do not have a hardware random number generator and
+# may by default start up with minimal entropy available for random number
+# generation.
+#
+# As a safety net, hostapd is by default trying to internally collect
+# additional entropy for generating random data to mix in with the data
+# fetched from the OS. This by itself is not considered to be very strong, but
+# it may help in cases where the system pool is not initialized properly.
+# However, it is very strongly recommended that the system pool is initialized
+# with enough entropy either by using hardware assisted random number
+# generator or by storing state over device reboots.
+#
+# hostapd can be configured to maintain its own entropy store over restarts to
+# enhance random number generation. This is not perfect, but it is much more
+# secure than using the same sequence of random numbers after every reboot.
+# This can be enabled with -e<entropy file> command line option. The specified
+# file needs to be readable and writable by hostapd.
+#
+# If the os_get_random() is known to provide strong random data (e.g., on
+# Linux/BSD, the board in question is known to have reliable source of random
+# data from /dev/urandom), the internal hostapd random pool can be disabled.
+# This will save some in binary size and CPU use. However, this should only be
+# considered for builds that are known to be used on devices that meet the
+# requirements described above.
+#CONFIG_NO_RANDOM_POOL=y
+
+# Should we attempt to use the getrandom(2) call that provides more reliable
+# yet secure randomness source than /dev/random on Linux 3.17 and newer.
+# Requires glibc 2.25 to build, falls back to /dev/random if unavailable.
+#CONFIG_GETRANDOM=y
+
+# Should we use poll instead of select? Select is used by default.
+#CONFIG_ELOOP_POLL=y
+
+# Should we use epoll instead of select? Select is used by default.
+#CONFIG_ELOOP_EPOLL=y
+
+# Should we use kqueue instead of select? Select is used by default.
+#CONFIG_ELOOP_KQUEUE=y
+
+# Select TLS implementation
+# openssl = OpenSSL (default)
+# gnutls = GnuTLS
+# internal = Internal TLSv1 implementation (experimental)
+# linux = Linux kernel AF_ALG and internal TLSv1 implementation (experimental)
+# none = Empty template
+#CONFIG_TLS=openssl
+
+# TLS-based EAP methods require at least TLS v1.0. Newer version of TLS (v1.1)
+# can be enabled to get a stronger construction of messages when block ciphers
+# are used.
+#CONFIG_TLSV11=y
+
+# TLS-based EAP methods require at least TLS v1.0. Newer version of TLS (v1.2)
+# can be enabled to enable use of stronger crypto algorithms.
+#CONFIG_TLSV12=y
+
+# Select which ciphers to use by default with OpenSSL if the user does not
+# specify them.
+#CONFIG_TLS_DEFAULT_CIPHERS="DEFAULT:!EXP:!LOW"
+
+# If CONFIG_TLS=internal is used, additional library and include paths are
+# needed for LibTomMath. Alternatively, an integrated, minimal version of
+# LibTomMath can be used. See beginning of libtommath.c for details on benefits
+# and drawbacks of this option.
+#CONFIG_INTERNAL_LIBTOMMATH=y
+#ifndef CONFIG_INTERNAL_LIBTOMMATH
+#LTM_PATH=/usr/src/libtommath-0.39
+#CFLAGS += -I$(LTM_PATH)
+#LIBS += -L$(LTM_PATH)
+#LIBS_p += -L$(LTM_PATH)
+#endif
+# At the cost of about 4 kB of additional binary size, the internal LibTomMath
+# can be configured to include faster routines for exptmod, sqr, and div to
+# speed up DH and RSA calculation considerably
+#CONFIG_INTERNAL_LIBTOMMATH_FAST=y
+
+# Interworking (IEEE 802.11u)
+# This can be used to enable functionality to improve interworking with
+# external networks.
+#CONFIG_INTERWORKING=y
+
+# Hotspot 2.0
+#CONFIG_HS20=y
+
+# Enable SQLite database support in hlr_auc_gw, EAP-SIM DB, and eap_user_file
+CONFIG_SQLITE=y
+
+# Enable Fast Session Transfer (FST)
+#CONFIG_FST=y
+
+# Enable CLI commands for FST testing
+#CONFIG_FST_TEST=y
+
+# Testing options
+# This can be used to enable some testing options (see also the example
+# configuration file) that are really useful only for testing clients that
+# connect to this hostapd. These options allow, for example, to drop a
+# certain percentage of probe requests or auth/(re)assoc frames.
+#
+#CONFIG_TESTING_OPTIONS=y
+
+# Automatic Channel Selection
+# This will allow hostapd to pick the channel automatically when channel is set
+# to "acs_survey" or "0". Eventually, other ACS algorithms can be added in
+# similar way.
+#
+# Automatic selection is currently only done through initialization, later on
+# we hope to do background checks to keep us moving to more ideal channels as
+# time goes by. ACS is currently only supported through the nl80211 driver and
+# your driver must have survey dump capability that is filled by the driver
+# during scanning.
+#
+# You can customize the ACS survey algorithm with the hostapd.conf variable
+# acs_num_scans.
+#
+# Supported ACS drivers:
+# * ath9k
+# * ath5k
+# * ath10k
+#
+# For more details refer to:
+# https://wireless.wiki.kernel.org/en/users/documentation/acs
+#
+#CONFIG_ACS=y
+
+# Multiband Operation support
+# These extensions facilitate efficient use of multiple frequency bands
+# available to the AP and the devices that may associate with it.
+#CONFIG_MBO=y
+
+# Client Taxonomy
+# Has the AP retain the Probe Request and (Re)Association Request frames from
+# a client, from which a signature can be produced which can identify the model
+# of client device like "Nexus 6P" or "iPhone 5s".
+#CONFIG_TAXONOMY=y
+
+# Fast Initial Link Setup (FILS) (IEEE 802.11ai)
+#CONFIG_FILS=y
+# FILS shared key authentication with PFS
+#CONFIG_FILS_SK_PFS=y
+
+# Include internal line edit mode in hostapd_cli. This can be used to provide
+# limited command line editing and history support.
+#CONFIG_WPA_CLI_EDIT=y
+
+# Opportunistic Wireless Encryption (OWE)
+# Experimental implementation of draft-harkins-owe-07.txt
+#CONFIG_OWE=y
+
+# Airtime policy support
+#CONFIG_AIRTIME_POLICY=y
+
+# Override default value for the wpa_disable_eapol_key_retries configuration
+# parameter. See that parameter in hostapd.conf for more details.
+#CFLAGS += -DDEFAULT_WPA_DISABLE_EAPOL_KEY_RETRIES=1
+
+# Wired equivalent privacy (WEP)
+# WEP is an obsolete cryptographic data confidentiality algorithm that is not
+# considered secure. It should not be used for anything anymore. The
+# functionality needed to use WEP is available in the current hostapd
+# release under this optional build parameter. This functionality is subject to
+# be completely removed in a future release.
+#CONFIG_WEP=y
+
+# Remove all TKIP functionality
+# TKIP is an old cryptographic data confidentiality algorithm that is not
+# considered secure. It should not be used anymore. For now, the default hostapd
+# build includes this to allow mixed mode WPA+WPA2 networks to be enabled, but
+# that functionality is subject to be removed in the future.
+CONFIG_NO_TKIP=y
+
+# Pre-Association Security Negotiation (PASN)
+# Experimental implementation based on IEEE P802.11z/D2.6 and the protocol
+# design is still subject to change. As such, this should not yet be enabled in
+# production use.
+# This requires CONFIG_IEEE80211W=y to be enabled, too.
+#CONFIG_PASN=y
+
+# Device Provisioning Protocol (DPP) (also known as Wi-Fi Easy Connect)
+CONFIG_DPP=y
+# DPP version 2 support
+CONFIG_DPP2=y
+# DPP version 3 support (experimental and still changing; do not enable for
+# production use)
+#CONFIG_DPP3=y
+
+CONFIG_IEEE80211W=y
+CONFIG_MESH=y
diff --git a/hostapd-2.10-lar.patch b/hostapd-2.10-lar.patch
new file mode 100644
index 000000000000..23fde210b1d6
--- /dev/null
+++ b/hostapd-2.10-lar.patch
@@ -0,0 +1,139 @@
+diff -ru a/hostapd/config_file.c b/hostapd/config_file.c
+--- a/hostapd/config_file.c 2022-01-16 15:51:29.000000000 -0500
++++ b/hostapd/config_file.c 2022-07-06 15:58:31.206322430 -0500
+@@ -2906,6 +2906,8 @@
+ line, bss->wpa_deny_ptk0_rekey);
+ return 1;
+ }
++ } else if (os_strcmp(buf, "noscan") == 0) {
++ conf->noscan = atoi(pos);
+ } else if (os_strcmp(buf, "wpa_group_update_count") == 0) {
+ char *endp;
+ unsigned long val = strtoul(pos, &endp, 0);
+@@ -3474,6 +3476,8 @@
+ if (bss->ocv && !bss->ieee80211w)
+ bss->ieee80211w = 1;
+ #endif /* CONFIG_OCV */
++ } else if (os_strcmp(buf, "noscan") == 0) {
++ conf->noscan = atoi(pos);
+ } else if (os_strcmp(buf, "ieee80211n") == 0) {
+ conf->ieee80211n = atoi(pos);
+ } else if (os_strcmp(buf, "ht_capab") == 0) {
+diff -ru a/src/ap/ap_config.h b/src/ap/ap_config.h
+--- a/src/ap/ap_config.h 2022-01-16 15:51:29.000000000 -0500
++++ b/src/ap/ap_config.h 2022-07-06 15:58:31.206322430 -0500
+@@ -1014,6 +1014,7 @@
+
+ int ht_op_mode_fixed;
+ u16 ht_capab;
++ int noscan;
+ int ieee80211n;
+ int secondary_channel;
+ int no_pri_sec_switch;
+diff -ru a/src/ap/hw_features.c b/src/ap/hw_features.c
+--- a/src/ap/hw_features.c 2022-01-16 15:51:29.000000000 -0500
++++ b/src/ap/hw_features.c 2022-07-06 22:57:53.007315518 -0500
+@@ -24,6 +24,17 @@
+ #include "beacon.h"
+ #include "hw_features.h"
+
++static void ieee80211n_do_nothing(struct hostapd_iface *iface)
++{
++ wpa_printf(MSG_DEBUG,
++ "Scan finished!");
++}
++
++static void ieee80211n_scan_channels_2g4(struct hostapd_iface *iface,
++ struct wpa_driver_scan_params *params);
++static void ieee80211n_scan_channels_5g(struct hostapd_iface *iface,
++ struct wpa_driver_scan_params *params);
++
+
+ void hostapd_free_hw_features(struct hostapd_hw_modes *hw_features,
+ size_t num_hw_features)
+@@ -82,6 +93,33 @@
+
+ if (hostapd_drv_none(hapd))
+ return -1;
++
++
++
++ // scan
++ struct wpa_driver_scan_params params;
++ int ret1;
++
++ os_memset(&params, 0, sizeof(params));
++ ieee80211n_scan_channels_5g(iface, &params);
++
++ ret1 = hostapd_driver_scan(iface->bss[0], &params);
++
++ if (ret1 == -EBUSY) {
++ wpa_printf(MSG_ERROR,
++ "Failed to request a scan of neighboring BSSes ret=%d (%s)!",
++ ret1, strerror(-ret1));
++ }
++
++ if (ret1 == 0) {
++ iface->scan_cb = ieee80211n_do_nothing;
++ wpa_printf(MSG_DEBUG,
++ "Sleeping...");
++ for (int i=0; i<110; i++) {
++ usleep(100000);
++ }
++ }
++
+ modes = hostapd_get_hw_feature_data(hapd, &num_modes, &flags,
+ &dfs_domain);
+ if (modes == NULL) {
+@@ -308,7 +346,6 @@
+ sec_chan);
+ }
+
+-
+ static void ieee80211n_check_scan(struct hostapd_iface *iface)
+ {
+ struct wpa_scan_results *scan_res;
+@@ -517,8 +554,10 @@
+ int ret;
+
+ /* Check that HT40 is used and PRI / SEC switch is allowed */
+- if (!iface->conf->secondary_channel || iface->conf->no_pri_sec_switch)
++ if (!iface->conf->secondary_channel || iface->conf->no_pri_sec_switch || iface->conf->noscan) {
++ wpa_printf(MSG_DEBUG, "Not scanning due to noscan?");
+ return 0;
++ }
+
+ hostapd_set_state(iface, HAPD_IFACE_HT_SCAN);
+ wpa_printf(MSG_DEBUG, "Scan for neighboring BSSes prior to enabling "
+@@ -915,7 +954,7 @@
+ if (!hostapd_is_usable_edmg(iface))
+ return 0;
+
+- if (!iface->conf->secondary_channel)
++ if (!iface->conf->secondary_channel || iface->conf->noscan)
+ return 1;
+
+ if (hostapd_is_usable_chan(iface, iface->freq +
+diff -ru a/src/ap/ieee802_11_ht.c b/src/ap/ieee802_11_ht.c
+--- a/src/ap/ieee802_11_ht.c 2022-01-16 15:51:29.000000000 -0500
++++ b/src/ap/ieee802_11_ht.c 2022-07-06 15:58:31.206322430 -0500
+@@ -230,6 +230,9 @@
+ return;
+ }
+
++ if (iface->conf->noscan)
++ return;
++
+ if (len < IEEE80211_HDRLEN + 2 + sizeof(*bc_ie)) {
+ wpa_printf(MSG_DEBUG,
+ "Ignore too short 20/40 BSS Coexistence Management frame");
+@@ -390,6 +393,9 @@
+ if (iface->current_mode->mode != HOSTAPD_MODE_IEEE80211G)
+ return;
+
++ if (iface->conf->noscan)
++ return;
++
+ wpa_printf(MSG_INFO, "HT: Forty MHz Intolerant is set by STA " MACSTR
+ " in Association Request", MAC2STR(sta->addr));
+
diff --git a/hostapd.service b/hostapd.service
new file mode 100644
index 000000000000..40bda06c78fc
--- /dev/null
+++ b/hostapd.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=Hostapd IEEE 802.11 AP, IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator
+After=network.target
+
+[Service]
+ExecStart=/usr/bin/hostapd /etc/hostapd/hostapd.conf
+ExecReload=/bin/kill -HUP $MAINPID
+
+[Install]
+WantedBy=multi-user.target