iproute2/tc
Andrea Claudi 6bc13e4a20 tc: util: constrain percentage in 0-100 interval
parse_percent() currently allows to specify negative percentages
or value above 100%. However this does not seems to make sense,
as the function is used for probabilities or bandiwidth rates.

Moreover, using negative values leads to erroneous results
(using Bernoulli loss model as example):

$ ip link add test type dummy
$ ip link set test up
$ tc qdisc add dev test root netem loss gemodel -10% limit 10
$ tc qdisc show dev test
qdisc netem 800c: root refcnt 2 limit 10 loss gemodel p 90% r 10% 1-h 100% 1-k 0%

Using values above 100% we have instead:

$ ip link add test type dummy
$ ip link set test up
$ tc qdisc add dev test root netem loss gemodel 140% limit 10
$ tc qdisc show dev test
qdisc netem 800f: root refcnt 2 limit 10 loss gemodel p 40% r 60% 1-h 100% 1-k 0%

This commit changes parse_percent() with a check to ensure
percentage values stay between 1.0 and 0.0.
parse_percent_rate() function, which already employs a similar
check, is adjusted accordingly.

With this check in place, we have:

$ ip link add test type dummy
$ ip link set test up
$ tc qdisc add dev test root netem loss gemodel -10% limit 10
Illegal "loss gemodel p"

