1 /* 2 * Interface handling (except master interface) 3 * 4 * Copyright 2002-2005, Instant802 Networks, Inc. 5 * Copyright 2005-2006, Devicescape Software, Inc. 6 * Copyright (c) 2006 Jiri Benc <jbenc@suse.cz> 7 * Copyright 2008, Johannes Berg <johannes@sipsolutions.net> 8 * 9 * This program is free software; you can redistribute it and/or modify 10 * it under the terms of the GNU General Public License version 2 as 11 * published by the Free Software Foundation. 12 */ 13 #include <linux/slab.h> 14 #include <linux/kernel.h> 15 #include <linux/if_arp.h> 16 #include <linux/netdevice.h> 17 #include <linux/rtnetlink.h> 18 #include <net/mac80211.h> 19 #include <net/ieee80211_radiotap.h> 20 #include "ieee80211_i.h" 21 #include "sta_info.h" 22 #include "debugfs_netdev.h" 23 #include "mesh.h" 24 #include "led.h" 25 #include "driver-ops.h" 26 #include "wme.h" 27 #include "rate.h" 28 29 /** 30 * DOC: Interface list locking 31 * 32 * The interface list in each struct ieee80211_local is protected 33 * three-fold: 34 * 35 * (1) modifications may only be done under the RTNL 36 * (2) modifications and readers are protected against each other by 37 * the iflist_mtx. 38 * (3) modifications are done in an RCU manner so atomic readers 39 * can traverse the list in RCU-safe blocks. 40 * 41 * As a consequence, reads (traversals) of the list can be protected 42 * by either the RTNL, the iflist_mtx or RCU. 43 */ 44 45 46 static u32 ieee80211_idle_off(struct ieee80211_local *local, 47 const char *reason) 48 { 49 if (!(local->hw.conf.flags & IEEE80211_CONF_IDLE)) 50 return 0; 51 52 local->hw.conf.flags &= ~IEEE80211_CONF_IDLE; 53 return IEEE80211_CONF_CHANGE_IDLE; 54 } 55 56 static u32 ieee80211_idle_on(struct ieee80211_local *local) 57 { 58 if (local->hw.conf.flags & IEEE80211_CONF_IDLE) 59 return 0; 60 61 drv_flush(local, false); 62 63 local->hw.conf.flags |= IEEE80211_CONF_IDLE; 64 return IEEE80211_CONF_CHANGE_IDLE; 65 } 66 67 static u32 __ieee80211_recalc_idle(struct ieee80211_local *local) 68 { 69 struct ieee80211_sub_if_data *sdata; 70 int count = 0; 71 bool working = false, scanning = false; 72 unsigned int led_trig_start = 0, led_trig_stop = 0; 73 struct ieee80211_roc_work *roc; 74 75 #ifdef CONFIG_PROVE_LOCKING 76 WARN_ON(debug_locks && !lockdep_rtnl_is_held() && 77 !lockdep_is_held(&local->iflist_mtx)); 78 #endif 79 lockdep_assert_held(&local->mtx); 80 81 list_for_each_entry(sdata, &local->interfaces, list) { 82 if (!ieee80211_sdata_running(sdata)) { 83 sdata->vif.bss_conf.idle = true; 84 continue; 85 } 86 87 sdata->old_idle = sdata->vif.bss_conf.idle; 88 89 /* do not count disabled managed interfaces */ 90 if (sdata->vif.type == NL80211_IFTYPE_STATION && 91 !sdata->u.mgd.associated && 92 !sdata->u.mgd.auth_data && 93 !sdata->u.mgd.assoc_data) { 94 sdata->vif.bss_conf.idle = true; 95 continue; 96 } 97 /* do not count unused IBSS interfaces */ 98 if (sdata->vif.type == NL80211_IFTYPE_ADHOC && 99 !sdata->u.ibss.ssid_len) { 100 sdata->vif.bss_conf.idle = true; 101 continue; 102 } 103 104 if (sdata->vif.type == NL80211_IFTYPE_P2P_DEVICE) 105 continue; 106 107 /* count everything else */ 108 sdata->vif.bss_conf.idle = false; 109 count++; 110 } 111 112 if (!local->ops->remain_on_channel) { 113 list_for_each_entry(roc, &local->roc_list, list) { 114 working = true; 115 roc->sdata->vif.bss_conf.idle = false; 116 } 117 } 118 119 sdata = rcu_dereference_protected(local->scan_sdata, 120 lockdep_is_held(&local->mtx)); 121 if (sdata && !(local->hw.flags & IEEE80211_HW_SCAN_WHILE_IDLE)) { 122 scanning = true; 123 sdata->vif.bss_conf.idle = false; 124 } 125 126 list_for_each_entry(sdata, &local->interfaces, list) { 127 if (sdata->vif.type == NL80211_IFTYPE_MONITOR || 128 sdata->vif.type == NL80211_IFTYPE_AP_VLAN || 129 sdata->vif.type == NL80211_IFTYPE_P2P_DEVICE) 130 continue; 131 if (sdata->old_idle == sdata->vif.bss_conf.idle) 132 continue; 133 if (!ieee80211_sdata_running(sdata)) 134 continue; 135 ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_IDLE); 136 } 137 138 if (working || scanning) 139 led_trig_start |= IEEE80211_TPT_LEDTRIG_FL_WORK; 140 else 141 led_trig_stop |= IEEE80211_TPT_LEDTRIG_FL_WORK; 142 143 if (count) 144 led_trig_start |= IEEE80211_TPT_LEDTRIG_FL_CONNECTED; 145 else 146 led_trig_stop |= IEEE80211_TPT_LEDTRIG_FL_CONNECTED; 147 148 ieee80211_mod_tpt_led_trig(local, led_trig_start, led_trig_stop); 149 150 if (working) 151 return ieee80211_idle_off(local, "working"); 152 if (scanning) 153 return ieee80211_idle_off(local, "scanning"); 154 if (!count) 155 return ieee80211_idle_on(local); 156 else 157 return ieee80211_idle_off(local, "in use"); 158 159 return 0; 160 } 161 162 void ieee80211_recalc_idle(struct ieee80211_local *local) 163 { 164 u32 chg; 165 166 mutex_lock(&local->iflist_mtx); 167 chg = __ieee80211_recalc_idle(local); 168 mutex_unlock(&local->iflist_mtx); 169 if (chg) 170 ieee80211_hw_config(local, chg); 171 } 172 173 static int ieee80211_change_mtu(struct net_device *dev, int new_mtu) 174 { 175 int meshhdrlen; 176 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); 177 178 meshhdrlen = (sdata->vif.type == NL80211_IFTYPE_MESH_POINT) ? 5 : 0; 179 180 /* FIX: what would be proper limits for MTU? 181 * This interface uses 802.3 frames. */ 182 if (new_mtu < 256 || 183 new_mtu > IEEE80211_MAX_DATA_LEN - 24 - 6 - meshhdrlen) { 184 return -EINVAL; 185 } 186 187 dev->mtu = new_mtu; 188 return 0; 189 } 190 191 static int ieee80211_change_mac(struct net_device *dev, void *addr) 192 { 193 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); 194 struct sockaddr *sa = addr; 195 int ret; 196 197 if (ieee80211_sdata_running(sdata)) 198 return -EBUSY; 199 200 ret = eth_mac_addr(dev, sa); 201 202 if (ret == 0) 203 memcpy(sdata->vif.addr, sa->sa_data, ETH_ALEN); 204 205 return ret; 206 } 207 208 static inline int identical_mac_addr_allowed(int type1, int type2) 209 { 210 return type1 == NL80211_IFTYPE_MONITOR || 211 type2 == NL80211_IFTYPE_MONITOR || 212 type1 == NL80211_IFTYPE_P2P_DEVICE || 213 type2 == NL80211_IFTYPE_P2P_DEVICE || 214 (type1 == NL80211_IFTYPE_AP && type2 == NL80211_IFTYPE_WDS) || 215 (type1 == NL80211_IFTYPE_WDS && 216 (type2 == NL80211_IFTYPE_WDS || 217 type2 == NL80211_IFTYPE_AP)) || 218 (type1 == NL80211_IFTYPE_AP && type2 == NL80211_IFTYPE_AP_VLAN) || 219 (type1 == NL80211_IFTYPE_AP_VLAN && 220 (type2 == NL80211_IFTYPE_AP || 221 type2 == NL80211_IFTYPE_AP_VLAN)); 222 } 223 224 static int ieee80211_check_concurrent_iface(struct ieee80211_sub_if_data *sdata, 225 enum nl80211_iftype iftype) 226 { 227 struct ieee80211_local *local = sdata->local; 228 struct ieee80211_sub_if_data *nsdata; 229 230 ASSERT_RTNL(); 231 232 /* we hold the RTNL here so can safely walk the list */ 233 list_for_each_entry(nsdata, &local->interfaces, list) { 234 if (nsdata != sdata && ieee80211_sdata_running(nsdata)) { 235 /* 236 * Allow only a single IBSS interface to be up at any 237 * time. This is restricted because beacon distribution 238 * cannot work properly if both are in the same IBSS. 239 * 240 * To remove this restriction we'd have to disallow them 241 * from setting the same SSID on different IBSS interfaces 242 * belonging to the same hardware. Then, however, we're 243 * faced with having to adopt two different TSF timers... 244 */ 245 if (iftype == NL80211_IFTYPE_ADHOC && 246 nsdata->vif.type == NL80211_IFTYPE_ADHOC) 247 return -EBUSY; 248 249 /* 250 * The remaining checks are only performed for interfaces 251 * with the same MAC address. 252 */ 253 if (!ether_addr_equal(sdata->vif.addr, 254 nsdata->vif.addr)) 255 continue; 256 257 /* 258 * check whether it may have the same address 259 */ 260 if (!identical_mac_addr_allowed(iftype, 261 nsdata->vif.type)) 262 return -ENOTUNIQ; 263 264 /* 265 * can only add VLANs to enabled APs 266 */ 267 if (iftype == NL80211_IFTYPE_AP_VLAN && 268 nsdata->vif.type == NL80211_IFTYPE_AP) 269 sdata->bss = &nsdata->u.ap; 270 } 271 } 272 273 return 0; 274 } 275 276 static int ieee80211_check_queues(struct ieee80211_sub_if_data *sdata) 277 { 278 int n_queues = sdata->local->hw.queues; 279 int i; 280 281 for (i = 0; i < IEEE80211_NUM_ACS; i++) { 282 if (WARN_ON_ONCE(sdata->vif.hw_queue[i] == 283 IEEE80211_INVAL_HW_QUEUE)) 284 return -EINVAL; 285 if (WARN_ON_ONCE(sdata->vif.hw_queue[i] >= 286 n_queues)) 287 return -EINVAL; 288 } 289 290 if ((sdata->vif.type != NL80211_IFTYPE_AP) || 291 !(sdata->local->hw.flags & IEEE80211_HW_QUEUE_CONTROL)) { 292 sdata->vif.cab_queue = IEEE80211_INVAL_HW_QUEUE; 293 return 0; 294 } 295 296 if (WARN_ON_ONCE(sdata->vif.cab_queue == IEEE80211_INVAL_HW_QUEUE)) 297 return -EINVAL; 298 299 if (WARN_ON_ONCE(sdata->vif.cab_queue >= n_queues)) 300 return -EINVAL; 301 302 return 0; 303 } 304 305 void ieee80211_adjust_monitor_flags(struct ieee80211_sub_if_data *sdata, 306 const int offset) 307 { 308 struct ieee80211_local *local = sdata->local; 309 u32 flags = sdata->u.mntr_flags; 310 311 #define ADJUST(_f, _s) do { \ 312 if (flags & MONITOR_FLAG_##_f) \ 313 local->fif_##_s += offset; \ 314 } while (0) 315 316 ADJUST(FCSFAIL, fcsfail); 317 ADJUST(PLCPFAIL, plcpfail); 318 ADJUST(CONTROL, control); 319 ADJUST(CONTROL, pspoll); 320 ADJUST(OTHER_BSS, other_bss); 321 322 #undef ADJUST 323 } 324 325 static void ieee80211_set_default_queues(struct ieee80211_sub_if_data *sdata) 326 { 327 struct ieee80211_local *local = sdata->local; 328 int i; 329 330 for (i = 0; i < IEEE80211_NUM_ACS; i++) { 331 if (local->hw.flags & IEEE80211_HW_QUEUE_CONTROL) 332 sdata->vif.hw_queue[i] = IEEE80211_INVAL_HW_QUEUE; 333 else if (local->hw.queues >= IEEE80211_NUM_ACS) 334 sdata->vif.hw_queue[i] = i; 335 else 336 sdata->vif.hw_queue[i] = 0; 337 } 338 sdata->vif.cab_queue = IEEE80211_INVAL_HW_QUEUE; 339 } 340 341 static int ieee80211_add_virtual_monitor(struct ieee80211_local *local) 342 { 343 struct ieee80211_sub_if_data *sdata; 344 int ret = 0; 345 346 if (!(local->hw.flags & IEEE80211_HW_WANT_MONITOR_VIF)) 347 return 0; 348 349 mutex_lock(&local->iflist_mtx); 350 351 if (local->monitor_sdata) 352 goto out_unlock; 353 354 sdata = kzalloc(sizeof(*sdata) + local->hw.vif_data_size, GFP_KERNEL); 355 if (!sdata) { 356 ret = -ENOMEM; 357 goto out_unlock; 358 } 359 360 /* set up data */ 361 sdata->local = local; 362 sdata->vif.type = NL80211_IFTYPE_MONITOR; 363 snprintf(sdata->name, IFNAMSIZ, "%s-monitor", 364 wiphy_name(local->hw.wiphy)); 365 366 ieee80211_set_default_queues(sdata); 367 368 ret = drv_add_interface(local, sdata); 369 if (WARN_ON(ret)) { 370 /* ok .. stupid driver, it asked for this! */ 371 kfree(sdata); 372 goto out_unlock; 373 } 374 375 ret = ieee80211_check_queues(sdata); 376 if (ret) { 377 kfree(sdata); 378 goto out_unlock; 379 } 380 381 rcu_assign_pointer(local->monitor_sdata, sdata); 382 out_unlock: 383 mutex_unlock(&local->iflist_mtx); 384 return ret; 385 } 386 387 static void ieee80211_del_virtual_monitor(struct ieee80211_local *local) 388 { 389 struct ieee80211_sub_if_data *sdata; 390 391 if (!(local->hw.flags & IEEE80211_HW_WANT_MONITOR_VIF)) 392 return; 393 394 mutex_lock(&local->iflist_mtx); 395 396 sdata = rcu_dereference_protected(local->monitor_sdata, 397 lockdep_is_held(&local->iflist_mtx)); 398 if (!sdata) 399 goto out_unlock; 400 401 rcu_assign_pointer(local->monitor_sdata, NULL); 402 synchronize_net(); 403 404 drv_remove_interface(local, sdata); 405 406 kfree(sdata); 407 out_unlock: 408 mutex_unlock(&local->iflist_mtx); 409 } 410 411 /* 412 * NOTE: Be very careful when changing this function, it must NOT return 413 * an error on interface type changes that have been pre-checked, so most 414 * checks should be in ieee80211_check_concurrent_iface. 415 */ 416 int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up) 417 { 418 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); 419 struct net_device *dev = wdev->netdev; 420 struct ieee80211_local *local = sdata->local; 421 struct sta_info *sta; 422 u32 changed = 0; 423 int res; 424 u32 hw_reconf_flags = 0; 425 426 switch (sdata->vif.type) { 427 case NL80211_IFTYPE_WDS: 428 if (!is_valid_ether_addr(sdata->u.wds.remote_addr)) 429 return -ENOLINK; 430 break; 431 case NL80211_IFTYPE_AP_VLAN: { 432 struct ieee80211_sub_if_data *master; 433 434 if (!sdata->bss) 435 return -ENOLINK; 436 437 list_add(&sdata->u.vlan.list, &sdata->bss->vlans); 438 439 master = container_of(sdata->bss, 440 struct ieee80211_sub_if_data, u.ap); 441 sdata->control_port_protocol = 442 master->control_port_protocol; 443 sdata->control_port_no_encrypt = 444 master->control_port_no_encrypt; 445 break; 446 } 447 case NL80211_IFTYPE_AP: 448 sdata->bss = &sdata->u.ap; 449 break; 450 case NL80211_IFTYPE_MESH_POINT: 451 case NL80211_IFTYPE_STATION: 452 case NL80211_IFTYPE_MONITOR: 453 case NL80211_IFTYPE_ADHOC: 454 case NL80211_IFTYPE_P2P_DEVICE: 455 /* no special treatment */ 456 break; 457 case NL80211_IFTYPE_UNSPECIFIED: 458 case NUM_NL80211_IFTYPES: 459 case NL80211_IFTYPE_P2P_CLIENT: 460 case NL80211_IFTYPE_P2P_GO: 461 /* cannot happen */ 462 WARN_ON(1); 463 break; 464 } 465 466 if (local->open_count == 0) { 467 res = drv_start(local); 468 if (res) 469 goto err_del_bss; 470 if (local->ops->napi_poll) 471 napi_enable(&local->napi); 472 /* we're brought up, everything changes */ 473 hw_reconf_flags = ~0; 474 ieee80211_led_radio(local, true); 475 ieee80211_mod_tpt_led_trig(local, 476 IEEE80211_TPT_LEDTRIG_FL_RADIO, 0); 477 } 478 479 /* 480 * Copy the hopefully now-present MAC address to 481 * this interface, if it has the special null one. 482 */ 483 if (dev && is_zero_ether_addr(dev->dev_addr)) { 484 memcpy(dev->dev_addr, 485 local->hw.wiphy->perm_addr, 486 ETH_ALEN); 487 memcpy(dev->perm_addr, dev->dev_addr, ETH_ALEN); 488 489 if (!is_valid_ether_addr(dev->dev_addr)) { 490 res = -EADDRNOTAVAIL; 491 goto err_stop; 492 } 493 } 494 495 switch (sdata->vif.type) { 496 case NL80211_IFTYPE_AP_VLAN: 497 /* no need to tell driver, but set carrier */ 498 if (rtnl_dereference(sdata->bss->beacon)) 499 netif_carrier_on(dev); 500 else 501 netif_carrier_off(dev); 502 break; 503 case NL80211_IFTYPE_MONITOR: 504 if (sdata->u.mntr_flags & MONITOR_FLAG_COOK_FRAMES) { 505 local->cooked_mntrs++; 506 break; 507 } 508 509 if (local->monitors == 0 && local->open_count == 0) { 510 res = ieee80211_add_virtual_monitor(local); 511 if (res) 512 goto err_stop; 513 } 514 515 /* must be before the call to ieee80211_configure_filter */ 516 local->monitors++; 517 if (local->monitors == 1) { 518 local->hw.conf.flags |= IEEE80211_CONF_MONITOR; 519 hw_reconf_flags |= IEEE80211_CONF_CHANGE_MONITOR; 520 } 521 522 ieee80211_adjust_monitor_flags(sdata, 1); 523 ieee80211_configure_filter(local); 524 525 netif_carrier_on(dev); 526 break; 527 default: 528 if (coming_up) { 529 ieee80211_del_virtual_monitor(local); 530 531 res = drv_add_interface(local, sdata); 532 if (res) 533 goto err_stop; 534 res = ieee80211_check_queues(sdata); 535 if (res) 536 goto err_del_interface; 537 } 538 539 if (sdata->vif.type == NL80211_IFTYPE_AP) { 540 local->fif_pspoll++; 541 local->fif_probe_req++; 542 543 ieee80211_configure_filter(local); 544 } else if (sdata->vif.type == NL80211_IFTYPE_ADHOC) { 545 local->fif_probe_req++; 546 } 547 548 if (sdata->vif.type != NL80211_IFTYPE_P2P_DEVICE) 549 changed |= ieee80211_reset_erp_info(sdata); 550 ieee80211_bss_info_change_notify(sdata, changed); 551 552 switch (sdata->vif.type) { 553 case NL80211_IFTYPE_STATION: 554 case NL80211_IFTYPE_ADHOC: 555 case NL80211_IFTYPE_AP: 556 case NL80211_IFTYPE_MESH_POINT: 557 netif_carrier_off(dev); 558 break; 559 case NL80211_IFTYPE_WDS: 560 case NL80211_IFTYPE_P2P_DEVICE: 561 break; 562 default: 563 netif_carrier_on(dev); 564 } 565 566 /* 567 * set default queue parameters so drivers don't 568 * need to initialise the hardware if the hardware 569 * doesn't start up with sane defaults 570 */ 571 ieee80211_set_wmm_default(sdata, true); 572 } 573 574 set_bit(SDATA_STATE_RUNNING, &sdata->state); 575 576 if (sdata->vif.type == NL80211_IFTYPE_WDS) { 577 /* Create STA entry for the WDS peer */ 578 sta = sta_info_alloc(sdata, sdata->u.wds.remote_addr, 579 GFP_KERNEL); 580 if (!sta) { 581 res = -ENOMEM; 582 goto err_del_interface; 583 } 584 585 sta_info_pre_move_state(sta, IEEE80211_STA_AUTH); 586 sta_info_pre_move_state(sta, IEEE80211_STA_ASSOC); 587 sta_info_pre_move_state(sta, IEEE80211_STA_AUTHORIZED); 588 589 res = sta_info_insert(sta); 590 if (res) { 591 /* STA has been freed */ 592 goto err_del_interface; 593 } 594 595 rate_control_rate_init(sta); 596 netif_carrier_on(dev); 597 } else if (sdata->vif.type == NL80211_IFTYPE_P2P_DEVICE) { 598 rcu_assign_pointer(local->p2p_sdata, sdata); 599 } 600 601 /* 602 * set_multicast_list will be invoked by the networking core 603 * which will check whether any increments here were done in 604 * error and sync them down to the hardware as filter flags. 605 */ 606 if (sdata->flags & IEEE80211_SDATA_ALLMULTI) 607 atomic_inc(&local->iff_allmultis); 608 609 if (sdata->flags & IEEE80211_SDATA_PROMISC) 610 atomic_inc(&local->iff_promiscs); 611 612 mutex_lock(&local->mtx); 613 hw_reconf_flags |= __ieee80211_recalc_idle(local); 614 mutex_unlock(&local->mtx); 615 616 if (coming_up) 617 local->open_count++; 618 619 if (hw_reconf_flags) 620 ieee80211_hw_config(local, hw_reconf_flags); 621 622 ieee80211_recalc_ps(local, -1); 623 624 if (dev) 625 netif_tx_start_all_queues(dev); 626 627 return 0; 628 err_del_interface: 629 drv_remove_interface(local, sdata); 630 err_stop: 631 if (!local->open_count) 632 drv_stop(local); 633 err_del_bss: 634 sdata->bss = NULL; 635 if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) 636 list_del(&sdata->u.vlan.list); 637 /* might already be clear but that doesn't matter */ 638 clear_bit(SDATA_STATE_RUNNING, &sdata->state); 639 return res; 640 } 641 642 static int ieee80211_open(struct net_device *dev) 643 { 644 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); 645 int err; 646 647 /* fail early if user set an invalid address */ 648 if (!is_valid_ether_addr(dev->dev_addr)) 649 return -EADDRNOTAVAIL; 650 651 err = ieee80211_check_concurrent_iface(sdata, sdata->vif.type); 652 if (err) 653 return err; 654 655 return ieee80211_do_open(&sdata->wdev, true); 656 } 657 658 static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata, 659 bool going_down) 660 { 661 struct ieee80211_local *local = sdata->local; 662 unsigned long flags; 663 struct sk_buff *skb, *tmp; 664 u32 hw_reconf_flags = 0; 665 int i; 666 enum nl80211_channel_type orig_ct; 667 668 clear_bit(SDATA_STATE_RUNNING, &sdata->state); 669 670 if (rcu_access_pointer(local->scan_sdata) == sdata) 671 ieee80211_scan_cancel(local); 672 673 /* 674 * Stop TX on this interface first. 675 */ 676 if (sdata->dev) 677 netif_tx_stop_all_queues(sdata->dev); 678 679 ieee80211_roc_purge(sdata); 680 681 /* 682 * Remove all stations associated with this interface. 683 * 684 * This must be done before calling ops->remove_interface() 685 * because otherwise we can later invoke ops->sta_notify() 686 * whenever the STAs are removed, and that invalidates driver 687 * assumptions about always getting a vif pointer that is valid 688 * (because if we remove a STA after ops->remove_interface() 689 * the driver will have removed the vif info already!) 690 * 691 * This is relevant only in AP, WDS and mesh modes, since in 692 * all other modes we've already removed all stations when 693 * disconnecting etc. 694 */ 695 sta_info_flush(local, sdata); 696 697 /* 698 * Don't count this interface for promisc/allmulti while it 699 * is down. dev_mc_unsync() will invoke set_multicast_list 700 * on the master interface which will sync these down to the 701 * hardware as filter flags. 702 */ 703 if (sdata->flags & IEEE80211_SDATA_ALLMULTI) 704 atomic_dec(&local->iff_allmultis); 705 706 if (sdata->flags & IEEE80211_SDATA_PROMISC) 707 atomic_dec(&local->iff_promiscs); 708 709 if (sdata->vif.type == NL80211_IFTYPE_AP) { 710 local->fif_pspoll--; 711 local->fif_probe_req--; 712 } else if (sdata->vif.type == NL80211_IFTYPE_ADHOC) { 713 local->fif_probe_req--; 714 } 715 716 if (sdata->dev) { 717 netif_addr_lock_bh(sdata->dev); 718 spin_lock_bh(&local->filter_lock); 719 __hw_addr_unsync(&local->mc_list, &sdata->dev->mc, 720 sdata->dev->addr_len); 721 spin_unlock_bh(&local->filter_lock); 722 netif_addr_unlock_bh(sdata->dev); 723 724 ieee80211_configure_filter(local); 725 } 726 727 del_timer_sync(&local->dynamic_ps_timer); 728 cancel_work_sync(&local->dynamic_ps_enable_work); 729 730 /* APs need special treatment */ 731 if (sdata->vif.type == NL80211_IFTYPE_AP) { 732 struct ieee80211_sub_if_data *vlan, *tmpsdata; 733 struct beacon_data *old_beacon = 734 rtnl_dereference(sdata->u.ap.beacon); 735 struct probe_resp *old_probe_resp = 736 rtnl_dereference(sdata->u.ap.probe_resp); 737 738 /* sdata_running will return false, so this will disable */ 739 ieee80211_bss_info_change_notify(sdata, 740 BSS_CHANGED_BEACON_ENABLED); 741 742 /* remove beacon and probe response */ 743 RCU_INIT_POINTER(sdata->u.ap.beacon, NULL); 744 RCU_INIT_POINTER(sdata->u.ap.probe_resp, NULL); 745 synchronize_rcu(); 746 kfree(old_beacon); 747 kfree(old_probe_resp); 748 749 /* down all dependent devices, that is VLANs */ 750 list_for_each_entry_safe(vlan, tmpsdata, &sdata->u.ap.vlans, 751 u.vlan.list) 752 dev_close(vlan->dev); 753 WARN_ON(!list_empty(&sdata->u.ap.vlans)); 754 755 /* free all potentially still buffered bcast frames */ 756 local->total_ps_buffered -= skb_queue_len(&sdata->u.ap.ps_bc_buf); 757 skb_queue_purge(&sdata->u.ap.ps_bc_buf); 758 } else if (sdata->vif.type == NL80211_IFTYPE_STATION) { 759 ieee80211_mgd_stop(sdata); 760 } 761 762 if (going_down) 763 local->open_count--; 764 765 switch (sdata->vif.type) { 766 case NL80211_IFTYPE_AP_VLAN: 767 list_del(&sdata->u.vlan.list); 768 /* no need to tell driver */ 769 break; 770 case NL80211_IFTYPE_MONITOR: 771 if (sdata->u.mntr_flags & MONITOR_FLAG_COOK_FRAMES) { 772 local->cooked_mntrs--; 773 break; 774 } 775 776 local->monitors--; 777 if (local->monitors == 0) { 778 local->hw.conf.flags &= ~IEEE80211_CONF_MONITOR; 779 hw_reconf_flags |= IEEE80211_CONF_CHANGE_MONITOR; 780 ieee80211_del_virtual_monitor(local); 781 } 782 783 ieee80211_adjust_monitor_flags(sdata, -1); 784 ieee80211_configure_filter(local); 785 break; 786 case NL80211_IFTYPE_P2P_DEVICE: 787 /* relies on synchronize_rcu() below */ 788 rcu_assign_pointer(local->p2p_sdata, NULL); 789 /* fall through */ 790 default: 791 flush_work(&sdata->work); 792 /* 793 * When we get here, the interface is marked down. 794 * Call synchronize_rcu() to wait for the RX path 795 * should it be using the interface and enqueuing 796 * frames at this very time on another CPU. 797 */ 798 synchronize_rcu(); 799 skb_queue_purge(&sdata->skb_queue); 800 801 /* 802 * Free all remaining keys, there shouldn't be any, 803 * except maybe group keys in AP more or WDS? 804 */ 805 ieee80211_free_keys(sdata); 806 807 if (going_down) 808 drv_remove_interface(local, sdata); 809 } 810 811 sdata->bss = NULL; 812 813 mutex_lock(&local->mtx); 814 hw_reconf_flags |= __ieee80211_recalc_idle(local); 815 mutex_unlock(&local->mtx); 816 817 ieee80211_recalc_ps(local, -1); 818 819 if (local->open_count == 0) { 820 if (local->ops->napi_poll) 821 napi_disable(&local->napi); 822 ieee80211_clear_tx_pending(local); 823 ieee80211_stop_device(local); 824 825 /* no reconfiguring after stop! */ 826 hw_reconf_flags = 0; 827 } 828 829 /* Re-calculate channel-type, in case there are multiple vifs 830 * on different channel types. 831 */ 832 orig_ct = local->_oper_channel_type; 833 ieee80211_set_channel_type(local, NULL, NL80211_CHAN_NO_HT); 834 835 /* do after stop to avoid reconfiguring when we stop anyway */ 836 if (hw_reconf_flags || (orig_ct != local->_oper_channel_type)) 837 ieee80211_hw_config(local, hw_reconf_flags); 838 839 spin_lock_irqsave(&local->queue_stop_reason_lock, flags); 840 for (i = 0; i < IEEE80211_MAX_QUEUES; i++) { 841 skb_queue_walk_safe(&local->pending[i], skb, tmp) { 842 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); 843 if (info->control.vif == &sdata->vif) { 844 __skb_unlink(skb, &local->pending[i]); 845 dev_kfree_skb_irq(skb); 846 } 847 } 848 } 849 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); 850 851 if (local->monitors == local->open_count && local->monitors > 0) 852 ieee80211_add_virtual_monitor(local); 853 } 854 855 static int ieee80211_stop(struct net_device *dev) 856 { 857 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); 858 859 ieee80211_do_stop(sdata, true); 860 861 return 0; 862 } 863 864 static void ieee80211_set_multicast_list(struct net_device *dev) 865 { 866 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); 867 struct ieee80211_local *local = sdata->local; 868 int allmulti, promisc, sdata_allmulti, sdata_promisc; 869 870 allmulti = !!(dev->flags & IFF_ALLMULTI); 871 promisc = !!(dev->flags & IFF_PROMISC); 872 sdata_allmulti = !!(sdata->flags & IEEE80211_SDATA_ALLMULTI); 873 sdata_promisc = !!(sdata->flags & IEEE80211_SDATA_PROMISC); 874 875 if (allmulti != sdata_allmulti) { 876 if (dev->flags & IFF_ALLMULTI) 877 atomic_inc(&local->iff_allmultis); 878 else 879 atomic_dec(&local->iff_allmultis); 880 sdata->flags ^= IEEE80211_SDATA_ALLMULTI; 881 } 882 883 if (promisc != sdata_promisc) { 884 if (dev->flags & IFF_PROMISC) 885 atomic_inc(&local->iff_promiscs); 886 else 887 atomic_dec(&local->iff_promiscs); 888 sdata->flags ^= IEEE80211_SDATA_PROMISC; 889 } 890 spin_lock_bh(&local->filter_lock); 891 __hw_addr_sync(&local->mc_list, &dev->mc, dev->addr_len); 892 spin_unlock_bh(&local->filter_lock); 893 ieee80211_queue_work(&local->hw, &local->reconfig_filter); 894 } 895 896 /* 897 * Called when the netdev is removed or, by the code below, before 898 * the interface type changes. 899 */ 900 static void ieee80211_teardown_sdata(struct ieee80211_sub_if_data *sdata) 901 { 902 struct ieee80211_local *local = sdata->local; 903 int flushed; 904 int i; 905 906 /* free extra data */ 907 ieee80211_free_keys(sdata); 908 909 ieee80211_debugfs_remove_netdev(sdata); 910 911 for (i = 0; i < IEEE80211_FRAGMENT_MAX; i++) 912 __skb_queue_purge(&sdata->fragments[i].skb_list); 913 sdata->fragment_next = 0; 914 915 if (ieee80211_vif_is_mesh(&sdata->vif)) 916 mesh_rmc_free(sdata); 917 918 flushed = sta_info_flush(local, sdata); 919 WARN_ON(flushed); 920 } 921 922 static void ieee80211_uninit(struct net_device *dev) 923 { 924 ieee80211_teardown_sdata(IEEE80211_DEV_TO_SUB_IF(dev)); 925 } 926 927 static u16 ieee80211_netdev_select_queue(struct net_device *dev, 928 struct sk_buff *skb) 929 { 930 return ieee80211_select_queue(IEEE80211_DEV_TO_SUB_IF(dev), skb); 931 } 932 933 static const struct net_device_ops ieee80211_dataif_ops = { 934 .ndo_open = ieee80211_open, 935 .ndo_stop = ieee80211_stop, 936 .ndo_uninit = ieee80211_uninit, 937 .ndo_start_xmit = ieee80211_subif_start_xmit, 938 .ndo_set_rx_mode = ieee80211_set_multicast_list, 939 .ndo_change_mtu = ieee80211_change_mtu, 940 .ndo_set_mac_address = ieee80211_change_mac, 941 .ndo_select_queue = ieee80211_netdev_select_queue, 942 }; 943 944 static u16 ieee80211_monitor_select_queue(struct net_device *dev, 945 struct sk_buff *skb) 946 { 947 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); 948 struct ieee80211_local *local = sdata->local; 949 struct ieee80211_hdr *hdr; 950 struct ieee80211_radiotap_header *rtap = (void *)skb->data; 951 952 if (local->hw.queues < IEEE80211_NUM_ACS) 953 return 0; 954 955 if (skb->len < 4 || 956 skb->len < le16_to_cpu(rtap->it_len) + 2 /* frame control */) 957 return 0; /* doesn't matter, frame will be dropped */ 958 959 hdr = (void *)((u8 *)skb->data + le16_to_cpu(rtap->it_len)); 960 961 return ieee80211_select_queue_80211(sdata, skb, hdr); 962 } 963 964 static const struct net_device_ops ieee80211_monitorif_ops = { 965 .ndo_open = ieee80211_open, 966 .ndo_stop = ieee80211_stop, 967 .ndo_uninit = ieee80211_uninit, 968 .ndo_start_xmit = ieee80211_monitor_start_xmit, 969 .ndo_set_rx_mode = ieee80211_set_multicast_list, 970 .ndo_change_mtu = ieee80211_change_mtu, 971 .ndo_set_mac_address = eth_mac_addr, 972 .ndo_select_queue = ieee80211_monitor_select_queue, 973 }; 974 975 static void ieee80211_if_setup(struct net_device *dev) 976 { 977 ether_setup(dev); 978 dev->priv_flags &= ~IFF_TX_SKB_SHARING; 979 dev->netdev_ops = &ieee80211_dataif_ops; 980 dev->destructor = free_netdev; 981 } 982 983 static void ieee80211_iface_work(struct work_struct *work) 984 { 985 struct ieee80211_sub_if_data *sdata = 986 container_of(work, struct ieee80211_sub_if_data, work); 987 struct ieee80211_local *local = sdata->local; 988 struct sk_buff *skb; 989 struct sta_info *sta; 990 struct ieee80211_ra_tid *ra_tid; 991 992 if (!ieee80211_sdata_running(sdata)) 993 return; 994 995 if (local->scanning) 996 return; 997 998 /* 999 * ieee80211_queue_work() should have picked up most cases, 1000 * here we'll pick the rest. 1001 */ 1002 if (WARN(local->suspended, 1003 "interface work scheduled while going to suspend\n")) 1004 return; 1005 1006 /* first process frames */ 1007 while ((skb = skb_dequeue(&sdata->skb_queue))) { 1008 struct ieee80211_mgmt *mgmt = (void *)skb->data; 1009 1010 if (skb->pkt_type == IEEE80211_SDATA_QUEUE_AGG_START) { 1011 ra_tid = (void *)&skb->cb; 1012 ieee80211_start_tx_ba_cb(&sdata->vif, ra_tid->ra, 1013 ra_tid->tid); 1014 } else if (skb->pkt_type == IEEE80211_SDATA_QUEUE_AGG_STOP) { 1015 ra_tid = (void *)&skb->cb; 1016 ieee80211_stop_tx_ba_cb(&sdata->vif, ra_tid->ra, 1017 ra_tid->tid); 1018 } else if (ieee80211_is_action(mgmt->frame_control) && 1019 mgmt->u.action.category == WLAN_CATEGORY_BACK) { 1020 int len = skb->len; 1021 1022 mutex_lock(&local->sta_mtx); 1023 sta = sta_info_get_bss(sdata, mgmt->sa); 1024 if (sta) { 1025 switch (mgmt->u.action.u.addba_req.action_code) { 1026 case WLAN_ACTION_ADDBA_REQ: 1027 ieee80211_process_addba_request( 1028 local, sta, mgmt, len); 1029 break; 1030 case WLAN_ACTION_ADDBA_RESP: 1031 ieee80211_process_addba_resp(local, sta, 1032 mgmt, len); 1033 break; 1034 case WLAN_ACTION_DELBA: 1035 ieee80211_process_delba(sdata, sta, 1036 mgmt, len); 1037 break; 1038 default: 1039 WARN_ON(1); 1040 break; 1041 } 1042 } 1043 mutex_unlock(&local->sta_mtx); 1044 } else if (ieee80211_is_data_qos(mgmt->frame_control)) { 1045 struct ieee80211_hdr *hdr = (void *)mgmt; 1046 /* 1047 * So the frame isn't mgmt, but frame_control 1048 * is at the right place anyway, of course, so 1049 * the if statement is correct. 1050 * 1051 * Warn if we have other data frame types here, 1052 * they must not get here. 1053 */ 1054 WARN_ON(hdr->frame_control & 1055 cpu_to_le16(IEEE80211_STYPE_NULLFUNC)); 1056 WARN_ON(!(hdr->seq_ctrl & 1057 cpu_to_le16(IEEE80211_SCTL_FRAG))); 1058 /* 1059 * This was a fragment of a frame, received while 1060 * a block-ack session was active. That cannot be 1061 * right, so terminate the session. 1062 */ 1063 mutex_lock(&local->sta_mtx); 1064 sta = sta_info_get_bss(sdata, mgmt->sa); 1065 if (sta) { 1066 u16 tid = *ieee80211_get_qos_ctl(hdr) & 1067 IEEE80211_QOS_CTL_TID_MASK; 1068 1069 __ieee80211_stop_rx_ba_session( 1070 sta, tid, WLAN_BACK_RECIPIENT, 1071 WLAN_REASON_QSTA_REQUIRE_SETUP, 1072 true); 1073 } 1074 mutex_unlock(&local->sta_mtx); 1075 } else switch (sdata->vif.type) { 1076 case NL80211_IFTYPE_STATION: 1077 ieee80211_sta_rx_queued_mgmt(sdata, skb); 1078 break; 1079 case NL80211_IFTYPE_ADHOC: 1080 ieee80211_ibss_rx_queued_mgmt(sdata, skb); 1081 break; 1082 case NL80211_IFTYPE_MESH_POINT: 1083 if (!ieee80211_vif_is_mesh(&sdata->vif)) 1084 break; 1085 ieee80211_mesh_rx_queued_mgmt(sdata, skb); 1086 break; 1087 default: 1088 WARN(1, "frame for unexpected interface type"); 1089 break; 1090 } 1091 1092 kfree_skb(skb); 1093 } 1094 1095 /* then other type-dependent work */ 1096 switch (sdata->vif.type) { 1097 case NL80211_IFTYPE_STATION: 1098 ieee80211_sta_work(sdata); 1099 break; 1100 case NL80211_IFTYPE_ADHOC: 1101 ieee80211_ibss_work(sdata); 1102 break; 1103 case NL80211_IFTYPE_MESH_POINT: 1104 if (!ieee80211_vif_is_mesh(&sdata->vif)) 1105 break; 1106 ieee80211_mesh_work(sdata); 1107 break; 1108 default: 1109 break; 1110 } 1111 } 1112 1113 1114 /* 1115 * Helper function to initialise an interface to a specific type. 1116 */ 1117 static void ieee80211_setup_sdata(struct ieee80211_sub_if_data *sdata, 1118 enum nl80211_iftype type) 1119 { 1120 /* clear type-dependent union */ 1121 memset(&sdata->u, 0, sizeof(sdata->u)); 1122 1123 /* and set some type-dependent values */ 1124 sdata->vif.type = type; 1125 sdata->vif.p2p = false; 1126 sdata->wdev.iftype = type; 1127 1128 sdata->control_port_protocol = cpu_to_be16(ETH_P_PAE); 1129 sdata->control_port_no_encrypt = false; 1130 1131 sdata->noack_map = 0; 1132 1133 /* only monitor/p2p-device differ */ 1134 if (sdata->dev) { 1135 sdata->dev->netdev_ops = &ieee80211_dataif_ops; 1136 sdata->dev->type = ARPHRD_ETHER; 1137 } 1138 1139 skb_queue_head_init(&sdata->skb_queue); 1140 INIT_WORK(&sdata->work, ieee80211_iface_work); 1141 1142 switch (type) { 1143 case NL80211_IFTYPE_P2P_GO: 1144 type = NL80211_IFTYPE_AP; 1145 sdata->vif.type = type; 1146 sdata->vif.p2p = true; 1147 /* fall through */ 1148 case NL80211_IFTYPE_AP: 1149 skb_queue_head_init(&sdata->u.ap.ps_bc_buf); 1150 INIT_LIST_HEAD(&sdata->u.ap.vlans); 1151 break; 1152 case NL80211_IFTYPE_P2P_CLIENT: 1153 type = NL80211_IFTYPE_STATION; 1154 sdata->vif.type = type; 1155 sdata->vif.p2p = true; 1156 /* fall through */ 1157 case NL80211_IFTYPE_STATION: 1158 ieee80211_sta_setup_sdata(sdata); 1159 break; 1160 case NL80211_IFTYPE_ADHOC: 1161 ieee80211_ibss_setup_sdata(sdata); 1162 break; 1163 case NL80211_IFTYPE_MESH_POINT: 1164 if (ieee80211_vif_is_mesh(&sdata->vif)) 1165 ieee80211_mesh_init_sdata(sdata); 1166 break; 1167 case NL80211_IFTYPE_MONITOR: 1168 sdata->dev->type = ARPHRD_IEEE80211_RADIOTAP; 1169 sdata->dev->netdev_ops = &ieee80211_monitorif_ops; 1170 sdata->u.mntr_flags = MONITOR_FLAG_CONTROL | 1171 MONITOR_FLAG_OTHER_BSS; 1172 break; 1173 case NL80211_IFTYPE_WDS: 1174 case NL80211_IFTYPE_AP_VLAN: 1175 case NL80211_IFTYPE_P2P_DEVICE: 1176 break; 1177 case NL80211_IFTYPE_UNSPECIFIED: 1178 case NUM_NL80211_IFTYPES: 1179 BUG(); 1180 break; 1181 } 1182 1183 ieee80211_debugfs_add_netdev(sdata); 1184 } 1185 1186 static int ieee80211_runtime_change_iftype(struct ieee80211_sub_if_data *sdata, 1187 enum nl80211_iftype type) 1188 { 1189 struct ieee80211_local *local = sdata->local; 1190 int ret, err; 1191 enum nl80211_iftype internal_type = type; 1192 bool p2p = false; 1193 1194 ASSERT_RTNL(); 1195 1196 if (!local->ops->change_interface) 1197 return -EBUSY; 1198 1199 switch (sdata->vif.type) { 1200 case NL80211_IFTYPE_AP: 1201 case NL80211_IFTYPE_STATION: 1202 case NL80211_IFTYPE_ADHOC: 1203 /* 1204 * Could maybe also all others here? 1205 * Just not sure how that interacts 1206 * with the RX/config path e.g. for 1207 * mesh. 1208 */ 1209 break; 1210 default: 1211 return -EBUSY; 1212 } 1213 1214 switch (type) { 1215 case NL80211_IFTYPE_AP: 1216 case NL80211_IFTYPE_STATION: 1217 case NL80211_IFTYPE_ADHOC: 1218 /* 1219 * Could probably support everything 1220 * but WDS here (WDS do_open can fail 1221 * under memory pressure, which this 1222 * code isn't prepared to handle). 1223 */ 1224 break; 1225 case NL80211_IFTYPE_P2P_CLIENT: 1226 p2p = true; 1227 internal_type = NL80211_IFTYPE_STATION; 1228 break; 1229 case NL80211_IFTYPE_P2P_GO: 1230 p2p = true; 1231 internal_type = NL80211_IFTYPE_AP; 1232 break; 1233 default: 1234 return -EBUSY; 1235 } 1236 1237 ret = ieee80211_check_concurrent_iface(sdata, internal_type); 1238 if (ret) 1239 return ret; 1240 1241 ieee80211_do_stop(sdata, false); 1242 1243 ieee80211_teardown_sdata(sdata); 1244 1245 ret = drv_change_interface(local, sdata, internal_type, p2p); 1246 if (ret) 1247 type = sdata->vif.type; 1248 1249 /* 1250 * Ignore return value here, there's not much we can do since 1251 * the driver changed the interface type internally already. 1252 * The warnings will hopefully make driver authors fix it :-) 1253 */ 1254 ieee80211_check_queues(sdata); 1255 1256 ieee80211_setup_sdata(sdata, type); 1257 1258 err = ieee80211_do_open(&sdata->wdev, false); 1259 WARN(err, "type change: do_open returned %d", err); 1260 1261 return ret; 1262 } 1263 1264 int ieee80211_if_change_type(struct ieee80211_sub_if_data *sdata, 1265 enum nl80211_iftype type) 1266 { 1267 int ret; 1268 1269 ASSERT_RTNL(); 1270 1271 if (type == ieee80211_vif_type_p2p(&sdata->vif)) 1272 return 0; 1273 1274 /* Setting ad-hoc mode on non-IBSS channel is not supported. */ 1275 if (sdata->local->oper_channel->flags & IEEE80211_CHAN_NO_IBSS && 1276 type == NL80211_IFTYPE_ADHOC) 1277 return -EOPNOTSUPP; 1278 1279 if (ieee80211_sdata_running(sdata)) { 1280 ret = ieee80211_runtime_change_iftype(sdata, type); 1281 if (ret) 1282 return ret; 1283 } else { 1284 /* Purge and reset type-dependent state. */ 1285 ieee80211_teardown_sdata(sdata); 1286 ieee80211_setup_sdata(sdata, type); 1287 } 1288 1289 /* reset some values that shouldn't be kept across type changes */ 1290 sdata->vif.bss_conf.basic_rates = 1291 ieee80211_mandatory_rates(sdata->local, 1292 sdata->local->oper_channel->band); 1293 sdata->drop_unencrypted = 0; 1294 if (type == NL80211_IFTYPE_STATION) 1295 sdata->u.mgd.use_4addr = false; 1296 1297 return 0; 1298 } 1299 1300 static void ieee80211_assign_perm_addr(struct ieee80211_local *local, 1301 u8 *perm_addr, enum nl80211_iftype type) 1302 { 1303 struct ieee80211_sub_if_data *sdata; 1304 u64 mask, start, addr, val, inc; 1305 u8 *m; 1306 u8 tmp_addr[ETH_ALEN]; 1307 int i; 1308 1309 /* default ... something at least */ 1310 memcpy(perm_addr, local->hw.wiphy->perm_addr, ETH_ALEN); 1311 1312 if (is_zero_ether_addr(local->hw.wiphy->addr_mask) && 1313 local->hw.wiphy->n_addresses <= 1) 1314 return; 1315 1316 mutex_lock(&local->iflist_mtx); 1317 1318 switch (type) { 1319 case NL80211_IFTYPE_MONITOR: 1320 /* doesn't matter */ 1321 break; 1322 case NL80211_IFTYPE_WDS: 1323 case NL80211_IFTYPE_AP_VLAN: 1324 /* match up with an AP interface */ 1325 list_for_each_entry(sdata, &local->interfaces, list) { 1326 if (sdata->vif.type != NL80211_IFTYPE_AP) 1327 continue; 1328 memcpy(perm_addr, sdata->vif.addr, ETH_ALEN); 1329 break; 1330 } 1331 /* keep default if no AP interface present */ 1332 break; 1333 case NL80211_IFTYPE_P2P_CLIENT: 1334 case NL80211_IFTYPE_P2P_GO: 1335 if (local->hw.flags & IEEE80211_HW_P2P_DEV_ADDR_FOR_INTF) { 1336 list_for_each_entry(sdata, &local->interfaces, list) { 1337 if (sdata->vif.type != NL80211_IFTYPE_P2P_DEVICE) 1338 continue; 1339 if (!ieee80211_sdata_running(sdata)) 1340 continue; 1341 memcpy(perm_addr, sdata->vif.addr, ETH_ALEN); 1342 goto out_unlock; 1343 } 1344 } 1345 /* otherwise fall through */ 1346 default: 1347 /* assign a new address if possible -- try n_addresses first */ 1348 for (i = 0; i < local->hw.wiphy->n_addresses; i++) { 1349 bool used = false; 1350 1351 list_for_each_entry(sdata, &local->interfaces, list) { 1352 if (memcmp(local->hw.wiphy->addresses[i].addr, 1353 sdata->vif.addr, ETH_ALEN) == 0) { 1354 used = true; 1355 break; 1356 } 1357 } 1358 1359 if (!used) { 1360 memcpy(perm_addr, 1361 local->hw.wiphy->addresses[i].addr, 1362 ETH_ALEN); 1363 break; 1364 } 1365 } 1366 1367 /* try mask if available */ 1368 if (is_zero_ether_addr(local->hw.wiphy->addr_mask)) 1369 break; 1370 1371 m = local->hw.wiphy->addr_mask; 1372 mask = ((u64)m[0] << 5*8) | ((u64)m[1] << 4*8) | 1373 ((u64)m[2] << 3*8) | ((u64)m[3] << 2*8) | 1374 ((u64)m[4] << 1*8) | ((u64)m[5] << 0*8); 1375 1376 if (__ffs64(mask) + hweight64(mask) != fls64(mask)) { 1377 /* not a contiguous mask ... not handled now! */ 1378 pr_info("not contiguous\n"); 1379 break; 1380 } 1381 1382 m = local->hw.wiphy->perm_addr; 1383 start = ((u64)m[0] << 5*8) | ((u64)m[1] << 4*8) | 1384 ((u64)m[2] << 3*8) | ((u64)m[3] << 2*8) | 1385 ((u64)m[4] << 1*8) | ((u64)m[5] << 0*8); 1386 1387 inc = 1ULL<<__ffs64(mask); 1388 val = (start & mask); 1389 addr = (start & ~mask) | (val & mask); 1390 do { 1391 bool used = false; 1392 1393 tmp_addr[5] = addr >> 0*8; 1394 tmp_addr[4] = addr >> 1*8; 1395 tmp_addr[3] = addr >> 2*8; 1396 tmp_addr[2] = addr >> 3*8; 1397 tmp_addr[1] = addr >> 4*8; 1398 tmp_addr[0] = addr >> 5*8; 1399 1400 val += inc; 1401 1402 list_for_each_entry(sdata, &local->interfaces, list) { 1403 if (memcmp(tmp_addr, sdata->vif.addr, 1404 ETH_ALEN) == 0) { 1405 used = true; 1406 break; 1407 } 1408 } 1409 1410 if (!used) { 1411 memcpy(perm_addr, tmp_addr, ETH_ALEN); 1412 break; 1413 } 1414 addr = (start & ~mask) | (val & mask); 1415 } while (addr != start); 1416 1417 break; 1418 } 1419 1420 out_unlock: 1421 mutex_unlock(&local->iflist_mtx); 1422 } 1423 1424 int ieee80211_if_add(struct ieee80211_local *local, const char *name, 1425 struct wireless_dev **new_wdev, enum nl80211_iftype type, 1426 struct vif_params *params) 1427 { 1428 struct net_device *ndev = NULL; 1429 struct ieee80211_sub_if_data *sdata = NULL; 1430 int ret, i; 1431 int txqs = 1; 1432 1433 ASSERT_RTNL(); 1434 1435 if (type == NL80211_IFTYPE_P2P_DEVICE) { 1436 struct wireless_dev *wdev; 1437 1438 sdata = kzalloc(sizeof(*sdata) + local->hw.vif_data_size, 1439 GFP_KERNEL); 1440 if (!sdata) 1441 return -ENOMEM; 1442 wdev = &sdata->wdev; 1443 1444 sdata->dev = NULL; 1445 strlcpy(sdata->name, name, IFNAMSIZ); 1446 ieee80211_assign_perm_addr(local, wdev->address, type); 1447 memcpy(sdata->vif.addr, wdev->address, ETH_ALEN); 1448 } else { 1449 if (local->hw.queues >= IEEE80211_NUM_ACS) 1450 txqs = IEEE80211_NUM_ACS; 1451 1452 ndev = alloc_netdev_mqs(sizeof(*sdata) + 1453 local->hw.vif_data_size, 1454 name, ieee80211_if_setup, txqs, 1); 1455 if (!ndev) 1456 return -ENOMEM; 1457 dev_net_set(ndev, wiphy_net(local->hw.wiphy)); 1458 1459 ndev->needed_headroom = local->tx_headroom + 1460 4*6 /* four MAC addresses */ 1461 + 2 + 2 + 2 + 2 /* ctl, dur, seq, qos */ 1462 + 6 /* mesh */ 1463 + 8 /* rfc1042/bridge tunnel */ 1464 - ETH_HLEN /* ethernet hard_header_len */ 1465 + IEEE80211_ENCRYPT_HEADROOM; 1466 ndev->needed_tailroom = IEEE80211_ENCRYPT_TAILROOM; 1467 1468 ret = dev_alloc_name(ndev, ndev->name); 1469 if (ret < 0) { 1470 free_netdev(ndev); 1471 return ret; 1472 } 1473 1474 ieee80211_assign_perm_addr(local, ndev->perm_addr, type); 1475 memcpy(ndev->dev_addr, ndev->perm_addr, ETH_ALEN); 1476 SET_NETDEV_DEV(ndev, wiphy_dev(local->hw.wiphy)); 1477 1478 /* don't use IEEE80211_DEV_TO_SUB_IF -- it checks too much */ 1479 sdata = netdev_priv(ndev); 1480 ndev->ieee80211_ptr = &sdata->wdev; 1481 memcpy(sdata->vif.addr, ndev->dev_addr, ETH_ALEN); 1482 memcpy(sdata->name, ndev->name, IFNAMSIZ); 1483 1484 sdata->dev = ndev; 1485 } 1486 1487 /* initialise type-independent data */ 1488 sdata->wdev.wiphy = local->hw.wiphy; 1489 sdata->local = local; 1490 #ifdef CONFIG_INET 1491 sdata->arp_filter_state = true; 1492 #endif 1493 1494 for (i = 0; i < IEEE80211_FRAGMENT_MAX; i++) 1495 skb_queue_head_init(&sdata->fragments[i].skb_list); 1496 1497 INIT_LIST_HEAD(&sdata->key_list); 1498 1499 for (i = 0; i < IEEE80211_NUM_BANDS; i++) { 1500 struct ieee80211_supported_band *sband; 1501 sband = local->hw.wiphy->bands[i]; 1502 sdata->rc_rateidx_mask[i] = 1503 sband ? (1 << sband->n_bitrates) - 1 : 0; 1504 if (sband) 1505 memcpy(sdata->rc_rateidx_mcs_mask[i], 1506 sband->ht_cap.mcs.rx_mask, 1507 sizeof(sdata->rc_rateidx_mcs_mask[i])); 1508 else 1509 memset(sdata->rc_rateidx_mcs_mask[i], 0, 1510 sizeof(sdata->rc_rateidx_mcs_mask[i])); 1511 } 1512 1513 ieee80211_set_default_queues(sdata); 1514 1515 /* setup type-dependent data */ 1516 ieee80211_setup_sdata(sdata, type); 1517 1518 if (ndev) { 1519 if (params) { 1520 ndev->ieee80211_ptr->use_4addr = params->use_4addr; 1521 if (type == NL80211_IFTYPE_STATION) 1522 sdata->u.mgd.use_4addr = params->use_4addr; 1523 } 1524 1525 ndev->features |= local->hw.netdev_features; 1526 1527 ret = register_netdevice(ndev); 1528 if (ret) { 1529 free_netdev(ndev); 1530 return ret; 1531 } 1532 } 1533 1534 mutex_lock(&local->iflist_mtx); 1535 list_add_tail_rcu(&sdata->list, &local->interfaces); 1536 mutex_unlock(&local->iflist_mtx); 1537 1538 if (new_wdev) 1539 *new_wdev = &sdata->wdev; 1540 1541 return 0; 1542 } 1543 1544 void ieee80211_if_remove(struct ieee80211_sub_if_data *sdata) 1545 { 1546 ASSERT_RTNL(); 1547 1548 mutex_lock(&sdata->local->iflist_mtx); 1549 list_del_rcu(&sdata->list); 1550 mutex_unlock(&sdata->local->iflist_mtx); 1551 1552 synchronize_rcu(); 1553 1554 if (sdata->dev) { 1555 unregister_netdevice(sdata->dev); 1556 } else { 1557 cfg80211_unregister_wdev(&sdata->wdev); 1558 kfree(sdata); 1559 } 1560 } 1561 1562 void ieee80211_sdata_stop(struct ieee80211_sub_if_data *sdata) 1563 { 1564 if (WARN_ON_ONCE(!test_bit(SDATA_STATE_RUNNING, &sdata->state))) 1565 return; 1566 ieee80211_do_stop(sdata, true); 1567 ieee80211_teardown_sdata(sdata); 1568 } 1569 1570 /* 1571 * Remove all interfaces, may only be called at hardware unregistration 1572 * time because it doesn't do RCU-safe list removals. 1573 */ 1574 void ieee80211_remove_interfaces(struct ieee80211_local *local) 1575 { 1576 struct ieee80211_sub_if_data *sdata, *tmp; 1577 LIST_HEAD(unreg_list); 1578 LIST_HEAD(wdev_list); 1579 1580 ASSERT_RTNL(); 1581 1582 mutex_lock(&local->iflist_mtx); 1583 list_for_each_entry_safe(sdata, tmp, &local->interfaces, list) { 1584 list_del(&sdata->list); 1585 1586 if (sdata->dev) 1587 unregister_netdevice_queue(sdata->dev, &unreg_list); 1588 else 1589 list_add(&sdata->list, &wdev_list); 1590 } 1591 mutex_unlock(&local->iflist_mtx); 1592 unregister_netdevice_many(&unreg_list); 1593 list_del(&unreg_list); 1594 1595 list_for_each_entry_safe(sdata, tmp, &wdev_list, list) { 1596 list_del(&sdata->list); 1597 cfg80211_unregister_wdev(&sdata->wdev); 1598 kfree(sdata); 1599 } 1600 } 1601 1602 static int netdev_notify(struct notifier_block *nb, 1603 unsigned long state, 1604 void *ndev) 1605 { 1606 struct net_device *dev = ndev; 1607 struct ieee80211_sub_if_data *sdata; 1608 1609 if (state != NETDEV_CHANGENAME) 1610 return 0; 1611 1612 if (!dev->ieee80211_ptr || !dev->ieee80211_ptr->wiphy) 1613 return 0; 1614 1615 if (dev->ieee80211_ptr->wiphy->privid != mac80211_wiphy_privid) 1616 return 0; 1617 1618 sdata = IEEE80211_DEV_TO_SUB_IF(dev); 1619 1620 memcpy(sdata->name, dev->name, IFNAMSIZ); 1621 1622 ieee80211_debugfs_rename_netdev(sdata); 1623 return 0; 1624 } 1625 1626 static struct notifier_block mac80211_netdev_notifier = { 1627 .notifier_call = netdev_notify, 1628 }; 1629 1630 int ieee80211_iface_init(void) 1631 { 1632 return register_netdevice_notifier(&mac80211_netdev_notifier); 1633 } 1634 1635 void ieee80211_iface_exit(void) 1636 { 1637 unregister_netdevice_notifier(&mac80211_netdev_notifier); 1638 } 1639