Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 25 May 2025 15:24:27 GMT
From:      Adrian Chadd <adrian@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: a278d11a60e0 - main - net80211: refactor out ifp->if_broadcastaddr into ieee80211_freebsd.c
Message-ID:  <202505251524.54PFORu8031869@gitrepo.freebsd.org>

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

URL: https://cgit.FreeBSD.org/src/commit/?id=a278d11a60e05d62ab91a6fe0fc3aedbee2bb295

commit a278d11a60e05d62ab91a6fe0fc3aedbee2bb295
Author:     Adrian Chadd <adrian@FreeBSD.org>
AuthorDate: 2025-05-18 04:44:29 +0000
Commit:     Adrian Chadd <adrian@FreeBSD.org>
CommitDate: 2025-05-25 15:23:55 +0000

    net80211: refactor out ifp->if_broadcastaddr into ieee80211_freebsd.c
    
    * create ieee80211_vap_get_broadcast_address() to fetch the broadcast
      MAC address for the given VAP
    * refactor references to ifp->if_broadcastaddr ->
      ieee80211_vap_get_broadcast_address()
    
    Differential Revision:  https://reviews.freebsd.org/D50406
    Reviewed by:    bz
---
 sys/net80211/ieee80211_adhoc.c   |  3 ++-
 sys/net80211/ieee80211_freebsd.c | 12 ++++++++++++
 sys/net80211/ieee80211_freebsd.h |  1 +
 sys/net80211/ieee80211_hostap.c  |  9 +++++----
 sys/net80211/ieee80211_ioctl.c   |  6 ++++--
 sys/net80211/ieee80211_output.c  |  4 ++--
 sys/net80211/ieee80211_scan_sw.c | 11 ++++++-----
 sys/net80211/ieee80211_wds.c     |  3 ++-
 8 files changed, 34 insertions(+), 15 deletions(-)

diff --git a/sys/net80211/ieee80211_adhoc.c b/sys/net80211/ieee80211_adhoc.c
index 210c9fc75bd9..5f5642884726 100644
--- a/sys/net80211/ieee80211_adhoc.c
+++ b/sys/net80211/ieee80211_adhoc.c
@@ -395,7 +395,8 @@ adhoc_input(struct ieee80211_node *ni, struct mbuf *m,
 		     (subtype == IEEE80211_FC0_SUBTYPE_BEACON ||
 		      subtype == IEEE80211_FC0_SUBTYPE_PROBE_RESP)) &&
 		    !IEEE80211_ADDR_EQ(bssid, vap->iv_bss->ni_bssid) &&
-		    !IEEE80211_ADDR_EQ(bssid, ifp->if_broadcastaddr)) {
+		    !IEEE80211_ADDR_EQ(bssid,
+		        ieee80211_vap_get_broadcast_address(vap))) {
 			/* not interested in */
 			IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_INPUT,
 			    bssid, NULL, "%s", "not to bss");
diff --git a/sys/net80211/ieee80211_freebsd.c b/sys/net80211/ieee80211_freebsd.c
index aa3ae82d089f..d0aa47859a3a 100644
--- a/sys/net80211/ieee80211_freebsd.c
+++ b/sys/net80211/ieee80211_freebsd.c
@@ -1314,6 +1314,18 @@ ieee80211_vap_ifp_set_running_state(struct ieee80211vap *vap, bool state)
 		if_setdrvflagbits(vap->iv_ifp, 0, IFF_DRV_RUNNING);
 }
 
+/**
+ * @brief Return the broadcast MAC address.
+ *
+ * @param vap	The current VAP
+ * @retval a uint8_t array representing the ethernet broadcast address
+ */
+const uint8_t *
+ieee80211_vap_get_broadcast_address(struct ieee80211vap *vap)
+{
+	return (if_getbroadcastaddr(vap->iv_ifp));
+}
+
 /*
  * Module glue.
  *
diff --git a/sys/net80211/ieee80211_freebsd.h b/sys/net80211/ieee80211_freebsd.h
index 449ff8f05202..5afc093ba90c 100644
--- a/sys/net80211/ieee80211_freebsd.h
+++ b/sys/net80211/ieee80211_freebsd.h
@@ -547,6 +547,7 @@ bool ieee80211_vap_ifp_check_is_monitor(struct ieee80211vap *);
 bool ieee80211_vap_ifp_check_is_simplex(struct ieee80211vap *);
 bool ieee80211_vap_ifp_check_is_running(struct ieee80211vap *);
 void ieee80211_vap_ifp_set_running_state(struct ieee80211vap *, bool);
+const uint8_t * ieee80211_vap_get_broadcast_address(struct ieee80211vap *);
 
 #endif /* _KERNEL */
 
