aboutsummaryrefslogtreecommitdiff
path: root/sys/net80211
diff options
context:
space:
mode:
authorAdrian Chadd <adrian@FreeBSD.org>2025-05-18 04:16:55 +0000
committerAdrian Chadd <adrian@FreeBSD.org>2025-05-25 15:23:14 +0000
commit3f6a84ffbf39c0e5e7673e6f73cf439507799e5e (patch)
treeec095624837fb3ce75c782b5b00e447347b7813e /sys/net80211
parente035e8661c37b9f0669d31e146ec4afb73f4f435 (diff)
Diffstat (limited to 'sys/net80211')
-rw-r--r--sys/net80211/ieee80211_freebsd.c21
-rw-r--r--sys/net80211/ieee80211_freebsd.h1
-rw-r--r--sys/net80211/ieee80211_hostap.c7
-rw-r--r--sys/net80211/ieee80211_input.c6
4 files changed, 26 insertions, 9 deletions
diff --git a/sys/net80211/ieee80211_freebsd.c b/sys/net80211/ieee80211_freebsd.c
index 5098529beb47..0a51063e1d9a 100644
--- a/sys/net80211/ieee80211_freebsd.c
+++ b/sys/net80211/ieee80211_freebsd.c
@@ -1236,6 +1236,27 @@ ieee80211_vap_copy_mac_address(struct ieee80211vap *vap)
NET_EPOCH_EXIT(et);
}
+/**
+ * @brief Deliver data into the upper ifp of the VAP interface
+ *
+ * This delivers an 802.3 frame from net80211 up to the operating
+ * system network interface layer.
+ *
+ * @param vap the current VAP
+ * @param m the 802.3 frame to pass up to the VAP interface
+ *
+ * Note: this API consumes the mbuf.
+ */
+void
+ieee80211_vap_deliver_data(struct ieee80211vap *vap, struct mbuf *m)
+{
+ struct epoch_tracker et;
+
+ NET_EPOCH_ENTER(et);
+ if_input(vap->iv_ifp, m);
+ NET_EPOCH_EXIT(et);
+}
+
/*
* Module glue.
*
diff --git a/sys/net80211/ieee80211_freebsd.h b/sys/net80211/ieee80211_freebsd.h
index bdc78fe99d36..442c5edef52d 100644
--- a/sys/net80211/ieee80211_freebsd.h
+++ b/sys/net80211/ieee80211_freebsd.h
@@ -542,6 +542,7 @@ struct debugnet80211_methods {
void ieee80211_vap_sync_mac_address(struct ieee80211vap *);
void ieee80211_vap_copy_mac_address(struct ieee80211vap *);
+void ieee80211_vap_deliver_data(struct ieee80211vap *, struct mbuf *);
#endif /* _KERNEL */
diff --git a/sys/net80211/ieee80211_hostap.c b/sys/net80211/ieee80211_hostap.c
index 1573d83f4cb4..e9105f2e7505 100644
--- a/sys/net80211/ieee80211_hostap.c
+++ b/sys/net80211/ieee80211_hostap.c
@@ -416,8 +416,6 @@ hostap_deliver_data(struct ieee80211vap *vap,
(void) ieee80211_vap_xmitpkt(vap, mcopy);
}
if (m != NULL) {
- struct epoch_tracker et;
-
/*
* Mark frame as coming from vap's interface.
*/
@@ -434,9 +432,8 @@ hostap_deliver_data(struct ieee80211vap *vap,
m->m_pkthdr.ether_vtag = ni->ni_vlan;
m->m_flags |= M_VLANTAG;
}
- NET_EPOCH_ENTER(et);
- ifp->if_input(ifp, m);
- NET_EPOCH_EXIT(et);
+
+ ieee80211_vap_deliver_data(vap, m);
}
}
diff --git a/sys/net80211/ieee80211_input.c b/sys/net80211/ieee80211_input.c
index 925918c872dc..7befff22bd6f 100644
--- a/sys/net80211/ieee80211_input.c
+++ b/sys/net80211/ieee80211_input.c
@@ -274,7 +274,6 @@ void
ieee80211_deliver_data(struct ieee80211vap *vap,
struct ieee80211_node *ni, struct mbuf *m)
{
- struct epoch_tracker et;
struct ether_header *eh = mtod(m, struct ether_header *);
struct ifnet *ifp = vap->iv_ifp;
@@ -305,9 +304,8 @@ ieee80211_deliver_data(struct ieee80211vap *vap,
m->m_pkthdr.ether_vtag = ni->ni_vlan;
m->m_flags |= M_VLANTAG;
}
- NET_EPOCH_ENTER(et);
- ifp->if_input(ifp, m);
- NET_EPOCH_EXIT(et);
+
+ ieee80211_vap_deliver_data(vap, m);
}
struct mbuf *