Fixes: 927e3cfb52 ("tc: B.W limits can now be specified in %.")
Signed-off-by: Andrea Claudi <aclaudi@redhat.com>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
2019-07-15 13:45:59 -07:00
..
.gitignore Add ignore files to make using git easier 2006-08-08 12:04:38 -07:00
Makefile tc: add mpls actions 2019-07-10 14:06:32 -07:00
e_bpf.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
em_canid.c drop unneeded include of syslog.h 2017-11-12 16:22:36 -08:00
em_cmp.c drop unneeded include of syslog.h 2017-11-12 16:22:36 -08:00
em_ipset.c Include bsd/string.h only in include/utils.h 2018-11-05 08:38:32 -08:00
em_ipt.c tc: Fix compilation error with old iptables 2018-03-27 06:38:52 -07:00
em_meta.c tc/meta: make meta_table static and const 2018-11-19 11:42:44 -08:00
em_nbyte.c drop unneeded include of syslog.h 2017-11-12 16:22:36 -08:00
em_u32.c drop unneeded include of syslog.h 2017-11-12 16:22:36 -08:00
emp_ematch.l tc/lexer: let quotes actually start strings 2018-01-24 08:49:10 -08:00
emp_ematch.y tc/ematch: fix deprecated yacc warning 2019-04-24 15:10:22 -07:00
f_basic.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
f_bpf.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
f_cgroup.c tc actions: Improved batching and time filtered dumping 2017-08-04 13:16:51 -07:00
f_flow.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
f_flower.c Merge branch 'master' into next 2019-06-10 10:32:07 -07:00
f_fw.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
f_matchall.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
f_route.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
f_rsvp.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
f_tcindex.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
f_u32.c tc: f_u32: allow skip_hw and skip_sw flags to be last 2018-11-09 08:12:29 -08:00
m_action.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
m_bpf.c tc: print all error messages to stderr 2019-07-11 15:35:07 -07:00
m_connmark.c tc: print all error messages to stderr 2019-07-11 15:35:07 -07:00
m_csum.c tc: print all error messages to stderr 2019-07-11 15:35:07 -07:00
m_ctinfo.c tc: add support for action act_ctinfo 2019-06-10 10:24:38 -07:00
m_ematch.c tc/ematch: make local functions static 2018-11-19 11:42:44 -08:00
m_ematch.h tc/ematch: make local functions static 2018-11-19 11:42:44 -08:00
m_estimator.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
m_gact.c tc: print all error messages to stderr 2019-07-11 15:35:07 -07:00
m_ife.c tc: print all error messages to stderr 2019-07-11 15:35:07 -07:00
m_ipt.c tc: print all error messages to stderr 2019-07-11 15:35:07 -07:00
m_mirred.c tc: print all error messages to stderr 2019-07-11 15:35:07 -07:00
m_mpls.c tc: add mpls actions 2019-07-10 14:06:32 -07:00
m_nat.c tc: print all error messages to stderr 2019-07-11 15:35:07 -07:00
m_pedit.c tc: print all error messages to stderr 2019-07-11 15:35:07 -07:00
m_pedit.h tc/pedit: make functions static 2018-11-19 11:42:44 -08:00
m_police.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
m_sample.c tc: print all error messages to stderr 2019-07-11 15:35:07 -07:00
m_simple.c tc: print all error messages to stderr 2019-07-11 15:35:07 -07:00
m_skbedit.c tc: print all error messages to stderr 2019-07-11 15:35:07 -07:00
m_skbmod.c tc: print all error messages to stderr 2019-07-11 15:35:07 -07:00
m_tunnel_key.c tc: print all error messages to stderr 2019-07-11 15:35:07 -07:00
m_vlan.c tc: print all error messages to stderr 2019-07-11 15:35:07 -07:00
m_xt.c tc: print all error messages to stderr 2019-07-11 15:35:07 -07:00
m_xt_old.c tc: print all error messages to stderr 2019-07-11 15:35:07 -07:00
p_eth.c tc/pedit: use structure initialization 2018-11-19 11:42:44 -08:00
p_icmp.c tc/pedit: use structure initialization 2018-11-19 11:42:44 -08:00
p_ip.c tc/pedit: use structure initialization 2018-11-19 11:42:44 -08:00
p_ip6.c tc/pedit: Fix wrong pedit ipv6 structure id 2019-03-01 11:05:00 -08:00
p_tcp.c tc/pedit: use structure initialization 2018-11-19 11:42:44 -08:00
p_udp.c tc/pedit: use structure initialization 2018-11-19 11:42:44 -08:00
q_atm.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
q_cake.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
q_cbq.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
q_cbs.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
q_choke.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
q_clsact.c SPDX license identifiers 2017-11-24 12:21:35 -08:00
q_codel.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
q_drr.c treewide: Use addattr_nest()/addattr_nest_end() to handle nested attributes 2018-02-02 15:01:09 -08:00
q_dsmark.c treewide: Use addattr_nest()/addattr_nest_end() to handle nested attributes 2018-02-02 15:01:09 -08:00
q_etf.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
q_fifo.c tc: jsonify output of q_fifo 2018-10-08 09:22:22 -07:00
q_fq.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
q_fq_codel.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
q_gred.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
q_hfsc.c treewide: Use addattr_nest()/addattr_nest_end() to handle nested attributes 2018-02-02 15:01:09 -08:00
q_hhf.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
q_htb.c fix print_0xhex on 32 bit 2018-12-10 14:20:32 -08:00
q_ingress.c ingress: Don't break JSON output 2018-04-25 11:08:39 -07:00
q_mqprio.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
q_multiq.c tc: B.W limits can now be specified in %. 2017-11-24 11:22:13 -08:00
q_netem.c Merge branch 'master' into next 2019-07-09 14:26:44 -07:00
q_pie.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
q_plug.c tc: add support for plug qdisc 2019-05-04 09:22:14 -07:00
q_prio.c tc: prio: JSON-ify prio output 2018-01-26 13:00:18 -08:00
q_qfq.c treewide: Use addattr_nest()/addattr_nest_end() to handle nested attributes 2018-02-02 15:01:09 -08:00
q_red.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
q_rr.c tc: B.W limits can now be specified in %. 2017-11-24 11:22:13 -08:00
q_sfb.c treewide: Use addattr_nest()/addattr_nest_end() to handle nested attributes 2018-02-02 15:01:09 -08:00
q_sfq.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
q_skbprio.c Add SKB Priority qdisc support in tc(8) 2018-08-14 07:06:43 -07:00
q_taprio.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
q_tbf.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
static-syms.c SPDX license identifiers 2017-11-24 12:21:35 -08:00
tc.c ip: add a new parameter -Numeric 2019-06-18 08:37:47 -07:00
tc_cbq.c tc: support conversions to or from 64 bit nanosecond-based time 2018-08-30 11:04:38 -07:00
tc_cbq.h SPDX license identifiers 2017-11-24 12:21:35 -08:00
tc_class.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
tc_common.h Tree wide: Drop sockaddr_nl arg 2018-10-22 09:43:48 -07:00
tc_core.c tc: support conversions to or from 64 bit nanosecond-based time 2018-08-30 11:04:38 -07:00
tc_core.h tc: support conversions to or from 64 bit nanosecond-based time 2018-08-30 11:04:38 -07:00
tc_estimator.c tc: support conversions to or from 64 bit nanosecond-based time 2018-08-30 11:04:38 -07:00
tc_exec.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
tc_filter.c tc: print all error messages to stderr 2019-07-11 15:35:07 -07:00
tc_monitor.c Tree wide: Drop sockaddr_nl arg 2018-10-22 09:43:48 -07:00
tc_qdisc.c tc: print all error messages to stderr 2019-07-11 15:35:07 -07:00
tc_red.c tc: move RED flag printing to helper 2018-11-24 07:10:58 -08:00
tc_red.h tc: move RED flag printing to helper 2018-11-24 07:10:58 -08:00
tc_stab.c drop unneeded include of syslog.h 2017-11-12 16:22:36 -08:00
tc_util.c tc: util: constrain percentage in 0-100 interval 2019-07-15 13:45:59 -07:00
tc_util.h utils: move parse_percent() to tc_util 2019-06-28 16:06:26 -07:00