fq: don't allow set options to zero
Subsystems (2)
PATCH 1/1 fq: don't allow set options to zero
Now options of fair queue can be zero but cannot be (~0U). Zero is useless, so don't allow set the options to zero. Also, maxrate cannot be reset to unlimited because it cannot be (~0U).
--- tc/q_fq.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-)
tc/q_fq.c +12 -12
@@ -71,13 +71,13 @@ static unsigned int ilog2(unsigned int val)static int fq_parse_opt (struct qdisc_util *qu,int argc,char **argv,struct nlmsghdr *n) { -unsigned int plimit = ~0U ; -unsigned int flow_plimit = ~0U ; -unsigned int quantum = ~0U ; -unsigned int initial_quantum = ~0U ; +unsigned int plimit =0 ; +unsigned int flow_plimit =0 ; +unsigned int quantum =0 ; +unsigned int initial_quantum =0 ;unsigned int buckets =0 ; -unsigned int maxrate = ~0U ; -unsigned int defrate = ~0U ; +unsigned int maxrate =0 ; +unsigned int defrate =0 ;int pacing =-1 ;struct rtattr *tail;
@@ -147,24 +147,24 @@ static int fq_parse_opt(struct qdisc_util *qu, int argc, char **argv,addattr_l (n,1024 ,TCA_FQ_BUCKETS_LOG , &log,sizeof (log)); } -if (plimit != ~0U ) +if (plimit)addattr_l (n,1024 ,TCA_FQ_PLIMIT , &plimit,sizeof (plimit)); -if (flow_plimit != ~0U ) +if (flow_plimit)addattr_l (n,1024 ,TCA_FQ_FLOW_PLIMIT , &flow_plimit,sizeof (flow_plimit)); -if (quantum != ~0U ) +if (quantum)addattr_l (n,1024 ,TCA_FQ_QUANTUM , &quantum,sizeof (quantum)); -if (initial_quantum != ~0U ) +if (initial_quantum)addattr_l (n,1024 ,TCA_FQ_INITIAL_QUANTUM , &initial_quantum,sizeof (initial_quantum));if (pacing !=-1 )addattr_l (n,1024 ,TCA_FQ_RATE_ENABLE , &pacing,sizeof (pacing)); -if (maxrate != ~0U ) +if (maxrate)addattr_l (n,1024 ,TCA_FQ_FLOW_MAX_RATE , &maxrate,sizeof (maxrate)); -if (defrate != ~0U ) +if (defrate)addattr_l (n,1024 ,TCA_FQ_FLOW_DEFAULT_RATE , &defrate,sizeof (defrate)); tail->rta_len = (void *)NLMSG_TAIL (n) - (void *) tail;
Signature · 1 line
1.8.0
Quoted 10 lines · Yang Yingliang
Now options of fair queue can be zero but cannot be (~0U). Zero is useless, so don't allow set the options to zero. Also, maxrate cannot be reset to unlimited because it cannot be (~0U).
Cc Eric Dumazet <[email protected]>Signed-off-by Yang Yingliang <[email protected]>--- tc/q_fq.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-)
No, you are changing behavior for existing scripts.
If you really want to fix these cases, you need to do it properly.
Quoted 12 lines · Eric Dumazet
Quoted 10 lines · Yang Yingliang
Now options of fair queue can be zero but cannot be (~0U). Zero is useless, so don't allow set the options to zero. Also, maxrate cannot be reset to unlimited because it cannot be (~0U).
Cc Eric Dumazet <[email protected]>Signed-off-by Yang Yingliang <[email protected]>--- tc/q_fq.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-)
Quoted 4 lines
No, you are changing behavior for existing scripts.
If you really want to fix these cases, you need to do it properly.
Do you mean allow options set to zero changing the behavior ?
Regards,
Yang
Quoted 15 lines · Yang Yingliang
Quoted 14 lines · Eric Dumazet
Quoted 10 lines · Yang Yingliang
Now options of fair queue can be zero but cannot be (~0U). Zero is useless, so don't allow set the options to zero. Also, maxrate cannot be reset to unlimited because it cannot be (~0U).
Cc Eric Dumazet <[email protected]>Signed-off-by Yang Yingliang <[email protected]>--- tc/q_fq.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-)No, you are changing behavior for existing scripts.
Quoted 8 lines
Quoted 2 lines
If you really want to fix these cases, you need to do it properly.
Do you mean allow options set to zero changing the behavior ?
Regards,
Yang
My bad, please ignore this mail.
Sorry for the noisy.
Quoted 12 lines · Eric Dumazet
Quoted 10 lines · Yang Yingliang
Now options of fair queue can be zero but cannot be (~0U). Zero is useless, so don't allow set the options to zero. Also, maxrate cannot be reset to unlimited because it cannot be (~0U).
Cc Eric Dumazet <[email protected]>Signed-off-by Yang Yingliang <[email protected]>--- tc/q_fq.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-)
Quoted 4 lines
No, you are changing behavior for existing scripts.
If you really want to fix these cases, you need to do it properly.
Do you mean options cannot be zero changing the behavior ?
Regards,
Yang
Quoted 13 lines · Yang Yingliang
Quoted 12 lines · Eric Dumazet
Quoted 10 lines · Yang Yingliang
Now options of fair queue can be zero but cannot be (~0U). Zero is useless, so don't allow set the options to zero. Also, maxrate cannot be reset to unlimited because it cannot be (~0U).
Cc Eric Dumazet <[email protected]>Signed-off-by Yang Yingliang <[email protected]>--- tc/q_fq.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-)
Quoted 5 lines
Quoted 4 lines
No, you are changing behavior for existing scripts.
If you really want to fix these cases, you need to do it properly.
Do you mean options cannot be zero changing the behavior ?
I mean that you need to do something like the following.
tc/q_fq.c +4 -2
@@ -76,7 +76,8 @@ static int fq_parse_opt(struct qdisc_util *qu, int argc, char **argv,unsigned int quantum = ~0U ;unsigned int initial_quantum = ~0U ;unsigned int buckets =0 ; -unsigned int maxrate = ~0U ; +unsigned int maxrate; +int set_maxrate =0 ;unsigned int defrate = ~0U ;int pacing =-1 ;struct rtattr *tail;
@@ -106,6 +107,7 @@ static int fq_parse_opt(struct qdisc_util *qu, int argc, char **argv,fprintf (stderr,"Illegal \"maxrate\"\n" );return -1 ; } + set_maxrate =1 ; }else if (strcmp (*argv,"defrate" ) ==0 ) {NEXT_ARG ();if (get_rate (&defrate, *argv)) {
@@ -161,7 +163,7 @@ static int fq_parse_opt(struct qdisc_util *qu, int argc, char **argv,if (pacing !=-1 )addattr_l (n,1024 ,TCA_FQ_RATE_ENABLE , &pacing,sizeof (pacing)); -if (maxrate != ~0U ) +if (set_maxrate)addattr_l (n,1024 ,TCA_FQ_FLOW_MAX_RATE , &maxrate,sizeof (maxrate));if (defrate != ~0U )
PATCH v2 1/1 fq: allow options of fair queue set to ~0U
From: Yang Yingliang <[email protected]>
Some options of fair queue cannot be (~0U). It leads to maxrate cannot be reset to unlimited because it cannot be (~0U).
--- tc/q_fq.c | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-)
tc/q_fq.c +24 -12
@@ -71,13 +71,19 @@ static unsigned int ilog2(unsigned int val)static int fq_parse_opt (struct qdisc_util *qu,int argc,char **argv,struct nlmsghdr *n) { -unsigned int plimit = ~0U ; -unsigned int flow_plimit = ~0U ; -unsigned int quantum = ~0U ; -unsigned int initial_quantum = ~0U ; +unsigned int plimit; +unsigned int flow_plimit; +unsigned int quantum; +unsigned int initial_quantum;unsigned int buckets =0 ; -unsigned int maxrate = ~0U ; -unsigned int defrate = ~0U ; +unsigned int maxrate; +unsigned int defrate; +int set_plimit =0 ; +int set_flow_plimit =0 ; +int set_quantum =0 ; +int set_initial_quantum =0 ; +int set_maxrate =0 ; +int set_defrate =0 ;int pacing =-1 ;struct rtattr *tail;
@@ -88,12 +94,14 @@ static int fq_parse_opt(struct qdisc_util *qu, int argc, char **argv,fprintf (stderr,"Illegal \"limit\"\n" );return -1 ; } + set_plimit =1 ; }else if (strcmp (*argv,"flow_limit" ) ==0 ) {NEXT_ARG ();if (get_unsigned (&flow_plimit, *argv,0 )) {fprintf (stderr,"Illegal \"flow_limit\"\n" );return -1 ; } + set_flow_plimit =0 ; }else if (strcmp (*argv,"buckets" ) ==0 ) {NEXT_ARG ();if (get_unsigned (&buckets, *argv,0 )) {
@@ -106,24 +114,28 @@ static int fq_parse_opt(struct qdisc_util *qu, int argc, char **argv,fprintf (stderr,"Illegal \"maxrate\"\n" );return -1 ; } + set_maxrate =1 ; }else if (strcmp (*argv,"defrate" ) ==0 ) {NEXT_ARG ();if (get_rate (&defrate, *argv)) {fprintf (stderr,"Illegal \"defrate\"\n" );return -1 ; } + set_defrate =1 ; }else if (strcmp (*argv,"quantum" ) ==0 ) {NEXT_ARG ();if (get_unsigned (&quantum, *argv,0 )) {fprintf (stderr,"Illegal \"quantum\"\n" );return -1 ; } + set_quantum =1 ; }else if (strcmp (*argv,"initial_quantum" ) ==0 ) {NEXT_ARG ();if (get_unsigned (&initial_quantum, *argv,0 )) {fprintf (stderr,"Illegal \"initial_quantum\"\n" );return -1 ; } + set_initial_quantum =1 ; }else if (strcmp (*argv,"pacing" ) ==0 ) { pacing =1 ; }else if (strcmp (*argv,"nopacing" ) ==0 ) {
@@ -147,24 +159,24 @@ static int fq_parse_opt(struct qdisc_util *qu, int argc, char **argv,addattr_l (n,1024 ,TCA_FQ_BUCKETS_LOG , &log,sizeof (log)); } -if (plimit != ~0U ) +if (set_plimit)addattr_l (n,1024 ,TCA_FQ_PLIMIT , &plimit,sizeof (plimit)); -if (flow_plimit != ~0U ) +if (set_flow_plimit)addattr_l (n,1024 ,TCA_FQ_FLOW_PLIMIT , &flow_plimit,sizeof (flow_plimit)); -if (quantum != ~0U ) +if (set_quantum)addattr_l (n,1024 ,TCA_FQ_QUANTUM , &quantum,sizeof (quantum)); -if (initial_quantum != ~0U ) +if (set_initial_quantum)addattr_l (n,1024 ,TCA_FQ_INITIAL_QUANTUM , &initial_quantum,sizeof (initial_quantum));if (pacing !=-1 )addattr_l (n,1024 ,TCA_FQ_RATE_ENABLE , &pacing,sizeof (pacing)); -if (maxrate != ~0U ) +if (set_maxrate)addattr_l (n,1024 ,TCA_FQ_FLOW_MAX_RATE , &maxrate,sizeof (maxrate)); -if (defrate != ~0U ) +if (set_defrate)addattr_l (n,1024 ,TCA_FQ_FLOW_DEFAULT_RATE , &defrate,sizeof (defrate)); tail->rta_len = (void *)NLMSG_TAIL (n) - (void *) tail;
Re: [PATCH iproute2 v2] fq: allow options of fair queue set to ~0U
Quoted 43 lines · Yang Yingliang
From: Yang Yingliang <[email protected]>
Some options of fair queue cannot be (~0U). It leads to maxrate cannot be reset to unlimited because it cannot be (~0U).
Suggested-by Eric Dumazet <[email protected]>Signed-off-by Yang Yingliang <[email protected]>--- tc/q_fq.c | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-)tc/q_fq.c +12
-6@@ -71,13 +71,19 @@ static unsigned int ilog2(unsigned int val)static int fq_parse_opt (struct qdisc_util *qu,int argc,char **argv,struct nlmsghdr *n) { -unsigned int plimit = ~0U ; -unsigned int flow_plimit = ~0U ; -unsigned int quantum = ~0U ; -unsigned int initial_quantum = ~0U ; +unsigned int plimit; +unsigned int flow_plimit; +unsigned int quantum; +unsigned int initial_quantum;unsigned int buckets =0 ; -unsigned int maxrate = ~0U ; -unsigned int defrate = ~0U ; +unsigned int maxrate; +unsigned int defrate; +int set_plimit =0 ; +int set_flow_plimit =0 ; +int set_quantum =0 ; +int set_initial_quantum =0 ; +int set_maxrate =0 ; +int set_defrate =0 ;int pacing =-1 ;struct rtattr *tail;@@ -88,12 +94,14 @@ static int fq_parse_opt(struct qdisc_util *qu, int argc, char **argv,fprintf (stderr,"Illegal \"limit\"\n" );
tc/q_fq.c static int fq_parse_opt(struct qdisc_util *qu, int argc, char **argv, · line 104
Quoted 10 lines
tc/q_fq.c +2
-0return -1 ; } + set_plimit =1 ; }else if (strcmp (*argv,"flow_limit" ) ==0 ) {NEXT_ARG ();if (get_unsigned (&flow_plimit, *argv,0 )) {fprintf (stderr,"Illegal \"flow_limit\"\n" );return -1 ; } + set_flow_plimit =0 ;
= 1; ?
Quoted 68 lines
tc/q_fq.c +10
-7}else if (strcmp (*argv,"buckets" ) ==0 ) {NEXT_ARG ();if (get_unsigned (&buckets, *argv,0 )) {@@ -106,24 +114,28 @@ static int fq_parse_opt(struct qdisc_util *qu, int argc, char **argv,fprintf (stderr,"Illegal \"maxrate\"\n" );return -1 ; } + set_maxrate =1 ; }else if (strcmp (*argv,"defrate" ) ==0 ) {NEXT_ARG ();if (get_rate (&defrate, *argv)) {fprintf (stderr,"Illegal \"defrate\"\n" );return -1 ; } + set_defrate =1 ; }else if (strcmp (*argv,"quantum" ) ==0 ) {NEXT_ARG ();if (get_unsigned (&quantum, *argv,0 )) {fprintf (stderr,"Illegal \"quantum\"\n" );return -1 ; } + set_quantum =1 ; }else if (strcmp (*argv,"initial_quantum" ) ==0 ) {NEXT_ARG ();if (get_unsigned (&initial_quantum, *argv,0 )) {fprintf (stderr,"Illegal \"initial_quantum\"\n" );return -1 ; } + set_initial_quantum =1 ; }else if (strcmp (*argv,"pacing" ) ==0 ) { pacing =1 ; }else if (strcmp (*argv,"nopacing" ) ==0 ) {@@ -147,24 +159,24 @@ static int fq_parse_opt(struct qdisc_util *qu, int argc, char **argv,addattr_l (n,1024 ,TCA_FQ_BUCKETS_LOG , &log,sizeof (log)); } -if (plimit != ~0U ) +if (set_plimit)addattr_l (n,1024 ,TCA_FQ_PLIMIT , &plimit,sizeof (plimit)); -if (flow_plimit != ~0U ) +if (set_flow_plimit)addattr_l (n,1024 ,TCA_FQ_FLOW_PLIMIT , &flow_plimit,sizeof (flow_plimit)); -if (quantum != ~0U ) +if (set_quantum)addattr_l (n,1024 ,TCA_FQ_QUANTUM , &quantum,sizeof (quantum)); -if (initial_quantum != ~0U ) +if (set_initial_quantum)addattr_l (n,1024 ,TCA_FQ_INITIAL_QUANTUM , &initial_quantum,sizeof (initial_quantum));if (pacing !=-1 )addattr_l (n,1024 ,TCA_FQ_RATE_ENABLE , &pacing,sizeof (pacing)); -if (maxrate != ~0U ) +if (set_maxrate)addattr_l (n,1024 ,TCA_FQ_FLOW_MAX_RATE , &maxrate,sizeof (maxrate)); -if (defrate != ~0U ) +if (set_defrate)addattr_l (n,1024 ,TCA_FQ_FLOW_DEFAULT_RATE , &defrate,sizeof (defrate)); tail->rta_len = (void *)NLMSG_TAIL (n) - (void *) tail; --To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH iproute2 v2] fq: allow options of fair queue set to ~0U
Quoted 42 lines · Eric Dumazet
Quoted 41 lines · Yang Yingliang
From: Yang Yingliang <[email protected]>
Some options of fair queue cannot be (~0U). It leads to maxrate cannot be reset to unlimited because it cannot be (~0U).
Suggested-by Eric Dumazet <[email protected]>Signed-off-by Yang Yingliang <[email protected]>--- tc/q_fq.c | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-)tc/q_fq.c +12
-6@@ -71,13 +71,19 @@ static unsigned int ilog2(unsigned int val)static int fq_parse_opt (struct qdisc_util *qu,int argc,char **argv,struct nlmsghdr *n) { -unsigned int plimit = ~0U ; -unsigned int flow_plimit = ~0U ; -unsigned int quantum = ~0U ; -unsigned int initial_quantum = ~0U ; +unsigned int plimit; +unsigned int flow_plimit; +unsigned int quantum; +unsigned int initial_quantum;unsigned int buckets =0 ; -unsigned int maxrate = ~0U ; -unsigned int defrate = ~0U ; +unsigned int maxrate; +unsigned int defrate; +int set_plimit =0 ; +int set_flow_plimit =0 ; +int set_quantum =0 ; +int set_initial_quantum =0 ; +int set_maxrate =0 ; +int set_defrate =0 ;int pacing =-1 ;struct rtattr *tail;
Quoted 16 lines
tc/q_fq.c static int fq_parse_opt(struct qdisc_util *qu, int argc, char **argv, · line 104
Quoted 12 lines
tc/q_fq.c +2
-0@@ -88,12 +94,14 @@ static int fq_parse_opt(struct qdisc_util *qu, int argc, char **argv,fprintf (stderr,"Illegal \"limit\"\n" );return -1 ; } + set_plimit =1 ; }else if (strcmp (*argv,"flow_limit" ) ==0 ) {NEXT_ARG ();if (get_unsigned (&flow_plimit, *argv,0 )) {fprintf (stderr,"Illegal \"flow_limit\"\n" );return -1 ; } + set_flow_plimit =0 ;= 1; ?
Yes, thanks!
PATCH v3 1/1 fq: allow options of fair queue set to ~0U
In reply to Yang YingliangFrom: Yang Yingliang <[email protected]>
Some options of fair queue cannot be (~0U). It leads to maxrate cannot be reset to unlimited because it cannot be (~0U).
Tested by the following command:
# tc qdisc replace dev eth4 root handle 1: fq limit 2000 maxrate 100mbit quantum 2000 initial_quantum 1600 # tc -s -d qdisc show qdisc fq 1: dev eth4 root refcnt 2 limit 100p flow_limit 2000p buckets 1024 quantum 2000 initial_quantum 1600 maxrate 100Mbit Sent 12596 bytes 82 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 2 flows (1 inactive, 0 throttled) 0 gc, 0 highprio, 0 throttled
# tc qdisc replace dev eth4 root handle 1: fq limit 100 maxrate 34359738360 quantum 2000 initial_quantum 1600 # tc -s -d qdisc show qdisc fq 1: dev eth4 root refcnt 2 limit 100p flow_limit 100p buckets 1024 quantum 2000 initial_quantum 1600 Sent 15758 bytes 99 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 2 flows (1 inactive, 0 throttled) 0 gc, 0 highprio, 0 throttled
--- tc/q_fq.c | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-)
tc/q_fq.c +24 -12
@@ -71,13 +71,19 @@ static unsigned int ilog2(unsigned int val)static int fq_parse_opt (struct qdisc_util *qu,int argc,char **argv,struct nlmsghdr *n) { -unsigned int plimit = ~0U ; -unsigned int flow_plimit = ~0U ; -unsigned int quantum = ~0U ; -unsigned int initial_quantum = ~0U ; +unsigned int plimit; +unsigned int flow_plimit; +unsigned int quantum; +unsigned int initial_quantum;unsigned int buckets =0 ; -unsigned int maxrate = ~0U ; -unsigned int defrate = ~0U ; +unsigned int maxrate; +unsigned int defrate; +int set_plimit =0 ; +int set_flow_plimit =0 ; +int set_quantum =0 ; +int set_initial_quantum =0 ; +int set_maxrate =0 ; +int set_defrate =0 ;int pacing =-1 ;struct rtattr *tail;
@@ -88,12 +94,14 @@ static int fq_parse_opt(struct qdisc_util *qu, int argc, char **argv,fprintf (stderr,"Illegal \"limit\"\n" );return -1 ; } + set_plimit =1 ; }else if (strcmp (*argv,"flow_limit" ) ==0 ) {NEXT_ARG ();if (get_unsigned (&flow_plimit, *argv,0 )) {fprintf (stderr,"Illegal \"flow_limit\"\n" );return -1 ; } + set_flow_plimit =1 ; }else if (strcmp (*argv,"buckets" ) ==0 ) {NEXT_ARG ();if (get_unsigned (&buckets, *argv,0 )) {
@@ -106,24 +114,28 @@ static int fq_parse_opt(struct qdisc_util *qu, int argc, char **argv,fprintf (stderr,"Illegal \"maxrate\"\n" );return -1 ; } + set_maxrate =1 ; }else if (strcmp (*argv,"defrate" ) ==0 ) {NEXT_ARG ();if (get_rate (&defrate, *argv)) {fprintf (stderr,"Illegal \"defrate\"\n" );return -1 ; } + set_defrate =1 ; }else if (strcmp (*argv,"quantum" ) ==0 ) {NEXT_ARG ();if (get_unsigned (&quantum, *argv,0 )) {fprintf (stderr,"Illegal \"quantum\"\n" );return -1 ; } + set_quantum =1 ; }else if (strcmp (*argv,"initial_quantum" ) ==0 ) {NEXT_ARG ();if (get_unsigned (&initial_quantum, *argv,0 )) {fprintf (stderr,"Illegal \"initial_quantum\"\n" );return -1 ; } + set_initial_quantum =1 ; }else if (strcmp (*argv,"pacing" ) ==0 ) { pacing =1 ; }else if (strcmp (*argv,"nopacing" ) ==0 ) {
@@ -147,24 +159,24 @@ static int fq_parse_opt(struct qdisc_util *qu, int argc, char **argv,addattr_l (n,1024 ,TCA_FQ_BUCKETS_LOG , &log,sizeof (log)); } -if (plimit != ~0U ) +if (set_plimit)addattr_l (n,1024 ,TCA_FQ_PLIMIT , &plimit,sizeof (plimit)); -if (flow_plimit != ~0U ) +if (set_flow_plimit)addattr_l (n,1024 ,TCA_FQ_FLOW_PLIMIT , &flow_plimit,sizeof (flow_plimit)); -if (quantum != ~0U ) +if (set_quantum)addattr_l (n,1024 ,TCA_FQ_QUANTUM , &quantum,sizeof (quantum)); -if (initial_quantum != ~0U ) +if (set_initial_quantum)addattr_l (n,1024 ,TCA_FQ_INITIAL_QUANTUM , &initial_quantum,sizeof (initial_quantum));if (pacing !=-1 )addattr_l (n,1024 ,TCA_FQ_RATE_ENABLE , &pacing,sizeof (pacing)); -if (maxrate != ~0U ) +if (set_maxrate)addattr_l (n,1024 ,TCA_FQ_FLOW_MAX_RATE , &maxrate,sizeof (maxrate)); -if (defrate != ~0U ) +if (set_defrate)addattr_l (n,1024 ,TCA_FQ_FLOW_DEFAULT_RATE , &defrate,sizeof (defrate)); tail->rta_len = (void *)NLMSG_TAIL (n) - (void *) tail;
Re: [PATCH iproute2 v3] fq: allow options of fair queue set to ~0U
tc/q_fq.c static unsigned int ilog2(unsigned int val) · line 86
Quoted 6 lines · On Tue, 13 May 2014 12:20:52 +0800 Yang Yingliang <[email protected]>…
tc/q_fq.c +6
-0+int set_plimit =0 ; +int set_flow_plimit =0 ; +int set_quantum =0 ; +int set_initial_quantum =0 ; +int set_maxrate =0 ; +int set_defrate =0 ;
Please use bool for these since they are boolean flags.
Re: [PATCH iproute2 v3] fq: allow options of fair queue set to ~0U
Quoted 13 lines · Stephen Hemminger
tc/q_fq.c static unsigned int ilog2(unsigned int val) · line 86
Quoted 6 lines · On Tue, 13 May 2014 12:20:52 +0800 Yang Yingliang <[email protected]>…
tc/q_fq.c +6
-0+int set_plimit =0 ; +int set_flow_plimit =0 ; +int set_quantum =0 ; +int set_initial_quantum =0 ; +int set_maxrate =0 ; +int set_defrate =0 ;Please use bool for these since they are boolean flags.
OK, I'll send a v3 later.
PATCH v4 1/1 fq: allow options of fair queue set to ~0U
In reply to Stephen HemmingerFrom: Yang Yingliang <[email protected]>
Some options of fair queue cannot be (~0U). It leads to maxrate cannot be reset to unlimited because it cannot be (~0U). Allow the options being ~0U.
Tested by the following command:
# tc qdisc add dev eth4 root handle 1: fq limit 2000 flow_limit 200 maxrate 100mbit quantum 2000 initial_quantum 1600 # tc -s -d qdisc show qdisc fq 1: dev eth4 root refcnt 2 limit 2000p flow_limit 200p buckets 1024 quantum 2000 initial_quantum 1600 maxrate 100Mbit Sent 1492 bytes 10 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 1 flows (0 inactive, 0 throttled) 0 gc, 0 highprio, 0 throttled
# tc qdisc change dev eth4 root handle 1: fq limit 4294967295 flow_limit 4294967295 maxrate 34359738360 quantum 4294967295 initial_quantum 4294967295 # tc -s -d qdisc show qdisc fq 1: dev eth4 root refcnt 2 limit 4294967295p flow_limit 4294967295p buckets 1024 quantum 4294967295 initial_quantum 4294967295 Sent 38372 bytes 216 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 2 flows (1 inactive, 0 throttled) 0 gc, 2 highprio, 7 throttled
---
Change note:
v3 -> v4: Change boolean flags from 'int' to 'bool'.
--- tc/q_fq.c | 37 +++++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 12 deletions(-)
tc/q_fq.c +25 -12
@@ -44,6 +44,7 @@#include <netinet/in.h> #include <arpa/inet.h> #include <string.h> +#include <stdbool.h> #include "utils.h" #include "tc_util.h"
@@ -71,13 +72,19 @@ static unsigned int ilog2(unsigned int val)static int fq_parse_opt (struct qdisc_util *qu,int argc,char **argv,struct nlmsghdr *n) { -unsigned int plimit = ~0U ; -unsigned int flow_plimit = ~0U ; -unsigned int quantum = ~0U ; -unsigned int initial_quantum = ~0U ; +unsigned int plimit; +unsigned int flow_plimit; +unsigned int quantum; +unsigned int initial_quantum;unsigned int buckets =0 ; -unsigned int maxrate = ~0U ; -unsigned int defrate = ~0U ; +unsigned int maxrate; +unsigned int defrate; +bool set_plimit = false; +bool set_flow_plimit = false; +bool set_quantum = false; +bool set_initial_quantum = false; +bool set_maxrate = false; +bool set_defrate = false;int pacing =-1 ;struct rtattr *tail;
@@ -88,12 +95,14 @@ static int fq_parse_opt(struct qdisc_util *qu, int argc, char **argv,fprintf (stderr,"Illegal \"limit\"\n" );return -1 ; } + set_plimit = true; }else if (strcmp (*argv,"flow_limit" ) ==0 ) {NEXT_ARG ();if (get_unsigned (&flow_plimit, *argv,0 )) {fprintf (stderr,"Illegal \"flow_limit\"\n" );return -1 ; } + set_flow_plimit = true; }else if (strcmp (*argv,"buckets" ) ==0 ) {NEXT_ARG ();if (get_unsigned (&buckets, *argv,0 )) {
@@ -106,24 +115,28 @@ static int fq_parse_opt(struct qdisc_util *qu, int argc, char **argv,fprintf (stderr,"Illegal \"maxrate\"\n" );return -1 ; } + set_maxrate = true; }else if (strcmp (*argv,"defrate" ) ==0 ) {NEXT_ARG ();if (get_rate (&defrate, *argv)) {fprintf (stderr,"Illegal \"defrate\"\n" );return -1 ; } + set_defrate = true; }else if (strcmp (*argv,"quantum" ) ==0 ) {NEXT_ARG ();if (get_unsigned (&quantum, *argv,0 )) {fprintf (stderr,"Illegal \"quantum\"\n" );return -1 ; } + set_quantum = true; }else if (strcmp (*argv,"initial_quantum" ) ==0 ) {NEXT_ARG ();if (get_unsigned (&initial_quantum, *argv,0 )) {fprintf (stderr,"Illegal \"initial_quantum\"\n" );return -1 ; } + set_initial_quantum = true; }else if (strcmp (*argv,"pacing" ) ==0 ) { pacing =1 ; }else if (strcmp (*argv,"nopacing" ) ==0 ) {
@@ -147,24 +160,24 @@ static int fq_parse_opt(struct qdisc_util *qu, int argc, char **argv,addattr_l (n,1024 ,TCA_FQ_BUCKETS_LOG , &log,sizeof (log)); } -if (plimit != ~0U ) +if (set_plimit)addattr_l (n,1024 ,TCA_FQ_PLIMIT , &plimit,sizeof (plimit)); -if (flow_plimit != ~0U ) +if (set_flow_plimit)addattr_l (n,1024 ,TCA_FQ_FLOW_PLIMIT , &flow_plimit,sizeof (flow_plimit)); -if (quantum != ~0U ) +if (set_quantum)addattr_l (n,1024 ,TCA_FQ_QUANTUM , &quantum,sizeof (quantum)); -if (initial_quantum != ~0U ) +if (set_initial_quantum)addattr_l (n,1024 ,TCA_FQ_INITIAL_QUANTUM , &initial_quantum,sizeof (initial_quantum));if (pacing !=-1 )addattr_l (n,1024 ,TCA_FQ_RATE_ENABLE , &pacing,sizeof (pacing)); -if (maxrate != ~0U ) +if (set_maxrate)addattr_l (n,1024 ,TCA_FQ_FLOW_MAX_RATE , &maxrate,sizeof (maxrate)); -if (defrate != ~0U ) +if (set_defrate)addattr_l (n,1024 ,TCA_FQ_FLOW_DEFAULT_RATE , &defrate,sizeof (defrate)); tail->rta_len = (void *)NLMSG_TAIL (n) - (void *) tail;
Stephen Hemminger
AppliedRe: [PATCH iproute2 v4] fq: allow options of fair queue set to ~0U
Quoted 23 lines · On Thu, 29 May 2014 12:04:34 +0800 Yang Yingliang <[email protected]>…
From: Yang Yingliang <[email protected]>
Some options of fair queue cannot be (~0U). It leads to maxrate cannot be reset to unlimited because it cannot be (~0U). Allow the options being ~0U.
Tested by the following command:
# tc qdisc add dev eth4 root handle 1: fq limit 2000 flow_limit 200 maxrate 100mbit quantum 2000 initial_quantum 1600 # tc -s -d qdisc show qdisc fq 1: dev eth4 root refcnt 2 limit 2000p flow_limit 200p buckets 1024 quantum 2000 initial_quantum 1600 maxrate 100Mbit Sent 1492 bytes 10 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 1 flows (0 inactive, 0 throttled) 0 gc, 0 highprio, 0 throttled# tc qdisc change dev eth4 root handle 1: fq limit 4294967295 flow_limit 4294967295 maxrate 34359738360 quantum 4294967295 initial_quantum 4294967295 # tc -s -d qdisc show qdisc fq 1: dev eth4 root refcnt 2 limit 4294967295p flow_limit 4294967295p buckets 1024 quantum 4294967295 initial_quantum 4294967295 Sent 38372 bytes 216 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 2 flows (1 inactive, 0 throttled) 0 gc, 2 highprio, 7 throttled
Quoted 3 lines
Suggested-by Eric Dumazet <[email protected]>Signed-off-by Yang Yingliang <[email protected]>
Applied