Nuke old TX rate control algorithm coming with ral(4).
authorSepherosa Ziehau <sephe@dragonflybsd.org>
Mon, 2 Apr 2007 14:25:38 +0000 (14:25 +0000)
committerSepherosa Ziehau <sephe@dragonflybsd.org>
Mon, 2 Apr 2007 14:25:38 +0000 (14:25 +0000)
sys/conf/files
sys/dev/netif/ral/Makefile
sys/dev/netif/ral/if_ral_pci.c
sys/dev/netif/ral/if_ralrate.c [deleted file]
sys/dev/netif/ral/if_ralrate.h [deleted file]

index a55d481..3f149eb 100644 (file)
@@ -1,5 +1,5 @@
 # $FreeBSD: src/sys/conf/files,v 1.340.2.137 2003/06/04 17:10:30 sam Exp $
-# $DragonFly: src/sys/conf/files,v 1.153 2007/04/01 13:59:41 sephe Exp $
+# $DragonFly: src/sys/conf/files,v 1.154 2007/04/02 14:25:38 sephe Exp $
 #
 # The long compile-with and dependency lines are required because of
 # limitations in config: backslash-newline doesn't work in strings, and
@@ -267,7 +267,6 @@ dev/netif/acx/acxcmd.c      optional acx
 dev/netif/acx/acx100.c optional acx
 dev/netif/acx/acx111.c optional acx
 dev/netif/ral/if_ral_pci.c     optional ral
-dev/netif/ral/if_ralrate.c     optional ral
 dev/netif/ral/rt2560.c         optional ral
 dev/netif/ral/rt2661.c         optional ral
 dev/netif/rum/if_rum.c         optional rum
index d556c26..bafa01b 100644 (file)
@@ -1,7 +1,7 @@
-# $DragonFly: src/sys/dev/netif/ral/Makefile,v 1.2 2007/04/01 13:59:40 sephe Exp $
+# $DragonFly: src/sys/dev/netif/ral/Makefile,v 1.3 2007/04/02 14:25:38 sephe Exp $
 KMOD   = if_ral
 
-SRCS   = if_ral_pci.c if_ralrate.c rt2560.c rt2661.c
+SRCS   = if_ral_pci.c rt2560.c rt2661.c
 SRCS   += device_if.h bus_if.h pci_if.h
 
 KMODDEPS= wlan wlan_ratectl_onoe wlan_ratectl_sample
index 5d6a482..6408e7e 100644 (file)
@@ -15,7 +15,7 @@
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  *
  * $FreeBSD: src/sys/dev/ral/if_ral_pci.c,v 1.4 2006/03/05 23:27:51 silby Exp $
