Deleted Added
full compact
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 ---