diff options
| author | Adrian Chadd <adrian@FreeBSD.org> | 2025-05-18 04:16:55 +0000 |
|---|---|---|
| committer | Adrian Chadd <adrian@FreeBSD.org> | 2025-05-25 15:23:14 +0000 |
| commit | 3f6a84ffbf39c0e5e7673e6f73cf439507799e5e (patch) | |
| tree | ec095624837fb3ce75c782b5b00e447347b7813e /sys/net80211 | |
| parent | e035e8661c37b9f0669d31e146ec4afb73f4f435 (diff) | |
Diffstat (limited to 'sys/net80211')
| -rw-r--r-- | sys/net80211/ieee80211_freebsd.c | 21 | ||||
| -rw-r--r-- | sys/net80211/ieee80211_freebsd.h | 1 | ||||
| -rw-r--r-- | sys/net80211/ieee80211_hostap.c | 7 | ||||
| -rw-r--r-- | sys/net80211/ieee80211_input.c | 6 |
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 * |
