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