From nobody Tue Nov 29 21:21:02 2022 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4NMFct3NhCz4jnDM; Tue, 29 Nov 2022 21:21:02 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4NMFct3Db8z3QrR; Tue, 29 Nov 2022 21:21:02 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1669756862; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=oS6G8dSyklIiSomc0EQ8pPUAYy7JsIqvKuvwNSJW36s=; b=sDlOceJflLe8PBO6yPjLSLEezQcjzAmIkBJwjOgAhHgQ17CEzVfQz1fO5vV1qMMSPfnJ1s CSwcqLhY5TgK3bv83LwqdBEsMrj5TNxKeenKccz1oZUmP/2yOiemx/qNnzZMKcpH+Vgia6 FgnnWQDBMZvTxaX0Rr3tf8fyTY6vimncwejQdgGR9Hmwyx9jmSqlSDMy6HhaNNaAve4IOq x+nTW4ZVJAY6sBotU06B8YAjiYiezODxJt4rtmIaqDd9ZelSeRqazunzXP8YhSrA3KJVeE I3m+R3aXhl5sZ0ColRmlHZp09Uu6nViaAObMTdhSuzOYvaE10RrThOKikZ0Q/Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1669756862; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=oS6G8dSyklIiSomc0EQ8pPUAYy7JsIqvKuvwNSJW36s=; b=RbvXrE99eQfQXo7QuRbvNK+DxFTrjt6PmL0oVzkcsgeudTBJJ229RT3K2siNdz9FgfFD8/ ZvQVd6/7Jpqkm3yVXkHc9ZZRnHJAV2BUjlB+VZdcnAvpOSpdenWMKgwDSyBTGbkXhOkO0G 8au2pRnv7V4cV/rd+V5epzvbMwYRglNVeX32qrfnSVj4DMPkFghO6+178Yn3RIdN6sNbra 2sgjEL2wSLzMY/OLAnrC3QQMOHGSUiShHRKFgT7u1ATU5/qPuIDDM2WP3n4GG89QQ6X8eC JN8UC2X9TG9kM/h/DnfY7yDr90GMUASayJpYmHSN/z+i7c4G3AaZxmzpWXTtoA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1669756862; a=rsa-sha256; cv=none; b=Og9gHP/GxySibQXHRa8Iibt+C8J5UDwm6PWWY9RCBmWCbe1vdNBSLUjVZ/2dWp3wRwdSEA dhtoVBgMsgOKq9kNgEL5JQO8oKG6Rv/CBMNzaur/Papu1nj8VXdvVH/huiKLthLi0V8xzp NJQoVYFs0s3sp4M0cdlYkyIA5ksBLqlxwuIE40Jp7Ns4sV2h63jn5ofxjp5oVULaGmcVzb PUZvyzX3S5P6G0/omuCtKp06xLahl7YS3MlDdjp+sgmUtxOjTuE9m3uf7en/3Wh4DvAnde DFDIfdZKl4VA0mx1iLZIU9vsGow5zzZipC11hl2/1b65J0N+y5HVGpsu3gvaMQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4NMFct2J05zXDq; Tue, 29 Nov 2022 21:21:02 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 2ATLL2hO065611; Tue, 29 Nov 2022 21:21:02 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 2ATLL28P065610; Tue, 29 Nov 2022 21:21:02 GMT (envelope-from git) Date: Tue, 29 Nov 2022 21:21:02 GMT Message-Id: <202211292121.2ATLL28P065610@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: "Bjoern A. Zeeb" Subject: git: 4a8e4d15465c - main - net80211: fix IEEE80211_DEBUG_REFCNT builds List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bz X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 4a8e4d15465cbf6f1bc4c6a09f50f97ae2d5bd7d Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by bz: URL: https://cgit.FreeBSD.org/src/commit/?id=4a8e4d15465cbf6f1bc4c6a09f50f97ae2d5bd7d commit 4a8e4d15465cbf6f1bc4c6a09f50f97ae2d5bd7d Author: Bjoern A. Zeeb AuthorDate: 2022-11-29 18:21:05 +0000 Commit: Bjoern A. Zeeb CommitDate: 2022-11-29 21:20:37 +0000 net80211: fix IEEE80211_DEBUG_REFCNT builds Remove the KPI/KBI changes from ieee80211_node.h and always use the macros to pass in __func__ and __LINE__ to the functions. The actual implementations are prefixed by "_" rather than suffixed by "_debug" as they no longer are "debug"-specific. Some of the select functions were not actually using the passed in func, line options; however they are calling other functions which use them. Directly call the internal implementation in those cases passing the arguments on. Use a file-local __debrefcnt_used define to mark the arguments __unused in cases when we compile without IEEE80211_DEBUG_REFCNT and hope the toolchain is intelligent enough to not pass them at all in those cases. Also _ieee80211_free_node() now has a conflict so make the previous _ieee80211_free_node() the new __ieee80211_free_node(). Add IEEE80211_DEBUG_REFCNT to the NOTES file on amd64 to keep exercising the option. Sponsored by: The FreeBSD Foundation X-MFC: never Discussed on: freebsd-wireless Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D37529 --- sys/amd64/conf/NOTES | 3 ++ sys/net80211/ieee80211_node.c | 120 ++++++++++++++++-------------------------- sys/net80211/ieee80211_node.h | 55 +++++++------------ 3 files changed, 67 insertions(+), 111 deletions(-) diff --git a/sys/amd64/conf/NOTES b/sys/amd64/conf/NOTES index 42cc23d076b9..0781d03900ca 100644 --- a/sys/amd64/conf/NOTES +++ b/sys/amd64/conf/NOTES @@ -380,6 +380,9 @@ device iwn6000g2bfw device iwn6050fw device wpifw +# net80211 options +options IEEE80211_DEBUG_REFCNT + # # Non-Transparent Bridge (NTB) drivers # diff --git a/sys/net80211/ieee80211_node.c b/sys/net80211/ieee80211_node.c index bc8a240811de..8a31a4576b3f 100644 --- a/sys/net80211/ieee80211_node.c +++ b/sys/net80211/ieee80211_node.c @@ -59,6 +59,12 @@ __FBSDID("$FreeBSD$"); #include +#ifdef IEEE80211_DEBUG_REFCNT +#define __debrefcnt_used +#else +#define __debrefcnt_used __unused +#endif + /* * IEEE80211_NODE_HASHSIZE must be a power of 2. */ @@ -89,7 +95,7 @@ static void node_getsignal(const struct ieee80211_node *, int8_t *, int8_t *); static void node_getmimoinfo(const struct ieee80211_node *, struct ieee80211_mimo_info *); -static void _ieee80211_free_node(struct ieee80211_node *); +static void __ieee80211_free_node(struct ieee80211_node *); static void node_reclaim(struct ieee80211_node_table *nt, struct ieee80211_node *ni); @@ -1436,7 +1442,7 @@ ieee80211_alloc_node(struct ieee80211_node_table *nt, vap->iv_stats.is_rx_nodealloc++; ieee80211_psq_cleanup(&ni->ni_psq); ieee80211_ratectl_node_deinit(ni); - _ieee80211_free_node(ni); + __ieee80211_free_node(ni); return NULL; } @@ -1488,7 +1494,7 @@ ieee80211_tmp_node(struct ieee80211vap *vap, vap->iv_stats.is_rx_nodealloc++; ieee80211_psq_cleanup(&ni->ni_psq); ieee80211_ratectl_node_deinit(ni); - _ieee80211_free_node(ni); + __ieee80211_free_node(ni); return NULL; } @@ -1586,13 +1592,9 @@ ieee80211_node_create_wds(struct ieee80211vap *vap, } struct ieee80211_node * -#ifdef IEEE80211_DEBUG_REFCNT -ieee80211_find_node_locked_debug(struct ieee80211_node_table *nt, - const uint8_t macaddr[IEEE80211_ADDR_LEN], const char *func, int line) -#else -ieee80211_find_node_locked(struct ieee80211_node_table *nt, - const uint8_t macaddr[IEEE80211_ADDR_LEN]) -#endif +_ieee80211_find_node_locked(struct ieee80211_node_table *nt, + const uint8_t macaddr[IEEE80211_ADDR_LEN], + const char *func __debrefcnt_used, int line __debrefcnt_used) { struct ieee80211_node *ni; int hash; @@ -1617,32 +1619,22 @@ ieee80211_find_node_locked(struct ieee80211_node_table *nt, } struct ieee80211_node * -#ifdef IEEE80211_DEBUG_REFCNT -ieee80211_find_node_debug(struct ieee80211_node_table *nt, - const uint8_t macaddr[IEEE80211_ADDR_LEN], const char *func, int line) -#else -ieee80211_find_node(struct ieee80211_node_table *nt, - const uint8_t macaddr[IEEE80211_ADDR_LEN]) -#endif +_ieee80211_find_node(struct ieee80211_node_table *nt, + const uint8_t macaddr[IEEE80211_ADDR_LEN], + const char *func __debrefcnt_used, int line __debrefcnt_used) { struct ieee80211_node *ni; IEEE80211_NODE_LOCK(nt); - ni = ieee80211_find_node_locked(nt, macaddr); + ni = _ieee80211_find_node_locked(nt, macaddr, func, line); IEEE80211_NODE_UNLOCK(nt); return ni; } struct ieee80211_node * -#ifdef IEEE80211_DEBUG_REFCNT -ieee80211_find_vap_node_locked_debug(struct ieee80211_node_table *nt, - const struct ieee80211vap *vap, - const uint8_t macaddr[IEEE80211_ADDR_LEN], const char *func, int line) -#else -ieee80211_find_vap_node_locked(struct ieee80211_node_table *nt, - const struct ieee80211vap *vap, - const uint8_t macaddr[IEEE80211_ADDR_LEN]) -#endif +_ieee80211_find_vap_node_locked(struct ieee80211_node_table *nt, + const struct ieee80211vap *vap, const uint8_t macaddr[IEEE80211_ADDR_LEN], + const char *func __debrefcnt_used, int line __debrefcnt_used) { struct ieee80211_node *ni; int hash; @@ -1668,20 +1660,14 @@ ieee80211_find_vap_node_locked(struct ieee80211_node_table *nt, } struct ieee80211_node * -#ifdef IEEE80211_DEBUG_REFCNT -ieee80211_find_vap_node_debug(struct ieee80211_node_table *nt, - const struct ieee80211vap *vap, - const uint8_t macaddr[IEEE80211_ADDR_LEN], const char *func, int line) -#else -ieee80211_find_vap_node(struct ieee80211_node_table *nt, - const struct ieee80211vap *vap, - const uint8_t macaddr[IEEE80211_ADDR_LEN]) -#endif +_ieee80211_find_vap_node(struct ieee80211_node_table *nt, + const struct ieee80211vap *vap, const uint8_t macaddr[IEEE80211_ADDR_LEN], + const char *func __debrefcnt_used, int line __debrefcnt_used) { struct ieee80211_node *ni; IEEE80211_NODE_LOCK(nt); - ni = ieee80211_find_vap_node_locked(nt, vap, macaddr); + ni = _ieee80211_find_vap_node_locked(nt, vap, macaddr, func, line); IEEE80211_NODE_UNLOCK(nt); return ni; } @@ -1933,11 +1919,12 @@ ieee80211_add_neighbor(struct ieee80211vap *vap, static __inline struct ieee80211_node * _find_rxnode(struct ieee80211_node_table *nt, - const struct ieee80211_frame_min *wh) + const struct ieee80211_frame_min *wh, + const char *func __debrefcnt_used, int line __debrefcnt_used) { if (IS_BCAST_PROBEREQ(wh)) return NULL; /* spam bcast probe req to all vap's */ - return ieee80211_find_node_locked(nt, wh->i_addr2); + return _ieee80211_find_node_locked(nt, wh->i_addr2, func, line); } /* @@ -1946,20 +1933,16 @@ _find_rxnode(struct ieee80211_node_table *nt, * we can return NULL if the sender is not in the table. */ struct ieee80211_node * -#ifdef IEEE80211_DEBUG_REFCNT -ieee80211_find_rxnode_debug(struct ieee80211com *ic, - const struct ieee80211_frame_min *wh, const char *func, int line) -#else -ieee80211_find_rxnode(struct ieee80211com *ic, - const struct ieee80211_frame_min *wh) -#endif +_ieee80211_find_rxnode(struct ieee80211com *ic, + const struct ieee80211_frame_min *wh, + const char *func __debrefcnt_used, int line __debrefcnt_used) { struct ieee80211_node_table *nt; struct ieee80211_node *ni; nt = &ic->ic_sta; IEEE80211_NODE_LOCK(nt); - ni = _find_rxnode(nt, wh); + ni = _find_rxnode(nt, wh, func, line); IEEE80211_NODE_UNLOCK(nt); return ni; @@ -1974,14 +1957,9 @@ ieee80211_find_rxnode(struct ieee80211com *ic, * key assigned to it. */ struct ieee80211_node * -#ifdef IEEE80211_DEBUG_REFCNT -ieee80211_find_rxnode_withkey_debug(struct ieee80211com *ic, - const struct ieee80211_frame_min *wh, ieee80211_keyix keyix, - const char *func, int line) -#else -ieee80211_find_rxnode_withkey(struct ieee80211com *ic, - const struct ieee80211_frame_min *wh, ieee80211_keyix keyix) -#endif +_ieee80211_find_rxnode_withkey(struct ieee80211com *ic, + const struct ieee80211_frame_min *wh, ieee80211_keyix keyix, + const char *func __debrefcnt_used, int line __debrefcnt_used) { struct ieee80211_node_table *nt; struct ieee80211_node *ni; @@ -1993,7 +1971,7 @@ ieee80211_find_rxnode_withkey(struct ieee80211com *ic, else ni = NULL; if (ni == NULL) { - ni = _find_rxnode(nt, wh); + ni = _find_rxnode(nt, wh, func, line); if (ni != NULL && nt->nt_keyixmap != NULL) { /* * If the station has a unicast key cache slot @@ -2029,14 +2007,9 @@ ieee80211_find_rxnode_withkey(struct ieee80211com *ic, * a data frame. This handles node discovery in adhoc networks. */ struct ieee80211_node * -#ifdef IEEE80211_DEBUG_REFCNT -ieee80211_find_txnode_debug(struct ieee80211vap *vap, - const uint8_t macaddr[IEEE80211_ADDR_LEN], - const char *func, int line) -#else -ieee80211_find_txnode(struct ieee80211vap *vap, - const uint8_t macaddr[IEEE80211_ADDR_LEN]) -#endif +_ieee80211_find_txnode(struct ieee80211vap *vap, + const uint8_t macaddr[IEEE80211_ADDR_LEN], + const char *func __debrefcnt_used, int line __debrefcnt_used) { struct ieee80211_node_table *nt = &vap->iv_ic->ic_sta; struct ieee80211_node *ni; @@ -2054,7 +2027,7 @@ ieee80211_find_txnode(struct ieee80211vap *vap, IEEE80211_IS_MULTICAST(macaddr)) ni = ieee80211_ref_node(vap->iv_bss); else - ni = ieee80211_find_node_locked(nt, macaddr); + ni = _ieee80211_find_node_locked(nt, macaddr, func, line); IEEE80211_NODE_UNLOCK(nt); if (ni == NULL) { @@ -2083,7 +2056,7 @@ ieee80211_find_txnode(struct ieee80211vap *vap, } static void -_ieee80211_free_node(struct ieee80211_node *ni) +__ieee80211_free_node(struct ieee80211_node *ni) { struct ieee80211_node_table *nt = ni->ni_table; @@ -2132,11 +2105,8 @@ node_clear_keyixmap(struct ieee80211_node_table *nt, struct ieee80211_node *ni) } void -#ifdef IEEE80211_DEBUG_REFCNT -ieee80211_free_node_debug(struct ieee80211_node *ni, const char *func, int line) -#else -ieee80211_free_node(struct ieee80211_node *ni) -#endif +_ieee80211_free_node(struct ieee80211_node *ni, + const char *func __debrefcnt_used, int line __debrefcnt_used) { struct ieee80211_node_table *nt = ni->ni_table; @@ -2151,14 +2121,14 @@ ieee80211_free_node(struct ieee80211_node *ni) /* * Last reference, reclaim state. */ - _ieee80211_free_node(ni); + __ieee80211_free_node(ni); } else if (ieee80211_node_refcnt(ni) == 1) if (node_clear_keyixmap(nt, ni)) - _ieee80211_free_node(ni); + __ieee80211_free_node(ni); IEEE80211_NODE_UNLOCK(nt); } else { if (ieee80211_node_dectestref(ni)) - _ieee80211_free_node(ni); + __ieee80211_free_node(ni); } } @@ -2246,7 +2216,7 @@ node_reclaim(struct ieee80211_node_table *nt, struct ieee80211_node *ni) */ ieee80211_del_node_nt(nt, ni); } else - _ieee80211_free_node(ni); + __ieee80211_free_node(ni); } /* diff --git a/sys/net80211/ieee80211_node.h b/sys/net80211/ieee80211_node.h index 0e885440687c..2d237c3d597f 100644 --- a/sys/net80211/ieee80211_node.h +++ b/sys/net80211/ieee80211_node.h @@ -407,71 +407,54 @@ struct ieee80211_node *ieee80211_dup_bss(struct ieee80211vap *, struct ieee80211_node *ieee80211_node_create_wds(struct ieee80211vap *, const uint8_t bssid[IEEE80211_ADDR_LEN], struct ieee80211_channel *); -#ifdef IEEE80211_DEBUG_REFCNT -void ieee80211_free_node_debug(struct ieee80211_node *, + +/* These functions are taking __func__, __LINE__ for IEEE80211_DEBUG_REFCNT */ +void _ieee80211_free_node(struct ieee80211_node *, const char *func, int line); -struct ieee80211_node *ieee80211_find_node_locked_debug( +struct ieee80211_node *_ieee80211_find_node_locked( struct ieee80211_node_table *, const uint8_t macaddr[IEEE80211_ADDR_LEN], const char *func, int line); -struct ieee80211_node *ieee80211_find_node_debug(struct ieee80211_node_table *, +struct ieee80211_node *_ieee80211_find_node(struct ieee80211_node_table *, const uint8_t macaddr[IEEE80211_ADDR_LEN], const char *func, int line); -struct ieee80211_node *ieee80211_find_vap_node_locked_debug( +struct ieee80211_node *_ieee80211_find_vap_node_locked( struct ieee80211_node_table *, const struct ieee80211vap *vap, const uint8_t macaddr[IEEE80211_ADDR_LEN], const char *func, int line); -struct ieee80211_node *ieee80211_find_vap_node_debug( +struct ieee80211_node *_ieee80211_find_vap_node( struct ieee80211_node_table *, const struct ieee80211vap *vap, const uint8_t macaddr[IEEE80211_ADDR_LEN], const char *func, int line); -struct ieee80211_node * ieee80211_find_rxnode_debug(struct ieee80211com *, +struct ieee80211_node *_ieee80211_find_rxnode(struct ieee80211com *, const struct ieee80211_frame_min *, const char *func, int line); -struct ieee80211_node * ieee80211_find_rxnode_withkey_debug( +struct ieee80211_node *_ieee80211_find_rxnode_withkey( struct ieee80211com *, const struct ieee80211_frame_min *, uint16_t keyix, const char *func, int line); -struct ieee80211_node *ieee80211_find_txnode_debug(struct ieee80211vap *, +struct ieee80211_node *_ieee80211_find_txnode(struct ieee80211vap *, const uint8_t *, const char *func, int line); #define ieee80211_free_node(ni) \ - ieee80211_free_node_debug(ni, __func__, __LINE__) + _ieee80211_free_node(ni, __func__, __LINE__) #define ieee80211_find_node_locked(nt, mac) \ - ieee80211_find_node_locked_debug(nt, mac, __func__, __LINE__) + _ieee80211_find_node_locked(nt, mac, __func__, __LINE__) #define ieee80211_find_node(nt, mac) \ - ieee80211_find_node_debug(nt, mac, __func__, __LINE__) + _ieee80211_find_node(nt, mac, __func__, __LINE__) #define ieee80211_find_vap_node_locked(nt, vap, mac) \ - ieee80211_find_vap_node_locked_debug(nt, vap, mac, __func__, __LINE__) + _ieee80211_find_vap_node_locked(nt, vap, mac, __func__, __LINE__) #define ieee80211_find_vap_node(nt, vap, mac) \ - ieee80211_find_vap_node_debug(nt, vap, mac, __func__, __LINE__) + _ieee80211_find_vap_node(nt, vap, mac, __func__, __LINE__) #define ieee80211_find_rxnode(ic, wh) \ - ieee80211_find_rxnode_debug(ic, wh, __func__, __LINE__) + _ieee80211_find_rxnode(ic, wh, __func__, __LINE__) #define ieee80211_find_rxnode_withkey(ic, wh, keyix) \ - ieee80211_find_rxnode_withkey_debug(ic, wh, keyix, __func__, __LINE__) + _ieee80211_find_rxnode_withkey(ic, wh, keyix, __func__, __LINE__) #define ieee80211_find_txnode(vap, mac) \ - ieee80211_find_txnode_debug(vap, mac, __func__, __LINE__) -#else -void ieee80211_free_node(struct ieee80211_node *); -struct ieee80211_node *ieee80211_find_node_locked(struct ieee80211_node_table *, - const uint8_t macaddr[IEEE80211_ADDR_LEN]); -struct ieee80211_node *ieee80211_find_node(struct ieee80211_node_table *, - const uint8_t macaddr[IEEE80211_ADDR_LEN]); -struct ieee80211_node *ieee80211_find_vap_node_locked( - struct ieee80211_node_table *, const struct ieee80211vap *, - const uint8_t macaddr[IEEE80211_ADDR_LEN]); -struct ieee80211_node *ieee80211_find_vap_node( - struct ieee80211_node_table *, const struct ieee80211vap *, - const uint8_t macaddr[IEEE80211_ADDR_LEN]); -struct ieee80211_node * ieee80211_find_rxnode(struct ieee80211com *, - const struct ieee80211_frame_min *); -struct ieee80211_node * ieee80211_find_rxnode_withkey(struct ieee80211com *, - const struct ieee80211_frame_min *, uint16_t keyix); -struct ieee80211_node *ieee80211_find_txnode(struct ieee80211vap *, - const uint8_t macaddr[IEEE80211_ADDR_LEN]); -#endif + _ieee80211_find_txnode(vap, mac, __func__, __LINE__) + int ieee80211_node_delucastkey(struct ieee80211_node *); void ieee80211_node_timeout(void *arg);