Page MenuHomeFreeBSD

D50404.id155638.diff
No OneTemporary

D50404.id155638.diff

diff --git a/sys/net80211/ieee80211_freebsd.h b/sys/net80211/ieee80211_freebsd.h
--- a/sys/net80211/ieee80211_freebsd.h
+++ b/sys/net80211/ieee80211_freebsd.h
@@ -542,6 +542,7 @@
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_freebsd.c b/sys/net80211/ieee80211_freebsd.c
--- a/sys/net80211/ieee80211_freebsd.c
+++ b/sys/net80211/ieee80211_freebsd.c
@@ -1221,6 +1221,28 @@
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 ifnet *ifp = vap->iv_ifp;
+ struct epoch_tracker et;
+
+ NET_EPOCH_ENTER(et);
+ if_input(ifp, m);
+ NET_EPOCH_EXIT(et);
+}
+
/**
* @brief Initial MAC address setup for a VAP.
*
diff --git a/sys/net80211/ieee80211_hostap.c b/sys/net80211/ieee80211_hostap.c
--- a/sys/net80211/ieee80211_hostap.c
+++ b/sys/net80211/ieee80211_hostap.c
@@ -416,8 +416,6 @@
(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 @@
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
--- a/sys/net80211/ieee80211_input.c
+++ b/sys/net80211/ieee80211_input.c
@@ -274,7 +274,6 @@
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 @@
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 *

File Metadata

Mime Type
text/plain
Expires
Fri, Apr 24, 2:08 AM (15 h, 26 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
32055495
Default Alt Text
D50404.id155638.diff (2 KB)

Event Timeline