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