lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <52AAD867.5030305@cn.fujitsu.com>
Date:	Fri, 13 Dec 2013 17:50:31 +0800
From:	Duan Jiong <duanj.fnst@...fujitsu.com>
To:	Yang Yingliang <yangyingliang@...wei.com>, davem@...emloft.net,
	netdev@...r.kernel.org
CC:	eric.dumazet@...il.com
Subject: Re: [PATCH net-next] sch_tbf: add TBF_BURST/TBF_PBURST attribute

于 2013年12月13日 17:41, Yang Yingliang 写道:
> When we set burst to 1514 with low rate in userspace,
> the kernel get a value of burst that less than 1514,
> which doesn't work.
> 
> Because it may make some loss when transform burst
> to buffer in userspace. This makes burst lose some
> bytes, when the kernel transform the buffer back to
> burst.
> 
> This patch adds two new attributes to support sending
> burst/mtu to kernel directly to avoid the loss.
> 
> Signed-off-by: Yang Yingliang <yangyingliang@...wei.com>
> ---
>  include/uapi/linux/pkt_sched.h |  2 ++
>  net/sched/sch_tbf.c            | 25 +++++++++++++++++++++----
>  2 files changed, 23 insertions(+), 4 deletions(-)
> 
> diff --git a/include/uapi/linux/pkt_sched.h b/include/uapi/linux/pkt_sched.h
> index a806687..fd8e17e 100644
> --- a/include/uapi/linux/pkt_sched.h
> +++ b/include/uapi/linux/pkt_sched.h
> @@ -173,6 +173,8 @@ enum {
>  	TCA_TBF_PTAB,
>  	TCA_TBF_RATE64,
>  	TCA_TBF_PRATE64,
> +	TCA_TBF_BURST,
> +	TCA_TBF_PBURST,
>  	__TCA_TBF_MAX,
>  };
>  
> diff --git a/net/sched/sch_tbf.c b/net/sched/sch_tbf.c
> index 887e672..a746049 100644
> --- a/net/sched/sch_tbf.c
> +++ b/net/sched/sch_tbf.c
> @@ -307,6 +307,8 @@ static const struct nla_policy tbf_policy[TCA_TBF_MAX + 1] = {
>  	[TCA_TBF_PTAB]	= { .type = NLA_BINARY, .len = TC_RTAB_SIZE },
>  	[TCA_TBF_RATE64]	= { .type = NLA_U64 },
>  	[TCA_TBF_PRATE64]	= { .type = NLA_U64 },
> +	[TCA_TBF_BURST]		= { .type = NLA_U32 },

This place should remove one tab.

Thanks,
  Duan

> +	[TCA_TBF_PBURST]	= { .type = NLA_U32 },
>  };
>  
>  static int tbf_change(struct Qdisc *sch, struct nlattr *opt)
> @@ -358,7 +360,11 @@ static int tbf_change(struct Qdisc *sch, struct nlattr *opt)
>  		rate64 = nla_get_u64(tb[TCA_TBF_RATE64]);
>  	psched_ratecfg_precompute(&rate, &qopt->rate, rate64);
>  
> -	max_size = min_t(u64, psched_ns_t2l(&rate, buffer), ~0U);
> +	if (tb[TCA_TBF_BURST]) {
> +		max_size = nla_get_u32(tb[TCA_TBF_BURST]);
> +		buffer = psched_l2t_ns(&rate, max_size);
> +	} else
> +		max_size = min_t(u64, psched_ns_t2l(&rate, buffer), ~0U);
>  
>  	if (qopt->peakrate.rate) {
>  		if (tb[TCA_TBF_PRATE64])
> @@ -371,7 +377,12 @@ static int tbf_change(struct Qdisc *sch, struct nlattr *opt)
>  			goto done;
>  		}
>  
> -		max_size = min_t(u64, max_size, psched_ns_t2l(&peak, mtu));
> +		if (tb[TCA_TBF_PBURST]) {
> +			u32 pburst = nla_get_u32(tb[TCA_TBF_PBURST]);
> +			max_size = min_t(u32, max_size, pburst);
> +			mtu = psched_l2t_ns(&peak, pburst);
> +		} else
> +			max_size = min_t(u64, max_size, psched_ns_t2l(&peak, mtu));
>  	}
>  
>  	if (max_size < psched_mtu(qdisc_dev(sch)))
> @@ -391,9 +402,15 @@ static int tbf_change(struct Qdisc *sch, struct nlattr *opt)
>  		q->qdisc = child;
>  	}
>  	q->limit = qopt->limit;
> -	q->mtu = PSCHED_TICKS2NS(qopt->mtu);
> +	if (tb[TCA_TBF_PBURST])
> +		q->mtu = mtu;
> +	else
> +		q->mtu = PSCHED_TICKS2NS(qopt->mtu);
>  	q->max_size = max_size;
> -	q->buffer = PSCHED_TICKS2NS(qopt->buffer);
> +	if (tb[TCA_TBF_BURST])
> +		q->buffer = buffer;
> +	else
> +		q->buffer = PSCHED_TICKS2NS(qopt->buffer);
>  	q->tokens = q->buffer;
>  	q->ptokens = q->mtu;
>  
> 

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