diff --git a/sys/net80211/ieee80211_hostap.c b/sys/net80211/ieee80211_hostap.c
index e9105f2e7505..1b246c428411 100644
--- a/sys/net80211/ieee80211_hostap.c
+++ b/sys/net80211/ieee80211_hostap.c
@@ -557,9 +557,10 @@ hostap_input(struct ieee80211_node *ni, struct mbuf *m,
 		 * Validate the bssid.
 		 */
 		if (!(type == IEEE80211_FC0_TYPE_MGT &&
-		      subtype == IEEE80211_FC0_SUBTYPE_BEACON) &&
+		    subtype == IEEE80211_FC0_SUBTYPE_BEACON) &&
 		    !IEEE80211_ADDR_EQ(bssid, vap->iv_bss->ni_bssid) &&
-		    !IEEE80211_ADDR_EQ(bssid, ifp->if_broadcastaddr)) {
+		    !IEEE80211_ADDR_EQ(bssid,
+		    ieee80211_vap_get_broadcast_address(vap))) {
 			/* not interested in */
 			IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_INPUT,
 			    bssid, NULL, "%s", "not to bss");
@@ -1654,7 +1655,6 @@ static void
 ieee80211_deliver_l2uf(struct ieee80211_node *ni)
 {
 	struct ieee80211vap *vap = ni->ni_vap;
-	struct ifnet *ifp = vap->iv_ifp;
 	struct mbuf *m;
 	struct l2_update_frame *l2uf;
 	struct ether_header *eh;
@@ -1669,7 +1669,8 @@ ieee80211_deliver_l2uf(struct ieee80211_node *ni)
 	l2uf = mtod(m, struct l2_update_frame *);
 	eh = &l2uf->eh;
 	/* dst: Broadcast address */
-	IEEE80211_ADDR_COPY(eh->ether_dhost, ifp->if_broadcastaddr);
+	IEEE80211_ADDR_COPY(eh->ether_dhost,
+	    ieee80211_vap_get_broadcast_address(vap));
 	/* src: associated STA */
 	IEEE80211_ADDR_COPY(eh->ether_shost, ni->ni_macaddr);
 	eh->ether_type = htons(sizeof(*l2uf) - sizeof(*eh));
diff --git a/sys/net80211/ieee80211_ioctl.c b/sys/net80211/ieee80211_ioctl.c
index 7e698ba5cdb8..a72568e559aa 100644
--- a/sys/net80211/ieee80211_ioctl.c
+++ b/sys/net80211/ieee80211_ioctl.c
@@ -510,7 +510,8 @@ ieee80211_ioctl_getstainfo(struct ieee80211vap *vap, struct ieee80211req *ireq)
 	error = copyin(ireq->i_data, macaddr, IEEE80211_ADDR_LEN);
 	if (error != 0)
 		return error;
-	if (IEEE80211_ADDR_EQ(macaddr, vap->iv_ifp->if_broadcastaddr)) {
+	if (IEEE80211_ADDR_EQ(macaddr,
+	    ieee80211_vap_get_broadcast_address(vap))) {
 		ni = NULL;
 	} else {
 		ni = ieee80211_find_vap_node(&vap->iv_ic->ic_sta, vap, macaddr);
@@ -1371,7 +1372,8 @@ setmlme_dropsta(struct ieee80211vap *vap,
 	int error = 0;
 
 	/* NB: the broadcast address means do 'em all */
-	if (!IEEE80211_ADDR_EQ(mac, vap->iv_ifp->if_broadcastaddr)) {
+	if (!IEEE80211_ADDR_EQ(mac,
+	    ieee80211_vap_get_broadcast_address(vap))) {
 		IEEE80211_NODE_LOCK(nt);
 		ni = ieee80211_find_node_locked(nt, mac);
 		IEEE80211_NODE_UNLOCK(nt);
diff --git a/sys/net80211/ieee80211_output.c b/sys/net80211/ieee80211_output.c
index 1b5b3373685f..9466b4851881 100644
--- a/sys/net80211/ieee80211_output.c
+++ b/sys/net80211/ieee80211_output.c
@@ -3659,7 +3659,6 @@ ieee80211_beacon_alloc(struct ieee80211_node *ni)
 {
 	struct ieee80211vap *vap = ni->ni_vap;
 	struct ieee80211com *ic = ni->ni_ic;
-	struct ifnet *ifp = vap->iv_ifp;
 	struct ieee80211_frame *wh;
 	struct mbuf *m;
 	int pktlen;
@@ -3761,7 +3760,8 @@ ieee80211_beacon_alloc(struct ieee80211_node *ni)
 	    IEEE80211_FC0_SUBTYPE_BEACON;
 	wh->i_fc[1] = IEEE80211_FC1_DIR_NODS;
 	*(uint16_t *)wh->i_dur = 0;
-	IEEE80211_ADDR_COPY(wh->i_addr1, ifp->if_broadcastaddr);
+	IEEE80211_ADDR_COPY(wh->i_addr1,
+	    ieee80211_vap_get_broadcast_address(vap));
 	IEEE80211_ADDR_COPY(wh->i_addr2, vap->iv_myaddr);
 	IEEE80211_ADDR_COPY(wh->i_addr3, ni->ni_bssid);
 	*(uint16_t *)wh->i_seq = 0;
diff --git a/sys/net80211/ieee80211_scan_sw.c b/sys/net80211/ieee80211_scan_sw.c
index e1d6b2779cf0..f64730ce852f 100644
--- a/sys/net80211/ieee80211_scan_sw.c
+++ b/sys/net80211/ieee80211_scan_sw.c
@@ -526,7 +526,6 @@ ieee80211_swscan_probe_curchan(struct ieee80211vap *vap, bool force __unused)
 {
 	struct ieee80211com *ic = vap->iv_ic;
 	struct ieee80211_scan_state *ss = ic->ic_scan;
-	struct ifnet *ifp = vap->iv_ifp;
 	int i;
 
 	/*
@@ -542,13 +541,15 @@ ieee80211_swscan_probe_curchan(struct ieee80211vap *vap, bool force __unused)
 	 */
 	for (i = 0; i < ss->ss_nssid; i++)
 		ieee80211_send_probereq(vap->iv_bss,
-			vap->iv_myaddr, ifp->if_broadcastaddr,
-			ifp->if_broadcastaddr,
+			vap->iv_myaddr,
+			ieee80211_vap_get_broadcast_address(vap),
+			ieee80211_vap_get_broadcast_address(vap),
 			ss->ss_ssid[i].ssid, ss->ss_ssid[i].len);
 	if ((ss->ss_flags & IEEE80211_SCAN_NOBCAST) == 0)
 		ieee80211_send_probereq(vap->iv_bss,
-			vap->iv_myaddr, ifp->if_broadcastaddr,
-			ifp->if_broadcastaddr,
+			vap->iv_myaddr,
+			ieee80211_vap_get_broadcast_address(vap),
+			ieee80211_vap_get_broadcast_address(vap),
 			"", 0);
 }
 
diff --git a/sys/net80211/ieee80211_wds.c b/sys/net80211/ieee80211_wds.c
index 19827e78706a..0bb9271693db 100644
--- a/sys/net80211/ieee80211_wds.c
+++ b/sys/net80211/ieee80211_wds.c
@@ -487,7 +487,8 @@ wds_input(struct ieee80211_node *ni, struct mbuf *m,
 	}
 	/* NB: the TA is implicitly verified by finding the wds peer node */
 	if (!IEEE80211_ADDR_EQ(wh->i_addr1, vap->iv_myaddr) &&
-	    !IEEE80211_ADDR_EQ(wh->i_addr1, ifp->if_broadcastaddr)) {
+	    !IEEE80211_ADDR_EQ(wh->i_addr1,
+	    ieee80211_vap_get_broadcast_address(vap))) {
 		/* not interested in */
 		IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_INPUT,
 		    wh->i_addr1, NULL, "%s", "not to bss");



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