- * $DragonFly: src/sys/dev/netif/ral/if_ral_pci.c,v 1.4 2007/04/01 13:59:40 sephe Exp $
+ * $DragonFly: src/sys/dev/netif/ral/if_ral_pci.c,v 1.5 2007/04/02 14:25:38 sephe Exp $
  */
 
 /*
@@ -50,7 +50,6 @@
 #include <bus/pci/pcireg.h>
 #include <bus/pci/pcivar.h>
 
-#include <dev/netif/ral/if_ralrate.h>
 #include <dev/netif/ral/rt2560var.h>
 #include <dev/netif/ral/rt2661var.h>
 
diff --git a/sys/dev/netif/ral/if_ralrate.c b/sys/dev/netif/ral/if_ralrate.c
deleted file mode 100644 (file)
index 3ae3b14..0000000
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- * Copyright (c) 2003, 2004 David Young.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or
- * without modification, are permitted provided that the following
- * conditions are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above
- *    copyright notice, this list of conditions and the following
- *    disclaimer in the documentation and/or other materials provided
- *    with the distribution.
- * 3. The name of David Young may not be used to endorse or promote
- *    products derived from this software without specific prior
- *    written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY David Young ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL David
- * Young BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
- * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
- * OF SUCH DAMAGE.
- *
- * $NetBSD: ieee80211_rssadapt.c,v 1.9 2005/02/26 22:45:09 perry Exp $
- * $FreeBSD: src/sys/dev/ral/if_ralrate.c,v 1.1 2005/04/18 18:47:36 damien Exp $
- * $DragonFly: src/sys/dev/netif/ral/Attic/if_ralrate.c,v 1.1 2006/05/20 09:13:09 sephe Exp $
- */
-
-#include <sys/param.h>
-#include <sys/sockio.h>
-#include <sys/mbuf.h>
-#include <sys/kernel.h>
-#include <sys/socket.h>
-
-#include <net/if.h>
-#include <net/if_arp.h>
-#include <net/ethernet.h>
-#include <net/if_dl.h>
-#include <net/if_media.h>
-#include <net/if_types.h>
-
-#include <netproto/802_11/ieee80211_var.h>
-
-#include <dev/netif/ral/if_ralrate.h>
-
-#ifdef interpolate
-#undef interpolate
-#endif
-#define interpolate(parm, old, new) ((parm##_old * (old) + \
-                                     (parm##_denom - parm##_old) * (new)) / \
-                                   parm##_denom)
-
-static struct ral_rssadapt_expavgctl master_expavgctl = {
-       rc_decay_denom : 16,
-       rc_decay_old : 15,
-       rc_thresh_denom : 8,
-       rc_thresh_old : 4,
-       rc_avgrssi_denom : 8,
-       rc_avgrssi_old : 4
-};
-
-int
-ral_rssadapt_choose(struct ral_rssadapt *ra, struct ieee80211_rateset *rs,
-    struct ieee80211_frame *wh, u_int len, const char *dvname, int do_not_adapt)
-{
-       u_int16_t (*thrs)[IEEE80211_RATE_SIZE];
-       int flags = 0, i, rateidx = 0, thridx, top;
-
-       if ((wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK) == IEEE80211_FC0_TYPE_CTL)
-               flags |= IEEE80211_RATE_BASIC;
-
-       for (i = 0, top = RAL_RSSADAPT_BKT0;
-            i < RAL_RSSADAPT_BKTS;
-            i++, top <<= RAL_RSSADAPT_BKTPOWER) {
-               thridx = i;
-               if (len <= top)
-                       break;
-       }
-
-       thrs = &ra->ra_rate_thresh[thridx];
-
-       i = rs->rs_nrates;
-       while (--i >= 0) {
-               rateidx = i;
-               if ((rs->rs_rates[i] & flags) != flags)
-                       continue;
-               if (do_not_adapt)
-                       break;
-               if ((*thrs)[i] < ra->ra_avg_rssi)
-                       break;
-       }
-
-       return rateidx;
-}
-
-void
-ral_rssadapt_updatestats(struct ral_rssadapt *ra)
-{
-       long interval;
-
-       ra->ra_pktrate =
-           (ra->ra_pktrate + 10 * (ra->ra_nfail + ra->ra_nok)) / 2;
-       ra->ra_nfail = ra->ra_nok = 0;
-
-       /* a node is eligible for its rate to be raised every 1/10 to 10
-        * seconds, more eligible in proportion to recent packet rates.
-        */
-       interval = MAX(100000, 10000000 / MAX(1, 10 * ra->ra_pktrate));
-       ra->ra_raise_interval.tv_sec = interval / (1000 * 1000);
-       ra->ra_raise_interval.tv_usec = interval % (1000 * 1000);
-}
-
-void
-ral_rssadapt_input(struct ieee80211com *ic, struct ieee80211_node *ni,
-    struct ral_rssadapt *ra, int rssi)
-{
-       ra->ra_avg_rssi = interpolate(master_expavgctl.rc_avgrssi,
-                                     ra->ra_avg_rssi, (rssi << 8));
-}
-
-/*
- * Adapt the data rate to suit the conditions.  When a transmitted
- * packet is dropped after RAL_RSSADAPT_RETRY_LIMIT retransmissions,
- * raise the RSS threshold for transmitting packets of similar length at
- * the same data rate.
- */
-void
-ral_rssadapt_lower_rate(struct ieee80211com *ic, struct ieee80211_node *ni,
-    struct ral_rssadapt *ra, struct ral_rssdesc *id)
-{
-       struct ieee80211_rateset *rs = &ni->ni_rates;
-       u_int16_t last_thr;
-       u_int i, thridx, top;
-
-       ra->ra_nfail++;
-
-       if (id->id_rateidx >= rs->rs_nrates)
-               return;
-
-       for (i = 0, top = RAL_RSSADAPT_BKT0;
-            i < RAL_RSSADAPT_BKTS;
-            i++, top <<= RAL_RSSADAPT_BKTPOWER) {
-               thridx = i;
-               if (id->id_len <= top)
-                       break;
-       }
-
-       last_thr = ra->ra_rate_thresh[thridx][id->id_rateidx];
-       ra->ra_rate_thresh[thridx][id->id_rateidx] =
-           interpolate(master_expavgctl.rc_thresh, last_thr,
-                       (id->id_rssi << 8));
-}
-
-void
-ral_rssadapt_raise_rate(struct ieee80211com *ic, struct ral_rssadapt *ra,
-    struct ral_rssdesc *id)
-{
-       u_int16_t (*thrs)[IEEE80211_RATE_SIZE], newthr, oldthr;
-       struct ieee80211_node *ni = id->id_node;
-       struct ieee80211_rateset *rs = &ni->ni_rates;
-       int i, rate, top;
-
-       ra->ra_nok++;
-
-       if (!ratecheck(&ra->ra_last_raise, &ra->ra_raise_interval))
-               return;
-
-       for (i = 0, top = RAL_RSSADAPT_BKT0;
-            i < RAL_RSSADAPT_BKTS;
-            i++, top <<= RAL_RSSADAPT_BKTPOWER) {
-               thrs = &ra->ra_rate_thresh[i];
-               if (id->id_len <= top)
-                       break;
-       }
-
-       if (id->id_rateidx + 1 < rs->rs_nrates &&
-           (*thrs)[id->id_rateidx + 1] > (*thrs)[id->id_rateidx]) {
-               rate = (rs->rs_rates[id->id_rateidx + 1] & IEEE80211_RATE_VAL);
-
-               oldthr = (*thrs)[id->id_rateidx + 1];
-               if ((*thrs)[id->id_rateidx] == 0)
-                       newthr = ra->ra_avg_rssi;
-               else
-                       newthr = (*thrs)[id->id_rateidx];
-               (*thrs)[id->id_rateidx + 1] =
-                   interpolate(master_expavgctl.rc_decay, oldthr, newthr);
-       }
-}
diff --git a/sys/dev/netif/ral/if_ralrate.h b/sys/dev/netif/ral/if_ralrate.h
deleted file mode 100644 (file)
index 99182fc..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (c) 2003, 2004 David Young.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or
- * without modification, are permitted provided that the following
- * conditions are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above
- *    copyright notice, this list of conditions and the following
- *    disclaimer in the documentation and/or other materials provided
- *    with the distribution.
- * 3. The name of David Young may not be used to endorse or promote
- *    products derived from this software without specific prior
- *    written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY David Young ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL David
- * Young BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
- * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
- * OF SUCH DAMAGE.
- *
- * $NetBSD: ieee80211_rssadapt.h,v 1.4 2005/02/26 22:45:09 perry Exp $
- * $FreeBSD: src/sys/dev/ral/if_ralrate.h,v 1.1 2005/04/18 18:47:36 damien Exp $
- * $DragonFly: src/sys/dev/netif/ral/Attic/if_ralrate.h,v 1.1 2006/05/20 09:13:09 sephe Exp $
- */
-
-/* Data-rate adaptation loosely based on "Link Adaptation Strategy
- * for IEEE 802.11 WLAN via Received Signal Strength Measurement"
- * by Javier del Prado Pavon and Sunghyun Choi.
- */
-
-/* Buckets for frames 0-128 bytes long, 129-1024, 1025-maximum. */
-#define        RAL_RSSADAPT_BKTS               3
-#define RAL_RSSADAPT_BKT0              128
-#define        RAL_RSSADAPT_BKTPOWER   3       /* 2**_BKTPOWER */
-
-#define        ral_rssadapt_thresh_new \
-    (ral_rssadapt_thresh_denom - ral_rssadapt_thresh_old)
-#define        ral_rssadapt_decay_new \
-    (ral_rssadapt_decay_denom - ral_rssadapt_decay_old)
-#define        ral_rssadapt_avgrssi_new \
-    (ral_rssadapt_avgrssi_denom - ral_rssadapt_avgrssi_old)
-
-struct ral_rssadapt_expavgctl {
-       /* RSS threshold decay. */
-       u_int rc_decay_denom;
-       u_int rc_decay_old;
-       /* RSS threshold update. */
-       u_int rc_thresh_denom;
-       u_int rc_thresh_old;
-       /* RSS average update. */
-       u_int rc_avgrssi_denom;
-       u_int rc_avgrssi_old;
-};
-
-struct ral_rssadapt {
-       /* exponential average RSSI << 8 */
-       u_int16_t               ra_avg_rssi;
-       /* Tx failures in this update interval */
-       u_int32_t               ra_nfail;
-       /* Tx successes in this update interval */
-       u_int32_t               ra_nok;
-       /* exponential average packets/second */
-       u_int32_t               ra_pktrate;
-       /* RSSI threshold for each Tx rate */
-       u_int16_t               ra_rate_thresh[RAL_RSSADAPT_BKTS]
-                                             [IEEE80211_RATE_SIZE];
-       struct timeval          ra_last_raise;
-       struct timeval          ra_raise_interval;
-};
-
-/* Properties of a Tx packet, for link adaptation. */
-struct ral_rssdesc {
-       u_int                    id_len;        /* Tx packet length */
-       u_int                    id_rateidx;    /* index into ni->ni_rates */
-       struct ieee80211_node   *id_node;       /* destination STA MAC */
-       u_int8_t                 id_rssi;       /* destination STA avg RSS @
-                                                * Tx time
-                                                */
-};
-
-void   ral_rssadapt_updatestats(struct ral_rssadapt *);
-void   ral_rssadapt_input(struct ieee80211com *, struct ieee80211_node *,
-           struct ral_rssadapt *, int);
-void   ral_rssadapt_lower_rate(struct ieee80211com *,
-           struct ieee80211_node *, struct ral_rssadapt *,
-           struct ral_rssdesc *);
-void   ral_rssadapt_raise_rate(struct ieee80211com *,
-           struct ral_rssadapt *, struct ral_rssdesc *);
-int    ral_rssadapt_choose(struct ral_rssadapt *,
-           struct ieee80211_rateset *, struct ieee80211_frame *, u_int,
-           const char *, int);