diff options
author | John W. Linville <linville@tuxdriver.com> | 2010-01-19 15:58:41 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2010-01-19 15:58:41 -0500 |
commit | 031cf0e94c9c8302a4592707939d6c2039f17f28 (patch) | |
tree | 02f3f0d3f89f03217bdb83530af30a95c9ab6191 /net | |
parent | 730dd70549e0ec755dd55615ba5cfc38a482a947 (diff) | |
parent | ad580db50ee8dccd069ffcd76d6f70fa6d4a62a8 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6
Diffstat (limited to 'net')
-rw-r--r-- | net/mac80211/cfg.c | 3 | ||||
-rw-r--r-- | net/mac80211/iface.c | 10 | ||||
-rw-r--r-- | net/mac80211/mlme.c | 4 | ||||
-rw-r--r-- | net/mac80211/rc80211_pid_algo.c | 2 | ||||
-rw-r--r-- | net/mac80211/rx.c | 4 | ||||
-rw-r--r-- | net/wireless/core.c | 4 | ||||
-rw-r--r-- | net/wireless/sme.c | 1 |
7 files changed, 21 insertions, 7 deletions
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c index b0102c538b30..facf233843e0 100644 --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c | |||
@@ -1389,6 +1389,9 @@ static int ieee80211_set_power_mgmt(struct wiphy *wiphy, struct net_device *dev, | |||
1389 | struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr); | 1389 | struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr); |
1390 | struct ieee80211_conf *conf = &local->hw.conf; | 1390 | struct ieee80211_conf *conf = &local->hw.conf; |
1391 | 1391 | ||
1392 | if (sdata->vif.type != NL80211_IFTYPE_STATION) | ||
1393 | return -EOPNOTSUPP; | ||
1394 | |||
1392 | if (!(local->hw.flags & IEEE80211_HW_SUPPORTS_PS)) | 1395 | if (!(local->hw.flags & IEEE80211_HW_SUPPORTS_PS)) |
1393 | return -EOPNOTSUPP; | 1396 | return -EOPNOTSUPP; |
1394 | 1397 | ||
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c index fe140bf033f9..edf21cebeee8 100644 --- a/net/mac80211/iface.c +++ b/net/mac80211/iface.c | |||
@@ -684,21 +684,25 @@ static u16 ieee80211_monitor_select_queue(struct net_device *dev, | |||
684 | struct ieee80211_local *local = sdata->local; | 684 | struct ieee80211_local *local = sdata->local; |
685 | struct ieee80211_hdr *hdr; | 685 | struct ieee80211_hdr *hdr; |
686 | struct ieee80211_radiotap_header *rtap = (void *)skb->data; | 686 | struct ieee80211_radiotap_header *rtap = (void *)skb->data; |
687 | u8 *p; | ||
687 | 688 | ||
688 | if (local->hw.queues < 4) | 689 | if (local->hw.queues < 4) |
689 | return 0; | 690 | return 0; |
690 | 691 | ||
691 | if (skb->len < 4 || | 692 | if (skb->len < 4 || |
692 | skb->len < rtap->it_len + 2 /* frame control */) | 693 | skb->len < le16_to_cpu(rtap->it_len) + 2 /* frame control */) |
693 | return 0; /* doesn't matter, frame will be dropped */ | 694 | return 0; /* doesn't matter, frame will be dropped */ |
694 | 695 | ||
695 | hdr = (void *)((u8 *)skb->data + rtap->it_len); | 696 | hdr = (void *)((u8 *)skb->data + le16_to_cpu(rtap->it_len)); |
696 | 697 | ||
697 | if (!ieee80211_is_data(hdr->frame_control)) { | 698 | if (!ieee80211_is_data_qos(hdr->frame_control)) { |
698 | skb->priority = 7; | 699 | skb->priority = 7; |
699 | return ieee802_1d_to_ac[skb->priority]; | 700 | return ieee802_1d_to_ac[skb->priority]; |
700 | } | 701 | } |
701 | 702 | ||
703 | p = ieee80211_get_qos_ctl(hdr); | ||
704 | skb->priority = *p & IEEE80211_QOS_CTL_TAG1D_MASK; | ||
705 | |||
702 | return ieee80211_downgrade_queue(local, skb); | 706 | return ieee80211_downgrade_queue(local, skb); |
703 | } | 707 | } |
704 | 708 | ||
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c index a82564e73d91..1e1d16c55ee5 100644 --- a/net/mac80211/mlme.c +++ b/net/mac80211/mlme.c | |||
@@ -1478,7 +1478,9 @@ static void ieee80211_sta_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata, | |||
1478 | rma = ieee80211_rx_mgmt_disassoc(sdata, mgmt, skb->len); | 1478 | rma = ieee80211_rx_mgmt_disassoc(sdata, mgmt, skb->len); |
1479 | break; | 1479 | break; |
1480 | case IEEE80211_STYPE_ACTION: | 1480 | case IEEE80211_STYPE_ACTION: |
1481 | /* XXX: differentiate, can only happen for CSA now! */ | 1481 | if (mgmt->u.action.category != WLAN_CATEGORY_SPECTRUM_MGMT) |
1482 | break; | ||
1483 | |||
1482 | ieee80211_sta_process_chanswitch(sdata, | 1484 | ieee80211_sta_process_chanswitch(sdata, |
1483 | &mgmt->u.action.u.chan_switch.sw_elem, | 1485 | &mgmt->u.action.u.chan_switch.sw_elem, |
1484 | (void *)ifmgd->associated->priv); | 1486 | (void *)ifmgd->associated->priv); |
diff --git a/net/mac80211/rc80211_pid_algo.c b/net/mac80211/rc80211_pid_algo.c index 699d3ed869c4..29bc4c516238 100644 --- a/net/mac80211/rc80211_pid_algo.c +++ b/net/mac80211/rc80211_pid_algo.c | |||
@@ -190,7 +190,7 @@ static void rate_control_pid_sample(struct rc_pid_info *pinfo, | |||
190 | rate_control_pid_normalize(pinfo, sband->n_bitrates); | 190 | rate_control_pid_normalize(pinfo, sband->n_bitrates); |
191 | 191 | ||
192 | /* Compute the proportional, integral and derivative errors. */ | 192 | /* Compute the proportional, integral and derivative errors. */ |
193 | err_prop = (pinfo->target << RC_PID_ARITH_SHIFT) - pf; | 193 | err_prop = (pinfo->target - pf) << RC_PID_ARITH_SHIFT; |
194 | 194 | ||
195 | err_avg = spinfo->err_avg_sc >> pinfo->smoothing_shift; | 195 | err_avg = spinfo->err_avg_sc >> pinfo->smoothing_shift; |
196 | spinfo->err_avg_sc = spinfo->err_avg_sc - err_avg + err_prop; | 196 | spinfo->err_avg_sc = spinfo->err_avg_sc - err_avg + err_prop; |
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c index efa6d3689c5e..a8e15b84c05b 100644 --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c | |||
@@ -1946,6 +1946,10 @@ ieee80211_rx_h_action(struct ieee80211_rx_data *rx) | |||
1946 | } | 1946 | } |
1947 | break; | 1947 | break; |
1948 | default: | 1948 | default: |
1949 | /* do not process rejected action frames */ | ||
1950 | if (mgmt->u.action.category & 0x80) | ||
1951 | return RX_DROP_MONITOR; | ||
1952 | |||
1949 | return RX_CONTINUE; | 1953 | return RX_CONTINUE; |
1950 | } | 1954 | } |
1951 | 1955 | ||
diff --git a/net/wireless/core.c b/net/wireless/core.c index 0a545bb6ed05..20db90246de5 100644 --- a/net/wireless/core.c +++ b/net/wireless/core.c | |||
@@ -746,9 +746,9 @@ static int cfg80211_netdev_notifier_call(struct notifier_block * nb, | |||
746 | mutex_unlock(&rdev->devlist_mtx); | 746 | mutex_unlock(&rdev->devlist_mtx); |
747 | dev_put(dev); | 747 | dev_put(dev); |
748 | } | 748 | } |
749 | #ifdef CONFIG_CFG80211_WEXT | ||
750 | cfg80211_lock_rdev(rdev); | 749 | cfg80211_lock_rdev(rdev); |
751 | mutex_lock(&rdev->devlist_mtx); | 750 | mutex_lock(&rdev->devlist_mtx); |
751 | #ifdef CONFIG_CFG80211_WEXT | ||
752 | wdev_lock(wdev); | 752 | wdev_lock(wdev); |
753 | switch (wdev->iftype) { | 753 | switch (wdev->iftype) { |
754 | case NL80211_IFTYPE_ADHOC: | 754 | case NL80211_IFTYPE_ADHOC: |
@@ -761,10 +761,10 @@ static int cfg80211_netdev_notifier_call(struct notifier_block * nb, | |||
761 | break; | 761 | break; |
762 | } | 762 | } |
763 | wdev_unlock(wdev); | 763 | wdev_unlock(wdev); |
764 | #endif | ||
764 | rdev->opencount++; | 765 | rdev->opencount++; |
765 | mutex_unlock(&rdev->devlist_mtx); | 766 | mutex_unlock(&rdev->devlist_mtx); |
766 | cfg80211_unlock_rdev(rdev); | 767 | cfg80211_unlock_rdev(rdev); |
767 | #endif | ||
768 | break; | 768 | break; |
769 | case NETDEV_UNREGISTER: | 769 | case NETDEV_UNREGISTER: |
770 | /* | 770 | /* |
diff --git a/net/wireless/sme.c b/net/wireless/sme.c index 2ce5e1609a3d..745c37e7992e 100644 --- a/net/wireless/sme.c +++ b/net/wireless/sme.c | |||
@@ -656,6 +656,7 @@ void __cfg80211_disconnected(struct net_device *dev, const u8 *ie, | |||
656 | memset(&wrqu, 0, sizeof(wrqu)); | 656 | memset(&wrqu, 0, sizeof(wrqu)); |
657 | wrqu.ap_addr.sa_family = ARPHRD_ETHER; | 657 | wrqu.ap_addr.sa_family = ARPHRD_ETHER; |
658 | wireless_send_event(dev, SIOCGIWAP, &wrqu, NULL); | 658 | wireless_send_event(dev, SIOCGIWAP, &wrqu, NULL); |
659 | wdev->wext.connect.ssid_len = 0; | ||
659 | #endif | 660 | #endif |
660 | } | 661 | } |
661 | 662 | ||