Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 4 Mar 2024 16:44:41 GMT
From:      Cy Schubert <cy@FreeBSD.org>
To:        ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org
Subject:   git: 2dc822b9e7c4 - main - net/hostapd*: Work around lack of MLME support
Message-ID:  <202403041644.424Gif3C094778@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by cy:

URL: https://cgit.FreeBSD.org/ports/commit/?id=2dc822b9e7c44abf61594cbc31379837bb35973d

commit 2dc822b9e7c44abf61594cbc31379837bb35973d
Author:     Cy Schubert <cy@FreeBSD.org>
AuthorDate: 2024-02-27 04:27:50 +0000
Commit:     Cy Schubert <cy@FreeBSD.org>
CommitDate: 2024-03-04 16:44:36 +0000

    net/hostapd*: Work around lack of MLME support
    
    hostap MLME uses Linux data structures and definitions not available
    in FreeBSD. The ability for hostapd to select the frequency (channel)
    depends Linux MLME, though strictly it's not required. Work around the
    Linux MLME requirement to configure device frequency.
    
    The detailed description is: hostapd will only set the channel (frequency)
    when Linux MLME is configured. Enabling NEED_AP_MLME will result in
    numerous build errors due do Linux data structures and definitions not
    available under FreeBSD. The code to set the frequency from the selected
    channel is only within the NEED_AP_MLME code path because without MLME,
    hostapd_get_hw_features() is an inline that always returns -1 whereas with
    MLME hostapd_get_hw_features() will obtain hardware features from the
    kernel. Until such time we simply set the frequency as configured.
    
    PR:             276375
    MFH:            2024Q1
---
 net/hostapd-devel/Makefile                     |  2 +-
 net/hostapd-devel/files/patch-src_ap_hostapd.c | 31 ++++++++++++++++++++++++++
 net/hostapd/Makefile                           |  2 +-
 net/hostapd/files/patch-src_ap_hostapd.c       | 31 ++++++++++++++++++++++++++
 4 files changed, 64 insertions(+), 2 deletions(-)

diff --git a/net/hostapd-devel/Makefile b/net/hostapd-devel/Makefile
index 95aeb3ceb624..e7a5a3f7d11a 100644
--- a/net/hostapd-devel/Makefile
+++ b/net/hostapd-devel/Makefile
@@ -1,6 +1,6 @@
 PORTNAME=	hostapd
 PORTVERSION=	${COMMIT_DATE}
-PORTREVISION=	1
+PORTREVISION=	2
 CATEGORIES=	net
 PKGNAMESUFFIX=	-devel
 
diff --git a/net/hostapd-devel/files/patch-src_ap_hostapd.c b/net/hostapd-devel/files/patch-src_ap_hostapd.c
new file mode 100644
index 000000000000..5219cb3a0da8
--- /dev/null
+++ b/net/hostapd-devel/files/patch-src_ap_hostapd.c
@@ -0,0 +1,31 @@
+--- src/ap/hostapd.c.orig	2024-02-18 01:24:29.000000000 -0800
++++ src/ap/hostapd.c	2024-02-26 20:25:50.505205000 -0800
+@@ -2029,6 +2029,20 @@
+ 	iface->wait_channel_update = 0;
+ 	iface->is_no_ir = false;
+ 
++#ifdef __FreeBSD
++	/* XXX hostapd_get_hw_features() is an inline that always returns -1
++	 * because MLME will not build under FreeBSD due to its use of
++	 * Linux definitions. Normally FreeBSD would uncondionally execute the
++	 * "Not all drivers support..." block. Instead we #ifdef out the entire
++	 * block of code instead of maintaining the fallacy that
++	 * hostapd_get_hw_features() returns anything meaninful.
++	 *
++	 * Ideally WANT_AP_MLME should be taught about FreeBSD data structures
++	 * and defintions. Instead we do this to enable channel selection in
++	 * hostapd.conf.
++	 */
++	iface->freq = iface->conf->channel;
++#else
+ 	if (hostapd_get_hw_features(iface)) {
+ 		/* Not all drivers support this yet, so continue without hw
+ 		 * feature data. */
+@@ -2080,6 +2094,7 @@
+ 		if (iface->conf->ieee80211h)
+ 			wpa_printf(MSG_DEBUG, "DFS support is enabled");
+ 	}
++#endif
+ 	return hostapd_setup_interface_complete(iface, 0);
+ 
+ fail:
diff --git a/net/hostapd/Makefile b/net/hostapd/Makefile
index 4ff64eacad26..a9a1aebc0a0d 100644
--- a/net/hostapd/Makefile
+++ b/net/hostapd/Makefile
@@ -1,6 +1,6 @@
 PORTNAME=	hostapd
 PORTVERSION=	2.10
-PORTREVISION=	9
+PORTREVISION=	10
 CATEGORIES=	net
 MASTER_SITES=	https://w1.fi/releases/
 
diff --git a/net/hostapd/files/patch-src_ap_hostapd.c b/net/hostapd/files/patch-src_ap_hostapd.c
new file mode 100644
index 000000000000..1eafe68ad485
--- /dev/null
+++ b/net/hostapd/files/patch-src_ap_hostapd.c
@@ -0,0 +1,31 @@
+--- src/ap/hostapd.c.orig	2022-01-16 12:51:29.000000000 -0800
++++ src/ap/hostapd.c	2024-02-26 20:24:39.350068000 -0800
+@@ -1698,6 +1698,20 @@
+ {
+ 	iface->wait_channel_update = 0;
+ 
++#ifdef __FreeBSD
++	/* XXX hostapd_get_hw_features() is an inline that always returns -1
++	 * because MLME will not build under FreeBSD due to its use of
++	 * Linux definitions. Normally FreeBSD would uncondionally execute the
++	 * "Not all drivers support..." block. Instead we #ifdef out the entire
++	 * block of code instead of maintaining the fallacy that
++	 * hostapd_get_hw_features() returns anything meaninful.
++	 *
++	 * Ideally WANT_AP_MLME should be taught about FreeBSD data structures
++	 * and defintions. Instead we do this to enable channel selection in
++	 * hostapd.conf.
++	 */
++	iface->freq = iface->conf->channel;
++#else
+ 	if (hostapd_get_hw_features(iface)) {
+ 		/* Not all drivers support this yet, so continue without hw
+ 		 * feature data. */
+@@ -1744,6 +1758,7 @@
+ 		if (iface->conf->ieee80211h)
+ 			wpa_printf(MSG_DEBUG, "DFS support is enabled");
+ 	}
++#endif
+ 	return hostapd_setup_interface_complete(iface, 0);
+ 
+ fail:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202403041644.424Gif3C094778>