Changeset View
Changeset View
Standalone View
Standalone View
sys/net80211/ieee80211_output.c
Context not available. | |||||
/* NB: IFQ_HANDOFF reclaims mbuf */ | /* NB: IFQ_HANDOFF reclaims mbuf */ | ||||
ieee80211_free_node(ni); | ieee80211_free_node(ni); | ||||
if_inc_counter(ifp, IFCOUNTER_OERRORS, 1); | if_inc_counter(ifp, IFCOUNTER_OERRORS, 1); | ||||
} else { | |||||
if_inc_counter(ifp, IFCOUNTER_OPACKETS, 1); | |||||
if_inc_counter(ifp, IFCOUNTER_OMCASTS, mcast); | |||||
if_inc_counter(ifp, IFCOUNTER_OBYTES, len); | |||||
} | } | ||||
ic->ic_lastdata = ticks; | ic->ic_lastdata = ticks; | ||||
Context not available. | |||||
{ | { | ||||
struct ieee80211vap *vap = ifp->if_softc; | struct ieee80211vap *vap = ifp->if_softc; | ||||
struct ieee80211com *ic = vap->iv_ic; | struct ieee80211com *ic = vap->iv_ic; | ||||
struct ifnet *parent = ic->ic_ifp; | |||||
/* NB: parent must be up and running */ | |||||
if (!IFNET_IS_UP_RUNNING(parent)) { | |||||
IEEE80211_DPRINTF(vap, IEEE80211_MSG_OUTPUT, | |||||
"%s: ignore queue, parent %s not up+running\n", | |||||
__func__, parent->if_xname); | |||||
m_freem(m); | |||||
if_inc_counter(ifp, IFCOUNTER_OERRORS, 1); | |||||
return (ENETDOWN); | |||||
} | |||||
/* | /* | ||||
* No data frames go out unless we're running. | * No data frames go out unless we're running. | ||||
* Note in particular this covers CAC and CSA | * Note in particular this covers CAC and CSA | ||||
Context not available. | |||||
struct mbuf *m, const struct ieee80211_bpf_params *params) | struct mbuf *m, const struct ieee80211_bpf_params *params) | ||||
{ | { | ||||
struct ieee80211com *ic = vap->iv_ic; | struct ieee80211com *ic = vap->iv_ic; | ||||
int error; | |||||
/* | /* | ||||
* Set node - the caller has taken a reference, so ensure | * Set node - the caller has taken a reference, so ensure | ||||
Context not available. | |||||
if (params) | if (params) | ||||
(void) ieee80211_add_xmit_params(m, params); | (void) ieee80211_add_xmit_params(m, params); | ||||
return (ic->ic_raw_xmit(ni, m, params)); | error = ic->ic_raw_xmit(ni, m, params); | ||||
if (error) | |||||
if_inc_counter(vap->iv_ifp, IFCOUNTER_OERRORS, 1); | |||||
return (error); | |||||
} | } | ||||
/* | /* | ||||
Context not available. | |||||
{ | { | ||||
if (ni != NULL) { | if (ni != NULL) { | ||||
struct ifnet *ifp = ni->ni_vap->iv_ifp; | |||||
if (status == 0) { | |||||
if_inc_counter(ifp, IFCOUNTER_OBYTES, m->m_pkthdr.len); | |||||
if_inc_counter(ifp, IFCOUNTER_OPACKETS, 1); | |||||
if (m->m_flags & M_MCAST) | |||||
if_inc_counter(ifp, IFCOUNTER_OMCASTS, 1); | |||||
} else | |||||
if_inc_counter(ifp, IFCOUNTER_OERRORS, 1); | |||||
if (m->m_flags & M_TXCB) | if (m->m_flags & M_TXCB) | ||||
ieee80211_process_callback(ni, m, status); | ieee80211_process_callback(ni, m, status); | ||||
ieee80211_free_node(ni); | ieee80211_free_node(ni); | ||||
Context not available. |