diff options
Diffstat (limited to 'drivers/net/wireless/hostap/hostap_ap.c')
| -rw-r--r-- | drivers/net/wireless/hostap/hostap_ap.c | 203 |
1 files changed, 127 insertions, 76 deletions
diff --git a/drivers/net/wireless/hostap/hostap_ap.c b/drivers/net/wireless/hostap/hostap_ap.c index ad040a3bb8a7..0acd9589c48c 100644 --- a/drivers/net/wireless/hostap/hostap_ap.c +++ b/drivers/net/wireless/hostap/hostap_ap.c | |||
| @@ -632,7 +632,6 @@ static void hostap_ap_tx_cb_auth(struct sk_buff *skb, int ok, void *data) | |||
| 632 | __le16 *pos; | 632 | __le16 *pos; |
| 633 | struct sta_info *sta = NULL; | 633 | struct sta_info *sta = NULL; |
| 634 | char *txt = NULL; | 634 | char *txt = NULL; |
| 635 | DECLARE_MAC_BUF(mac); | ||
| 636 | 635 | ||
| 637 | if (ap->local->hostapd) { | 636 | if (ap->local->hostapd) { |
| 638 | dev_kfree_skb(skb); | 637 | dev_kfree_skb(skb); |
| @@ -684,10 +683,12 @@ static void hostap_ap_tx_cb_auth(struct sk_buff *skb, int ok, void *data) | |||
| 684 | if (sta) | 683 | if (sta) |
| 685 | atomic_dec(&sta->users); | 684 | atomic_dec(&sta->users); |
| 686 | if (txt) { | 685 | if (txt) { |
| 687 | PDEBUG(DEBUG_AP, "%s: %s auth_cb - alg=%d " | 686 | PDEBUG(DEBUG_AP, "%s: " MAC_FMT " auth_cb - alg=%d " |
| 688 | "trans#=%d status=%d - %s\n", | 687 | "trans#=%d status=%d - %s\n", |
| 689 | dev->name, print_mac(mac, hdr->addr1), auth_alg, | 688 | dev->name, |
| 690 | auth_transaction, status, txt); | 689 | hdr->addr1[0], hdr->addr1[1], hdr->addr1[2], |
| 690 | hdr->addr1[3], hdr->addr1[4], hdr->addr1[5], | ||
| 691 | auth_alg, auth_transaction, status, txt); | ||
| 691 | } | 692 | } |
| 692 | dev_kfree_skb(skb); | 693 | dev_kfree_skb(skb); |
| 693 | } | 694 | } |
| @@ -703,7 +704,6 @@ static void hostap_ap_tx_cb_assoc(struct sk_buff *skb, int ok, void *data) | |||
| 703 | __le16 *pos; | 704 | __le16 *pos; |
| 704 | struct sta_info *sta = NULL; | 705 | struct sta_info *sta = NULL; |
| 705 | char *txt = NULL; | 706 | char *txt = NULL; |
| 706 | DECLARE_MAC_BUF(mac); | ||
| 707 | 707 | ||
| 708 | if (ap->local->hostapd) { | 708 | if (ap->local->hostapd) { |
| 709 | dev_kfree_skb(skb); | 709 | dev_kfree_skb(skb); |
| @@ -754,8 +754,11 @@ static void hostap_ap_tx_cb_assoc(struct sk_buff *skb, int ok, void *data) | |||
| 754 | if (sta) | 754 | if (sta) |
| 755 | atomic_dec(&sta->users); | 755 | atomic_dec(&sta->users); |
| 756 | if (txt) { | 756 | if (txt) { |
| 757 | PDEBUG(DEBUG_AP, "%s: %s assoc_cb - %s\n", | 757 | PDEBUG(DEBUG_AP, "%s: " MAC_FMT " assoc_cb - %s\n", |
| 758 | dev->name, print_mac(mac, hdr->addr1), txt); | 758 | dev->name, |
| 759 | hdr->addr1[0], hdr->addr1[1], hdr->addr1[2], | ||
| 760 | hdr->addr1[3], hdr->addr1[4], hdr->addr1[5], | ||
| 761 | txt); | ||
| 759 | } | 762 | } |
| 760 | dev_kfree_skb(skb); | 763 | dev_kfree_skb(skb); |
| 761 | } | 764 | } |
| @@ -767,7 +770,6 @@ static void hostap_ap_tx_cb_poll(struct sk_buff *skb, int ok, void *data) | |||
| 767 | struct ap_data *ap = data; | 770 | struct ap_data *ap = data; |
| 768 | struct ieee80211_hdr_4addr *hdr; | 771 | struct ieee80211_hdr_4addr *hdr; |
| 769 | struct sta_info *sta; | 772 | struct sta_info *sta; |
| 770 | DECLARE_MAC_BUF(mac); | ||
| 771 | 773 | ||
| 772 | if (skb->len < 24) | 774 | if (skb->len < 24) |
| 773 | goto fail; | 775 | goto fail; |
| @@ -779,9 +781,11 @@ static void hostap_ap_tx_cb_poll(struct sk_buff *skb, int ok, void *data) | |||
| 779 | sta->flags &= ~WLAN_STA_PENDING_POLL; | 781 | sta->flags &= ~WLAN_STA_PENDING_POLL; |
| 780 | spin_unlock(&ap->sta_table_lock); | 782 | spin_unlock(&ap->sta_table_lock); |
| 781 | } else { | 783 | } else { |
| 782 | PDEBUG(DEBUG_AP, "%s: STA %s" | 784 | PDEBUG(DEBUG_AP, "%s: STA " MAC_FMT |
| 783 | " did not ACK activity poll frame\n", | 785 | " did not ACK activity poll frame\n", |
| 784 | ap->local->dev->name, print_mac(mac, hdr->addr1)); | 786 | ap->local->dev->name, |
| 787 | hdr->addr1[0], hdr->addr1[1], hdr->addr1[2], | ||
| 788 | hdr->addr1[3], hdr->addr1[4], hdr->addr1[5]); | ||
| 785 | } | 789 | } |
| 786 | 790 | ||
| 787 | fail: | 791 | fail: |
| @@ -1306,7 +1310,6 @@ static void handle_authen(local_info_t *local, struct sk_buff *skb, | |||
| 1306 | struct sta_info *sta = NULL; | 1310 | struct sta_info *sta = NULL; |
| 1307 | struct ieee80211_crypt_data *crypt; | 1311 | struct ieee80211_crypt_data *crypt; |
| 1308 | char *txt = ""; | 1312 | char *txt = ""; |
| 1309 | DECLARE_MAC_BUF(mac); | ||
| 1310 | 1313 | ||
| 1311 | len = skb->len - IEEE80211_MGMT_HDR_LEN; | 1314 | len = skb->len - IEEE80211_MGMT_HDR_LEN; |
| 1312 | 1315 | ||
| @@ -1315,8 +1318,9 @@ static void handle_authen(local_info_t *local, struct sk_buff *skb, | |||
| 1315 | 1318 | ||
| 1316 | if (len < 6) { | 1319 | if (len < 6) { |
| 1317 | PDEBUG(DEBUG_AP, "%s: handle_authen - too short payload " | 1320 | PDEBUG(DEBUG_AP, "%s: handle_authen - too short payload " |
| 1318 | "(len=%d) from %s\n", dev->name, len, | 1321 | "(len=%d) from " MAC_FMT "\n", dev->name, len, |
| 1319 | print_mac(mac, hdr->addr2)); | 1322 | hdr->addr2[0], hdr->addr2[1], hdr->addr2[2], |
| 1323 | hdr->addr2[3], hdr->addr2[4], hdr->addr2[5]); | ||
| 1320 | return; | 1324 | return; |
| 1321 | } | 1325 | } |
| 1322 | 1326 | ||
| @@ -1381,8 +1385,10 @@ static void handle_authen(local_info_t *local, struct sk_buff *skb, | |||
| 1381 | if (time_after(jiffies, sta->u.ap.last_beacon + | 1385 | if (time_after(jiffies, sta->u.ap.last_beacon + |
| 1382 | (10 * sta->listen_interval * HZ) / 1024)) { | 1386 | (10 * sta->listen_interval * HZ) / 1024)) { |
| 1383 | PDEBUG(DEBUG_AP, "%s: no beacons received for a while," | 1387 | PDEBUG(DEBUG_AP, "%s: no beacons received for a while," |
| 1384 | " assuming AP %s is now STA\n", | 1388 | " assuming AP " MAC_FMT " is now STA\n", |
| 1385 | dev->name, print_mac(mac, sta->addr)); | 1389 | dev->name, |
| 1390 | sta->addr[0], sta->addr[1], sta->addr[2], | ||
| 1391 | sta->addr[3], sta->addr[4], sta->addr[5]); | ||
| 1386 | sta->ap = 0; | 1392 | sta->ap = 0; |
| 1387 | sta->flags = 0; | 1393 | sta->flags = 0; |
| 1388 | sta->u.sta.challenge = NULL; | 1394 | sta->u.sta.challenge = NULL; |
| @@ -1497,10 +1503,13 @@ static void handle_authen(local_info_t *local, struct sk_buff *skb, | |||
| 1497 | } | 1503 | } |
| 1498 | 1504 | ||
| 1499 | if (resp) { | 1505 | if (resp) { |
| 1500 | PDEBUG(DEBUG_AP, "%s: %s auth (alg=%d " | 1506 | PDEBUG(DEBUG_AP, "%s: " MAC_FMT " auth (alg=%d " |
| 1501 | "trans#=%d stat=%d len=%d fc=%04x) ==> %d (%s)\n", | 1507 | "trans#=%d stat=%d len=%d fc=%04x) ==> %d (%s)\n", |
| 1502 | dev->name, print_mac(mac, hdr->addr2), auth_alg, | 1508 | dev->name, |
| 1503 | auth_transaction, status_code, len, fc, resp, txt); | 1509 | hdr->addr2[0], hdr->addr2[1], hdr->addr2[2], |
| 1510 | hdr->addr2[3], hdr->addr2[4], hdr->addr2[5], | ||
| 1511 | auth_alg, auth_transaction, status_code, len, | ||
| 1512 | fc, resp, txt); | ||
| 1504 | } | 1513 | } |
| 1505 | } | 1514 | } |
| 1506 | 1515 | ||
| @@ -1519,14 +1528,15 @@ static void handle_assoc(local_info_t *local, struct sk_buff *skb, | |||
| 1519 | int send_deauth = 0; | 1528 | int send_deauth = 0; |
| 1520 | char *txt = ""; | 1529 | char *txt = ""; |
| 1521 | u8 prev_ap[ETH_ALEN]; | 1530 | u8 prev_ap[ETH_ALEN]; |
| 1522 | DECLARE_MAC_BUF(mac); | ||
| 1523 | 1531 | ||
| 1524 | left = len = skb->len - IEEE80211_MGMT_HDR_LEN; | 1532 | left = len = skb->len - IEEE80211_MGMT_HDR_LEN; |
| 1525 | 1533 | ||
| 1526 | if (len < (reassoc ? 10 : 4)) { | 1534 | if (len < (reassoc ? 10 : 4)) { |
| 1527 | PDEBUG(DEBUG_AP, "%s: handle_assoc - too short payload " | 1535 | PDEBUG(DEBUG_AP, "%s: handle_assoc - too short payload " |
| 1528 | "(len=%d, reassoc=%d) from %s\n", | 1536 | "(len=%d, reassoc=%d) from " MAC_FMT "\n", |
| 1529 | dev->name, len, reassoc, print_mac(mac, hdr->addr2)); | 1537 | dev->name, len, reassoc, |
| 1538 | hdr->addr2[0], hdr->addr2[1], hdr->addr2[2], | ||
| 1539 | hdr->addr2[3], hdr->addr2[4], hdr->addr2[5]); | ||
| 1530 | return; | 1540 | return; |
| 1531 | } | 1541 | } |
| 1532 | 1542 | ||
| @@ -1603,9 +1613,12 @@ static void handle_assoc(local_info_t *local, struct sk_buff *skb, | |||
| 1603 | } | 1613 | } |
| 1604 | 1614 | ||
| 1605 | if (left > 0) { | 1615 | if (left > 0) { |
| 1606 | PDEBUG(DEBUG_AP, "%s: assoc from %s" | 1616 | PDEBUG(DEBUG_AP, "%s: assoc from " MAC_FMT |
| 1607 | " with extra data (%d bytes) [", | 1617 | " with extra data (%d bytes) [", |
| 1608 | dev->name, print_mac(mac, hdr->addr2), left); | 1618 | dev->name, |
| 1619 | hdr->addr2[0], hdr->addr2[1], hdr->addr2[2], | ||
| 1620 | hdr->addr2[3], hdr->addr2[4], hdr->addr2[5], | ||
| 1621 | left); | ||
| 1609 | while (left > 0) { | 1622 | while (left > 0) { |
| 1610 | PDEBUG2(DEBUG_AP, "<%02x>", *u); | 1623 | PDEBUG2(DEBUG_AP, "<%02x>", *u); |
| 1611 | u++; left--; | 1624 | u++; left--; |
| @@ -1704,10 +1717,15 @@ static void handle_assoc(local_info_t *local, struct sk_buff *skb, | |||
| 1704 | } | 1717 | } |
| 1705 | 1718 | ||
| 1706 | #if 0 | 1719 | #if 0 |
| 1707 | PDEBUG(DEBUG_AP, "%s: %s %sassoc (len=%d " | 1720 | PDEBUG(DEBUG_AP, "%s: " MAC_FMT" %sassoc (len=%d " |
| 1708 | "prev_ap=%s) => %d(%d) (%s)\n", | 1721 | "prev_ap=" MAC_FMT") => %d(%d) (%s)\n", |
| 1709 | dev->name, print_mac(mac, hdr->addr2), reassoc ? "re" : "", len, | 1722 | dev->name, |
| 1710 | print_mac(mac, prev_ap), resp, send_deauth, txt); | 1723 | hdr->addr2[0], hdr->addr2[1], hdr->addr2[2], |
| 1724 | hdr->addr2[3], hdr->addr2[4], hdr->addr2[5], | ||
| 1725 | reassoc ? "re" : "", len, | ||
| 1726 | prev_ap[0], prev_ap[1], prev_ap[2], | ||
| 1727 | prev_ap[3], prev_ap[4], prev_ap[5], | ||
| 1728 | resp, send_deauth, txt); | ||
| 1711 | #endif | 1729 | #endif |
| 1712 | } | 1730 | } |
| 1713 | 1731 | ||
| @@ -1735,9 +1753,11 @@ static void handle_deauth(local_info_t *local, struct sk_buff *skb, | |||
| 1735 | pos = (__le16 *) body; | 1753 | pos = (__le16 *) body; |
| 1736 | reason_code = le16_to_cpu(*pos); | 1754 | reason_code = le16_to_cpu(*pos); |
| 1737 | 1755 | ||
| 1738 | PDEBUG(DEBUG_AP, "%s: deauthentication: %s len=%d, " | 1756 | PDEBUG(DEBUG_AP, "%s: deauthentication: " MAC_FMT " len=%d, " |
| 1739 | "reason_code=%d\n", dev->name, print_mac(mac, hdr->addr2), len, | 1757 | "reason_code=%d\n", dev->name, |
| 1740 | reason_code); | 1758 | hdr->addr2[0], hdr->addr2[1], hdr->addr2[2], |
| 1759 | hdr->addr2[3], hdr->addr2[4], hdr->addr2[5], | ||
| 1760 | len, reason_code); | ||
| 1741 | 1761 | ||
| 1742 | spin_lock_bh(&local->ap->sta_table_lock); | 1762 | spin_lock_bh(&local->ap->sta_table_lock); |
| 1743 | sta = ap_get_sta(local->ap, hdr->addr2); | 1763 | sta = ap_get_sta(local->ap, hdr->addr2); |
| @@ -1748,9 +1768,11 @@ static void handle_deauth(local_info_t *local, struct sk_buff *skb, | |||
| 1748 | } | 1768 | } |
| 1749 | spin_unlock_bh(&local->ap->sta_table_lock); | 1769 | spin_unlock_bh(&local->ap->sta_table_lock); |
| 1750 | if (sta == NULL) { | 1770 | if (sta == NULL) { |
| 1751 | printk("%s: deauthentication from %s, " | 1771 | printk("%s: deauthentication from " MAC_FMT ", " |
| 1752 | "reason_code=%d, but STA not authenticated\n", dev->name, | 1772 | "reason_code=%d, but STA not authenticated\n", dev->name, |
| 1753 | print_mac(mac, hdr->addr2), reason_code); | 1773 | hdr->addr2[0], hdr->addr2[1], hdr->addr2[2], |
| 1774 | hdr->addr2[3], hdr->addr2[4], hdr->addr2[5], | ||
| 1775 | reason_code); | ||
| 1754 | } | 1776 | } |
| 1755 | } | 1777 | } |
| 1756 | 1778 | ||
| @@ -1766,7 +1788,6 @@ static void handle_disassoc(local_info_t *local, struct sk_buff *skb, | |||
| 1766 | u16 reason_code; | 1788 | u16 reason_code; |
| 1767 | __le16 *pos; | 1789 | __le16 *pos; |
| 1768 | struct sta_info *sta = NULL; | 1790 | struct sta_info *sta = NULL; |
| 1769 | DECLARE_MAC_BUF(mac); | ||
| 1770 | 1791 | ||
| 1771 | len = skb->len - IEEE80211_MGMT_HDR_LEN; | 1792 | len = skb->len - IEEE80211_MGMT_HDR_LEN; |
| 1772 | 1793 | ||
| @@ -1778,9 +1799,11 @@ static void handle_disassoc(local_info_t *local, struct sk_buff *skb, | |||
| 1778 | pos = (__le16 *) body; | 1799 | pos = (__le16 *) body; |
| 1779 | reason_code = le16_to_cpu(*pos); | 1800 | reason_code = le16_to_cpu(*pos); |
| 1780 | 1801 | ||
| 1781 | PDEBUG(DEBUG_AP, "%s: disassociation: %s len=%d, " | 1802 | PDEBUG(DEBUG_AP, "%s: disassociation: " MAC_FMT " len=%d, " |
| 1782 | "reason_code=%d\n", dev->name, print_mac(mac, hdr->addr2), len, | 1803 | "reason_code=%d\n", dev->name, |
| 1783 | reason_code); | 1804 | hdr->addr2[0], hdr->addr2[1], hdr->addr2[2], |
| 1805 | hdr->addr2[3], hdr->addr2[4], hdr->addr2[5], | ||
| 1806 | len, reason_code); | ||
| 1784 | 1807 | ||
| 1785 | spin_lock_bh(&local->ap->sta_table_lock); | 1808 | spin_lock_bh(&local->ap->sta_table_lock); |
| 1786 | sta = ap_get_sta(local->ap, hdr->addr2); | 1809 | sta = ap_get_sta(local->ap, hdr->addr2); |
| @@ -1791,9 +1814,12 @@ static void handle_disassoc(local_info_t *local, struct sk_buff *skb, | |||
| 1791 | } | 1814 | } |
| 1792 | spin_unlock_bh(&local->ap->sta_table_lock); | 1815 | spin_unlock_bh(&local->ap->sta_table_lock); |
| 1793 | if (sta == NULL) { | 1816 | if (sta == NULL) { |
| 1794 | printk("%s: disassociation from %s, " | 1817 | printk("%s: disassociation from " MAC_FMT ", " |
| 1795 | "reason_code=%d, but STA not authenticated\n", | 1818 | "reason_code=%d, but STA not authenticated\n", |
| 1796 | dev->name, print_mac(mac, hdr->addr2), reason_code); | 1819 | dev->name, |
| 1820 | hdr->addr2[0], hdr->addr2[1], hdr->addr2[2], | ||
| 1821 | hdr->addr2[3], hdr->addr2[4], hdr->addr2[5], | ||
| 1822 | reason_code); | ||
| 1797 | } | 1823 | } |
| 1798 | } | 1824 | } |
| 1799 | 1825 | ||
| @@ -1882,16 +1908,20 @@ static void handle_pspoll(local_info_t *local, | |||
| 1882 | struct sta_info *sta; | 1908 | struct sta_info *sta; |
| 1883 | u16 aid; | 1909 | u16 aid; |
| 1884 | struct sk_buff *skb; | 1910 | struct sk_buff *skb; |
| 1885 | DECLARE_MAC_BUF(mac); | ||
| 1886 | 1911 | ||
| 1887 | PDEBUG(DEBUG_PS2, "handle_pspoll: BSSID=%s" | 1912 | PDEBUG(DEBUG_PS2, "handle_pspoll: BSSID=" MAC_FMT |
| 1888 | ", TA=%s PWRMGT=%d\n", | 1913 | ", TA=" MAC_FMT " PWRMGT=%d\n", |
| 1889 | print_mac(mac, hdr->addr1), print_mac(mac, hdr->addr2), | 1914 | hdr->addr1[0], hdr->addr1[1], hdr->addr1[2], |
| 1915 | hdr->addr1[3], hdr->addr1[4], hdr->addr1[5], | ||
| 1916 | hdr->addr2[0], hdr->addr2[1], hdr->addr2[2], | ||
| 1917 | hdr->addr2[3], hdr->addr2[4], hdr->addr2[5], | ||
| 1890 | !!(le16_to_cpu(hdr->frame_ctl) & IEEE80211_FCTL_PM)); | 1918 | !!(le16_to_cpu(hdr->frame_ctl) & IEEE80211_FCTL_PM)); |
| 1891 | 1919 | ||
| 1892 | if (memcmp(hdr->addr1, dev->dev_addr, ETH_ALEN)) { | 1920 | if (memcmp(hdr->addr1, dev->dev_addr, ETH_ALEN)) { |
| 1893 | PDEBUG(DEBUG_AP, "handle_pspoll - addr1(BSSID)=%s" | 1921 | PDEBUG(DEBUG_AP, "handle_pspoll - addr1(BSSID)=" MAC_FMT |
| 1894 | " not own MAC\n", print_mac(mac, hdr->addr1)); | 1922 | " not own MAC\n", |
| 1923 | hdr->addr1[0], hdr->addr1[1], hdr->addr1[2], | ||
| 1924 | hdr->addr1[3], hdr->addr1[4], hdr->addr1[5]); | ||
| 1895 | return; | 1925 | return; |
| 1896 | } | 1926 | } |
| 1897 | 1927 | ||
| @@ -1969,7 +1999,6 @@ static void handle_wds_oper_queue(struct work_struct *work) | |||
| 1969 | wds_oper_queue); | 1999 | wds_oper_queue); |
| 1970 | local_info_t *local = ap->local; | 2000 | local_info_t *local = ap->local; |
| 1971 | struct wds_oper_data *entry, *prev; | 2001 | struct wds_oper_data *entry, *prev; |
| 1972 | DECLARE_MAC_BUF(mac); | ||
| 1973 | 2002 | ||
| 1974 | spin_lock_bh(&local->lock); | 2003 | spin_lock_bh(&local->lock); |
| 1975 | entry = local->ap->wds_oper_entries; | 2004 | entry = local->ap->wds_oper_entries; |
| @@ -1978,10 +2007,11 @@ static void handle_wds_oper_queue(struct work_struct *work) | |||
| 1978 | 2007 | ||
| 1979 | while (entry) { | 2008 | while (entry) { |
| 1980 | PDEBUG(DEBUG_AP, "%s: %s automatic WDS connection " | 2009 | PDEBUG(DEBUG_AP, "%s: %s automatic WDS connection " |
| 1981 | "to AP %s\n", | 2010 | "to AP " MAC_FMT "\n", |
| 1982 | local->dev->name, | 2011 | local->dev->name, |
| 1983 | entry->type == WDS_ADD ? "adding" : "removing", | 2012 | entry->type == WDS_ADD ? "adding" : "removing", |
| 1984 | print_mac(mac, entry->addr)); | 2013 | entry->addr[0], entry->addr[1], entry->addr[2], |
| 2014 | entry->addr[3], entry->addr[4], entry->addr[5]); | ||
| 1985 | if (entry->type == WDS_ADD) | 2015 | if (entry->type == WDS_ADD) |
| 1986 | prism2_wds_add(local, entry->addr, 0); | 2016 | prism2_wds_add(local, entry->addr, 0); |
| 1987 | else if (entry->type == WDS_DEL) | 2017 | else if (entry->type == WDS_DEL) |
| @@ -2158,7 +2188,6 @@ static void handle_ap_item(local_info_t *local, struct sk_buff *skb, | |||
| 2158 | #endif /* PRISM2_NO_KERNEL_IEEE80211_MGMT */ | 2188 | #endif /* PRISM2_NO_KERNEL_IEEE80211_MGMT */ |
| 2159 | u16 fc, type, stype; | 2189 | u16 fc, type, stype; |
| 2160 | struct ieee80211_hdr_4addr *hdr; | 2190 | struct ieee80211_hdr_4addr *hdr; |
| 2161 | DECLARE_MAC_BUF(mac); | ||
| 2162 | 2191 | ||
| 2163 | /* FIX: should give skb->len to handler functions and check that the | 2192 | /* FIX: should give skb->len to handler functions and check that the |
| 2164 | * buffer is long enough */ | 2193 | * buffer is long enough */ |
| @@ -2187,8 +2216,9 @@ static void handle_ap_item(local_info_t *local, struct sk_buff *skb, | |||
| 2187 | 2216 | ||
| 2188 | if (memcmp(hdr->addr1, dev->dev_addr, ETH_ALEN)) { | 2217 | if (memcmp(hdr->addr1, dev->dev_addr, ETH_ALEN)) { |
| 2189 | PDEBUG(DEBUG_AP, "handle_ap_item - addr1(BSSID)=" | 2218 | PDEBUG(DEBUG_AP, "handle_ap_item - addr1(BSSID)=" |
| 2190 | "%s not own MAC\n", | 2219 | MAC_FMT " not own MAC\n", |
| 2191 | print_mac(mac, hdr->addr1)); | 2220 | hdr->addr1[0], hdr->addr1[1], hdr->addr1[2], |
| 2221 | hdr->addr1[3], hdr->addr1[4], hdr->addr1[5]); | ||
| 2192 | goto done; | 2222 | goto done; |
| 2193 | } | 2223 | } |
| 2194 | 2224 | ||
| @@ -2224,14 +2254,18 @@ static void handle_ap_item(local_info_t *local, struct sk_buff *skb, | |||
| 2224 | } | 2254 | } |
| 2225 | 2255 | ||
| 2226 | if (memcmp(hdr->addr1, dev->dev_addr, ETH_ALEN)) { | 2256 | if (memcmp(hdr->addr1, dev->dev_addr, ETH_ALEN)) { |
| 2227 | PDEBUG(DEBUG_AP, "handle_ap_item - addr1(DA)=%s" | 2257 | PDEBUG(DEBUG_AP, "handle_ap_item - addr1(DA)=" MAC_FMT |
| 2228 | " not own MAC\n", print_mac(mac, hdr->addr1)); | 2258 | " not own MAC\n", |
| 2259 | hdr->addr1[0], hdr->addr1[1], hdr->addr1[2], | ||
| 2260 | hdr->addr1[3], hdr->addr1[4], hdr->addr1[5]); | ||
| 2229 | goto done; | 2261 | goto done; |
| 2230 | } | 2262 | } |
| 2231 | 2263 | ||
| 2232 | if (memcmp(hdr->addr3, dev->dev_addr, ETH_ALEN)) { | 2264 | if (memcmp(hdr->addr3, dev->dev_addr, ETH_ALEN)) { |
| 2233 | PDEBUG(DEBUG_AP, "handle_ap_item - addr3(BSSID)=%s" | 2265 | PDEBUG(DEBUG_AP, "handle_ap_item - addr3(BSSID)=" MAC_FMT |
| 2234 | " not own MAC\n", print_mac(mac, hdr->addr3)); | 2266 | " not own MAC\n", |
| 2267 | hdr->addr3[0], hdr->addr3[1], hdr->addr3[2], | ||
| 2268 | hdr->addr3[3], hdr->addr3[4], hdr->addr3[5]); | ||
| 2235 | goto done; | 2269 | goto done; |
| 2236 | } | 2270 | } |
| 2237 | 2271 | ||
| @@ -2312,7 +2346,6 @@ static void schedule_packet_send(local_info_t *local, struct sta_info *sta) | |||
| 2312 | struct sk_buff *skb; | 2346 | struct sk_buff *skb; |
| 2313 | struct ieee80211_hdr_4addr *hdr; | 2347 | struct ieee80211_hdr_4addr *hdr; |
| 2314 | struct hostap_80211_rx_status rx_stats; | 2348 | struct hostap_80211_rx_status rx_stats; |
| 2315 | DECLARE_MAC_BUF(mac); | ||
| 2316 | 2349 | ||
| 2317 | if (skb_queue_empty(&sta->tx_buf)) | 2350 | if (skb_queue_empty(&sta->tx_buf)) |
| 2318 | return; | 2351 | return; |
| @@ -2334,7 +2367,9 @@ static void schedule_packet_send(local_info_t *local, struct sta_info *sta) | |||
| 2334 | hdr->duration_id = cpu_to_le16(sta->aid | BIT(15) | BIT(14)); | 2367 | hdr->duration_id = cpu_to_le16(sta->aid | BIT(15) | BIT(14)); |
| 2335 | 2368 | ||
| 2336 | PDEBUG(DEBUG_PS2, "%s: Scheduling buffered packet delivery for STA " | 2369 | PDEBUG(DEBUG_PS2, "%s: Scheduling buffered packet delivery for STA " |
| 2337 | "%s\n", local->dev->name, print_mac(mac, sta->addr)); | 2370 | MAC_FMT "\n", local->dev->name, |
| 2371 | sta->addr[0], sta->addr[1], sta->addr[2], | ||
| 2372 | sta->addr[3], sta->addr[4], sta->addr[5]); | ||
| 2338 | 2373 | ||
| 2339 | skb->dev = local->dev; | 2374 | skb->dev = local->dev; |
| 2340 | 2375 | ||
| @@ -2661,7 +2696,6 @@ static int ap_update_sta_tx_rate(struct sta_info *sta, struct net_device *dev) | |||
| 2661 | int ret = sta->tx_rate; | 2696 | int ret = sta->tx_rate; |
| 2662 | struct hostap_interface *iface; | 2697 | struct hostap_interface *iface; |
| 2663 | local_info_t *local; | 2698 | local_info_t *local; |
| 2664 | DECLARE_MAC_BUF(mac); | ||
| 2665 | 2699 | ||
| 2666 | iface = netdev_priv(dev); | 2700 | iface = netdev_priv(dev); |
| 2667 | local = iface->local; | 2701 | local = iface->local; |
| @@ -2689,9 +2723,12 @@ static int ap_update_sta_tx_rate(struct sta_info *sta, struct net_device *dev) | |||
| 2689 | case 3: sta->tx_rate = 110; break; | 2723 | case 3: sta->tx_rate = 110; break; |
| 2690 | default: sta->tx_rate = 0; break; | 2724 | default: sta->tx_rate = 0; break; |
| 2691 | } | 2725 | } |
| 2692 | PDEBUG(DEBUG_AP, "%s: STA %s" | 2726 | PDEBUG(DEBUG_AP, "%s: STA " MAC_FMT |
| 2693 | " TX rate raised to %d\n", | 2727 | " TX rate raised to %d\n", |
| 2694 | dev->name, print_mac(mac, sta->addr), sta->tx_rate); | 2728 | dev->name, |
| 2729 | sta->addr[0], sta->addr[1], sta->addr[2], | ||
| 2730 | sta->addr[3], sta->addr[4], sta->addr[5], | ||
| 2731 | sta->tx_rate); | ||
| 2695 | } | 2732 | } |
| 2696 | sta->tx_since_last_failure = 0; | 2733 | sta->tx_since_last_failure = 0; |
| 2697 | } | 2734 | } |
| @@ -2709,7 +2746,6 @@ ap_tx_ret hostap_handle_sta_tx(local_info_t *local, struct hostap_tx_data *tx) | |||
| 2709 | int set_tim, ret; | 2746 | int set_tim, ret; |
| 2710 | struct ieee80211_hdr_4addr *hdr; | 2747 | struct ieee80211_hdr_4addr *hdr; |
| 2711 | struct hostap_skb_tx_data *meta; | 2748 | struct hostap_skb_tx_data *meta; |
| 2712 | DECLARE_MAC_BUF(mac); | ||
| 2713 | 2749 | ||
| 2714 | meta = (struct hostap_skb_tx_data *) skb->cb; | 2750 | meta = (struct hostap_skb_tx_data *) skb->cb; |
| 2715 | ret = AP_TX_CONTINUE; | 2751 | ret = AP_TX_CONTINUE; |
| @@ -2745,8 +2781,9 @@ ap_tx_ret hostap_handle_sta_tx(local_info_t *local, struct hostap_tx_data *tx) | |||
| 2745 | * print out any errors here. */ | 2781 | * print out any errors here. */ |
| 2746 | if (net_ratelimit()) { | 2782 | if (net_ratelimit()) { |
| 2747 | printk(KERN_DEBUG "AP: drop packet to non-associated " | 2783 | printk(KERN_DEBUG "AP: drop packet to non-associated " |
| 2748 | "STA %s\n", | 2784 | "STA " MAC_FMT "\n", |
| 2749 | print_mac(mac, hdr->addr1)); | 2785 | hdr->addr1[0], hdr->addr1[1], hdr->addr1[2], |
| 2786 | hdr->addr1[3], hdr->addr1[4], hdr->addr1[5]); | ||
| 2750 | } | 2787 | } |
| 2751 | #endif | 2788 | #endif |
| 2752 | local->ap->tx_drop_nonassoc++; | 2789 | local->ap->tx_drop_nonassoc++; |
| @@ -2784,9 +2821,11 @@ ap_tx_ret hostap_handle_sta_tx(local_info_t *local, struct hostap_tx_data *tx) | |||
| 2784 | } | 2821 | } |
| 2785 | 2822 | ||
| 2786 | if (skb_queue_len(&sta->tx_buf) >= STA_MAX_TX_BUFFER) { | 2823 | if (skb_queue_len(&sta->tx_buf) >= STA_MAX_TX_BUFFER) { |
| 2787 | PDEBUG(DEBUG_PS, "%s: No more space in STA (%s" | 2824 | PDEBUG(DEBUG_PS, "%s: No more space in STA (" MAC_FMT |
| 2788 | ")'s PS mode buffer\n", | 2825 | ")'s PS mode buffer\n", |
| 2789 | local->dev->name, print_mac(mac, sta->addr)); | 2826 | local->dev->name, |
| 2827 | sta->addr[0], sta->addr[1], sta->addr[2], | ||
| 2828 | sta->addr[3], sta->addr[4], sta->addr[5]); | ||
| 2790 | /* Make sure that TIM is set for the station (it might not be | 2829 | /* Make sure that TIM is set for the station (it might not be |
| 2791 | * after AP wlan hw reset). */ | 2830 | * after AP wlan hw reset). */ |
| 2792 | /* FIX: should fix hw reset to restore bits based on STA | 2831 | /* FIX: should fix hw reset to restore bits based on STA |
| @@ -2850,7 +2889,6 @@ void hostap_handle_sta_tx_exc(local_info_t *local, struct sk_buff *skb) | |||
| 2850 | struct sta_info *sta; | 2889 | struct sta_info *sta; |
| 2851 | struct ieee80211_hdr_4addr *hdr; | 2890 | struct ieee80211_hdr_4addr *hdr; |
| 2852 | struct hostap_skb_tx_data *meta; | 2891 | struct hostap_skb_tx_data *meta; |
| 2853 | DECLARE_MAC_BUF(mac); | ||
| 2854 | 2892 | ||
| 2855 | hdr = (struct ieee80211_hdr_4addr *) skb->data; | 2893 | hdr = (struct ieee80211_hdr_4addr *) skb->data; |
| 2856 | meta = (struct hostap_skb_tx_data *) skb->cb; | 2894 | meta = (struct hostap_skb_tx_data *) skb->cb; |
| @@ -2859,9 +2897,12 @@ void hostap_handle_sta_tx_exc(local_info_t *local, struct sk_buff *skb) | |||
| 2859 | sta = ap_get_sta(local->ap, hdr->addr1); | 2897 | sta = ap_get_sta(local->ap, hdr->addr1); |
| 2860 | if (!sta) { | 2898 | if (!sta) { |
| 2861 | spin_unlock(&local->ap->sta_table_lock); | 2899 | spin_unlock(&local->ap->sta_table_lock); |
| 2862 | PDEBUG(DEBUG_AP, "%s: Could not find STA %s" | 2900 | PDEBUG(DEBUG_AP, "%s: Could not find STA " MAC_FMT |
| 2863 | " for this TX error (@%lu)\n", | 2901 | " for this TX error (@%lu)\n", |
| 2864 | local->dev->name, print_mac(mac, hdr->addr1), jiffies); | 2902 | local->dev->name, |
| 2903 | hdr->addr1[0], hdr->addr1[1], hdr->addr1[2], | ||
| 2904 | hdr->addr1[3], hdr->addr1[4], hdr->addr1[5], | ||
| 2905 | jiffies); | ||
| 2865 | return; | 2906 | return; |
| 2866 | } | 2907 | } |
| 2867 | 2908 | ||
| @@ -2888,9 +2929,11 @@ void hostap_handle_sta_tx_exc(local_info_t *local, struct sk_buff *skb) | |||
| 2888 | case 3: sta->tx_rate = 110; break; | 2929 | case 3: sta->tx_rate = 110; break; |
| 2889 | default: sta->tx_rate = 0; break; | 2930 | default: sta->tx_rate = 0; break; |
| 2890 | } | 2931 | } |
| 2891 | PDEBUG(DEBUG_AP, "%s: STA %s" | 2932 | PDEBUG(DEBUG_AP, "%s: STA " MAC_FMT |
| 2892 | " TX rate lowered to %d\n", | 2933 | " TX rate lowered to %d\n", |
| 2893 | local->dev->name, print_mac(mac, sta->addr), | 2934 | local->dev->name, |
| 2935 | sta->addr[0], sta->addr[1], sta->addr[2], | ||
| 2936 | sta->addr[3], sta->addr[4], sta->addr[5], | ||
| 2894 | sta->tx_rate); | 2937 | sta->tx_rate); |
| 2895 | } | 2938 | } |
| 2896 | sta->tx_consecutive_exc = 0; | 2939 | sta->tx_consecutive_exc = 0; |
| @@ -2956,7 +2999,6 @@ ap_rx_ret hostap_handle_sta_rx(local_info_t *local, struct net_device *dev, | |||
| 2956 | struct sta_info *sta; | 2999 | struct sta_info *sta; |
| 2957 | u16 fc, type, stype; | 3000 | u16 fc, type, stype; |
| 2958 | struct ieee80211_hdr_4addr *hdr; | 3001 | struct ieee80211_hdr_4addr *hdr; |
| 2959 | DECLARE_MAC_BUF(mac); | ||
| 2960 | 3002 | ||
| 2961 | if (local->ap == NULL) | 3003 | if (local->ap == NULL) |
| 2962 | return AP_RX_CONTINUE; | 3004 | return AP_RX_CONTINUE; |
| @@ -2988,9 +3030,12 @@ ap_rx_ret hostap_handle_sta_rx(local_info_t *local, struct net_device *dev, | |||
| 2988 | } else { | 3030 | } else { |
| 2989 | printk(KERN_DEBUG "%s: dropped received packet" | 3031 | printk(KERN_DEBUG "%s: dropped received packet" |
| 2990 | " from non-associated STA " | 3032 | " from non-associated STA " |
| 2991 | "%s" | 3033 | MAC_FMT |
| 2992 | " (type=0x%02x, subtype=0x%02x)\n", | 3034 | " (type=0x%02x, subtype=0x%02x)\n", |
| 2993 | dev->name, print_mac(mac, hdr->addr2), | 3035 | dev->name, |
| 3036 | hdr->addr2[0], hdr->addr2[1], | ||
| 3037 | hdr->addr2[2], hdr->addr2[3], | ||
| 3038 | hdr->addr2[4], hdr->addr2[5], | ||
| 2994 | type >> 2, stype >> 4); | 3039 | type >> 2, stype >> 4); |
| 2995 | hostap_rx(dev, skb, rx_stats); | 3040 | hostap_rx(dev, skb, rx_stats); |
| 2996 | #endif /* PRISM2_NO_KERNEL_IEEE80211_MGMT */ | 3041 | #endif /* PRISM2_NO_KERNEL_IEEE80211_MGMT */ |
| @@ -3025,8 +3070,11 @@ ap_rx_ret hostap_handle_sta_rx(local_info_t *local, struct net_device *dev, | |||
| 3025 | * being associated. */ | 3070 | * being associated. */ |
| 3026 | printk(KERN_DEBUG "%s: rejected received nullfunc " | 3071 | printk(KERN_DEBUG "%s: rejected received nullfunc " |
| 3027 | "frame without ToDS from not associated STA " | 3072 | "frame without ToDS from not associated STA " |
| 3028 | "%s\n", | 3073 | MAC_FMT "\n", |
| 3029 | dev->name, print_mac(mac, hdr->addr2)); | 3074 | dev->name, |
| 3075 | hdr->addr2[0], hdr->addr2[1], | ||
| 3076 | hdr->addr2[2], hdr->addr2[3], | ||
| 3077 | hdr->addr2[4], hdr->addr2[5]); | ||
| 3030 | hostap_rx(dev, skb, rx_stats); | 3078 | hostap_rx(dev, skb, rx_stats); |
| 3031 | #endif /* PRISM2_NO_KERNEL_IEEE80211_MGMT */ | 3079 | #endif /* PRISM2_NO_KERNEL_IEEE80211_MGMT */ |
| 3032 | } | 3080 | } |
| @@ -3043,9 +3091,12 @@ ap_rx_ret hostap_handle_sta_rx(local_info_t *local, struct net_device *dev, | |||
| 3043 | * If BSSID is own, report the dropping of this frame. */ | 3091 | * If BSSID is own, report the dropping of this frame. */ |
| 3044 | if (memcmp(hdr->addr3, dev->dev_addr, ETH_ALEN) == 0) { | 3092 | if (memcmp(hdr->addr3, dev->dev_addr, ETH_ALEN) == 0) { |
| 3045 | printk(KERN_DEBUG "%s: dropped received packet from " | 3093 | printk(KERN_DEBUG "%s: dropped received packet from " |
| 3046 | "%s with no ToDS flag " | 3094 | MAC_FMT " with no ToDS flag " |
| 3047 | "(type=0x%02x, subtype=0x%02x)\n", dev->name, | 3095 | "(type=0x%02x, subtype=0x%02x)\n", dev->name, |
| 3048 | print_mac(mac, hdr->addr2), type >> 2, stype >> 4); | 3096 | hdr->addr2[0], hdr->addr2[1], |
| 3097 | hdr->addr2[2], hdr->addr2[3], | ||
| 3098 | hdr->addr2[4], hdr->addr2[5], | ||
| 3099 | type >> 2, stype >> 4); | ||
| 3049 | hostap_dump_rx_80211(dev->name, skb, rx_stats); | 3100 | hostap_dump_rx_80211(dev->name, skb, rx_stats); |
| 3050 | } | 3101 | } |
| 3051 | ret = AP_RX_DROP; | 3102 | ret = AP_RX_DROP; |
