iproute2/tc/tc_estimator.c
<<
>>
Prefs
   1/*
   2 * tc_core.c            TC core library.
   3 *
   4 *              This program is free software; you can redistribute it and/or
   5 *              modify it under the terms of the GNU General Public License
   6 *              as published by the Free Software Foundation; either version
   7 *              2 of the License, or (at your option) any later version.
   8 *
   9 * Authors:     Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
  10 *
  11 */
  12
  13#include <stdio.h>
  14#include <stdlib.h>
  15#include <unistd.h>
  16#include <fcntl.h>
  17#include <math.h>
  18#include <sys/socket.h>
  19#include <netinet/in.h>
  20#include <arpa/inet.h>
  21#include <string.h>
  22
  23#include "utils.h"
  24#include "tc_core.h"
  25
  26int tc_setup_estimator(unsigned int A, unsigned int time_const, struct tc_estimator *est)
  27{
  28        for (est->interval = 0; est->interval <= 5; est->interval++) {
  29                if (A <= (1<<est->interval)*(TIME_UNITS_PER_SEC/4))
  30                        break;
  31        }
  32        if (est->interval > 5)
  33                return -1;
  34        est->interval -= 2;
  35        for (est->ewma_log = 1; est->ewma_log < 32; est->ewma_log++) {
  36                double w = 1.0 - 1.0/(1<<est->ewma_log);
  37
  38                if (A/(-log(w)) > time_const)
  39                        break;
  40        }
  41        est->ewma_log--;
  42        if (est->ewma_log == 0 || est->ewma_log >= 31)
  43                return -1;
  44        return 0;
  45}
  46