xref: /dflybsd-src/share/man/man9/ieee80211_node.9 (revision 1102a27e1141baf846d4f8ced2aecee4870b4260)
1ff66a890SHiten Pandya.\"
2ff66a890SHiten Pandya.\" Copyright (c) 2004 Bruce M. Simpson <bms@spc.org>
3ff66a890SHiten Pandya.\" Copyright (c) 2004 Darron Broad <darron@kewl.org>
4ff66a890SHiten Pandya.\" All rights reserved.
5ff66a890SHiten Pandya.\"
6ff66a890SHiten Pandya.\" Redistribution and use in source and binary forms, with or without
7ff66a890SHiten Pandya.\" modification, are permitted provided that the following conditions
8ff66a890SHiten Pandya.\" are met:
9ff66a890SHiten Pandya.\" 1. Redistributions of source code must retain the above copyright
10ff66a890SHiten Pandya.\"    notice, this list of conditions and the following disclaimer.
11ff66a890SHiten Pandya.\" 2. Redistributions in binary form must reproduce the above copyright
12ff66a890SHiten Pandya.\"    notice, this list of conditions and the following disclaimer in the
13ff66a890SHiten Pandya.\"    documentation and/or other materials provided with the distribution.
14ff66a890SHiten Pandya.\"
15ff66a890SHiten Pandya.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16ff66a890SHiten Pandya.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17ff66a890SHiten Pandya.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ff66a890SHiten Pandya.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19ff66a890SHiten Pandya.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20ff66a890SHiten Pandya.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21ff66a890SHiten Pandya.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22ff66a890SHiten Pandya.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23ff66a890SHiten Pandya.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24ff66a890SHiten Pandya.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25ff66a890SHiten Pandya.\" SUCH DAMAGE.
26ff66a890SHiten Pandya.\"
27ff66a890SHiten Pandya.\" $FreeBSD$
28*1102a27eSSascha Wildner.\" $DragonFly: src/share/man/man9/ieee80211_node.9,v 1.3 2006/06/28 19:41:59 swildner Exp $
29ff66a890SHiten Pandya.\" $Id: ieee80211_node.9,v 1.3 2004/07/07 12:59:39 ru Exp $
30ff66a890SHiten Pandya.\"
31*1102a27eSSascha Wildner.Dd June 28, 2006
32ff66a890SHiten Pandya.Dt IEEE80211_NODE 9
33ff66a890SHiten Pandya.Os
34ff66a890SHiten Pandya.Sh NAME
35*1102a27eSSascha Wildner.\" .Nm ieee80211_node_attach ,
36*1102a27eSSascha Wildner.\" .Nm ieee80211_node_lateattach ,
37*1102a27eSSascha Wildner.\" .Nm ieee80211_node_detach ,
38ff66a890SHiten Pandya.Nm ieee80211_begin_scan ,
39ff66a890SHiten Pandya.Nm ieee80211_create_ibss ,
40*1102a27eSSascha Wildner.Nm ieee80211_next_scan ,
41ff66a890SHiten Pandya.Nm ieee80211_end_scan ,
42*1102a27eSSascha Wildner.\" .Nm ieee80211_alloc_node ,
43*1102a27eSSascha Wildner.\" .Nm ieee80211_dup_bss ,
44*1102a27eSSascha Wildner.Nm ieee80211_find_txnode ,
45*1102a27eSSascha Wildner.Nm ieee80211_find_rxnode ,
46ff66a890SHiten Pandya.Nm ieee80211_find_node ,
47ff66a890SHiten Pandya.Nm ieee80211_free_node ,
48*1102a27eSSascha Wildner.\" .Nm ieee80211_free_allnodes ,
49ff66a890SHiten Pandya.Nm ieee80211_iterate_nodes
50ff66a890SHiten Pandya.Nd software 802.11 stack node management functions
51ff66a890SHiten Pandya.Sh SYNOPSIS
5244cb301eSSascha Wildner.In netproto/802_11/ieee80211_var.h
5344cb301eSSascha Wildner.In netproto/802_11/ieee80211_proto.h
5444cb301eSSascha Wildner.In netproto/802_11/ieee80211_node.h
55*1102a27eSSascha Wildner.\" .Ft void
56*1102a27eSSascha Wildner.\" .Fn ieee80211_node_attach "struct ieee80211com *ic"
57*1102a27eSSascha Wildner.\" .Ft void
58*1102a27eSSascha Wildner.\" .Fn ieee80211_node_lateattach "struct ieee80211com *ic"
59*1102a27eSSascha Wildner.\" .Ft void
60*1102a27eSSascha Wildner.\" .Fn ieee80211_node_detach "struct ieee80211com *ic"
61ff66a890SHiten Pandya.Ft void
62*1102a27eSSascha Wildner.Fn ieee80211_begin_scan "struct ieee80211com *ic" "int reset"
63ff66a890SHiten Pandya.Ft void
64ff66a890SHiten Pandya.Fo ieee80211_create_ibss
65ff66a890SHiten Pandya.Fa "struct ieee80211com *ic" "struct ieee80211_channel *chan"
66ff66a890SHiten Pandya.Fc
67*1102a27eSSascha Wildner.Ft int
68*1102a27eSSascha Wildner.Fn ieee80211_next_scan "struct ieee80211com *ic"
69ff66a890SHiten Pandya.Ft void
70*1102a27eSSascha Wildner.Fn ieee80211_end_scan "struct ieee80211com *ic"
71*1102a27eSSascha Wildner.\" .Ft struct ieee80211_node *
72*1102a27eSSascha Wildner.\" .Fo ieee80211_alloc_node
73*1102a27eSSascha Wildner.\" .Fa "struct ieee80211_node_table *nt" "const uint8_t *macaddr"
74*1102a27eSSascha Wildner.\" .Fc
75*1102a27eSSascha Wildner.\" .Ft struct ieee80211_node *
76*1102a27eSSascha Wildner.\" .Fo ieee80211_dup_bss
77*1102a27eSSascha Wildner.\" .Fa "struct ieee80211_node_table *nt" "const uint8_t *macaddr"
78*1102a27eSSascha Wildner.\" .Fc
79ff66a890SHiten Pandya.Ft struct ieee80211_node *
80*1102a27eSSascha Wildner.Fn ieee80211_find_txnode "struct ieee80211com *ic" "const uint8_t *macaddr"
81ff66a890SHiten Pandya.Ft struct ieee80211_node *
82*1102a27eSSascha Wildner.Fo ieee80211_find_rxnode
83*1102a27eSSascha Wildner.Fa "struct ieee80211com *ic" "const struct ieee80211_frame_min *wh"
84*1102a27eSSascha Wildner.Fc
85ff66a890SHiten Pandya.Ft struct ieee80211_node *
86*1102a27eSSascha Wildner.Fo ieee80211_find_node
87*1102a27eSSascha Wildner.Fa "struct ieee80211_node_table *nt" "const uint8_t *macaddr"
88ff66a890SHiten Pandya.Fc
89ff66a890SHiten Pandya.Ft void
90*1102a27eSSascha Wildner.Fn ieee80211_free_node "struct ieee80211_node *ni"
91*1102a27eSSascha Wildner.\" .Ft void
92*1102a27eSSascha Wildner.\" .Fn ieee80211_free_allnodes "struct ieee80211_node_table *nt"
93ff66a890SHiten Pandya.Ft void
94ff66a890SHiten Pandya.Fo ieee80211_iterate_nodes
95*1102a27eSSascha Wildner.Fa "struct ieee80211_node_table *nt" "ieee80211_iter_func *f" "void *arg"
96ff66a890SHiten Pandya.Fc
97ff66a890SHiten Pandya.Sh DESCRIPTION
98ff66a890SHiten PandyaThese functions are used to manage node lists within the software
99ff66a890SHiten Pandya802.11 stack.
100ff66a890SHiten PandyaThese lists are typically used for implementing host-mode AP functionality,
101*1102a27eSSascha Wildnerimplementing transmission rate control algorithms,
102ff66a890SHiten Pandyaor providing signal quality information about neighbouring nodes.
103ff66a890SHiten Pandya.Pp
104ff66a890SHiten Pandya.\"
105*1102a27eSSascha Wildner.\" The
106*1102a27eSSascha Wildner.\" .Fn ieee80211_node_attach
107*1102a27eSSascha Wildner.\" function is called from
108*1102a27eSSascha Wildner.\" .Xr ieee80211_ifattach 9
109*1102a27eSSascha Wildner.\" to initialize node databases management callbacks and control variables
110*1102a27eSSascha Wildner.\" for the interface
111*1102a27eSSascha Wildner.\" .Fa ic
112*1102a27eSSascha Wildner.\" (specifically for memory allocation,
113*1102a27eSSascha Wildner.\" node copying,
114*1102a27eSSascha Wildner.\" node signal inspection, and station inactivity timer).
115*1102a27eSSascha Wildner.\" .Pp
116ff66a890SHiten Pandya.\"
117*1102a27eSSascha Wildner.\" The
118*1102a27eSSascha Wildner.\" .Fn ieee80211_node_lateattach
119*1102a27eSSascha Wildner.\" function initialises the
120*1102a27eSSascha Wildner.\" node databases,
121*1102a27eSSascha Wildner.\" crypto and authentication settings of
122*1102a27eSSascha Wildner.\" .Va ic_bss
123*1102a27eSSascha Wildner.\" associated with the interface
124*1102a27eSSascha Wildner.\" .Fa ic
125*1102a27eSSascha Wildner.\" during
126*1102a27eSSascha Wildner.\" .Xr ieee80211_media_init 9 .
127*1102a27eSSascha Wildner.\" .Pp
128ff66a890SHiten Pandya.\"
129*1102a27eSSascha Wildner.\" The
130*1102a27eSSascha Wildner.\" .Fn ieee80211_node_detach
131*1102a27eSSascha Wildner.\" function destroys all node databases associated with the interface
132*1102a27eSSascha Wildner.\" .Fa ic .
133*1102a27eSSascha Wildner.\" .Pp
134ff66a890SHiten Pandya.\"
135ff66a890SHiten PandyaThe
136ff66a890SHiten Pandya.Fn ieee80211_begin_scan
137*1102a27eSSascha Wildnerfunction initialises the node databases in preparation of an active
138ff66a890SHiten Pandyascan for an access point on the interface
139*1102a27eSSascha Wildner.Fa ic .
140ff66a890SHiten PandyaThe scan begins on the next radio channel by calling
141ff66a890SHiten Pandya.Fn ieee80211_next_scan
142ff66a890SHiten Pandyainternally.
143*1102a27eSSascha WildnerIf
144*1102a27eSSascha Wildner.Fa reset
145*1102a27eSSascha Wildneris non-zero, the interface
146*1102a27eSSascha Wildner.Fa ic Ap s
147*1102a27eSSascha Wildnernode table
148*1102a27eSSascha Wildner.Va ic_scan ,
149*1102a27eSSascha Wildnerwhich holds previously detected access points,
150*1102a27eSSascha Wildnerwill be cleared.
151ff66a890SHiten PandyaThe actual scanning for an access point is not automated;
152ff66a890SHiten Pandyathe device driver itself only handles setting the radio frequency
153ff66a890SHiten Pandyaof the card and stepping through the channels.
154ff66a890SHiten Pandya.Pp
155ff66a890SHiten Pandya.\"
156ff66a890SHiten PandyaThe
157*1102a27eSSascha Wildner.Fn ieee80211_create_ibss
158*1102a27eSSascha Wildnerfunction sets up the net80211-specific portion of an interface's softc
159*1102a27eSSascha Wildner.Fa ic ,
160*1102a27eSSascha Wildnerfor use in IBSS mode or HOSTAP mode.
161*1102a27eSSascha Wildner.Pp
162*1102a27eSSascha Wildner.\"
163*1102a27eSSascha WildnerThe
164ff66a890SHiten Pandya.Fn ieee80211_next_scan
165ff66a890SHiten Pandyafunction is used to inform the
166ff66a890SHiten Pandya.Xr ieee80211 9
167ff66a890SHiten Pandyalayer that the interface
168*1102a27eSSascha Wildner.Fa ic
169ff66a890SHiten Pandyais now scanning for an access point on the next radio channel.
170*1102a27eSSascha Wildner.\" XXX should call ieee80211_new_state(ic, IEEE80211_S_SCAN)
171*1102a27eSSascha Wildner.\" XXX we may need a manpage to describe ieee80211_new_state()
172*1102a27eSSascha Wildner.\" A device driver is expected to first call
173*1102a27eSSascha Wildner.\" .Fn ieee80211_begin_scan ,
174*1102a27eSSascha Wildner.\" to initialize the node database,
175*1102a27eSSascha Wildner.\" then set the radio channel on the device;
176*1102a27eSSascha Wildner.\" then, after a certain time has elapsed (200ms for example), call
177*1102a27eSSascha Wildner.\" .Fn ieee80211_next_scan
178*1102a27eSSascha Wildner.\" to move to the next channel.
179*1102a27eSSascha Wildner.\" Typically, a callout is used to automate this process; see
180*1102a27eSSascha Wildner.\" .Xr callout_init 9
181*1102a27eSSascha Wildner.\" for more information on how to use callouts.
182ff66a890SHiten Pandya.Pp
183ff66a890SHiten Pandya.\"
184ff66a890SHiten PandyaThe
185ff66a890SHiten Pandya.Fn ieee80211_end_scan
186ff66a890SHiten Pandyafunction is called by
187ff66a890SHiten Pandya.Fn ieee80211_next_scan
188ff66a890SHiten Pandyawhen the state machine has peformed a full cycle of scanning on
189ff66a890SHiten Pandyaall available radio channels.
190ff66a890SHiten PandyaInternally,
191ff66a890SHiten Pandya.Fn ieee80211_end_scan
192*1102a27eSSascha Wildnerwill inspect the node table
193*1102a27eSSascha Wildner.Va ic_scan
194*1102a27eSSascha Wildnerof the interface
195*1102a27eSSascha Wildner.Fa ic
196ff66a890SHiten Pandyafor suitable access points found during scanning, and associate with one,
197ff66a890SHiten Pandyashould the parameters of the node match those of the configuration
198ff66a890SHiten Pandyarequested from userland.
199ff66a890SHiten Pandya.Pp
200ff66a890SHiten Pandya.\"
201*1102a27eSSascha Wildner.\" The
202*1102a27eSSascha Wildner.\" .Fn ieee80211_alloc_node
203*1102a27eSSascha Wildner.\" function allocates an instance of
204*1102a27eSSascha Wildner.\" .Vt "struct ieee80211_node"
205*1102a27eSSascha Wildner.\" for a node having the MAC address
206*1102a27eSSascha Wildner.\" .Fa macaddr ,
207*1102a27eSSascha Wildner.\" and associates it with the node table
208*1102a27eSSascha Wildner.\" .Fa nt .
209*1102a27eSSascha Wildner.\" If the allocation is successful, the node structure is initialised by
210*1102a27eSSascha Wildner.\" .Fn ieee80211_setup_node ;
211*1102a27eSSascha Wildner.\" otherwise,
212*1102a27eSSascha Wildner.\" .Dv NULL
213*1102a27eSSascha Wildner.\" is returned.
214*1102a27eSSascha Wildner.\" .Pp
215*1102a27eSSascha Wildner.\"
216*1102a27eSSascha Wildner.\" The
217*1102a27eSSascha Wildner.\" .Fn ieee80211_dup_bss
218*1102a27eSSascha Wildner.\" function is similar to
219*1102a27eSSascha Wildner.\" .Fn ieee80211_alloc_node ,
220*1102a27eSSascha Wildner.\" but is instead used to create a node database entry for the BSSID
221*1102a27eSSascha Wildner.\" .Fa macaddr
222*1102a27eSSascha Wildner.\" associated with the node table
223*1102a27eSSascha Wildner.\" .Fa nt .
224*1102a27eSSascha Wildner.\" If the allocation is successful, the node structure is initialised by
225*1102a27eSSascha Wildner.\" .Fn ieee80211_setup_node ;
226*1102a27eSSascha Wildner.\" otherwise,
227*1102a27eSSascha Wildner.\" .Dv NULL
228*1102a27eSSascha Wildner.\" is returned.
229*1102a27eSSascha Wildner.\" .Pp
230*1102a27eSSascha Wildner.\"
231ff66a890SHiten PandyaThe
232*1102a27eSSascha Wildner.Fn ieee80211_find_txnode
233*1102a27eSSascha Wildnerfunction will locate a suitable node entry for a frame to be delivered to
234*1102a27eSSascha Wildner.Fa macaddr
235*1102a27eSSascha Wildnerthrough the interface
236ff66a890SHiten Pandya.Fa ic .
237ff66a890SHiten Pandya.Pp
238ff66a890SHiten Pandya.\"
239ff66a890SHiten PandyaThe
240*1102a27eSSascha Wildner.Fn ieee80211_find_rxnode
241*1102a27eSSascha Wildnerfunction will find the node entry which represents the sender of
242*1102a27eSSascha Wildner.Fa wh ,
243*1102a27eSSascha Wildnerwhich is received on the interface
244ff66a890SHiten Pandya.Fa ic .
245ff66a890SHiten Pandya.Pp
246ff66a890SHiten Pandya.\"
247ff66a890SHiten PandyaThe
248ff66a890SHiten Pandya.Fn ieee80211_find_node
249*1102a27eSSascha Wildnerfunction will iterate through the node table
250*1102a27eSSascha Wildner.Fa nt ,
251ff66a890SHiten Pandyasearching for a node entry which matches
252ff66a890SHiten Pandya.Fa macaddr .
253ff66a890SHiten Pandya.Pp
254ff66a890SHiten Pandya.\"
255*1102a27eSSascha WildnerIf
256*1102a27eSSascha Wildner.Fn ieee80211_find_txnode ,
257*1102a27eSSascha Wildner.Fn ieee80211_find_rxnode ,
258*1102a27eSSascha Wildneror
259ff66a890SHiten Pandya.Fn ieee80211_find_node ,
260*1102a27eSSascha Wildnerreturns a non-NULL node entry,
261*1102a27eSSascha Wildnerthe node entry's reference count is incremented,
262*1102a27eSSascha Wildnerso the caller of these functions is responsible to call
263*1102a27eSSascha Wildner.Fn ieee80211_free_node .
264ff66a890SHiten Pandya.Pp
265ff66a890SHiten Pandya.\"
266ff66a890SHiten PandyaThe
267ff66a890SHiten Pandya.Fn ieee80211_free_node
268*1102a27eSSascha Wildnerfunction will decrement the reference count of the node
269*1102a27eSSascha Wildner.Fa ni .
270*1102a27eSSascha WildnerIf either the reference count drops to zero or
271*1102a27eSSascha Wildnerthe last reference left is from
272*1102a27eSSascha Wildner.Va nt_keyixmap
273*1102a27eSSascha Wildnerthen
274ff66a890SHiten Pandya.Fa ni
275*1102a27eSSascha Wildnerwill be removed from the node table where it resides,
276*1102a27eSSascha Wildnerand any memory associated with the node will be freed.
277ff66a890SHiten Pandya.Pp
278ff66a890SHiten Pandya.\"
279*1102a27eSSascha Wildner.\" The
280*1102a27eSSascha Wildner.\" .Fn ieee80211_free_allnodes
281*1102a27eSSascha Wildner.\" function will iterate through the node table
282*1102a27eSSascha Wildner.\" .Fa nt ,
283*1102a27eSSascha Wildner.\" either calling
284*1102a27eSSascha Wildner.\" .Fn ieee80211_free_node
285*1102a27eSSascha Wildner.\" for all nodes that reside in
286*1102a27eSSascha Wildner.\" .Fa nt
287*1102a27eSSascha Wildner.\" or just remove them from
288*1102a27eSSascha Wildner.\" .Fa nt .
289*1102a27eSSascha Wildner.\" .Pp
290ff66a890SHiten Pandya.\"
291ff66a890SHiten PandyaThe
292ff66a890SHiten Pandya.Fn ieee80211_iterate_nodes
293ff66a890SHiten Pandyafunction will call the user-defined callback function
294ff66a890SHiten Pandya.Fa f
295*1102a27eSSascha Wildnerfor all nodes in the node table
296*1102a27eSSascha Wildner.Fa nt .
297*1102a27eSSascha WildnerThe callback is invoked with the user-supplied value
298ff66a890SHiten Pandya.Fa arg
299ff66a890SHiten Pandyaand a pointer to the current node.
300ff66a890SHiten Pandya.\"
301*1102a27eSSascha Wildner.Sh RETURN VALUES
302*1102a27eSSascha WildnerThe function
303*1102a27eSSascha Wildner.Fn ieee80211_next_scan
304*1102a27eSSascha Wildnerreturns 0,
305*1102a27eSSascha Wildnerif a full cycle of scanning on all available radio channels is done.
306*1102a27eSSascha WildnerOtherwise, 1 is returned.
307*1102a27eSSascha Wildner.Pp
308*1102a27eSSascha Wildner.\"
309*1102a27eSSascha WildnerThe fucntion
310*1102a27eSSascha Wildner.Fn ieee80211_find_txnode
311*1102a27eSSascha Wildnerreturns a node entry that is suitable to be used to send a frame to
312*1102a27eSSascha Wildner.Fa macaddr .
313*1102a27eSSascha WildnerIf there is no suitable node found,
314*1102a27eSSascha Wildner.Dv NULL
315*1102a27eSSascha Wildneris returned.
316*1102a27eSSascha Wildner.Pp
317*1102a27eSSascha Wildner.\"
318*1102a27eSSascha WildnerThe function
319*1102a27eSSascha Wildner.Fn ieee80211_find_rxnode
320*1102a27eSSascha Wildnerreturns a node entry that represents the sender of
321*1102a27eSSascha Wildner.Fa wh .
322*1102a27eSSascha WildnerIf no suitable node entry can be found,
323*1102a27eSSascha Wildner.Va ic_bss
324*1102a27eSSascha Wildneris returned.
325*1102a27eSSascha Wildner.Pp
326*1102a27eSSascha Wildner.\"
327*1102a27eSSascha WildnerThe function
328*1102a27eSSascha Wildner.Fn ieee80211_find_node
329*1102a27eSSascha Wildnerreturns a pointer to the node entry which matches
330*1102a27eSSascha Wildner.Fa macaddr .
331*1102a27eSSascha WildnerIf no match is found,
332*1102a27eSSascha Wildner.Dv NULL
333*1102a27eSSascha Wildneris returned.
334*1102a27eSSascha Wildner.\"
335ff66a890SHiten Pandya.Sh SEE ALSO
336ff66a890SHiten Pandya.Xr ieee80211 9 ,
337ff66a890SHiten Pandya.Xr ifnet 9
338ff66a890SHiten Pandya.Sh HISTORY
339ff66a890SHiten PandyaThe
340ff66a890SHiten Pandya.Nm ieee80211
341ff66a890SHiten Pandyaseries of functions first appeared in
342ff66a890SHiten Pandya.Nx 1.5 ,
343ff66a890SHiten Pandyaand were later ported to
344ff66a890SHiten Pandya.Fx 4.6 .
345ff66a890SHiten Pandya.Sh AUTHORS
346ff66a890SHiten Pandya.An -nosplit
347ff66a890SHiten PandyaThis man page was written by
348ff66a890SHiten Pandya.An Bruce M. Simpson Aq bms@FreeBSD.org
349ff66a890SHiten Pandyaand
350ff66a890SHiten Pandya.An Darron Broad Aq darron@kewl.org .
351