summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/netpfil/ipfw/dn_aqm_pie.c26
-rw-r--r--sys/netpfil/ipfw/dn_aqm_pie.h6
-rw-r--r--sys/netpfil/ipfw/dn_sched_fq_pie.c26
3 files changed, 30 insertions, 28 deletions
diff --git a/sys/netpfil/ipfw/dn_aqm_pie.c b/sys/netpfil/ipfw/dn_aqm_pie.c
index eedbb51..c4b9401 100644
--- a/sys/netpfil/ipfw/dn_aqm_pie.c
+++ b/sys/netpfil/ipfw/dn_aqm_pie.c
@@ -244,20 +244,20 @@ calculate_drop_prob(void *x)
p *= (PIE_MAX_PROB << 12) / AQM_TIME_1S;
/* auto-tune drop probability */
- if (prob < (int64_t)(PIE_MAX_PROB * 0.000001))
- p >>= 11 + PIE_FIX_POINT_BITS+12;
- else if (prob < (int64_t)(PIE_MAX_PROB * 0.00001))
- p >>= 9 + PIE_FIX_POINT_BITS+12;
- else if (prob < (int64_t)(PIE_MAX_PROB * 0.0001))
- p >>= 7 + PIE_FIX_POINT_BITS+12;
- else if (prob < (int64_t)(PIE_MAX_PROB * 0.001))
- p >>= 5 + PIE_FIX_POINT_BITS+12;
- else if (prob < (int64_t)(PIE_MAX_PROB * 0.01))
- p >>= 3 + PIE_FIX_POINT_BITS+12;
- else if (prob < (int64_t)(PIE_MAX_PROB * 0.1))
- p >>= 1 + PIE_FIX_POINT_BITS+12;
+ if (prob < (PIE_MAX_PROB / 1000000)) /* 0.000001 */
+ p >>= 11 + PIE_FIX_POINT_BITS + 12;
+ else if (prob < (PIE_MAX_PROB / 100000)) /* 0.00001 */
+ p >>= 9 + PIE_FIX_POINT_BITS + 12;
+ else if (prob < (PIE_MAX_PROB / 10000)) /* 0.0001 */
+ p >>= 7 + PIE_FIX_POINT_BITS + 12;
+ else if (prob < (PIE_MAX_PROB / 1000)) /* 0.001 */
+ p >>= 5 + PIE_FIX_POINT_BITS + 12;
+ else if (prob < (PIE_MAX_PROB / 100)) /* 0.01 */
+ p >>= 3 + PIE_FIX_POINT_BITS + 12;
+ else if (prob < (PIE_MAX_PROB / 10)) /* 0.1 */
+ p >>= 1 + PIE_FIX_POINT_BITS + 12;
else
- p >>= PIE_FIX_POINT_BITS+12;
+ p >>= PIE_FIX_POINT_BITS + 12;
oldprob = prob;
diff --git a/sys/netpfil/ipfw/dn_aqm_pie.h b/sys/netpfil/ipfw/dn_aqm_pie.h
index b045077..aa2fceb 100644
--- a/sys/netpfil/ipfw/dn_aqm_pie.h
+++ b/sys/netpfil/ipfw/dn_aqm_pie.h
@@ -132,11 +132,13 @@ drop_early(struct pie_status *pst, uint32_t qlen)
* if accu_prob < 0.85 -> enqueue
* if accu_prob>8.5 ->drop
* between 0.85 and 8.5 || !De-randomize --> drop on prob
+ *
+ * (0.85 = 17/20 ,8.5 = 17/2)
*/
if (pprms->flags & PIE_DERAND_ENABLED) {
- if(pst->accu_prob < (uint64_t) (PIE_MAX_PROB * 0.85))
+ if(pst->accu_prob < (uint64_t) (PIE_MAX_PROB * 17 / 20))
return ENQUE;
- if( pst->accu_prob >= (uint64_t) (PIE_MAX_PROB * 8.5))
+ if( pst->accu_prob >= (uint64_t) (PIE_MAX_PROB * 17 / 2))
return DROP;
}
diff --git a/sys/netpfil/ipfw/dn_sched_fq_pie.c b/sys/netpfil/ipfw/dn_sched_fq_pie.c
index 4d25db4..2883cf8 100644
--- a/sys/netpfil/ipfw/dn_sched_fq_pie.c
+++ b/sys/netpfil/ipfw/dn_sched_fq_pie.c
@@ -407,20 +407,20 @@ fq_calculate_drop_prob(void *x)
p *= (PIE_MAX_PROB << 12) / AQM_TIME_1S;
/* auto-tune drop probability */
- if (prob < (int64_t)(PIE_MAX_PROB * 0.000001))
- p >>= 11 + PIE_FIX_POINT_BITS+12;
- else if (prob < (int64_t)(PIE_MAX_PROB * 0.00001))
- p >>= 9 + PIE_FIX_POINT_BITS+12;
- else if (prob < (int64_t)(PIE_MAX_PROB * 0.0001))
- p >>= 7 + PIE_FIX_POINT_BITS+12;
- else if (prob < (int64_t)(PIE_MAX_PROB * 0.001))
- p >>= 5 + PIE_FIX_POINT_BITS+12;
- else if (prob < (int64_t)(PIE_MAX_PROB * 0.01))
- p >>= 3 + PIE_FIX_POINT_BITS+12;
- else if (prob < (int64_t)(PIE_MAX_PROB * 0.1))
- p >>= 1 + PIE_FIX_POINT_BITS+12;
+ if (prob < (PIE_MAX_PROB / 1000000)) /* 0.000001 */
+ p >>= 11 + PIE_FIX_POINT_BITS + 12;
+ else if (prob < (PIE_MAX_PROB / 100000)) /* 0.00001 */
+ p >>= 9 + PIE_FIX_POINT_BITS + 12;
+ else if (prob < (PIE_MAX_PROB / 10000)) /* 0.0001 */
+ p >>= 7 + PIE_FIX_POINT_BITS + 12;
+ else if (prob < (PIE_MAX_PROB / 1000)) /* 0.001 */
+ p >>= 5 + PIE_FIX_POINT_BITS + 12;
+ else if (prob < (PIE_MAX_PROB / 100)) /* 0.01 */
+ p >>= 3 + PIE_FIX_POINT_BITS + 12;
+ else if (prob < (PIE_MAX_PROB / 10)) /* 0.1 */
+ p >>= 1 + PIE_FIX_POINT_BITS + 12;
else
- p >>= PIE_FIX_POINT_BITS+12;
+ p >>= PIE_FIX_POINT_BITS + 12;
oldprob = prob;
OpenPOWER on IntegriCloud