diff options
| author | Ingo Molnar <mingo@elte.hu> | 2008-06-25 06:32:01 -0400 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2008-06-25 06:32:01 -0400 |
| commit | da7878d75b8520c9ae00d27dfbbce546a7bfdfbb (patch) | |
| tree | 547fd497a80818a60ac36831377d5df97868173c /net/mac80211/util.c | |
| parent | 0e50a4c6ab94ffe7e5515b86b5df9e5abc8c6b13 (diff) | |
| parent | 543cf4cb3fe6f6cae3651ba918b9c56200b257d0 (diff) | |
Merge branch 'linus' into x86/pebs
Diffstat (limited to 'net/mac80211/util.c')
| -rw-r--r-- | net/mac80211/util.c | 41 |
1 files changed, 38 insertions, 3 deletions
diff --git a/net/mac80211/util.c b/net/mac80211/util.c index 24a465c4df09..4e97b266f907 100644 --- a/net/mac80211/util.c +++ b/net/mac80211/util.c | |||
| @@ -34,11 +34,11 @@ void *mac80211_wiphy_privid = &mac80211_wiphy_privid; | |||
| 34 | 34 | ||
| 35 | /* See IEEE 802.1H for LLC/SNAP encapsulation/decapsulation */ | 35 | /* See IEEE 802.1H for LLC/SNAP encapsulation/decapsulation */ |
| 36 | /* Ethernet-II snap header (RFC1042 for most EtherTypes) */ | 36 | /* Ethernet-II snap header (RFC1042 for most EtherTypes) */ |
| 37 | const unsigned char rfc1042_header[] = | 37 | const unsigned char rfc1042_header[] __aligned(2) = |
| 38 | { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00 }; | 38 | { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00 }; |
| 39 | 39 | ||
| 40 | /* Bridge-Tunnel header (for EtherTypes ETH_P_AARP and ETH_P_IPX) */ | 40 | /* Bridge-Tunnel header (for EtherTypes ETH_P_AARP and ETH_P_IPX) */ |
| 41 | const unsigned char bridge_tunnel_header[] = | 41 | const unsigned char bridge_tunnel_header[] __aligned(2) = |
| 42 | { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0xf8 }; | 42 | { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0xf8 }; |
| 43 | 43 | ||
| 44 | 44 | ||
| @@ -389,6 +389,41 @@ void ieee80211_iterate_active_interfaces( | |||
| 389 | struct ieee80211_local *local = hw_to_local(hw); | 389 | struct ieee80211_local *local = hw_to_local(hw); |
| 390 | struct ieee80211_sub_if_data *sdata; | 390 | struct ieee80211_sub_if_data *sdata; |
| 391 | 391 | ||
| 392 | rtnl_lock(); | ||
| 393 | |||
| 394 | list_for_each_entry(sdata, &local->interfaces, list) { | ||
| 395 | switch (sdata->vif.type) { | ||
| 396 | case IEEE80211_IF_TYPE_INVALID: | ||
| 397 | case IEEE80211_IF_TYPE_MNTR: | ||
| 398 | case IEEE80211_IF_TYPE_VLAN: | ||
| 399 | continue; | ||
| 400 | case IEEE80211_IF_TYPE_AP: | ||
| 401 | case IEEE80211_IF_TYPE_STA: | ||
| 402 | case IEEE80211_IF_TYPE_IBSS: | ||
| 403 | case IEEE80211_IF_TYPE_WDS: | ||
| 404 | case IEEE80211_IF_TYPE_MESH_POINT: | ||
| 405 | break; | ||
| 406 | } | ||
| 407 | if (sdata->dev == local->mdev) | ||
| 408 | continue; | ||
| 409 | if (netif_running(sdata->dev)) | ||
| 410 | iterator(data, sdata->dev->dev_addr, | ||
| 411 | &sdata->vif); | ||
| 412 | } | ||
| 413 | |||
| 414 | rtnl_unlock(); | ||
| 415 | } | ||
| 416 | EXPORT_SYMBOL_GPL(ieee80211_iterate_active_interfaces); | ||
| 417 | |||
| 418 | void ieee80211_iterate_active_interfaces_atomic( | ||
| 419 | struct ieee80211_hw *hw, | ||
| 420 | void (*iterator)(void *data, u8 *mac, | ||
| 421 | struct ieee80211_vif *vif), | ||
| 422 | void *data) | ||
| 423 | { | ||
| 424 | struct ieee80211_local *local = hw_to_local(hw); | ||
| 425 | struct ieee80211_sub_if_data *sdata; | ||
| 426 | |||
| 392 | rcu_read_lock(); | 427 | rcu_read_lock(); |
| 393 | 428 | ||
| 394 | list_for_each_entry_rcu(sdata, &local->interfaces, list) { | 429 | list_for_each_entry_rcu(sdata, &local->interfaces, list) { |
| @@ -413,4 +448,4 @@ void ieee80211_iterate_active_interfaces( | |||
| 413 | 448 | ||
| 414 | rcu_read_unlock(); | 449 | rcu_read_unlock(); |
| 415 | } | 450 | } |
| 416 | EXPORT_SYMBOL_GPL(ieee80211_iterate_active_interfaces); | 451 | EXPORT_SYMBOL_GPL(ieee80211_iterate_active_interfaces_atomic); |
