diff options
author | David S. Miller <davem@davemloft.net> | 2008-05-15 03:34:44 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-05-15 03:34:44 -0400 |
commit | 63fe46da9c380b3f2bbdf3765044649517cc717c (patch) | |
tree | 9478c1aca1d692b408955aea20c9cd9a37e589c0 /net/mac80211 | |
parent | 99dd1a2b8347ac2ae802300b7862f6f7bcf17139 (diff) | |
parent | 066b2118976e6e7cc50eed39e2747c75343a23c4 (diff) |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts:
drivers/net/wireless/iwlwifi/iwl-4965-rs.c
drivers/net/wireless/rt2x00/rt61pci.c
Diffstat (limited to 'net/mac80211')
-rw-r--r-- | net/mac80211/debugfs_key.c | 15 | ||||
-rw-r--r-- | net/mac80211/iface.c | 9 | ||||
-rw-r--r-- | net/mac80211/main.c | 7 | ||||
-rw-r--r-- | net/mac80211/mesh.c | 2 | ||||
-rw-r--r-- | net/mac80211/mesh_hwmp.c | 2 | ||||
-rw-r--r-- | net/mac80211/mesh_pathtbl.c | 17 | ||||
-rw-r--r-- | net/mac80211/mlme.c | 64 | ||||
-rw-r--r-- | net/mac80211/rc80211_pid_debugfs.c | 4 | ||||
-rw-r--r-- | net/mac80211/rx.c | 12 | ||||
-rw-r--r-- | net/mac80211/tx.c | 5 | ||||
-rw-r--r-- | net/mac80211/util.c | 10 | ||||
-rw-r--r-- | net/mac80211/wme.c | 3 |
12 files changed, 108 insertions, 42 deletions
diff --git a/net/mac80211/debugfs_key.c b/net/mac80211/debugfs_key.c index 879e7210458a..19efc3a6a932 100644 --- a/net/mac80211/debugfs_key.c +++ b/net/mac80211/debugfs_key.c | |||
@@ -255,14 +255,23 @@ void ieee80211_debugfs_key_remove(struct ieee80211_key *key) | |||
255 | void ieee80211_debugfs_key_add_default(struct ieee80211_sub_if_data *sdata) | 255 | void ieee80211_debugfs_key_add_default(struct ieee80211_sub_if_data *sdata) |
256 | { | 256 | { |
257 | char buf[50]; | 257 | char buf[50]; |
258 | struct ieee80211_key *key; | ||
258 | 259 | ||
259 | if (!sdata->debugfsdir) | 260 | if (!sdata->debugfsdir) |
260 | return; | 261 | return; |
261 | 262 | ||
262 | sprintf(buf, "../keys/%d", sdata->default_key->debugfs.cnt); | 263 | /* this is running under the key lock */ |
263 | sdata->debugfs.default_key = | 264 | |
264 | debugfs_create_symlink("default_key", sdata->debugfsdir, buf); | 265 | key = sdata->default_key; |
266 | if (key) { | ||
267 | sprintf(buf, "../keys/%d", key->debugfs.cnt); | ||
268 | sdata->debugfs.default_key = | ||
269 | debugfs_create_symlink("default_key", | ||
270 | sdata->debugfsdir, buf); | ||
271 | } else | ||
272 | ieee80211_debugfs_key_remove_default(sdata); | ||
265 | } | 273 | } |
274 | |||
266 | void ieee80211_debugfs_key_remove_default(struct ieee80211_sub_if_data *sdata) | 275 | void ieee80211_debugfs_key_remove_default(struct ieee80211_sub_if_data *sdata) |
267 | { | 276 | { |
268 | if (!sdata) | 277 | if (!sdata) |
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c index f41c7e0de622..4a8062f8b1cc 100644 --- a/net/mac80211/iface.c +++ b/net/mac80211/iface.c | |||
@@ -53,6 +53,15 @@ int ieee80211_if_add(struct net_device *dev, const char *name, | |||
53 | if (!ndev) | 53 | if (!ndev) |
54 | return -ENOMEM; | 54 | return -ENOMEM; |
55 | 55 | ||
56 | ndev->needed_headroom = local->tx_headroom + | ||
57 | 4*6 /* four MAC addresses */ | ||
58 | + 2 + 2 + 2 + 2 /* ctl, dur, seq, qos */ | ||
59 | + 6 /* mesh */ | ||
60 | + 8 /* rfc1042/bridge tunnel */ | ||
61 | - ETH_HLEN /* ethernet hard_header_len */ | ||
62 | + IEEE80211_ENCRYPT_HEADROOM; | ||
63 | ndev->needed_tailroom = IEEE80211_ENCRYPT_TAILROOM; | ||
64 | |||
56 | ret = dev_alloc_name(ndev, ndev->name); | 65 | ret = dev_alloc_name(ndev, ndev->name); |
57 | if (ret < 0) | 66 | if (ret < 0) |
58 | goto fail; | 67 | goto fail; |
diff --git a/net/mac80211/main.c b/net/mac80211/main.c index 55e76117da9e..eb347eca30b5 100644 --- a/net/mac80211/main.c +++ b/net/mac80211/main.c | |||
@@ -1771,6 +1771,7 @@ fail_wep: | |||
1771 | fail_rate: | 1771 | fail_rate: |
1772 | ieee80211_debugfs_remove_netdev(IEEE80211_DEV_TO_SUB_IF(local->mdev)); | 1772 | ieee80211_debugfs_remove_netdev(IEEE80211_DEV_TO_SUB_IF(local->mdev)); |
1773 | unregister_netdevice(local->mdev); | 1773 | unregister_netdevice(local->mdev); |
1774 | local->mdev = NULL; | ||
1774 | fail_dev: | 1775 | fail_dev: |
1775 | rtnl_unlock(); | 1776 | rtnl_unlock(); |
1776 | sta_info_stop(local); | 1777 | sta_info_stop(local); |
@@ -1778,8 +1779,10 @@ fail_sta_info: | |||
1778 | debugfs_hw_del(local); | 1779 | debugfs_hw_del(local); |
1779 | destroy_workqueue(local->hw.workqueue); | 1780 | destroy_workqueue(local->hw.workqueue); |
1780 | fail_workqueue: | 1781 | fail_workqueue: |
1781 | ieee80211_if_free(local->mdev); | 1782 | if (local->mdev != NULL) { |
1782 | local->mdev = NULL; | 1783 | ieee80211_if_free(local->mdev); |
1784 | local->mdev = NULL; | ||
1785 | } | ||
1783 | fail_mdev_alloc: | 1786 | fail_mdev_alloc: |
1784 | wiphy_unregister(local->hw.wiphy); | 1787 | wiphy_unregister(local->hw.wiphy); |
1785 | return result; | 1788 | return result; |
diff --git a/net/mac80211/mesh.c b/net/mac80211/mesh.c index f76bc26ae4d2..697ef67f96b6 100644 --- a/net/mac80211/mesh.c +++ b/net/mac80211/mesh.c | |||
@@ -397,7 +397,7 @@ int ieee80211_new_mesh_header(struct ieee80211s_hdr *meshhdr, | |||
397 | put_unaligned(cpu_to_le32(sdata->u.sta.mesh_seqnum), &meshhdr->seqnum); | 397 | put_unaligned(cpu_to_le32(sdata->u.sta.mesh_seqnum), &meshhdr->seqnum); |
398 | sdata->u.sta.mesh_seqnum++; | 398 | sdata->u.sta.mesh_seqnum++; |
399 | 399 | ||
400 | return 5; | 400 | return 6; |
401 | } | 401 | } |
402 | 402 | ||
403 | void ieee80211_mesh_init_sdata(struct ieee80211_sub_if_data *sdata) | 403 | void ieee80211_mesh_init_sdata(struct ieee80211_sub_if_data *sdata) |
diff --git a/net/mac80211/mesh_hwmp.c b/net/mac80211/mesh_hwmp.c index 3df809222d1c..af0cd1e3e213 100644 --- a/net/mac80211/mesh_hwmp.c +++ b/net/mac80211/mesh_hwmp.c | |||
@@ -120,7 +120,7 @@ static int mesh_path_sel_frame_tx(enum mpath_frame_type action, u8 flags, | |||
120 | *pos++ = WLAN_EID_PREP; | 120 | *pos++ = WLAN_EID_PREP; |
121 | break; | 121 | break; |
122 | default: | 122 | default: |
123 | kfree(skb); | 123 | kfree_skb(skb); |
124 | return -ENOTSUPP; | 124 | return -ENOTSUPP; |
125 | break; | 125 | break; |
126 | } | 126 | } |
diff --git a/net/mac80211/mesh_pathtbl.c b/net/mac80211/mesh_pathtbl.c index 5845dc21ce85..99c2d360888e 100644 --- a/net/mac80211/mesh_pathtbl.c +++ b/net/mac80211/mesh_pathtbl.c | |||
@@ -158,19 +158,25 @@ int mesh_path_add(u8 *dst, struct net_device *dev) | |||
158 | if (atomic_add_unless(&sdata->u.sta.mpaths, 1, MESH_MAX_MPATHS) == 0) | 158 | if (atomic_add_unless(&sdata->u.sta.mpaths, 1, MESH_MAX_MPATHS) == 0) |
159 | return -ENOSPC; | 159 | return -ENOSPC; |
160 | 160 | ||
161 | read_lock(&pathtbl_resize_lock); | ||
162 | |||
163 | new_mpath = kzalloc(sizeof(struct mesh_path), GFP_KERNEL); | 161 | new_mpath = kzalloc(sizeof(struct mesh_path), GFP_KERNEL); |
164 | if (!new_mpath) { | 162 | if (!new_mpath) { |
165 | atomic_dec(&sdata->u.sta.mpaths); | 163 | atomic_dec(&sdata->u.sta.mpaths); |
166 | err = -ENOMEM; | 164 | err = -ENOMEM; |
167 | goto endadd2; | 165 | goto endadd2; |
168 | } | 166 | } |
167 | new_node = kmalloc(sizeof(struct mpath_node), GFP_KERNEL); | ||
168 | if (!new_node) { | ||
169 | kfree(new_mpath); | ||
170 | atomic_dec(&sdata->u.sta.mpaths); | ||
171 | err = -ENOMEM; | ||
172 | goto endadd2; | ||
173 | } | ||
174 | |||
175 | read_lock(&pathtbl_resize_lock); | ||
169 | memcpy(new_mpath->dst, dst, ETH_ALEN); | 176 | memcpy(new_mpath->dst, dst, ETH_ALEN); |
170 | new_mpath->dev = dev; | 177 | new_mpath->dev = dev; |
171 | new_mpath->flags = 0; | 178 | new_mpath->flags = 0; |
172 | skb_queue_head_init(&new_mpath->frame_queue); | 179 | skb_queue_head_init(&new_mpath->frame_queue); |
173 | new_node = kmalloc(sizeof(struct mpath_node), GFP_KERNEL); | ||
174 | new_node->mpath = new_mpath; | 180 | new_node->mpath = new_mpath; |
175 | new_mpath->timer.data = (unsigned long) new_mpath; | 181 | new_mpath->timer.data = (unsigned long) new_mpath; |
176 | new_mpath->timer.function = mesh_path_timer; | 182 | new_mpath->timer.function = mesh_path_timer; |
@@ -202,7 +208,6 @@ int mesh_path_add(u8 *dst, struct net_device *dev) | |||
202 | 208 | ||
203 | endadd: | 209 | endadd: |
204 | spin_unlock(&mesh_paths->hashwlock[hash_idx]); | 210 | spin_unlock(&mesh_paths->hashwlock[hash_idx]); |
205 | endadd2: | ||
206 | read_unlock(&pathtbl_resize_lock); | 211 | read_unlock(&pathtbl_resize_lock); |
207 | if (!err && grow) { | 212 | if (!err && grow) { |
208 | struct mesh_table *oldtbl, *newtbl; | 213 | struct mesh_table *oldtbl, *newtbl; |
@@ -215,10 +220,12 @@ endadd2: | |||
215 | return -ENOMEM; | 220 | return -ENOMEM; |
216 | } | 221 | } |
217 | rcu_assign_pointer(mesh_paths, newtbl); | 222 | rcu_assign_pointer(mesh_paths, newtbl); |
223 | write_unlock(&pathtbl_resize_lock); | ||
224 | |||
218 | synchronize_rcu(); | 225 | synchronize_rcu(); |
219 | mesh_table_free(oldtbl, false); | 226 | mesh_table_free(oldtbl, false); |
220 | write_unlock(&pathtbl_resize_lock); | ||
221 | } | 227 | } |
228 | endadd2: | ||
222 | return err; | 229 | return err; |
223 | } | 230 | } |
224 | 231 | ||
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c index 55b85ae5bc11..5d7719f44bea 100644 --- a/net/mac80211/mlme.c +++ b/net/mac80211/mlme.c | |||
@@ -651,6 +651,26 @@ static void ieee80211_authenticate(struct net_device *dev, | |||
651 | mod_timer(&ifsta->timer, jiffies + IEEE80211_AUTH_TIMEOUT); | 651 | mod_timer(&ifsta->timer, jiffies + IEEE80211_AUTH_TIMEOUT); |
652 | } | 652 | } |
653 | 653 | ||
654 | static int ieee80211_compatible_rates(struct ieee80211_sta_bss *bss, | ||
655 | struct ieee80211_supported_band *sband, | ||
656 | u64 *rates) | ||
657 | { | ||
658 | int i, j, count; | ||
659 | *rates = 0; | ||
660 | count = 0; | ||
661 | for (i = 0; i < bss->supp_rates_len; i++) { | ||
662 | int rate = (bss->supp_rates[i] & 0x7F) * 5; | ||
663 | |||
664 | for (j = 0; j < sband->n_bitrates; j++) | ||
665 | if (sband->bitrates[j].bitrate == rate) { | ||
666 | *rates |= BIT(j); | ||
667 | count++; | ||
668 | break; | ||
669 | } | ||
670 | } | ||
671 | |||
672 | return count; | ||
673 | } | ||
654 | 674 | ||
655 | static void ieee80211_send_assoc(struct net_device *dev, | 675 | static void ieee80211_send_assoc(struct net_device *dev, |
656 | struct ieee80211_if_sta *ifsta) | 676 | struct ieee80211_if_sta *ifsta) |
@@ -659,11 +679,12 @@ static void ieee80211_send_assoc(struct net_device *dev, | |||
659 | struct sk_buff *skb; | 679 | struct sk_buff *skb; |
660 | struct ieee80211_mgmt *mgmt; | 680 | struct ieee80211_mgmt *mgmt; |
661 | u8 *pos, *ies; | 681 | u8 *pos, *ies; |
662 | int i, len; | 682 | int i, len, count, rates_len, supp_rates_len; |
663 | u16 capab; | 683 | u16 capab; |
664 | struct ieee80211_sta_bss *bss; | 684 | struct ieee80211_sta_bss *bss; |
665 | int wmm = 0; | 685 | int wmm = 0; |
666 | struct ieee80211_supported_band *sband; | 686 | struct ieee80211_supported_band *sband; |
687 | u64 rates = 0; | ||
667 | 688 | ||
668 | skb = dev_alloc_skb(local->hw.extra_tx_headroom + | 689 | skb = dev_alloc_skb(local->hw.extra_tx_headroom + |
669 | sizeof(*mgmt) + 200 + ifsta->extra_ie_len + | 690 | sizeof(*mgmt) + 200 + ifsta->extra_ie_len + |
@@ -725,24 +746,39 @@ static void ieee80211_send_assoc(struct net_device *dev, | |||
725 | *pos++ = ifsta->ssid_len; | 746 | *pos++ = ifsta->ssid_len; |
726 | memcpy(pos, ifsta->ssid, ifsta->ssid_len); | 747 | memcpy(pos, ifsta->ssid, ifsta->ssid_len); |
727 | 748 | ||
749 | /* all supported rates should be added here but some APs | ||
750 | * (e.g. D-Link DAP 1353 in b-only mode) don't like that | ||
751 | * Therefore only add rates the AP supports */ | ||
752 | rates_len = ieee80211_compatible_rates(bss, sband, &rates); | ||
753 | supp_rates_len = rates_len; | ||
754 | if (supp_rates_len > 8) | ||
755 | supp_rates_len = 8; | ||
756 | |||
728 | len = sband->n_bitrates; | 757 | len = sband->n_bitrates; |
729 | if (len > 8) | 758 | pos = skb_put(skb, supp_rates_len + 2); |
730 | len = 8; | ||
731 | pos = skb_put(skb, len + 2); | ||
732 | *pos++ = WLAN_EID_SUPP_RATES; | 759 | *pos++ = WLAN_EID_SUPP_RATES; |
733 | *pos++ = len; | 760 | *pos++ = supp_rates_len; |
734 | for (i = 0; i < len; i++) { | ||
735 | int rate = sband->bitrates[i].bitrate; | ||
736 | *pos++ = (u8) (rate / 5); | ||
737 | } | ||
738 | 761 | ||
739 | if (sband->n_bitrates > len) { | 762 | count = 0; |
740 | pos = skb_put(skb, sband->n_bitrates - len + 2); | 763 | for (i = 0; i < sband->n_bitrates; i++) { |
741 | *pos++ = WLAN_EID_EXT_SUPP_RATES; | 764 | if (BIT(i) & rates) { |
742 | *pos++ = sband->n_bitrates - len; | ||
743 | for (i = len; i < sband->n_bitrates; i++) { | ||
744 | int rate = sband->bitrates[i].bitrate; | 765 | int rate = sband->bitrates[i].bitrate; |
745 | *pos++ = (u8) (rate / 5); | 766 | *pos++ = (u8) (rate / 5); |
767 | if (++count == 8) | ||
768 | break; | ||
769 | } | ||
770 | } | ||
771 | |||
772 | if (count == 8) { | ||
773 | pos = skb_put(skb, rates_len - count + 2); | ||
774 | *pos++ = WLAN_EID_EXT_SUPP_RATES; | ||
775 | *pos++ = rates_len - count; | ||
776 | |||
777 | for (i++; i < sband->n_bitrates; i++) { | ||
778 | if (BIT(i) & rates) { | ||
779 | int rate = sband->bitrates[i].bitrate; | ||
780 | *pos++ = (u8) (rate / 5); | ||
781 | } | ||
746 | } | 782 | } |
747 | } | 783 | } |
748 | 784 | ||
diff --git a/net/mac80211/rc80211_pid_debugfs.c b/net/mac80211/rc80211_pid_debugfs.c index ae75d4178739..ff5c380f3c13 100644 --- a/net/mac80211/rc80211_pid_debugfs.c +++ b/net/mac80211/rc80211_pid_debugfs.c | |||
@@ -85,7 +85,7 @@ static int rate_control_pid_events_open(struct inode *inode, struct file *file) | |||
85 | struct rc_pid_sta_info *sinfo = inode->i_private; | 85 | struct rc_pid_sta_info *sinfo = inode->i_private; |
86 | struct rc_pid_event_buffer *events = &sinfo->events; | 86 | struct rc_pid_event_buffer *events = &sinfo->events; |
87 | struct rc_pid_events_file_info *file_info; | 87 | struct rc_pid_events_file_info *file_info; |
88 | unsigned int status; | 88 | unsigned long status; |
89 | 89 | ||
90 | /* Allocate a state struct */ | 90 | /* Allocate a state struct */ |
91 | file_info = kmalloc(sizeof(*file_info), GFP_KERNEL); | 91 | file_info = kmalloc(sizeof(*file_info), GFP_KERNEL); |
@@ -135,7 +135,7 @@ static ssize_t rate_control_pid_events_read(struct file *file, char __user *buf, | |||
135 | char pb[RC_PID_PRINT_BUF_SIZE]; | 135 | char pb[RC_PID_PRINT_BUF_SIZE]; |
136 | int ret; | 136 | int ret; |
137 | int p; | 137 | int p; |
138 | unsigned int status; | 138 | unsigned long status; |
139 | 139 | ||
140 | /* Check if there is something to read. */ | 140 | /* Check if there is something to read. */ |
141 | if (events->next_entry == file_info->next_entry) { | 141 | if (events->next_entry == file_info->next_entry) { |
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c index e8b89c89e875..9b5a3cbec265 100644 --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c | |||
@@ -1300,11 +1300,11 @@ ieee80211_deliver_skb(struct ieee80211_rx_data *rx) | |||
1300 | if (is_multicast_ether_addr(skb->data)) { | 1300 | if (is_multicast_ether_addr(skb->data)) { |
1301 | if (*mesh_ttl > 0) { | 1301 | if (*mesh_ttl > 0) { |
1302 | xmit_skb = skb_copy(skb, GFP_ATOMIC); | 1302 | xmit_skb = skb_copy(skb, GFP_ATOMIC); |
1303 | if (!xmit_skb && net_ratelimit()) | 1303 | if (xmit_skb) |
1304 | xmit_skb->pkt_type = PACKET_OTHERHOST; | ||
1305 | else if (net_ratelimit()) | ||
1304 | printk(KERN_DEBUG "%s: failed to clone " | 1306 | printk(KERN_DEBUG "%s: failed to clone " |
1305 | "multicast frame\n", dev->name); | 1307 | "multicast frame\n", dev->name); |
1306 | else | ||
1307 | xmit_skb->pkt_type = PACKET_OTHERHOST; | ||
1308 | } else | 1308 | } else |
1309 | IEEE80211_IFSTA_MESH_CTR_INC(&sdata->u.sta, | 1309 | IEEE80211_IFSTA_MESH_CTR_INC(&sdata->u.sta, |
1310 | dropped_frames_ttl); | 1310 | dropped_frames_ttl); |
@@ -1390,7 +1390,7 @@ ieee80211_rx_h_amsdu(struct ieee80211_rx_data *rx) | |||
1390 | padding = ((4 - subframe_len) & 0x3); | 1390 | padding = ((4 - subframe_len) & 0x3); |
1391 | /* the last MSDU has no padding */ | 1391 | /* the last MSDU has no padding */ |
1392 | if (subframe_len > remaining) { | 1392 | if (subframe_len > remaining) { |
1393 | printk(KERN_DEBUG "%s: wrong buffer size", dev->name); | 1393 | printk(KERN_DEBUG "%s: wrong buffer size\n", dev->name); |
1394 | return RX_DROP_UNUSABLE; | 1394 | return RX_DROP_UNUSABLE; |
1395 | } | 1395 | } |
1396 | 1396 | ||
@@ -1413,7 +1413,7 @@ ieee80211_rx_h_amsdu(struct ieee80211_rx_data *rx) | |||
1413 | eth = (struct ethhdr *) skb_pull(skb, ntohs(len) + | 1413 | eth = (struct ethhdr *) skb_pull(skb, ntohs(len) + |
1414 | padding); | 1414 | padding); |
1415 | if (!eth) { | 1415 | if (!eth) { |
1416 | printk(KERN_DEBUG "%s: wrong buffer size ", | 1416 | printk(KERN_DEBUG "%s: wrong buffer size\n", |
1417 | dev->name); | 1417 | dev->name); |
1418 | dev_kfree_skb(frame); | 1418 | dev_kfree_skb(frame); |
1419 | return RX_DROP_UNUSABLE; | 1419 | return RX_DROP_UNUSABLE; |
@@ -1947,7 +1947,7 @@ static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw, | |||
1947 | if (!skb_new) { | 1947 | if (!skb_new) { |
1948 | if (net_ratelimit()) | 1948 | if (net_ratelimit()) |
1949 | printk(KERN_DEBUG "%s: failed to copy " | 1949 | printk(KERN_DEBUG "%s: failed to copy " |
1950 | "multicast frame for %s", | 1950 | "multicast frame for %s\n", |
1951 | wiphy_name(local->hw.wiphy), | 1951 | wiphy_name(local->hw.wiphy), |
1952 | prev->dev->name); | 1952 | prev->dev->name); |
1953 | continue; | 1953 | continue; |
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c index f35eaea98e73..1d7dd54aacef 100644 --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c | |||
@@ -1562,13 +1562,13 @@ int ieee80211_subif_start_xmit(struct sk_buff *skb, | |||
1562 | * be cloned. This could happen, e.g., with Linux bridge code passing | 1562 | * be cloned. This could happen, e.g., with Linux bridge code passing |
1563 | * us broadcast frames. */ | 1563 | * us broadcast frames. */ |
1564 | 1564 | ||
1565 | if (head_need > 0 || skb_cloned(skb)) { | 1565 | if (head_need > 0 || skb_header_cloned(skb)) { |
1566 | #if 0 | 1566 | #if 0 |
1567 | printk(KERN_DEBUG "%s: need to reallocate buffer for %d bytes " | 1567 | printk(KERN_DEBUG "%s: need to reallocate buffer for %d bytes " |
1568 | "of headroom\n", dev->name, head_need); | 1568 | "of headroom\n", dev->name, head_need); |
1569 | #endif | 1569 | #endif |
1570 | 1570 | ||
1571 | if (skb_cloned(skb)) | 1571 | if (skb_header_cloned(skb)) |
1572 | I802_DEBUG_INC(local->tx_expand_skb_head_cloned); | 1572 | I802_DEBUG_INC(local->tx_expand_skb_head_cloned); |
1573 | else | 1573 | else |
1574 | I802_DEBUG_INC(local->tx_expand_skb_head); | 1574 | I802_DEBUG_INC(local->tx_expand_skb_head); |
@@ -1898,6 +1898,7 @@ struct sk_buff *ieee80211_beacon_get(struct ieee80211_hw *hw, | |||
1898 | control->flags |= IEEE80211_TXCTL_SHORT_PREAMBLE; | 1898 | control->flags |= IEEE80211_TXCTL_SHORT_PREAMBLE; |
1899 | control->antenna_sel_tx = local->hw.conf.antenna_sel_tx; | 1899 | control->antenna_sel_tx = local->hw.conf.antenna_sel_tx; |
1900 | control->flags |= IEEE80211_TXCTL_NO_ACK; | 1900 | control->flags |= IEEE80211_TXCTL_NO_ACK; |
1901 | control->flags |= IEEE80211_TXCTL_DO_NOT_ENCRYPT; | ||
1901 | control->retry_limit = 1; | 1902 | control->retry_limit = 1; |
1902 | control->flags |= IEEE80211_TXCTL_CLEAR_PS_FILT; | 1903 | control->flags |= IEEE80211_TXCTL_CLEAR_PS_FILT; |
1903 | } | 1904 | } |
diff --git a/net/mac80211/util.c b/net/mac80211/util.c index cc9f715c7bfc..24a465c4df09 100644 --- a/net/mac80211/util.c +++ b/net/mac80211/util.c | |||
@@ -153,15 +153,15 @@ int ieee80211_get_mesh_hdrlen(struct ieee80211s_hdr *meshhdr) | |||
153 | /* 7.1.3.5a.2 */ | 153 | /* 7.1.3.5a.2 */ |
154 | switch (ae) { | 154 | switch (ae) { |
155 | case 0: | 155 | case 0: |
156 | return 5; | 156 | return 6; |
157 | case 1: | 157 | case 1: |
158 | return 11; | 158 | return 12; |
159 | case 2: | 159 | case 2: |
160 | return 17; | 160 | return 18; |
161 | case 3: | 161 | case 3: |
162 | return 23; | 162 | return 24; |
163 | default: | 163 | default: |
164 | return 5; | 164 | return 6; |
165 | } | 165 | } |
166 | } | 166 | } |
167 | 167 | ||
diff --git a/net/mac80211/wme.c b/net/mac80211/wme.c index 8ffff27fe000..c87baf4ce979 100644 --- a/net/mac80211/wme.c +++ b/net/mac80211/wme.c | |||
@@ -379,7 +379,8 @@ static int wme_qdiscop_init(struct Qdisc *qd, struct nlattr *opt) | |||
379 | qd->handle); | 379 | qd->handle); |
380 | if (!q->queues[i]) { | 380 | if (!q->queues[i]) { |
381 | q->queues[i] = &noop_qdisc; | 381 | q->queues[i] = &noop_qdisc; |
382 | printk(KERN_ERR "%s child qdisc %i creation failed", dev->name, i); | 382 | printk(KERN_ERR "%s child qdisc %i creation failed\n", |
383 | dev->name, i); | ||
383 | } | 384 | } |
384 | } | 385 | } |
385 | 386 | ||