xref: /dflybsd-src/share/man/man9/ieee80211_node.9 (revision ff66a890e4594f818c3bde7c7740e14fa41fb876)
1*ff66a890SHiten Pandya.\"
2*ff66a890SHiten Pandya.\" Copyright (c) 2004 Bruce M. Simpson <bms@spc.org>
3*ff66a890SHiten Pandya.\" Copyright (c) 2004 Darron Broad <darron@kewl.org>
4*ff66a890SHiten Pandya.\" All rights reserved.
5*ff66a890SHiten Pandya.\"
6*ff66a890SHiten Pandya.\" Redistribution and use in source and binary forms, with or without
7*ff66a890SHiten Pandya.\" modification, are permitted provided that the following conditions
8*ff66a890SHiten Pandya.\" are met:
9*ff66a890SHiten Pandya.\" 1. Redistributions of source code must retain the above copyright
10*ff66a890SHiten Pandya.\"    notice, this list of conditions and the following disclaimer.
11*ff66a890SHiten Pandya.\" 2. Redistributions in binary form must reproduce the above copyright
12*ff66a890SHiten Pandya.\"    notice, this list of conditions and the following disclaimer in the
13*ff66a890SHiten Pandya.\"    documentation and/or other materials provided with the distribution.
14*ff66a890SHiten Pandya.\"
15*ff66a890SHiten Pandya.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16*ff66a890SHiten Pandya.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17*ff66a890SHiten Pandya.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18*ff66a890SHiten Pandya.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19*ff66a890SHiten Pandya.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20*ff66a890SHiten Pandya.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21*ff66a890SHiten Pandya.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22*ff66a890SHiten Pandya.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23*ff66a890SHiten Pandya.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24*ff66a890SHiten Pandya.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25*ff66a890SHiten Pandya.\" SUCH DAMAGE.
26*ff66a890SHiten Pandya.\"
27*ff66a890SHiten Pandya.\" $FreeBSD$
28*ff66a890SHiten Pandya.\" $DragonFly: src/share/man/man9/ieee80211_node.9,v 1.1 2004/07/27 14:50:56 hmp Exp $
29*ff66a890SHiten Pandya.\" $Id: ieee80211_node.9,v 1.3 2004/07/07 12:59:39 ru Exp $
30*ff66a890SHiten Pandya.\"
31*ff66a890SHiten Pandya.Dd July 4, 2004
32*ff66a890SHiten Pandya.Dt IEEE80211_NODE 9
33*ff66a890SHiten Pandya.Os
34*ff66a890SHiten Pandya.Sh NAME
35*ff66a890SHiten Pandya.Nm ieee80211_node_attach ,
36*ff66a890SHiten Pandya.Nm ieee80211_node_lateattach ,
37*ff66a890SHiten Pandya.Nm ieee80211_node_detach ,
38*ff66a890SHiten Pandya.Nm ieee80211_begin_scan ,
39*ff66a890SHiten Pandya.Nm ieee80211_next_scan ,
40*ff66a890SHiten Pandya.Nm ieee80211_create_ibss ,
41*ff66a890SHiten Pandya.Nm ieee80211_end_scan ,
42*ff66a890SHiten Pandya.Nm ieee80211_alloc_node ,
43*ff66a890SHiten Pandya.Nm ieee80211_dup_bss ,
44*ff66a890SHiten Pandya.Nm ieee80211_find_node ,
45*ff66a890SHiten Pandya.Nm ieee80211_lookup_node ,
46*ff66a890SHiten Pandya.Nm ieee80211_free_node ,
47*ff66a890SHiten Pandya.Nm ieee80211_free_allnodes ,
48*ff66a890SHiten Pandya.Nm ieee80211_timeout_nodes ,
49*ff66a890SHiten Pandya.Nm ieee80211_iterate_nodes
50*ff66a890SHiten Pandya.Nd software 802.11 stack node management functions
51*ff66a890SHiten Pandya.Sh SYNOPSIS
52*ff66a890SHiten Pandya.In net80211/ieee80211_var.h
53*ff66a890SHiten Pandya.In net80211/ieee80211_proto.h
54*ff66a890SHiten Pandya.In net80211/ieee80211_node.h
55*ff66a890SHiten Pandya.Ft void
56*ff66a890SHiten Pandya.Fn ieee80211_node_attach "struct ifnet *ifp"
57*ff66a890SHiten Pandya.Ft void
58*ff66a890SHiten Pandya.Fn ieee80211_node_lateattach "struct ifnet *ifp"
59*ff66a890SHiten Pandya.Ft void
60*ff66a890SHiten Pandya.Fn ieee80211_node_detach "struct ifnet *ifp"
61*ff66a890SHiten Pandya.Ft void
62*ff66a890SHiten Pandya.Fn ieee80211_begin_scan "struct ifnet *ifp"
63*ff66a890SHiten Pandya.Ft void
64*ff66a890SHiten Pandya.Fn ieee80211_next_scan "struct ifnet *ifp"
65*ff66a890SHiten Pandya.Ft void
66*ff66a890SHiten Pandya.Fo ieee80211_create_ibss
67*ff66a890SHiten Pandya.Fa "struct ieee80211com *ic" "struct ieee80211_channel *chan"
68*ff66a890SHiten Pandya.Fc
69*ff66a890SHiten Pandya.Ft void
70*ff66a890SHiten Pandya.Fn ieee80211_end_scan "struct ifnet *ifp"
71*ff66a890SHiten Pandya.Ft struct ieee80211_node *
72*ff66a890SHiten Pandya.Fn ieee80211_alloc_node "struct ieee80211com *ic" "u_int8_t *macaddr"
73*ff66a890SHiten Pandya.Ft struct ieee80211_node *
74*ff66a890SHiten Pandya.Fn ieee80211_dup_bss "struct ieee80211com *ic" "u_int8_t *macaddr"
75*ff66a890SHiten Pandya.Ft struct ieee80211_node *
76*ff66a890SHiten Pandya.Fn ieee80211_find_node "struct ieee80211com *ic" "u_int8_t *macaddr"
77*ff66a890SHiten Pandya.Ft struct ieee80211_node *
78*ff66a890SHiten Pandya.Fo ieee80211_lookup_node
79*ff66a890SHiten Pandya.Fa "struct ieee80211com *ic" "u_int8_t *macaddr"
80*ff66a890SHiten Pandya.Fa "struct ieee80211_channel *chan"
81*ff66a890SHiten Pandya.Fc
82*ff66a890SHiten Pandya.Ft void
83*ff66a890SHiten Pandya.Fn ieee80211_free_node "struct ieee80211com *ic" "struct ieee80211_node *ni"
84*ff66a890SHiten Pandya.Ft void
85*ff66a890SHiten Pandya.Fn ieee80211_free_allnodes "struct ieee80211com *ic"
86*ff66a890SHiten Pandya.Ft void
87*ff66a890SHiten Pandya.Fn ieee80211_timeout_nodes "struct ieee80211com *ic"
88*ff66a890SHiten Pandya.Ft void
89*ff66a890SHiten Pandya.Fo ieee80211_iterate_nodes
90*ff66a890SHiten Pandya.Fa "struct ieee80211com *ic" "ieee80211_iter_func *f" "void *arg"
91*ff66a890SHiten Pandya.Fc
92*ff66a890SHiten Pandya.Sh DESCRIPTION
93*ff66a890SHiten PandyaThese functions are used to manage node lists within the software
94*ff66a890SHiten Pandya802.11 stack.
95*ff66a890SHiten PandyaThese lists are typically used for implementing host-mode AP functionality,
96*ff66a890SHiten Pandyaor providing signal quality information about neighbouring nodes.
97*ff66a890SHiten Pandya.Pp
98*ff66a890SHiten Pandya.\"
99*ff66a890SHiten PandyaThe
100*ff66a890SHiten Pandya.Fn ieee80211_node_attach
101*ff66a890SHiten Pandyafunction is called from
102*ff66a890SHiten Pandya.Xr ieee80211_ifattach 9
103*ff66a890SHiten Pandyato initialize node database management callbacks for the interface
104*ff66a890SHiten Pandya.Fa ifp
105*ff66a890SHiten Pandya(specifically for memory allocation, node copying and node
106*ff66a890SHiten Pandyasignal inspection).
107*ff66a890SHiten PandyaThese functions may be overridden in special circumstances,
108*ff66a890SHiten Pandyaas long as this is done after calling
109*ff66a890SHiten Pandya.Xr ieee80211_ifattach 9
110*ff66a890SHiten Pandyaand prior to any other call which may allocate a node.
111*ff66a890SHiten Pandya.Pp
112*ff66a890SHiten Pandya.\"
113*ff66a890SHiten PandyaThe
114*ff66a890SHiten Pandya.Fn ieee80211_node_lateattach
115*ff66a890SHiten Pandyafunction initialises the
116*ff66a890SHiten Pandya.Va ic_bss
117*ff66a890SHiten Pandyanode element of the interface
118*ff66a890SHiten Pandya.Fa ifp
119*ff66a890SHiten Pandyaduring
120*ff66a890SHiten Pandya.Xr ieee80211_media_init 9 .
121*ff66a890SHiten PandyaThis late attachment is to account for certain special cases described under
122*ff66a890SHiten Pandya.Fn ieee80211_node_attach .
123*ff66a890SHiten Pandya.Pp
124*ff66a890SHiten Pandya.\"
125*ff66a890SHiten PandyaThe
126*ff66a890SHiten Pandya.Fn ieee80211_node_detach
127*ff66a890SHiten Pandyafunction destroys all node database state associated with the interface
128*ff66a890SHiten Pandya.Fa ifp ,
129*ff66a890SHiten Pandyaand is usually called during device detach.
130*ff66a890SHiten Pandya.Pp
131*ff66a890SHiten Pandya.\"
132*ff66a890SHiten PandyaThe
133*ff66a890SHiten Pandya.Fn ieee80211_begin_scan
134*ff66a890SHiten Pandyafunction initialises the node database in preparation of an active
135*ff66a890SHiten Pandyascan for an access point on the interface
136*ff66a890SHiten Pandya.Fa ifp .
137*ff66a890SHiten PandyaThe scan begins on the next radio channel by calling
138*ff66a890SHiten Pandya.Fn ieee80211_next_scan
139*ff66a890SHiten Pandyainternally.
140*ff66a890SHiten PandyaThe actual scanning for an access point is not automated;
141*ff66a890SHiten Pandyathe device driver itself only handles setting the radio frequency
142*ff66a890SHiten Pandyaof the card and stepping through the channels.
143*ff66a890SHiten Pandya.Pp
144*ff66a890SHiten Pandya.\"
145*ff66a890SHiten PandyaThe
146*ff66a890SHiten Pandya.Fn ieee80211_next_scan
147*ff66a890SHiten Pandyafunction is used to inform the
148*ff66a890SHiten Pandya.Xr ieee80211 9
149*ff66a890SHiten Pandyalayer that the interface
150*ff66a890SHiten Pandya.Fa ifp
151*ff66a890SHiten Pandyais now scanning for an access point on the next radio channel.
152*ff66a890SHiten PandyaA device driver is expected to first call
153*ff66a890SHiten Pandya.Fn ieee80211_begin_scan ,
154*ff66a890SHiten Pandyato initialize the node database,
155*ff66a890SHiten Pandyathen set the radio channel on the device;
156*ff66a890SHiten Pandyathen, after a certain time has elapsed (200ms for example), call
157*ff66a890SHiten Pandya.Fn ieee80211_next_scan
158*ff66a890SHiten Pandyato move to the next channel.
159*ff66a890SHiten PandyaTypically, a callout is used to automate this process; see
160*ff66a890SHiten Pandya.Xr callout_init 9
161*ff66a890SHiten Pandyafor more information on how to use callouts.
162*ff66a890SHiten Pandya.Pp
163*ff66a890SHiten Pandya.\"
164*ff66a890SHiten PandyaThe
165*ff66a890SHiten Pandya.Fn ieee80211_create_ibss
166*ff66a890SHiten Pandyafunction sets up the net80211-specific portion of an interface's softc,
167*ff66a890SHiten Pandya.Fa ic ,
168*ff66a890SHiten Pandyafor use in IBSS mode.
169*ff66a890SHiten Pandya.Pp
170*ff66a890SHiten Pandya.\"
171*ff66a890SHiten PandyaThe
172*ff66a890SHiten Pandya.Fn ieee80211_end_scan
173*ff66a890SHiten Pandyafunction is called by
174*ff66a890SHiten Pandya.Fn ieee80211_next_scan
175*ff66a890SHiten Pandyawhen the state machine has peformed a full cycle of scanning on
176*ff66a890SHiten Pandyaall available radio channels.
177*ff66a890SHiten PandyaInternally,
178*ff66a890SHiten Pandya.Fn ieee80211_end_scan
179*ff66a890SHiten Pandyawill inspect the node cache associated with the interface
180*ff66a890SHiten Pandya.Fa ifp
181*ff66a890SHiten Pandyafor suitable access points found during scanning, and associate with one,
182*ff66a890SHiten Pandyashould the parameters of the node match those of the configuration
183*ff66a890SHiten Pandyarequested from userland.
184*ff66a890SHiten Pandya.Pp
185*ff66a890SHiten Pandya.\"
186*ff66a890SHiten PandyaThe
187*ff66a890SHiten Pandya.Fn ieee80211_alloc_node
188*ff66a890SHiten Pandyafunction allocates an instance of
189*ff66a890SHiten Pandya.Vt "struct ieee80211_node"
190*ff66a890SHiten Pandyafor a node having the MAC address
191*ff66a890SHiten Pandya.Fa macaddr ,
192*ff66a890SHiten Pandyaand associates it with the interface
193*ff66a890SHiten Pandya.Fa ic .
194*ff66a890SHiten PandyaIf the allocation is successful, the node structure is initialised by
195*ff66a890SHiten Pandya.Fn ieee80211_setup_node ;
196*ff66a890SHiten Pandyaotherwise,
197*ff66a890SHiten Pandya.Dv NULL
198*ff66a890SHiten Pandyais returned.
199*ff66a890SHiten Pandya.Pp
200*ff66a890SHiten Pandya.\"
201*ff66a890SHiten PandyaThe
202*ff66a890SHiten Pandya.Fn ieee80211_dup_bss
203*ff66a890SHiten Pandyafunction is similar to
204*ff66a890SHiten Pandya.Fn ieee80211_alloc_node ,
205*ff66a890SHiten Pandyabut is instead used to create a node database entry for the BSSID
206*ff66a890SHiten Pandya.Fa macaddr
207*ff66a890SHiten Pandyaassociated with the interface
208*ff66a890SHiten Pandya.Fa ic .
209*ff66a890SHiten PandyaIf the allocation is successful, the node structure is initialised by
210*ff66a890SHiten Pandya.Fn ieee80211_setup_node ;
211*ff66a890SHiten Pandyaotherwise,
212*ff66a890SHiten Pandya.Dv NULL
213*ff66a890SHiten Pandyais returned.
214*ff66a890SHiten Pandya.Pp
215*ff66a890SHiten Pandya.\"
216*ff66a890SHiten PandyaThe
217*ff66a890SHiten Pandya.Fn ieee80211_find_node
218*ff66a890SHiten Pandyafunction will iterate through the node list associated with the interface
219*ff66a890SHiten Pandya.Fa ic ,
220*ff66a890SHiten Pandyasearching for a node entry which matches
221*ff66a890SHiten Pandya.Fa macaddr .
222*ff66a890SHiten PandyaIf the entry is found, its reference count is incremented, and
223*ff66a890SHiten Pandyaa pointer to the node is returned; otherwise,
224*ff66a890SHiten Pandya.Dv NULL
225*ff66a890SHiten Pandyawill be returned.
226*ff66a890SHiten Pandya.Pp
227*ff66a890SHiten Pandya.\"
228*ff66a890SHiten PandyaThe
229*ff66a890SHiten Pandya.Fn ieee80211_lookup_node
230*ff66a890SHiten Pandyafunction is similar to
231*ff66a890SHiten Pandya.Fn ieee80211_find_node ,
232*ff66a890SHiten Pandyawith an additional argument
233*ff66a890SHiten Pandya.Fa chan
234*ff66a890SHiten Pandyawhich is used to specify a channel for the match.
235*ff66a890SHiten PandyaIf the entry is found, its reference count is incremented, and
236*ff66a890SHiten Pandyaa pointer to the node is returned; otherwise,
237*ff66a890SHiten Pandya.Dv NULL
238*ff66a890SHiten Pandyawill be returned.
239*ff66a890SHiten Pandya.Pp
240*ff66a890SHiten Pandya.\"
241*ff66a890SHiten PandyaThe
242*ff66a890SHiten Pandya.Fn ieee80211_free_node
243*ff66a890SHiten Pandyafunction will remove the node
244*ff66a890SHiten Pandya.Fa ni
245*ff66a890SHiten Pandyafrom the node database entries associated with the interface
246*ff66a890SHiten Pandya.Fa ic ,
247*ff66a890SHiten Pandyaand free any memory associated with the node.
248*ff66a890SHiten PandyaThis private method can be overridden in
249*ff66a890SHiten Pandya.Fn ieee80211_node_attach .
250*ff66a890SHiten Pandya.\"
251*ff66a890SHiten Pandya.Pp
252*ff66a890SHiten PandyaThe
253*ff66a890SHiten Pandya.Fn ieee80211_free_allnodes
254*ff66a890SHiten Pandyafunction will iterate through the node list calling
255*ff66a890SHiten Pandya.Fn ieee80211_free_node
256*ff66a890SHiten Pandyafor all nodes associated with the interface
257*ff66a890SHiten Pandya.Fa ic .
258*ff66a890SHiten Pandya.Pp
259*ff66a890SHiten Pandya.\"
260*ff66a890SHiten PandyaThe
261*ff66a890SHiten Pandya.Fn ieee80211_timeout_nodes
262*ff66a890SHiten Pandyachecks if the inactivity timer of each node associated with the interface
263*ff66a890SHiten Pandya.Fa ic
264*ff66a890SHiten Pandyahas exceeded the pre-defined constant
265*ff66a890SHiten Pandya.Dv IEEE80211_INACT_MAX .
266*ff66a890SHiten PandyaIf so, then the node is freed, after sending a deauthentication message.
267*ff66a890SHiten Pandya.Pp
268*ff66a890SHiten Pandya.\"
269*ff66a890SHiten PandyaThe
270*ff66a890SHiten Pandya.Fn ieee80211_iterate_nodes
271*ff66a890SHiten Pandyafunction will call the user-defined callback function
272*ff66a890SHiten Pandya.Fa f
273*ff66a890SHiten Pandyafor all nodes in the node database associated with the interface
274*ff66a890SHiten Pandya.Fa ic .
275*ff66a890SHiten PandyaThe callback is invoked with the with the user-supplied value
276*ff66a890SHiten Pandya.Fa arg
277*ff66a890SHiten Pandyaand a pointer to the current node.
278*ff66a890SHiten Pandya.\"
279*ff66a890SHiten Pandya.Sh SEE ALSO
280*ff66a890SHiten Pandya.Xr ieee80211 9 ,
281*ff66a890SHiten Pandya.Xr ifnet 9
282*ff66a890SHiten Pandya.Sh HISTORY
283*ff66a890SHiten PandyaThe
284*ff66a890SHiten Pandya.Nm ieee80211
285*ff66a890SHiten Pandyaseries of functions first appeared in
286*ff66a890SHiten Pandya.Nx 1.5 ,
287*ff66a890SHiten Pandyaand were later ported to
288*ff66a890SHiten Pandya.Fx 4.6 .
289*ff66a890SHiten Pandya.Sh AUTHORS
290*ff66a890SHiten Pandya.An -nosplit
291*ff66a890SHiten PandyaThis man page was written by
292*ff66a890SHiten Pandya.An Bruce M. Simpson Aq bms@FreeBSD.org
293*ff66a890SHiten Pandyaand
294*ff66a890SHiten Pandya.An Darron Broad Aq darron@kewl.org .
295