ieee80211_node.c (172063) | ieee80211_node.c (172211) |
---|---|
1/*- 2 * Copyright (c) 2001 Atsushi Onoe 3 * Copyright (c) 2002-2007 Sam Leffler, Errno Consulting 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: --- 11 unchanged lines hidden (view full) --- 20 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 */ 26 27#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 2001 Atsushi Onoe 3 * Copyright (c) 2002-2007 Sam Leffler, Errno Consulting 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: --- 11 unchanged lines hidden (view full) --- 20 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 */ 26 27#include <sys/cdefs.h> |
28__FBSDID("$FreeBSD: head/sys/net80211/ieee80211_node.c 172063 2007-09-06 00:08:02Z sam $"); | 28__FBSDID("$FreeBSD: head/sys/net80211/ieee80211_node.c 172211 2007-09-17 19:07:24Z sam $"); |
29 30#include <sys/param.h> 31#include <sys/systm.h> 32#include <sys/mbuf.h> 33#include <sys/malloc.h> 34#include <sys/kernel.h> 35 36#include <sys/socket.h> --- 34 unchanged lines hidden (view full) --- 71 struct ieee80211_node *, const uint8_t *); 72static void _ieee80211_free_node(struct ieee80211_node *); 73 74static void ieee80211_node_table_init(struct ieee80211com *ic, 75 struct ieee80211_node_table *nt, const char *name, 76 int inact, int keymaxix); 77static void ieee80211_node_table_reset(struct ieee80211_node_table *); 78static void ieee80211_node_table_cleanup(struct ieee80211_node_table *nt); | 29 30#include <sys/param.h> 31#include <sys/systm.h> 32#include <sys/mbuf.h> 33#include <sys/malloc.h> 34#include <sys/kernel.h> 35 36#include <sys/socket.h> --- 34 unchanged lines hidden (view full) --- 71 struct ieee80211_node *, const uint8_t *); 72static void _ieee80211_free_node(struct ieee80211_node *); 73 74static void ieee80211_node_table_init(struct ieee80211com *ic, 75 struct ieee80211_node_table *nt, const char *name, 76 int inact, int keymaxix); 77static void ieee80211_node_table_reset(struct ieee80211_node_table *); 78static void ieee80211_node_table_cleanup(struct ieee80211_node_table *nt); |
79static void ieee80211_erp_timeout(struct ieee80211com *); |
|
79 80MALLOC_DEFINE(M_80211_NODE, "80211node", "802.11 node state"); 81 82void 83ieee80211_node_attach(struct ieee80211com *ic) 84{ 85 86 ic->ic_node_alloc = node_alloc; --- 1479 unchanged lines hidden (view full) --- 1566void 1567ieee80211_node_timeout(void *arg) 1568{ 1569 struct ieee80211com *ic = arg; 1570 1571 ieee80211_scan_timeout(ic); 1572 ieee80211_timeout_stations(&ic->ic_sta); 1573 | 80 81MALLOC_DEFINE(M_80211_NODE, "80211node", "802.11 node state"); 82 83void 84ieee80211_node_attach(struct ieee80211com *ic) 85{ 86 87 ic->ic_node_alloc = node_alloc; --- 1479 unchanged lines hidden (view full) --- 1567void 1568ieee80211_node_timeout(void *arg) 1569{ 1570 struct ieee80211com *ic = arg; 1571 1572 ieee80211_scan_timeout(ic); 1573 ieee80211_timeout_stations(&ic->ic_sta); 1574 |
1575 IEEE80211_LOCK(ic); 1576 ieee80211_erp_timeout(ic); 1577 IEEE80211_UNLOCK(ic); 1578 |
|
1574 callout_reset(&ic->ic_inact, IEEE80211_INACT_WAIT*hz, 1575 ieee80211_node_timeout, ic); 1576} 1577 1578void 1579ieee80211_iterate_nodes(struct ieee80211_node_table *nt, ieee80211_iter_func *f, void *arg) 1580{ 1581 struct ieee80211_node *ni; --- 50 unchanged lines hidden (view full) --- 1632 1633void 1634ieee80211_dump_nodes(struct ieee80211_node_table *nt) 1635{ 1636 ieee80211_iterate_nodes(nt, 1637 (ieee80211_iter_func *) ieee80211_dump_node, nt); 1638} 1639 | 1579 callout_reset(&ic->ic_inact, IEEE80211_INACT_WAIT*hz, 1580 ieee80211_node_timeout, ic); 1581} 1582 1583void 1584ieee80211_iterate_nodes(struct ieee80211_node_table *nt, ieee80211_iter_func *f, void *arg) 1585{ 1586 struct ieee80211_node *ni; --- 50 unchanged lines hidden (view full) --- 1637 1638void 1639ieee80211_dump_nodes(struct ieee80211_node_table *nt) 1640{ 1641 ieee80211_iterate_nodes(nt, 1642 (ieee80211_iter_func *) ieee80211_dump_node, nt); 1643} 1644 |
1645void 1646ieee80211_notify_erp(struct ieee80211com *ic) 1647{ 1648 if (ic->ic_opmode == IEEE80211_M_HOSTAP) 1649 ieee80211_beacon_notify(ic, IEEE80211_BEACON_ERP); 1650} 1651 |
|
1640/* 1641 * Handle a station joining an 11g network. 1642 */ 1643static void 1644ieee80211_node_join_11g(struct ieee80211com *ic, struct ieee80211_node *ni) 1645{ 1646 1647 /* 1648 * Station isn't capable of short slot time. Bump 1649 * the count of long slot time stations and disable 1650 * use of short slot time. Note that the actual switch 1651 * over to long slot time use may not occur until the 1652 * next beacon transmission (per sec. 7.3.1.4 of 11g). 1653 */ 1654 if ((ni->ni_capinfo & IEEE80211_CAPINFO_SHORT_SLOTTIME) == 0) { 1655 ic->ic_longslotsta++; | 1652/* 1653 * Handle a station joining an 11g network. 1654 */ 1655static void 1656ieee80211_node_join_11g(struct ieee80211com *ic, struct ieee80211_node *ni) 1657{ 1658 1659 /* 1660 * Station isn't capable of short slot time. Bump 1661 * the count of long slot time stations and disable 1662 * use of short slot time. Note that the actual switch 1663 * over to long slot time use may not occur until the 1664 * next beacon transmission (per sec. 7.3.1.4 of 11g). 1665 */ 1666 if ((ni->ni_capinfo & IEEE80211_CAPINFO_SHORT_SLOTTIME) == 0) { 1667 ic->ic_longslotsta++; |
1656 IEEE80211_DPRINTF(ic, IEEE80211_MSG_ASSOC, 1657 "[%s] station needs long slot time, count %d\n", 1658 ether_sprintf(ni->ni_macaddr), ic->ic_longslotsta); | 1668 IEEE80211_NOTE(ic, IEEE80211_MSG_ASSOC, ni, 1669 "station needs long slot time, count %d", 1670 ic->ic_longslotsta); |
1659 /* XXX vap's w/ conflicting needs won't work */ 1660 if (!IEEE80211_IS_CHAN_108G(ic->ic_bsschan)) { 1661 /* 1662 * Don't force slot time when switched to turbo 1663 * mode as non-ERP stations won't be present; this 1664 * need only be done when on the normal G channel. 1665 */ 1666 ieee80211_set_shortslottime(ic, 0); 1667 } 1668 } 1669 /* 1670 * If the new station is not an ERP station 1671 * then bump the counter and enable protection 1672 * if configured. 1673 */ 1674 if (!ieee80211_iserp_rateset(ic, &ni->ni_rates)) { 1675 ic->ic_nonerpsta++; | 1671 /* XXX vap's w/ conflicting needs won't work */ 1672 if (!IEEE80211_IS_CHAN_108G(ic->ic_bsschan)) { 1673 /* 1674 * Don't force slot time when switched to turbo 1675 * mode as non-ERP stations won't be present; this 1676 * need only be done when on the normal G channel. 1677 */ 1678 ieee80211_set_shortslottime(ic, 0); 1679 } 1680 } 1681 /* 1682 * If the new station is not an ERP station 1683 * then bump the counter and enable protection 1684 * if configured. 1685 */ 1686 if (!ieee80211_iserp_rateset(ic, &ni->ni_rates)) { 1687 ic->ic_nonerpsta++; |
1676 IEEE80211_DPRINTF(ic, IEEE80211_MSG_ASSOC, 1677 "[%s] station is !ERP, %d non-ERP stations associated\n", 1678 ether_sprintf(ni->ni_macaddr), ic->ic_nonerpsta); | 1688 IEEE80211_NOTE(ic, IEEE80211_MSG_ASSOC, ni, 1689 "station is !ERP, %d non-ERP stations associated", 1690 ic->ic_nonerpsta); |
1679 /* | 1691 /* |
1680 * If protection is configured, enable it. 1681 */ 1682 if (ic->ic_protmode != IEEE80211_PROT_NONE) { 1683 IEEE80211_DPRINTF(ic, IEEE80211_MSG_ASSOC, 1684 "%s: enable use of protection\n", __func__); 1685 ic->ic_flags |= IEEE80211_F_USEPROT; 1686 } 1687 /* | |
1688 * If station does not support short preamble 1689 * then we must enable use of Barker preamble. 1690 */ 1691 if ((ni->ni_capinfo & IEEE80211_CAPINFO_SHORT_PREAMBLE) == 0) { | 1692 * If station does not support short preamble 1693 * then we must enable use of Barker preamble. 1694 */ 1695 if ((ni->ni_capinfo & IEEE80211_CAPINFO_SHORT_PREAMBLE) == 0) { |
1692 IEEE80211_DPRINTF(ic, IEEE80211_MSG_ASSOC, 1693 "[%s] station needs long preamble\n", 1694 ether_sprintf(ni->ni_macaddr)); | 1696 IEEE80211_NOTE(ic, IEEE80211_MSG_ASSOC, ni, 1697 "%s", "station needs long preamble"); |
1695 ic->ic_flags |= IEEE80211_F_USEBARKER; 1696 ic->ic_flags &= ~IEEE80211_F_SHPREAMBLE; 1697 } | 1698 ic->ic_flags |= IEEE80211_F_USEBARKER; 1699 ic->ic_flags &= ~IEEE80211_F_SHPREAMBLE; 1700 } |
1698 if (ic->ic_nonerpsta == 1) 1699 ic->ic_flags_ext |= IEEE80211_FEXT_ERPUPDATE; | 1701 /* 1702 * If protection is configured, enable it. 1703 */ 1704 if (ic->ic_protmode != IEEE80211_PROT_NONE && 1705 ic->ic_nonerpsta == 1 && 1706 (ic->ic_flags_ext & IEEE80211_FEXT_NONERP_PR) == 0) { 1707 IEEE80211_DPRINTF(ic, IEEE80211_MSG_ASSOC, 1708 "%s: enable use of protection\n", __func__); 1709 ic->ic_flags |= IEEE80211_F_USEPROT; 1710 ieee80211_notify_erp(ic); 1711 } |
1700 } else 1701 ni->ni_flags |= IEEE80211_NODE_ERP; 1702} 1703 1704void 1705ieee80211_node_join(struct ieee80211com *ic, struct ieee80211_node *ni, int resp) 1706{ 1707 int newassoc; --- 21 unchanged lines hidden (view full) --- 1729 ic->ic_sta_assoc++; 1730 newassoc = 1; 1731 if (IEEE80211_IS_CHAN_ANYG(ic->ic_bsschan) && 1732 IEEE80211_IS_CHAN_FULL(ic->ic_bsschan)) 1733 ieee80211_node_join_11g(ic, ni); 1734 } else 1735 newassoc = 0; 1736 | 1712 } else 1713 ni->ni_flags |= IEEE80211_NODE_ERP; 1714} 1715 1716void 1717ieee80211_node_join(struct ieee80211com *ic, struct ieee80211_node *ni, int resp) 1718{ 1719 int newassoc; --- 21 unchanged lines hidden (view full) --- 1741 ic->ic_sta_assoc++; 1742 newassoc = 1; 1743 if (IEEE80211_IS_CHAN_ANYG(ic->ic_bsschan) && 1744 IEEE80211_IS_CHAN_FULL(ic->ic_bsschan)) 1745 ieee80211_node_join_11g(ic, ni); 1746 } else 1747 newassoc = 0; 1748 |
1737 IEEE80211_DPRINTF(ic, IEEE80211_MSG_ASSOC | IEEE80211_MSG_DEBUG, 1738 "[%s] station %sassociated at aid %d: %s preamble, %s slot time%s%s%s%s%s\n", 1739 ether_sprintf(ni->ni_macaddr), newassoc ? "" : "re", | 1749 IEEE80211_NOTE(ic, IEEE80211_MSG_ASSOC | IEEE80211_MSG_DEBUG, ni, 1750 "station %sassociated at aid %d: %s preamble, %s slot time%s%s%s%s%s", 1751 newassoc ? "" : "re", |
1740 IEEE80211_NODE_AID(ni), 1741 ic->ic_flags & IEEE80211_F_SHPREAMBLE ? "short" : "long", 1742 ic->ic_flags & IEEE80211_F_SHSLOT ? "short" : "long", 1743 ic->ic_flags & IEEE80211_F_USEPROT ? ", protection" : "", 1744 ni->ni_flags & IEEE80211_NODE_QOS ? ", QoS" : "", 1745 ni->ni_flags & IEEE80211_NODE_HT ? 1746 (ni->ni_chw == 20 ? ", HT20" : ", HT40") : "", 1747 IEEE80211_ATH_CAP(ic, ni, IEEE80211_NODE_FF) ? --- 7 unchanged lines hidden (view full) --- 1755 ic->ic_newassoc(ni, newassoc); 1756 IEEE80211_SEND_MGMT(ic, ni, resp, IEEE80211_STATUS_SUCCESS); 1757 /* tell the authenticator about new station */ 1758 if (ic->ic_auth->ia_node_join != NULL) 1759 ic->ic_auth->ia_node_join(ic, ni); 1760 ieee80211_notify_node_join(ic, ni, newassoc); 1761} 1762 | 1752 IEEE80211_NODE_AID(ni), 1753 ic->ic_flags & IEEE80211_F_SHPREAMBLE ? "short" : "long", 1754 ic->ic_flags & IEEE80211_F_SHSLOT ? "short" : "long", 1755 ic->ic_flags & IEEE80211_F_USEPROT ? ", protection" : "", 1756 ni->ni_flags & IEEE80211_NODE_QOS ? ", QoS" : "", 1757 ni->ni_flags & IEEE80211_NODE_HT ? 1758 (ni->ni_chw == 20 ? ", HT20" : ", HT40") : "", 1759 IEEE80211_ATH_CAP(ic, ni, IEEE80211_NODE_FF) ? --- 7 unchanged lines hidden (view full) --- 1767 ic->ic_newassoc(ni, newassoc); 1768 IEEE80211_SEND_MGMT(ic, ni, resp, IEEE80211_STATUS_SUCCESS); 1769 /* tell the authenticator about new station */ 1770 if (ic->ic_auth->ia_node_join != NULL) 1771 ic->ic_auth->ia_node_join(ic, ni); 1772 ieee80211_notify_node_join(ic, ni, newassoc); 1773} 1774 |
1775static void 1776disable_protection(struct ieee80211com *ic) 1777{ 1778 KASSERT(ic->ic_nonerpsta == 0 && 1779 (ic->ic_flags_ext & IEEE80211_FEXT_NONERP_PR) == 0, 1780 ("%d non ERP stations, flags 0x%x", ic->ic_nonerpsta, 1781 ic->ic_flags_ext)); 1782 1783 ic->ic_flags &= ~IEEE80211_F_USEPROT; 1784 /* XXX verify mode? */ 1785 if (ic->ic_caps & IEEE80211_C_SHPREAMBLE) { 1786 ic->ic_flags |= IEEE80211_F_SHPREAMBLE; 1787 ic->ic_flags &= ~IEEE80211_F_USEBARKER; 1788 } 1789 ieee80211_notify_erp(ic); 1790} 1791 |
|
1763/* 1764 * Handle a station leaving an 11g network. 1765 */ 1766static void 1767ieee80211_node_leave_11g(struct ieee80211com *ic, struct ieee80211_node *ni) 1768{ 1769 1770 KASSERT(IEEE80211_IS_CHAN_ANYG(ic->ic_bsschan), 1771 ("not in 11g, bss %u:0x%x, curmode %u", ic->ic_bsschan->ic_freq, 1772 ic->ic_bsschan->ic_flags, ic->ic_curmode)); 1773 1774 /* 1775 * If a long slot station do the slot time bookkeeping. 1776 */ 1777 if ((ni->ni_capinfo & IEEE80211_CAPINFO_SHORT_SLOTTIME) == 0) { 1778 KASSERT(ic->ic_longslotsta > 0, 1779 ("bogus long slot station count %d", ic->ic_longslotsta)); 1780 ic->ic_longslotsta--; | 1792/* 1793 * Handle a station leaving an 11g network. 1794 */ 1795static void 1796ieee80211_node_leave_11g(struct ieee80211com *ic, struct ieee80211_node *ni) 1797{ 1798 1799 KASSERT(IEEE80211_IS_CHAN_ANYG(ic->ic_bsschan), 1800 ("not in 11g, bss %u:0x%x, curmode %u", ic->ic_bsschan->ic_freq, 1801 ic->ic_bsschan->ic_flags, ic->ic_curmode)); 1802 1803 /* 1804 * If a long slot station do the slot time bookkeeping. 1805 */ 1806 if ((ni->ni_capinfo & IEEE80211_CAPINFO_SHORT_SLOTTIME) == 0) { 1807 KASSERT(ic->ic_longslotsta > 0, 1808 ("bogus long slot station count %d", ic->ic_longslotsta)); 1809 ic->ic_longslotsta--; |
1781 IEEE80211_DPRINTF(ic, IEEE80211_MSG_ASSOC, 1782 "[%s] long slot time station leaves, count now %d\n", 1783 ether_sprintf(ni->ni_macaddr), ic->ic_longslotsta); | 1810 IEEE80211_NOTE(ic, IEEE80211_MSG_ASSOC, ni, 1811 "long slot time station leaves, count now %d", 1812 ic->ic_longslotsta); |
1784 if (ic->ic_longslotsta == 0) { 1785 /* 1786 * Re-enable use of short slot time if supported 1787 * and not operating in IBSS mode (per spec). 1788 */ 1789 if ((ic->ic_caps & IEEE80211_C_SHSLOT) && 1790 ic->ic_opmode != IEEE80211_M_IBSS) { 1791 IEEE80211_DPRINTF(ic, IEEE80211_MSG_ASSOC, --- 5 unchanged lines hidden (view full) --- 1797 } 1798 /* 1799 * If a non-ERP station do the protection-related bookkeeping. 1800 */ 1801 if ((ni->ni_flags & IEEE80211_NODE_ERP) == 0) { 1802 KASSERT(ic->ic_nonerpsta > 0, 1803 ("bogus non-ERP station count %d", ic->ic_nonerpsta)); 1804 ic->ic_nonerpsta--; | 1813 if (ic->ic_longslotsta == 0) { 1814 /* 1815 * Re-enable use of short slot time if supported 1816 * and not operating in IBSS mode (per spec). 1817 */ 1818 if ((ic->ic_caps & IEEE80211_C_SHSLOT) && 1819 ic->ic_opmode != IEEE80211_M_IBSS) { 1820 IEEE80211_DPRINTF(ic, IEEE80211_MSG_ASSOC, --- 5 unchanged lines hidden (view full) --- 1826 } 1827 /* 1828 * If a non-ERP station do the protection-related bookkeeping. 1829 */ 1830 if ((ni->ni_flags & IEEE80211_NODE_ERP) == 0) { 1831 KASSERT(ic->ic_nonerpsta > 0, 1832 ("bogus non-ERP station count %d", ic->ic_nonerpsta)); 1833 ic->ic_nonerpsta--; |
1805 IEEE80211_DPRINTF(ic, IEEE80211_MSG_ASSOC, 1806 "[%s] non-ERP station leaves, count now %d\n", 1807 ether_sprintf(ni->ni_macaddr), ic->ic_nonerpsta); 1808 if (ic->ic_nonerpsta == 0) { | 1834 IEEE80211_NOTE(ic, IEEE80211_MSG_ASSOC, ni, 1835 "non-ERP station leaves, count now %d%s", ic->ic_nonerpsta, 1836 (ic->ic_flags_ext & IEEE80211_FEXT_NONERP_PR) ? 1837 " (non-ERP sta present)" : ""); 1838 if (ic->ic_nonerpsta == 0 && 1839 (ic->ic_flags_ext & IEEE80211_FEXT_NONERP_PR) == 0) { |
1809 IEEE80211_DPRINTF(ic, IEEE80211_MSG_ASSOC, 1810 "%s: disable use of protection\n", __func__); | 1840 IEEE80211_DPRINTF(ic, IEEE80211_MSG_ASSOC, 1841 "%s: disable use of protection\n", __func__); |
1811 ic->ic_flags &= ~IEEE80211_F_USEPROT; 1812 /* XXX verify mode? */ 1813 if (ic->ic_caps & IEEE80211_C_SHPREAMBLE) { 1814 IEEE80211_DPRINTF(ic, IEEE80211_MSG_ASSOC, 1815 "%s: re-enable use of short preamble\n", 1816 __func__); 1817 ic->ic_flags |= IEEE80211_F_SHPREAMBLE; 1818 ic->ic_flags &= ~IEEE80211_F_USEBARKER; 1819 } 1820 ic->ic_flags_ext |= IEEE80211_FEXT_ERPUPDATE; | 1842 disable_protection(ic); |
1821 } 1822 } 1823} 1824 1825/* | 1843 } 1844 } 1845} 1846 1847/* |
1848 * Time out presence of an overlapping bss with non-ERP 1849 * stations. When operating in hostap mode we listen for 1850 * beacons from other stations and if we identify a non-ERP 1851 * station is present we enable protection. To identify 1852 * when all non-ERP stations are gone we time out this 1853 * condition. 1854 */ 1855static void 1856ieee80211_erp_timeout(struct ieee80211com *ic) 1857{ 1858 1859 IEEE80211_LOCK_ASSERT(ic); 1860 1861 if ((ic->ic_flags_ext & IEEE80211_FEXT_NONERP_PR) && 1862 time_after(ticks, ic->ic_lastnonerp + IEEE80211_NONERP_PRESENT_AGE)) { 1863 IEEE80211_DPRINTF(ic, IEEE80211_MSG_ASSOC, 1864 "%s\n", "age out non-ERP sta present on channel"); 1865 ic->ic_flags_ext &= ~IEEE80211_FEXT_NONERP_PR; 1866 if (ic->ic_nonerpsta == 0) 1867 disable_protection(ic); 1868 } 1869} 1870 1871/* |
|
1826 * Handle bookkeeping for station deauthentication/disassociation 1827 * when operating as an ap. 1828 */ 1829void 1830ieee80211_node_leave(struct ieee80211com *ic, struct ieee80211_node *ni) 1831{ 1832 struct ieee80211_node_table *nt = ni->ni_table; 1833 | 1872 * Handle bookkeeping for station deauthentication/disassociation 1873 * when operating as an ap. 1874 */ 1875void 1876ieee80211_node_leave(struct ieee80211com *ic, struct ieee80211_node *ni) 1877{ 1878 struct ieee80211_node_table *nt = ni->ni_table; 1879 |
1834 IEEE80211_DPRINTF(ic, IEEE80211_MSG_ASSOC | IEEE80211_MSG_DEBUG, 1835 "[%s] station with aid %d leaves\n", 1836 ether_sprintf(ni->ni_macaddr), IEEE80211_NODE_AID(ni)); | 1880 IEEE80211_NOTE(ic, IEEE80211_MSG_ASSOC | IEEE80211_MSG_DEBUG, ni, 1881 "station with aid %d leaves", IEEE80211_NODE_AID(ni)); |
1837 1838 KASSERT(ic->ic_opmode != IEEE80211_M_STA, 1839 ("unexpected operating mode %u", ic->ic_opmode)); 1840 /* 1841 * If node wasn't previously associated all 1842 * we need to do is reclaim the reference. 1843 */ 1844 /* XXX ibss mode bypasses 11g and notification */ --- 157 unchanged lines hidden --- | 1882 1883 KASSERT(ic->ic_opmode != IEEE80211_M_STA, 1884 ("unexpected operating mode %u", ic->ic_opmode)); 1885 /* 1886 * If node wasn't previously associated all 1887 * we need to do is reclaim the reference. 1888 */ 1889 /* XXX ibss mode bypasses 11g and notification */ --- 157 unchanged lines hidden --- |