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