int ieee80211_alq_log(struct ieee80211com *ic, struct ieee80211vap *vap, uint32_t op, uint32_t flags, uint16_t srcid, const uint8_t *src, size_t len) { struct ale *ale; struct ieee80211_alq_rec *r; char *dst; /* Don't log if we're disabled */ if (ieee80211_alq == NULL) return (0); if (len > IEEE80211_ALQ_MAX_PAYLOAD) return (ENOMEM); ale = ieee80211_alq_get(len); if (! ale) return (ENOMEM); r = (struct ieee80211_alq_rec *) ale->ae_data; dst = ((char *) r) + sizeof(struct ieee80211_alq_rec); r->r_timestamp = htobe64(ticks); if (vap != NULL) { r->r_wlan = htobe16(vap->iv_ifp->if_dunit); } else { r->r_wlan = 0xffff; } r->r_src = htobe16(srcid); r->r_flags = htobe32(flags); r->r_op = htobe32(op); r->r_len = htobe32(len + sizeof(struct ieee80211_alq_rec)); r->r_threadid = htobe32((uint32_t) curthread->td_tid); if (src != NULL) memcpy(dst, src, len); alq_post(ieee80211_alq, ale); return (0); }
void ieee80211_alq_log(struct ieee80211vap *vap, uint8_t op, u_char *p, int l) { struct ale *ale; struct ieee80211_alq_rec *r; if (ieee80211_alq == NULL) return; ale = ieee80211_alq_get(); if (! ale) return; r = (struct ieee80211_alq_rec *) ale->ae_data; r->r_timestamp = htonl(ticks); r->r_version = 1; r->r_wlan = htons(vap->iv_ifp->if_dunit); r->r_op = op; memcpy(&r->r_payload, p, MIN(l, sizeof(r->r_payload))); alq_post(ieee80211_alq, ale); }