diff options
| -rw-r--r-- | src/lib/CMakeLists.txt | 4 | ||||
| -rw-r--r-- | src/lib/config.h.in | 2 | ||||
| -rw-r--r-- | src/lib/frct.c | 9 | 
3 files changed, 13 insertions, 2 deletions
diff --git a/src/lib/CMakeLists.txt b/src/lib/CMakeLists.txt index 0c327320..4f7d5d18 100644 --- a/src/lib/CMakeLists.txt +++ b/src/lib/CMakeLists.txt @@ -196,6 +196,10 @@ set(FRCT_REORDER_QUEUE_SIZE 256 CACHE STRING    "Size of the reordering queue, must be a power of 2")  set(FRCT_START_WINDOW 64 CACHE STRING    "Start window, must be a power of 2") +set(FRCT_LINUX_RTT_ESTIMATOR TRUE CACHE BOOL +  "Use Linux RTT estimator formula instead of the TCP RFC formula") +set(FRCT_RTO_MDEV_MULTIPLIER 2 CACHE STRING +  "Multiplier for deviation term in the RTO: RTO = sRTT + (mdev << X)")  set(FRCT_RTO_MIN 250 CACHE STRING    "Minimum Retransmission Timeout (RTO) for FRCT (us)")  set(FRCT_TICK_TIME 5000 CACHE STRING diff --git a/src/lib/config.h.in b/src/lib/config.h.in index a51c2791..3bf6274a 100644 --- a/src/lib/config.h.in +++ b/src/lib/config.h.in @@ -69,12 +69,14 @@  #define DU_BUFF_TAILSPACE   @DU_BUFF_TAILSPACE@  /* Default Delta-t parameters */ +#cmakedefine                FRCT_LINUX_RTT_ESTIMATOR  #define DELT_A              (@DELTA_T_ACK@)                  /* ns */  #define DELT_R              (@DELTA_T_RTX@)                  /* ns */  #define RQ_SIZE             (@FRCT_REORDER_QUEUE_SIZE@)  #define START_WINDOW        (@FRCT_START_WINDOW@)  #define RTO_MIN             (@FRCT_RTO_MIN@ * 1000) +#define MDEV_MUL            (@FRCT_RTO_MDEV_MULTIPLIER@)  #define TICTIME             (@FRCT_TICK_TIME@ * 1000)        /* ns */ diff --git a/src/lib/frct.c b/src/lib/frct.c index b823b3fa..4effad3b 100644 --- a/src/lib/frct.c +++ b/src/lib/frct.c @@ -773,14 +773,19 @@ static void rtt_estimator(struct frcti * frcti,          } else {                  time_t delta = mrtt - srtt;                  srtt += (delta >> 3); -                rttvar += (ABS(delta) - rttvar) >> 2; +                delta = (ABS(delta) - rttvar) >> 2; +#ifdef FRCT_LINUX_RTT_ESTIMATOR +                if (delta < 0) +                        delta >>= 3; +#endif +                rttvar += delta;          }  #ifdef PROC_FLOW_STATS          frcti->n_rtt++;  #endif          frcti->srtt     = MAX(1000U, srtt);          frcti->mdev     = MAX(100U, rttvar); -        frcti->rto      = MAX(RTO_MIN, frcti->srtt + (frcti->mdev << 3)); +        frcti->rto      = MAX(RTO_MIN, frcti->srtt + (frcti->mdev << MDEV_MUL));  }  /* Always queues the next application packet on the RQ. */  | 
