Changeset View
Changeset View
Standalone View
Standalone View
sys/net80211/ieee80211_wds.c
Show First 20 Lines • Show All 282 Lines • ▼ Show 20 Lines | if (ieee80211_classify(ni, mcopy)) { | ||||
continue; | continue; | ||||
} | } | ||||
BPF_MTAP(ifp, m); /* 802.3 tx */ | BPF_MTAP(ifp, m); /* 802.3 tx */ | ||||
/* | /* | ||||
* Encapsulate the packet in prep for transmission. | * Encapsulate the packet in prep for transmission. | ||||
*/ | */ | ||||
if (! IEEE80211_CONF_SEQNO_OFFLOAD(ic)) | |||||
IEEE80211_TX_LOCK(ic); | IEEE80211_TX_LOCK(ic); | ||||
mcopy = ieee80211_encap(vap, ni, mcopy); | mcopy = ieee80211_encap(vap, ni, mcopy); | ||||
if (mcopy == NULL) { | if (mcopy == NULL) { | ||||
/* NB: stat+msg handled in ieee80211_encap */ | /* NB: stat+msg handled in ieee80211_encap */ | ||||
if (! IEEE80211_CONF_SEQNO_OFFLOAD(ic)) | |||||
IEEE80211_TX_UNLOCK(ic); | IEEE80211_TX_UNLOCK(ic); | ||||
ieee80211_free_node(ni); | ieee80211_free_node(ni); | ||||
continue; | continue; | ||||
} | } | ||||
mcopy->m_flags |= M_MCAST; | mcopy->m_flags |= M_MCAST; | ||||
mcopy->m_pkthdr.rcvif = (void *) ni; | mcopy->m_pkthdr.rcvif = (void *) ni; | ||||
err = ieee80211_parent_xmitpkt(ic, mcopy); | err = ieee80211_parent_xmitpkt(ic, mcopy); | ||||
if (! IEEE80211_CONF_SEQNO_OFFLOAD(ic)) | |||||
IEEE80211_TX_UNLOCK(ic); | IEEE80211_TX_UNLOCK(ic); | ||||
if (!err) { | if (!err) { | ||||
if_inc_counter(ifp, IFCOUNTER_OPACKETS, 1); | if_inc_counter(ifp, IFCOUNTER_OPACKETS, 1); | ||||
if_inc_counter(ifp, IFCOUNTER_OMCASTS, 1); | if_inc_counter(ifp, IFCOUNTER_OMCASTS, 1); | ||||
if_inc_counter(ifp, IFCOUNTER_OBYTES, | if_inc_counter(ifp, IFCOUNTER_OBYTES, | ||||
m->m_pkthdr.len); | m->m_pkthdr.len); | ||||
} | } | ||||
} | } | ||||
} | } | ||||
▲ Show 20 Lines • Show All 487 Lines • Show Last 20 Lines |