ieee80211_freebsd.c (7e857dd14fe7f42f5b46af4904f84915215d8987) | ieee80211_freebsd.c (519f677aff17ce417e74f2f2727313b5b3fed687) |
---|---|
1/*- 2 * Copyright (c) 2003-2009 Sam Leffler, Errno Consulting 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 39 unchanged lines hidden (view full) --- 48#include <net/if_dl.h> 49#include <net/if_clone.h> 50#include <net/if_media.h> 51#include <net/if_types.h> 52#include <net/ethernet.h> 53#include <net/route.h> 54 55#include <net80211/ieee80211_var.h> | 1/*- 2 * Copyright (c) 2003-2009 Sam Leffler, Errno Consulting 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 39 unchanged lines hidden (view full) --- 48#include <net/if_dl.h> 49#include <net/if_clone.h> 50#include <net/if_media.h> 51#include <net/if_types.h> 52#include <net/ethernet.h> 53#include <net/route.h> 54 55#include <net80211/ieee80211_var.h> |
56#include <net80211/ieee80211_input.h> |
|
56 57SYSCTL_NODE(_net, OID_AUTO, wlan, CTLFLAG_RD, 0, "IEEE 80211 parameters"); 58 59#ifdef IEEE80211_DEBUG 60int ieee80211_debug = 0; 61SYSCTL_INT(_net_wlan, OID_AUTO, debug, CTLFLAG_RW, &ieee80211_debug, 62 0, "debugging printfs"); 63#endif --- 339 unchanged lines hidden (view full) --- 403 } 404 if (m != NULL) { 405 m->m_data += headroom; 406 *frm = m->m_data; 407 } 408 return m; 409} 410 | 57 58SYSCTL_NODE(_net, OID_AUTO, wlan, CTLFLAG_RD, 0, "IEEE 80211 parameters"); 59 60#ifdef IEEE80211_DEBUG 61int ieee80211_debug = 0; 62SYSCTL_INT(_net_wlan, OID_AUTO, debug, CTLFLAG_RW, &ieee80211_debug, 63 0, "debugging printfs"); 64#endif --- 339 unchanged lines hidden (view full) --- 404 } 405 if (m != NULL) { 406 m->m_data += headroom; 407 *frm = m->m_data; 408 } 409 return m; 410} 411 |
412/* 413 * Re-align the payload in the mbuf. This is mainly used (right now) 414 * to handle IP header alignment requirements on certain architectures. 415 */ 416struct mbuf * 417ieee80211_realign(struct ieee80211vap *vap, struct mbuf *m, size_t align) 418{ 419 int pktlen, space; 420 struct mbuf *n; 421 422 pktlen = m->m_pkthdr.len; 423 space = pktlen + align; 424 if (space < MINCLSIZE) 425 n = m_gethdr(M_DONTWAIT, MT_DATA); 426 else { 427 n = m_getjcl(M_DONTWAIT, MT_DATA, M_PKTHDR, 428 space <= MCLBYTES ? MCLBYTES : 429#if MJUMPAGESIZE != MCLBYTES 430 space <= MJUMPAGESIZE ? MJUMPAGESIZE : 431#endif 432 space <= MJUM9BYTES ? MJUM9BYTES : MJUM16BYTES); 433 } 434 if (__predict_true(n != NULL)) { 435 m_move_pkthdr(n, m); 436 n->m_data = (caddr_t)(ALIGN(n->m_data + align) - align); 437 m_copydata(m, 0, pktlen, mtod(n, caddr_t)); 438 n->m_len = pktlen; 439 } else { 440 IEEE80211_DISCARD(vap, IEEE80211_MSG_ANY, 441 mtod(m, const struct ieee80211_frame *), NULL, 442 "%s", "no mbuf to realign"); 443 vap->iv_stats.is_rx_badalign++; 444 } 445 m_freem(m); 446 return n; 447} 448 |
|
411int 412ieee80211_add_callback(struct mbuf *m, 413 void (*func)(struct ieee80211_node *, void *, int), void *arg) 414{ 415 struct m_tag *mtag; 416 struct ieee80211_cb *cb; 417 418 mtag = m_tag_alloc(MTAG_ABI_NET80211, NET80211_TAG_CALLBACK, --- 338 unchanged lines hidden --- | 449int 450ieee80211_add_callback(struct mbuf *m, 451 void (*func)(struct ieee80211_node *, void *, int), void *arg) 452{ 453 struct m_tag *mtag; 454 struct ieee80211_cb *cb; 455 456 mtag = m_tag_alloc(MTAG_ABI_NET80211, NET80211_TAG_CALLBACK, --- 338 unchanged lines hidden --- |