diff options
Diffstat (limited to 'include/net/codel_impl.h')
| -rw-r--r-- | include/net/codel_impl.h | 18 | 
1 files changed, 15 insertions, 3 deletions
| diff --git a/include/net/codel_impl.h b/include/net/codel_impl.h index d289b91dcd65..137d40d8cbeb 100644 --- a/include/net/codel_impl.h +++ b/include/net/codel_impl.h @@ -54,6 +54,8 @@ static void codel_params_init(struct codel_params *params)  	params->interval = MS2TIME(100);  	params->target = MS2TIME(5);  	params->ce_threshold = CODEL_DISABLED_THRESHOLD; +	params->ce_threshold_mask = 0; +	params->ce_threshold_selector = 0;  	params->ecn = false;  } @@ -246,9 +248,19 @@ static struct sk_buff *codel_dequeue(void *ctx,  						    vars->rec_inv_sqrt);  	}  end: -	if (skb && codel_time_after(vars->ldelay, params->ce_threshold) && -	    INET_ECN_set_ce(skb)) -		stats->ce_mark++; +	if (skb && codel_time_after(vars->ldelay, params->ce_threshold)) { +		bool set_ce = true; + +		if (params->ce_threshold_mask) { +			int dsfield = skb_get_dsfield(skb); + +			set_ce = (dsfield >= 0 && +				  (((u8)dsfield & params->ce_threshold_mask) == +				   params->ce_threshold_selector)); +		} +		if (set_ce && INET_ECN_set_ce(skb)) +			stats->ce_mark++; +	}  	return skb;  } |