git: a278d11a60e0 - main - net80211: refactor out ifp->if_broadcastaddr into ieee80211_freebsd.c
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sun, 25 May 2025 15:24:27 UTC
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");