Deleted Added
full compact
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
68static const char wlanname[] = "wlan";
69
70static struct if_clone *wlan_cloner;
71
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,
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);
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);
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);
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);
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,
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