Deleted Added
full compact
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