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
| ||
|
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