From nobody Sun May 25 15:24:24 2025 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4b52kJ44jDz5xfkn; Sun, 25 May 2025 15:24:24 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4b52kJ3TkMz3vHP; Sun, 25 May 2025 15:24:24 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1748186664; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=sOcfrMwgJfuggWkcrkiNeKiXBASNGMsrKl9PFt/O6iA=; b=JhtQYFsBNU91q0n7HV+auY2laWlf8078jqXv7q6F4KtLWAeoLepFG2C64H3oab/QhayoeV efmbNgpDgP0VixBmlnXJHcRgO0RIeLjU+zNuDtgQhzk5ArGv1ZOwGHMjxbGgC5zRUckb7a LHlPUqGQBDBnC3ceAEXVE7f2gtImtDVHRdNeALHuG7ao1lrf23XxzofJZ43qha14dkvmiA 4jW0dQXkQaVJPldhC5jhlh4jwWX6inWgqnOGQxfHZ0NVI/0yQRHkppXQAtfmVWf4VLGIMO bSGtEoN971eC2FIWlnfsZJe52e3rkwQYD9PZcffBmkEPhKPqTxYm8Bw6nDyL2Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1748186664; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=sOcfrMwgJfuggWkcrkiNeKiXBASNGMsrKl9PFt/O6iA=; b=XjbTlODeNufS1fK1n/qIDeNJgxIbnk2tEnOIjBg2eUwSS9pbE/XFEz0mNMu53ZFeSzzDq2 Z/PW74RVqE7vzfiK5Klg0N0KLrOvEzorzLgfbfIAfUFHzAy1XrrZuHta6Ns/C5XJOr9x9C CeYZ7Nvf2ZMjAiS0JrcUIUb4c4pqWJWJUC33zrQsefH98xruZKqe6i/KPj0K40sfcBBiM3 XU+y4rWlS8tfKKOdpD0aH8OehwfMX4Nqxqg9XSMcH5xpaIDfYzoVClAzB81CeWzSqxnT1D 0MVz30OV7xXce23h0T6OCUKhX/PS3/RTPQhGClE/hMgXyjOMOmWxjCnWfKK3cQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1748186664; a=rsa-sha256; cv=none; b=Rxd/IzqUMGcRqtUwXCQ3RwqmHYDTOZKIpgQT+l93QLb0uX7cG+EPvfZZyKsDBSZZbFZMG/ BPaWfG20AelYj0kUaKHCN+mTBwa2P2pzgdVY/j76dQKELz9LQU+GhW/3OAlayrt46SbUVN j2ic51Kgm41WW0+x8NYqpVAXW/629qVsB6I3nk59ViBfzYCQT/mpPD7u+6MulveJ5tBGz8 ZS9mL8kLKbf/2I7vKA8agwVvoOO5DfoZy7ha/wSqCwf34CVFG0askooYP+ok7m1Z3H1RS8 lGe317dGFSFBWxnzh5ONS/2D1Aos98v8obQg/e+ctQ2i6tjTYe7Dx9wKMA6Zyw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4b52kJ32YlzBfT; Sun, 25 May 2025 15:24:24 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 54PFOOst031763; Sun, 25 May 2025 15:24:24 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 54PFOOqR031760; Sun, 25 May 2025 15:24:24 GMT (envelope-from git) Date: Sun, 25 May 2025 15:24:24 GMT Message-Id: <202505251524.54PFOOqR031760@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Adrian Chadd Subject: git: e035e8661c37 - main - net80211: move references to IF_LLADDR() into ieee80211_freebsd.c List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: adrian X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: e035e8661c37b9f0669d31e146ec4afb73f4f435 Auto-Submitted: auto-generated The branch main has been updated by adrian: URL: https://cgit.FreeBSD.org/src/commit/?id=e035e8661c37b9f0669d31e146ec4afb73f4f435 commit e035e8661c37b9f0669d31e146ec4afb73f4f435 Author: Adrian Chadd AuthorDate: 2025-04-25 18:27:29 +0000 Commit: Adrian Chadd CommitDate: 2025-05-25 15:23:02 +0000 net80211: move references to IF_LLADDR() into ieee80211_freebsd.c * Move references to IF_LLADDR() into ieee80211_freebsd.c * Add a comment on one that I need to verify before I move it * Implement ieee80211_vap_sync_mac_address() which syncs the VAP mac address from the network interface MAC address. This uses FreeBSD-isms (network epoch, IF_LLADDR()) so it shouldn't be in net80211 itself. Differential Revision: https://reviews.freebsd.org/D50023 --- sys/net80211/ieee80211.c | 3 ++- sys/net80211/ieee80211_freebsd.c | 44 ++++++++++++++++++++++++++++++++++++++++ sys/net80211/ieee80211_freebsd.h | 3 +++ sys/net80211/ieee80211_ioctl.c | 18 +--------------- sys/net80211/ieee80211_sta.c | 4 ++-- 5 files changed, 52 insertions(+), 20 deletions(-) diff --git a/sys/net80211/ieee80211.c b/sys/net80211/ieee80211.c index dbc7023c7fee..e64568abb024 100644 --- a/sys/net80211/ieee80211.c +++ b/sys/net80211/ieee80211.c @@ -722,7 +722,8 @@ ieee80211_vap_attach(struct ieee80211vap *vap, ifm_change_cb_t media_change, ifp->if_baudrate = IF_Mbps(maxrate); ether_ifattach(ifp, macaddr); - IEEE80211_ADDR_COPY(vap->iv_myaddr, IF_LLADDR(ifp)); + /* Do initial MAC address sync */ + ieee80211_vap_copy_mac_address(vap); /* hook output method setup by ether_ifattach */ vap->iv_output = ifp->if_output; ifp->if_output = ieee80211_output; diff --git a/sys/net80211/ieee80211_freebsd.c b/sys/net80211/ieee80211_freebsd.c index 6979e601ce41..5098529beb47 100644 --- a/sys/net80211/ieee80211_freebsd.c +++ b/sys/net80211/ieee80211_freebsd.c @@ -1192,6 +1192,50 @@ ieee80211_debugnet_poll(struct ifnet *ifp, int count) } #endif +/** + * @brief Check if the MAC address was changed by the upper layer. + * + * This is specifically to handle cases like the MAC address + * being changed via an ioctl (eg SIOCSIFLLADDR). + * + * @param vap VAP to sync MAC address for + */ +void +ieee80211_vap_sync_mac_address(struct ieee80211vap *vap) +{ + struct epoch_tracker et; + const struct ifnet *ifp = vap->iv_ifp; + + /* + * Check if the MAC address was changed + * via SIOCSIFLLADDR ioctl. + * + * NB: device may be detached during initialization; + * use if_ioctl for existence check. + */ + NET_EPOCH_ENTER(et); + if (ifp->if_ioctl == ieee80211_ioctl && + (ifp->if_flags & IFF_UP) == 0 && + !IEEE80211_ADDR_EQ(vap->iv_myaddr, IF_LLADDR(ifp))) + IEEE80211_ADDR_COPY(vap->iv_myaddr, IF_LLADDR(ifp)); + NET_EPOCH_EXIT(et); +} + +/** + * @brief Initial MAC address setup for a VAP. + * + * @param vap VAP to sync MAC address for + */ +void +ieee80211_vap_copy_mac_address(struct ieee80211vap *vap) +{ + struct epoch_tracker et; + + NET_EPOCH_ENTER(et); + IEEE80211_ADDR_COPY(vap->iv_myaddr, IF_LLADDR(vap->iv_ifp)); + NET_EPOCH_EXIT(et); +} + /* * Module glue. * diff --git a/sys/net80211/ieee80211_freebsd.h b/sys/net80211/ieee80211_freebsd.h index ed913f7b3661..bdc78fe99d36 100644 --- a/sys/net80211/ieee80211_freebsd.h +++ b/sys/net80211/ieee80211_freebsd.h @@ -540,6 +540,9 @@ struct debugnet80211_methods { #define DEBUGNET80211_SET(ic, driver) #endif /* DEBUGNET */ +void ieee80211_vap_sync_mac_address(struct ieee80211vap *); +void ieee80211_vap_copy_mac_address(struct ieee80211vap *); + #endif /* _KERNEL */ /* XXX this stuff belongs elsewhere */ diff --git a/sys/net80211/ieee80211_ioctl.c b/sys/net80211/ieee80211_ioctl.c index 6c30325e5e32..d70004c0fb7a 100644 --- a/sys/net80211/ieee80211_ioctl.c +++ b/sys/net80211/ieee80211_ioctl.c @@ -3631,24 +3631,8 @@ ieee80211_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) IEEE80211_UNLOCK(ic); /* Wait for parent ioctl handler if it was queued */ if (wait) { - struct epoch_tracker et; - ieee80211_waitfor_parent(ic); - - /* - * Check if the MAC address was changed - * via SIOCSIFLLADDR ioctl. - * - * NB: device may be detached during initialization; - * use if_ioctl for existence check. - */ - NET_EPOCH_ENTER(et); - if (ifp->if_ioctl == ieee80211_ioctl && - (ifp->if_flags & IFF_UP) == 0 && - !IEEE80211_ADDR_EQ(vap->iv_myaddr, IF_LLADDR(ifp))) - IEEE80211_ADDR_COPY(vap->iv_myaddr, - IF_LLADDR(ifp)); - NET_EPOCH_EXIT(et); + ieee80211_vap_sync_mac_address(vap); } break; case SIOCADDMULTI: diff --git a/sys/net80211/ieee80211_sta.c b/sys/net80211/ieee80211_sta.c index 887eb81dd3c4..0dd007fef508 100644 --- a/sys/net80211/ieee80211_sta.c +++ b/sys/net80211/ieee80211_sta.c @@ -634,10 +634,10 @@ sta_input(struct ieee80211_node *ni, struct mbuf *m, * XXX process data frames whilst scanning. */ if ((! IEEE80211_IS_MULTICAST(wh->i_addr1)) - && (! IEEE80211_ADDR_EQ(wh->i_addr1, IF_LLADDR(ifp)))) { + && (! IEEE80211_ADDR_EQ(wh->i_addr1, vap->iv_myaddr))) { IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_INPUT, bssid, NULL, "not to cur sta: lladdr=%6D, addr1=%6D", - IF_LLADDR(ifp), ":", wh->i_addr1, ":"); + vap->iv_myaddr, ":", wh->i_addr1, ":"); vap->iv_stats.is_rx_wrongbss++; goto out; }