[BACK]Return to ieee80211_rssadapt.h CVS log [TXT][DIR] Up to [local] / sys / net80211

Annotation of sys/net80211/ieee80211_rssadapt.h, Revision 1.1

1.1     ! nbrk        1: /* $OpenBSD: ieee80211_rssadapt.h,v 1.4 2007/06/16 13:17:05 damien Exp $ */
        !             2: /* $NetBSD: ieee80211_rssadapt.h,v 1.3 2004/05/06 03:03:20 dyoung Exp $ */
        !             3:
        !             4: /*-
        !             5:  * Copyright (c) 2003, 2004 David Young.  All rights reserved.
        !             6:  *
        !             7:  * Redistribution and use in source and binary forms, with or
        !             8:  * without modification, are permitted provided that the following
        !             9:  * conditions are met:
        !            10:  * 1. Redistributions of source code must retain the above copyright
        !            11:  *    notice, this list of conditions and the following disclaimer.
        !            12:  * 2. Redistributions in binary form must reproduce the above
        !            13:  *    copyright notice, this list of conditions and the following
        !            14:  *    disclaimer in the documentation and/or other materials provided
        !            15:  *    with the distribution.
        !            16:  * 3. The name of David Young may not be used to endorse or promote
        !            17:  *    products derived from this software without specific prior
        !            18:  *    written permission.
        !            19:  *
        !            20:  * THIS SOFTWARE IS PROVIDED BY David Young ``AS IS'' AND ANY
        !            21:  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
        !            22:  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
        !            23:  * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL David
        !            24:  * Young BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
        !            25:  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
        !            26:  * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
        !            27:  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
        !            28:  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
        !            29:  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            30:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
        !            31:  * OF SUCH DAMAGE.
        !            32:  */
        !            33: #ifndef _NET80211_IEEE80211_RSSADAPT_H_
        !            34: #define _NET80211_IEEE80211_RSSADAPT_H_
        !            35:
        !            36: /* Data-rate adaptation loosely based on "Link Adaptation Strategy
        !            37:  * for IEEE 802.11 WLAN via Received Signal Strength Measurement"
        !            38:  * by Javier del Prado Pavon and Sunghyun Choi.
        !            39:  */
        !            40:
        !            41: /* Buckets for frames 0-128 bytes long, 129-1024, 1025-maximum. */
        !            42: #define        IEEE80211_RSSADAPT_BKTS         3
        !            43: #define IEEE80211_RSSADAPT_BKT0                128
        !            44: #define        IEEE80211_RSSADAPT_BKTPOWER     3       /* 2**_BKTPOWER */
        !            45:
        !            46: #define        ieee80211_rssadapt_thresh_new \
        !            47:     (ieee80211_rssadapt_thresh_denom - ieee80211_rssadapt_thresh_old)
        !            48: #define        ieee80211_rssadapt_decay_new \
        !            49:     (ieee80211_rssadapt_decay_denom - ieee80211_rssadapt_decay_old)
        !            50: #define        ieee80211_rssadapt_avgrssi_new \
        !            51:     (ieee80211_rssadapt_avgrssi_denom - ieee80211_rssadapt_avgrssi_old)
        !            52:
        !            53: struct ieee80211_rssadapt_expavgctl {
        !            54:        /* RSS threshold decay. */
        !            55:        u_int rc_decay_denom;
        !            56:        u_int rc_decay_old;
        !            57:        /* RSS threshold update. */
        !            58:        u_int rc_thresh_denom;
        !            59:        u_int rc_thresh_old;
        !            60:        /* RSS average update. */
        !            61:        u_int rc_avgrssi_denom;
        !            62:        u_int rc_avgrssi_old;
        !            63: };
        !            64:
        !            65: struct ieee80211_rssadapt {
        !            66:        /* exponential average RSSI << 8 */
        !            67:        u_int16_t               ra_avg_rssi;
        !            68:        /* Tx failures in this update interval */
        !            69:        u_int32_t               ra_nfail;
        !            70:        /* Tx successes in this update interval */
        !            71:        u_int32_t               ra_nok;
        !            72:        /* exponential average packets/second */
        !            73:        u_int32_t               ra_pktrate;
        !            74:        /* RSSI threshold for each Tx rate */
        !            75:        u_int16_t               ra_rate_thresh[IEEE80211_RSSADAPT_BKTS]
        !            76:                                    [IEEE80211_RATE_SIZE];
        !            77:        struct timeval          ra_last_raise;
        !            78:        struct timeval          ra_raise_interval;
        !            79: };
        !            80:
        !            81: /* Properties of a Tx packet, for link adaptation. */
        !            82: struct ieee80211_rssdesc {
        !            83:        u_int                    id_len;        /* Tx packet length */
        !            84:        u_int                    id_rateidx;    /* index into ni->ni_rates */
        !            85:        struct ieee80211_node   *id_node;       /* destination STA MAC */
        !            86:        u_int8_t                 id_rssi;       /* destination STA avg RSS @
        !            87:                                                 * Tx time
        !            88:                                                 */
        !            89: };
        !            90:
        !            91: void   ieee80211_rssadapt_updatestats(struct ieee80211_rssadapt *);
        !            92: void   ieee80211_rssadapt_input(struct ieee80211com *,
        !            93:            const struct ieee80211_node *, struct ieee80211_rssadapt *, int);
        !            94: void   ieee80211_rssadapt_lower_rate(struct ieee80211com *,
        !            95:            const struct ieee80211_node *, struct ieee80211_rssadapt *,
        !            96:            const struct ieee80211_rssdesc *);
        !            97: void   ieee80211_rssadapt_raise_rate(struct ieee80211com *,
        !            98:            struct ieee80211_rssadapt *, const struct ieee80211_rssdesc *);
        !            99: int    ieee80211_rssadapt_choose(struct ieee80211_rssadapt *,
        !           100:            const struct ieee80211_rateset *, const struct ieee80211_frame *,
        !           101:            u_int, int, const char *, int);
        !           102: #ifdef IEEE80211_DEBUG
        !           103: extern int ieee80211_rssadapt_debug;
        !           104: #endif /* IEEE80211_DEBUG */
        !           105:
        !           106: #endif /* _NET80211_IEEE80211_RSSADAPT_H_ */

CVSweb