The walk implementation of most qdisc class modules is basically the same. That is, the values of count and skip are checked first. If count is greater than or equal to skip, the registered fn function is executed. Otherwise, increase the value of count. So the code can be refactored.
The walk function is invoked during dump. Therefore, test cases related to the tdc filter need to be added.
Last, thanks to Victor for his review.
Add test cases locally and perform the test. The test results are listed below:
./tdc.py -c cake ok 1 1212 - Create CAKE with default setting ok 2 3281 - Create CAKE with bandwidth limit ok 3 c940 - Create CAKE with autorate-ingress flag ok 4 2310 - Create CAKE with rtt time ok 5 2385 - Create CAKE with besteffort flag ok 6 a032 - Create CAKE with diffserv8 flag ok 7 2349 - Create CAKE with diffserv4 flag ok 8 8472 - Create CAKE with flowblind flag ok 9 2341 - Create CAKE with dsthost and nat flag ok 10 5134 - Create CAKE with wash flag ok 11 2302 - Create CAKE with flowblind and no-split-gso flag ok 12 0768 - Create CAKE with dual-srchost and ack-filter flag ok 13 0238 - Create CAKE with dual-dsthost and ack-filter-aggressive flag ok 14 6572 - Create CAKE with memlimit and ptm flag ok 15 2436 - Create CAKE with fwmark and atm flag ok 16 3984 - Create CAKE with overhead and mpu ok 17 5421 - Create CAKE with conservative and ingress flag ok 18 6854 - Delete CAKE with conservative and ingress flag ok 19 2342 - Replace CAKE with mpu ok 20 2313 - Change CAKE with mpu ok 21 4365 - Show CAKE class
./tdc.py -c cbq ok 1 3460 - Create CBQ with default setting ok 2 0592 - Create CBQ with mpu ok 3 4684 - Create CBQ with valid cell num ok 4 4345 - Create CBQ with invalid cell num ok 5 4525 - Create CBQ with valid ewma ok 6 6784 - Create CBQ with invalid ewma ok 7 5468 - Delete CBQ with handle ok 8 492a - Show CBQ class
./tdc.py -c cbs ok 1 1820 - Create CBS with default setting ok 2 1532 - Create CBS with hicredit setting ok 3 2078 - Create CBS with locredit setting ok 4 9271 - Create CBS with sendslope setting ok 5 0482 - Create CBS with idleslope setting ok 6 e8f3 - Create CBS with multiple setting ok 7 23c9 - Replace CBS with sendslope setting ok 8 a07a - Change CBS with idleslope setting ok 9 43b3 - Delete CBS with handle ok 10 9472 - Show CBS class
./tdc.py -c drr ok 1 0385 - Create DRR with default setting ok 2 2375 - Delete DRR with handle ok 3 3092 - Show DRR class
./tdc.py -c dsmark ok 1 6345 - Create DSMARK with default setting ok 2 3462 - Create DSMARK with default_index setting ok 3 ca95 - Create DSMARK with set_tc_index flag ok 4 a950 - Create DSMARK with multiple setting ok 5 4092 - Delete DSMARK with handle ok 6 5930 - Show DSMARK class
./tdc.py -c fq_codel ok 1 4957 - Create FQ_CODEL with default setting ok 2 7621 - Create FQ_CODEL with limit setting ok 3 6871 - Create FQ_CODEL with memory_limit setting ok 4 5636 - Create FQ_CODEL with target setting ok 5 630a - Create FQ_CODEL with interval setting ok 6 4324 - Create FQ_CODEL with quantum setting ok 7 b190 - Create FQ_CODEL with noecn flag ok 8 5381 - Create FQ_CODEL with ce_threshold setting ok 9 c9d2 - Create FQ_CODEL with drop_batch setting ok 10 523b - Create FQ_CODEL with multiple setting ok 11 9283 - Replace FQ_CODEL with noecn setting ok 12 3459 - Change FQ_CODEL with limit setting ok 13 0128 - Delete FQ_CODEL with handle ok 14 0435 - Show FQ_CODEL class
./tdc.py -c hfsc ok 1 3254 - Create HFSC with default setting ok 2 0289 - Create HFSC with class sc and ul rate setting ok 3 846a - Create HFSC with class sc umax and dmax setting ok 4 5413 - Create HFSC with class rt and ls rate setting ok 5 9312 - Create HFSC with class rt umax and dmax setting ok 6 6931 - Delete HFSC with handle ok 7 8436 - Show HFSC class
./tdc.py -c htb ok 1 0904 - Create HTB with default setting ok 2 3906 - Create HTB with default-N setting ok 3 8492 - Create HTB with r2q setting ok 4 9502 - Create HTB with direct_qlen setting ok 5 b924 - Create HTB with class rate and burst setting ok 6 4359 - Create HTB with class mpu setting ok 7 9048 - Create HTB with class prio setting ok 8 4994 - Create HTB with class ceil setting ok 9 9523 - Create HTB with class cburst setting ok 10 5353 - Create HTB with class mtu setting ok 11 346a - Create HTB with class quantum setting ok 12 303a - Delete HTB with handle
./tdc.py -c mqprio ok 1 9903 - Add mqprio Qdisc to multi-queue device (8 queues) ok 2 453a - Delete nonexistent mqprio Qdisc ok 3 5292 - Delete mqprio Qdisc twice ok 4 45a9 - Add mqprio Qdisc to single-queue device ok 5 2ba9 - Show mqprio class
./tdc.py -c multiq ok 1 20ba - Add multiq Qdisc to multi-queue device (8 queues) ok 2 4301 - List multiq Class ok 3 7832 - Delete nonexistent multiq Qdisc ok 4 2891 - Delete multiq Qdisc twice ok 5 1329 - Add multiq Qdisc to single-queue device
./tdc.py -c netem ok 1 cb28 - Create NETEM with default setting ok 2 a089 - Create NETEM with limit flag ok 3 3449 - Create NETEM with delay time ok 4 3782 - Create NETEM with distribution and corrupt flag ok 5 2b82 - Create NETEM with distribution and duplicate flag ok 6 a932 - Create NETEM with distribution and loss flag ok 7 e01a - Create NETEM with distribution and loss state flag ok 8 ba29 - Create NETEM with loss gemodel flag ok 9 0492 - Create NETEM with reorder flag ok 10 7862 - Create NETEM with rate limit ok 11 7235 - Create NETEM with multiple slot rate ok 12 5439 - Create NETEM with multiple slot setting ok 13 5029 - Change NETEM with loss state ok 14 3785 - Replace NETEM with delay time ok 15 4502 - Delete NETEM with handle ok 16 0785 - Show NETEM class
./tdc.py -c qfq ok 1 0582 - Create QFQ with default setting ok 2 c9a3 - Create QFQ with class weight setting ok 3 8452 - Create QFQ with class maxpkt setting ok 4 d920 - Create QFQ with multiple class setting ok 5 0548 - Delete QFQ with handle ok 6 5901 - Show QFQ class
./tdc.py -e 0521 ok 1 0521 - Show ingress class
./tdc.py -e 1023 ok 1 1023 - Show mq class
./tdc.py -e 2410 ok 1 2410 - Show prio class
./tdc.py -e 290a ok 1 290a - Show RED class
Zhengchao Shao (18): net/sched: sch_api: add helper for tc qdisc walker stats dump net/sched: use tc_qdisc_stats_dump() in qdisc selftests/tc-testings: add selftests for cake qdisc selftests/tc-testings: add selftests for cbq qdisc selftests/tc-testings: add selftests for cbs qdisc selftests/tc-testings: add selftests for drr qdisc selftests/tc-testings: add selftests for dsmark qdisc selftests/tc-testings: add selftests for fq_codel qdisc selftests/tc-testings: add selftests for hfsc qdisc selftests/tc-testings: add selftests for htb qdisc selftests/tc-testings: add selftests for mqprio qdisc selftests/tc-testings: add selftests for multiq qdisc selftests/tc-testings: add selftests for netem qdisc selftests/tc-testings: add selftests for qfq qdisc selftests/tc-testings: add show class case for ingress qdisc selftests/tc-testings: add show class case for mq qdisc selftests/tc-testings: add show class case for prio qdisc selftests/tc-testings: add show class case for red qdisc
include/net/pkt_sched.h | 13 + net/sched/sch_atm.c | 6 +- net/sched/sch_cake.c | 9 +- net/sched/sch_cbq.c | 9 +- net/sched/sch_cbs.c | 8 +- net/sched/sch_drr.c | 9 +- net/sched/sch_dsmark.c | 14 +- net/sched/sch_ets.c | 9 +- net/sched/sch_fq_codel.c | 8 +- net/sched/sch_hfsc.c | 9 +- net/sched/sch_htb.c | 9 +- net/sched/sch_mq.c | 5 +- net/sched/sch_mqprio.c | 5 +- net/sched/sch_multiq.c | 9 +- net/sched/sch_netem.c | 8 +- net/sched/sch_prio.c | 9 +- net/sched/sch_qfq.c | 9 +- net/sched/sch_red.c | 7 +- net/sched/sch_sfb.c | 7 +- net/sched/sch_sfq.c | 8 +- net/sched/sch_skbprio.c | 9 +- net/sched/sch_taprio.c | 5 +- net/sched/sch_tbf.c | 7 +- .../tc-testing/tc-tests/qdiscs/cake.json | 487 ++++++++++++++++++ .../tc-testing/tc-tests/qdiscs/cbq.json | 184 +++++++ .../tc-testing/tc-tests/qdiscs/cbs.json | 234 +++++++++ .../tc-testing/tc-tests/qdiscs/drr.json | 71 +++ .../tc-testing/tc-tests/qdiscs/dsmark.json | 140 +++++ .../tc-testing/tc-tests/qdiscs/fq_codel.json | 326 ++++++++++++ .../tc-testing/tc-tests/qdiscs/hfsc.json | 167 ++++++ .../tc-testing/tc-tests/qdiscs/htb.json | 285 ++++++++++ .../tc-testing/tc-tests/qdiscs/ingress.json | 20 + .../tc-testing/tc-tests/qdiscs/mq.json | 24 +- .../tc-testing/tc-tests/qdiscs/mqprio.json | 114 ++++ .../tc-testing/tc-tests/qdiscs/multiq.json | 114 ++++ .../tc-testing/tc-tests/qdiscs/netem.json | 372 +++++++++++++ .../tc-testing/tc-tests/qdiscs/prio.json | 20 + .../tc-testing/tc-tests/qdiscs/qfq.json | 145 ++++++ .../tc-testing/tc-tests/qdiscs/red.json | 23 + 39 files changed, 2769 insertions(+), 148 deletions(-) create mode 100644 tools/testing/selftests/tc-testing/tc-tests/qdiscs/cake.json create mode 100644 tools/testing/selftests/tc-testing/tc-tests/qdiscs/cbq.json create mode 100644 tools/testing/selftests/tc-testing/tc-tests/qdiscs/cbs.json create mode 100644 tools/testing/selftests/tc-testing/tc-tests/qdiscs/drr.json create mode 100644 tools/testing/selftests/tc-testing/tc-tests/qdiscs/dsmark.json create mode 100644 tools/testing/selftests/tc-testing/tc-tests/qdiscs/fq_codel.json create mode 100644 tools/testing/selftests/tc-testing/tc-tests/qdiscs/hfsc.json create mode 100644 tools/testing/selftests/tc-testing/tc-tests/qdiscs/htb.json create mode 100644 tools/testing/selftests/tc-testing/tc-tests/qdiscs/mqprio.json create mode 100644 tools/testing/selftests/tc-testing/tc-tests/qdiscs/multiq.json create mode 100644 tools/testing/selftests/tc-testing/tc-tests/qdiscs/netem.json create mode 100644 tools/testing/selftests/tc-testing/tc-tests/qdiscs/qfq.json
On 17/09/2022 02:02, Zhengchao Shao wrote:
The walk implementation of most qdisc class modules is basically the same. That is, the values of count and skip are checked first. If count is greater than or equal to skip, the registered fn function is executed. Otherwise, increase the value of count. So the code can be refactored.
The walk function is invoked during dump. Therefore, test cases related to the tdc filter need to be added.
Last, thanks to Victor for his review.
Add test cases locally and perform the test. The test results are listed below:
./tdc.py -c cake ok 1 1212 - Create CAKE with default setting ok 2 3281 - Create CAKE with bandwidth limit ok 3 c940 - Create CAKE with autorate-ingress flag ok 4 2310 - Create CAKE with rtt time ok 5 2385 - Create CAKE with besteffort flag ok 6 a032 - Create CAKE with diffserv8 flag ok 7 2349 - Create CAKE with diffserv4 flag ok 8 8472 - Create CAKE with flowblind flag ok 9 2341 - Create CAKE with dsthost and nat flag ok 10 5134 - Create CAKE with wash flag ok 11 2302 - Create CAKE with flowblind and no-split-gso flag ok 12 0768 - Create CAKE with dual-srchost and ack-filter flag ok 13 0238 - Create CAKE with dual-dsthost and ack-filter-aggressive flag ok 14 6572 - Create CAKE with memlimit and ptm flag ok 15 2436 - Create CAKE with fwmark and atm flag ok 16 3984 - Create CAKE with overhead and mpu ok 17 5421 - Create CAKE with conservative and ingress flag ok 18 6854 - Delete CAKE with conservative and ingress flag ok 19 2342 - Replace CAKE with mpu ok 20 2313 - Change CAKE with mpu ok 21 4365 - Show CAKE class
./tdc.py -c cbq ok 1 3460 - Create CBQ with default setting ok 2 0592 - Create CBQ with mpu ok 3 4684 - Create CBQ with valid cell num ok 4 4345 - Create CBQ with invalid cell num ok 5 4525 - Create CBQ with valid ewma ok 6 6784 - Create CBQ with invalid ewma ok 7 5468 - Delete CBQ with handle ok 8 492a - Show CBQ class
./tdc.py -c cbs ok 1 1820 - Create CBS with default setting ok 2 1532 - Create CBS with hicredit setting ok 3 2078 - Create CBS with locredit setting ok 4 9271 - Create CBS with sendslope setting ok 5 0482 - Create CBS with idleslope setting ok 6 e8f3 - Create CBS with multiple setting ok 7 23c9 - Replace CBS with sendslope setting ok 8 a07a - Change CBS with idleslope setting ok 9 43b3 - Delete CBS with handle ok 10 9472 - Show CBS class
./tdc.py -c drr ok 1 0385 - Create DRR with default setting ok 2 2375 - Delete DRR with handle ok 3 3092 - Show DRR class
./tdc.py -c dsmark ok 1 6345 - Create DSMARK with default setting ok 2 3462 - Create DSMARK with default_index setting ok 3 ca95 - Create DSMARK with set_tc_index flag ok 4 a950 - Create DSMARK with multiple setting ok 5 4092 - Delete DSMARK with handle ok 6 5930 - Show DSMARK class
./tdc.py -c fq_codel ok 1 4957 - Create FQ_CODEL with default setting ok 2 7621 - Create FQ_CODEL with limit setting ok 3 6871 - Create FQ_CODEL with memory_limit setting ok 4 5636 - Create FQ_CODEL with target setting ok 5 630a - Create FQ_CODEL with interval setting ok 6 4324 - Create FQ_CODEL with quantum setting ok 7 b190 - Create FQ_CODEL with noecn flag ok 8 5381 - Create FQ_CODEL with ce_threshold setting ok 9 c9d2 - Create FQ_CODEL with drop_batch setting ok 10 523b - Create FQ_CODEL with multiple setting ok 11 9283 - Replace FQ_CODEL with noecn setting ok 12 3459 - Change FQ_CODEL with limit setting ok 13 0128 - Delete FQ_CODEL with handle ok 14 0435 - Show FQ_CODEL class
./tdc.py -c hfsc ok 1 3254 - Create HFSC with default setting ok 2 0289 - Create HFSC with class sc and ul rate setting ok 3 846a - Create HFSC with class sc umax and dmax setting ok 4 5413 - Create HFSC with class rt and ls rate setting ok 5 9312 - Create HFSC with class rt umax and dmax setting ok 6 6931 - Delete HFSC with handle ok 7 8436 - Show HFSC class
./tdc.py -c htb ok 1 0904 - Create HTB with default setting ok 2 3906 - Create HTB with default-N setting ok 3 8492 - Create HTB with r2q setting ok 4 9502 - Create HTB with direct_qlen setting ok 5 b924 - Create HTB with class rate and burst setting ok 6 4359 - Create HTB with class mpu setting ok 7 9048 - Create HTB with class prio setting ok 8 4994 - Create HTB with class ceil setting ok 9 9523 - Create HTB with class cburst setting ok 10 5353 - Create HTB with class mtu setting ok 11 346a - Create HTB with class quantum setting ok 12 303a - Delete HTB with handle
./tdc.py -c mqprio ok 1 9903 - Add mqprio Qdisc to multi-queue device (8 queues) ok 2 453a - Delete nonexistent mqprio Qdisc ok 3 5292 - Delete mqprio Qdisc twice ok 4 45a9 - Add mqprio Qdisc to single-queue device ok 5 2ba9 - Show mqprio class
./tdc.py -c multiq ok 1 20ba - Add multiq Qdisc to multi-queue device (8 queues) ok 2 4301 - List multiq Class ok 3 7832 - Delete nonexistent multiq Qdisc ok 4 2891 - Delete multiq Qdisc twice ok 5 1329 - Add multiq Qdisc to single-queue device
./tdc.py -c netem ok 1 cb28 - Create NETEM with default setting ok 2 a089 - Create NETEM with limit flag ok 3 3449 - Create NETEM with delay time ok 4 3782 - Create NETEM with distribution and corrupt flag ok 5 2b82 - Create NETEM with distribution and duplicate flag ok 6 a932 - Create NETEM with distribution and loss flag ok 7 e01a - Create NETEM with distribution and loss state flag ok 8 ba29 - Create NETEM with loss gemodel flag ok 9 0492 - Create NETEM with reorder flag ok 10 7862 - Create NETEM with rate limit ok 11 7235 - Create NETEM with multiple slot rate ok 12 5439 - Create NETEM with multiple slot setting ok 13 5029 - Change NETEM with loss state ok 14 3785 - Replace NETEM with delay time ok 15 4502 - Delete NETEM with handle ok 16 0785 - Show NETEM class
./tdc.py -c qfq ok 1 0582 - Create QFQ with default setting ok 2 c9a3 - Create QFQ with class weight setting ok 3 8452 - Create QFQ with class maxpkt setting ok 4 d920 - Create QFQ with multiple class setting ok 5 0548 - Delete QFQ with handle ok 6 5901 - Show QFQ class
./tdc.py -e 0521 ok 1 0521 - Show ingress class
./tdc.py -e 1023 ok 1 1023 - Show mq class
./tdc.py -e 2410 ok 1 2410 - Show prio class
./tdc.py -e 290a ok 1 290a - Show RED class
Zhengchao Shao (18): net/sched: sch_api: add helper for tc qdisc walker stats dump net/sched: use tc_qdisc_stats_dump() in qdisc selftests/tc-testings: add selftests for cake qdisc selftests/tc-testings: add selftests for cbq qdisc selftests/tc-testings: add selftests for cbs qdisc selftests/tc-testings: add selftests for drr qdisc selftests/tc-testings: add selftests for dsmark qdisc selftests/tc-testings: add selftests for fq_codel qdisc selftests/tc-testings: add selftests for hfsc qdisc selftests/tc-testings: add selftests for htb qdisc selftests/tc-testings: add selftests for mqprio qdisc selftests/tc-testings: add selftests for multiq qdisc selftests/tc-testings: add selftests for netem qdisc selftests/tc-testings: add selftests for qfq qdisc selftests/tc-testings: add show class case for ingress qdisc selftests/tc-testings: add show class case for mq qdisc selftests/tc-testings: add show class case for prio qdisc selftests/tc-testings: add show class case for red qdisc
include/net/pkt_sched.h | 13 + net/sched/sch_atm.c | 6 +- net/sched/sch_cake.c | 9 +- net/sched/sch_cbq.c | 9 +- net/sched/sch_cbs.c | 8 +- net/sched/sch_drr.c | 9 +- net/sched/sch_dsmark.c | 14 +- net/sched/sch_ets.c | 9 +- net/sched/sch_fq_codel.c | 8 +- net/sched/sch_hfsc.c | 9 +- net/sched/sch_htb.c | 9 +- net/sched/sch_mq.c | 5 +- net/sched/sch_mqprio.c | 5 +- net/sched/sch_multiq.c | 9 +- net/sched/sch_netem.c | 8 +- net/sched/sch_prio.c | 9 +- net/sched/sch_qfq.c | 9 +- net/sched/sch_red.c | 7 +- net/sched/sch_sfb.c | 7 +- net/sched/sch_sfq.c | 8 +- net/sched/sch_skbprio.c | 9 +- net/sched/sch_taprio.c | 5 +- net/sched/sch_tbf.c | 7 +- .../tc-testing/tc-tests/qdiscs/cake.json | 487 ++++++++++++++++++ .../tc-testing/tc-tests/qdiscs/cbq.json | 184 +++++++ .../tc-testing/tc-tests/qdiscs/cbs.json | 234 +++++++++ .../tc-testing/tc-tests/qdiscs/drr.json | 71 +++ .../tc-testing/tc-tests/qdiscs/dsmark.json | 140 +++++ .../tc-testing/tc-tests/qdiscs/fq_codel.json | 326 ++++++++++++ .../tc-testing/tc-tests/qdiscs/hfsc.json | 167 ++++++ .../tc-testing/tc-tests/qdiscs/htb.json | 285 ++++++++++ .../tc-testing/tc-tests/qdiscs/ingress.json | 20 + .../tc-testing/tc-tests/qdiscs/mq.json | 24 +- .../tc-testing/tc-tests/qdiscs/mqprio.json | 114 ++++ .../tc-testing/tc-tests/qdiscs/multiq.json | 114 ++++ .../tc-testing/tc-tests/qdiscs/netem.json | 372 +++++++++++++ .../tc-testing/tc-tests/qdiscs/prio.json | 20 + .../tc-testing/tc-tests/qdiscs/qfq.json | 145 ++++++ .../tc-testing/tc-tests/qdiscs/red.json | 23 + 39 files changed, 2769 insertions(+), 148 deletions(-) create mode 100644 tools/testing/selftests/tc-testing/tc-tests/qdiscs/cake.json create mode 100644 tools/testing/selftests/tc-testing/tc-tests/qdiscs/cbq.json create mode 100644 tools/testing/selftests/tc-testing/tc-tests/qdiscs/cbs.json create mode 100644 tools/testing/selftests/tc-testing/tc-tests/qdiscs/drr.json create mode 100644 tools/testing/selftests/tc-testing/tc-tests/qdiscs/dsmark.json create mode 100644 tools/testing/selftests/tc-testing/tc-tests/qdiscs/fq_codel.json create mode 100644 tools/testing/selftests/tc-testing/tc-tests/qdiscs/hfsc.json create mode 100644 tools/testing/selftests/tc-testing/tc-tests/qdiscs/htb.json create mode 100644 tools/testing/selftests/tc-testing/tc-tests/qdiscs/mqprio.json create mode 100644 tools/testing/selftests/tc-testing/tc-tests/qdiscs/multiq.json create mode 100644 tools/testing/selftests/tc-testing/tc-tests/qdiscs/netem.json create mode 100644 tools/testing/selftests/tc-testing/tc-tests/qdiscs/qfq.json
Reviewed-by: Victor Nogueira victor@mojatatu.com Tested-by: Victor Nogueira victor@mojatatu.com
linux-kselftest-mirror@lists.linaro.org