ieee80211_freebsd.c (241394) | ieee80211_freebsd.c (241610) |
---|---|
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 --- 10 unchanged lines hidden (view full) --- 19 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 20 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 21 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26#include <sys/cdefs.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 --- 10 unchanged lines hidden (view full) --- 19 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 20 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 21 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26#include <sys/cdefs.h> |
27__FBSDID("$FreeBSD: head/sys/net80211/ieee80211_freebsd.c 241394 2012-10-10 08:36:38Z kevlo $"); | 27__FBSDID("$FreeBSD: head/sys/net80211/ieee80211_freebsd.c 241610 2012-10-16 13:37:54Z glebius $"); |
28 29/* 30 * IEEE 802.11 support (FreeBSD-specific code) 31 */ 32#include "opt_wlan.h" 33 34#include <sys/param.h> 35#include <sys/kernel.h> --- 24 unchanged lines hidden (view full) --- 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 65 66static MALLOC_DEFINE(M_80211_COM, "80211com", "802.11 com state"); 67 | 28 29/* 30 * IEEE 802.11 support (FreeBSD-specific code) 31 */ 32#include "opt_wlan.h" 33 34#include <sys/param.h> 35#include <sys/kernel.h> --- 24 unchanged lines hidden (view full) --- 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 65 66static MALLOC_DEFINE(M_80211_COM, "80211com", "802.11 com state"); 67 |
68static const char wlanname[] = "wlan"; 69 70static struct if_clone *wlan_cloner; 71 |
|
68/* 69 * Allocate/free com structure in conjunction with ifnet; 70 * these routines are registered with if_register_com_alloc 71 * below and are called automatically by the ifnet code 72 * when the ifnet of the parent device is created. 73 */ 74static void * 75wlan_alloc(u_char type, struct ifnet *ifp) --- 48 unchanged lines hidden (view full) --- 124 (ic->ic_caps & IEEE80211_C_TDMA) == 0 125#else 126 (1) 127#endif 128 ) { 129 if_printf(ifp, "TDMA not supported\n"); 130 return EOPNOTSUPP; 131 } | 72/* 73 * Allocate/free com structure in conjunction with ifnet; 74 * these routines are registered with if_register_com_alloc 75 * below and are called automatically by the ifnet code 76 * when the ifnet of the parent device is created. 77 */ 78static void * 79wlan_alloc(u_char type, struct ifnet *ifp) --- 48 unchanged lines hidden (view full) --- 128 (ic->ic_caps & IEEE80211_C_TDMA) == 0 129#else 130 (1) 131#endif 132 ) { 133 if_printf(ifp, "TDMA not supported\n"); 134 return EOPNOTSUPP; 135 } |
132 vap = ic->ic_vap_create(ic, ifc->ifc_name, unit, | 136 vap = ic->ic_vap_create(ic, wlanname, unit, |
133 cp.icp_opmode, cp.icp_flags, cp.icp_bssid, 134 cp.icp_flags & IEEE80211_CLONE_MACADDR ? 135 cp.icp_macaddr : (const uint8_t *)IF_LLADDR(ifp)); 136 return (vap == NULL ? EIO : 0); 137} 138 139static void 140wlan_clone_destroy(struct ifnet *ifp) 141{ 142 struct ieee80211vap *vap = ifp->if_softc; 143 struct ieee80211com *ic = vap->iv_ic; 144 145 ic->ic_vap_delete(vap); 146} | 137 cp.icp_opmode, cp.icp_flags, cp.icp_bssid, 138 cp.icp_flags & IEEE80211_CLONE_MACADDR ? 139 cp.icp_macaddr : (const uint8_t *)IF_LLADDR(ifp)); 140 return (vap == NULL ? EIO : 0); 141} 142 143static void 144wlan_clone_destroy(struct ifnet *ifp) 145{ 146 struct ieee80211vap *vap = ifp->if_softc; 147 struct ieee80211com *ic = vap->iv_ic; 148 149 ic->ic_vap_delete(vap); 150} |
147IFC_SIMPLE_DECLARE(wlan, 0); | |
148 149void 150ieee80211_vap_destroy(struct ieee80211vap *vap) 151{ | 151 152void 153ieee80211_vap_destroy(struct ieee80211vap *vap) 154{ |
152 if_clone_destroyif(&wlan_cloner, vap->iv_ifp); | 155 if_clone_destroyif(wlan_cloner, vap->iv_ifp); |
153} 154 155int 156ieee80211_sysctl_msecs_ticks(SYSCTL_HANDLER_ARGS) 157{ 158 int msecs = ticks_to_msecs(*(int *)arg1); 159 int error, t; 160 --- 640 unchanged lines hidden (view full) --- 801 if (wlan_bpfevent == NULL) 802 return ENOMEM; 803 wlan_ifllevent = EVENTHANDLER_REGISTER(iflladdr_event, 804 wlan_iflladdr, NULL, EVENTHANDLER_PRI_ANY); 805 if (wlan_ifllevent == NULL) { 806 EVENTHANDLER_DEREGISTER(bpf_track, wlan_bpfevent); 807 return ENOMEM; 808 } | 156} 157 158int 159ieee80211_sysctl_msecs_ticks(SYSCTL_HANDLER_ARGS) 160{ 161 int msecs = ticks_to_msecs(*(int *)arg1); 162 int error, t; 163 --- 640 unchanged lines hidden (view full) --- 804 if (wlan_bpfevent == NULL) 805 return ENOMEM; 806 wlan_ifllevent = EVENTHANDLER_REGISTER(iflladdr_event, 807 wlan_iflladdr, NULL, EVENTHANDLER_PRI_ANY); 808 if (wlan_ifllevent == NULL) { 809 EVENTHANDLER_DEREGISTER(bpf_track, wlan_bpfevent); 810 return ENOMEM; 811 } |
809 if_clone_attach(&wlan_cloner); | 812 wlan_cloner = if_clone_simple(wlanname, wlan_clone_create, 813 wlan_clone_destroy, 0); |
810 if_register_com_alloc(IFT_IEEE80211, wlan_alloc, wlan_free); 811 return 0; 812 case MOD_UNLOAD: 813 if_deregister_com_alloc(IFT_IEEE80211); | 814 if_register_com_alloc(IFT_IEEE80211, wlan_alloc, wlan_free); 815 return 0; 816 case MOD_UNLOAD: 817 if_deregister_com_alloc(IFT_IEEE80211); |
814 if_clone_detach(&wlan_cloner); | 818 if_clone_detach(wlan_cloner); |
815 EVENTHANDLER_DEREGISTER(bpf_track, wlan_bpfevent); 816 EVENTHANDLER_DEREGISTER(iflladdr_event, wlan_ifllevent); 817 return 0; 818 } 819 return EINVAL; 820} 821 822static moduledata_t wlan_mod = { | 819 EVENTHANDLER_DEREGISTER(bpf_track, wlan_bpfevent); 820 EVENTHANDLER_DEREGISTER(iflladdr_event, wlan_ifllevent); 821 return 0; 822 } 823 return EINVAL; 824} 825 826static moduledata_t wlan_mod = { |
823 "wlan", | 827 wlanname, |
824 wlan_modevent, 825 0 826}; 827DECLARE_MODULE(wlan, wlan_mod, SI_SUB_DRIVERS, SI_ORDER_FIRST); 828MODULE_VERSION(wlan, 1); 829MODULE_DEPEND(wlan, ether, 1, 1, 1); 830#ifdef IEEE80211_ALQ 831MODULE_DEPEND(wlan, alq, 1, 1, 1); 832#endif /* IEEE80211_ALQ */ 833 | 828 wlan_modevent, 829 0 830}; 831DECLARE_MODULE(wlan, wlan_mod, SI_SUB_DRIVERS, SI_ORDER_FIRST); 832MODULE_VERSION(wlan, 1); 833MODULE_DEPEND(wlan, ether, 1, 1, 1); 834#ifdef IEEE80211_ALQ 835MODULE_DEPEND(wlan, alq, 1, 1, 1); 836#endif /* IEEE80211_ALQ */ 837 |