Exemple #1
0
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);
}